Cloud Services

Enterprise Marketplace

Service Chaining
Published On Jun 10, 2024 - 9:16 AM

Service Chaining

Bundle services together so your users can order multiple services at once.
In addition to being ordered separately, services can be linked together with other services so that the entire chain can be ordered at the same time. This feature allows you to bundle together groups of services that are ordered at the same time, saving time while ordering and managing the stacks. This group of services is called a pattern. Only services based on Terraform are supported.
As part of a pattern, you can optionally link parameters so that entering information for one parameter will automatically fill in the linked parameter in a subsequent service in the chain. Limiting the number of services to 10 is recommended. The hard limit is 25. You can link some or all of the services in the chain. Links are optional.
To learn more about navigating to the different services from each tenant, refer to Landing page navigation or Kyndryl Bridge Landing page navigation.
The
Service Chaining
page shows all existing patterns in the system. They are categorized as
Drafts
(not yet available on the Catalog),
Published
(available in the Catalog), and
Retired
(removed from the Catalog) on separate tabs. 
In addition, patterns can be labeled as
Blocked
, which means that one or more services in the pattern have been retired. To correct the problem, edit the pattern if it is in Draft status or clone it, remove the retired services, and replace the original with the clone.
Published patterns cannot be edited or deleted. A published pattern can be cloned and then edited freely.

Roles required

The following roles can access the Service Chaining feature:
  • Catalog Admin
  • Service Designer

Prerequisites

Your system needs to meet these minimums:
  • vSphere VMware 8.0 or later
  • The
    em_bcm_6334_beta
    UI flag must be set to
    true
    before Service Chaining can be used. It is set to true by default.
  • A Regular CT tenant. Other tenant types such as Service Provider and Managed are not supported.

Locating a pattern

The
Service Chaining
page provides a
Search
bar that allows you to locate patterns containing the terms you enter. You can also filter the patterns using these types of items. If the specific item is not visible, click
<number> More
under the category to display all of the terms in that category.
  • Provider
  • Category
  • Label
Only patterns in the tab that you are viewing that meet your criteria will be displayed. However, the counts next to the checkbox items will show all of the patterns that meet that criteria across all three tabs (
Drafts
,
Published
, and
Retired
).

Creating a pattern

To create a new pattern, complete these steps.
The services to be included in the pattern must already be Published in the system. For more information, see Provider Management User Interface.
  1. Click
    Create Pattern
    .
  2. Enter the following parameters and then click
    Next
    :
    • Name:
      Enter a meaningful name for the pattern.
    • Category:
      Select a category from the provided options. For more information about categories, see Provider Management user interface.
    • Description:
      Enter an optional more detailed description of the service chain.
    • Failure Management:
      If you select this option, if the provisioning of one of the stacks in the pattern fails, the system will delete that stack and all the stacks that have been provisioned for that pattern automatically.
    • Add Labels:
      You can add labels to help identify the pattern in a search. You can select
      Existing Labels
      that are already in your system, or you can enter one in the
      New Label
      field and then click
      New Label
      to add it to the list. Existing labels are listed in blue, and new labels in green.
    • Upload Image:
      Click this link to navigate to an image that will represent the card for the pattern in the UI. The image must be 5 MB or less. The supported extensions are bmp, jpg, jpeg, png, jfif, and svg.
  3. Select what type of sources are involved by completing these fields.
    • Select Provider:
      Select the provider that you want to use services from. The following providers are supported. Of these, AWS, Microsoft Azure, and VMware vSphere have been tested. Up to five providers can be used in a pattern.
      • Alibaba Cloud
      • Amazon Web Services (AWS)
      • Microsoft Azure
      • Google Cloud Platform (GCP)
      • IBM Cloud
      • Red Hat Marketplace
      • Terraform Automation
      • ServiceNow
      • VMware vSphere
    • Select Source:
      Select the type of source you want to use. Currently the only option is
      Service
      .
  4. A list of available services for the provider that you selected is displayed in the left navigation pane. You can switch providers at any time to get the list of services for that provider. Create your chain by dragging and dropping services onto the canvas. Each service that you place will appear as an icon on the canvas that lists its type in bold and the name of the provider as well as allowing you to
    Copy
    and
    Delete
    them using the icons. Services from up to five providers can be freely mixed in a chain. The order that you add the services in will be the order in which they are presented when your users order them unless you link them. For more information, see the next step.
    Use the scroll bars as needed to navigate the mapping area. You can zoom in and out using the controls in the lower right. You can also expand to canvas to full screen using the full screen icon.
    If you add multiple versions of the same service, the second and subsequent items will have _copy_1 and so on appended to the end of them so you can tell them apart. You can give each copy an alias as well. Click the
    Pencil
    icon in the
    Alias
    section of the item and then provide an alias in the
    Edit Service Alias
    window. Click
    Save
    when done.
  5. The output of services can be used as the input for subsequent services by linking their parameters. If the parameter that you want to link to does not exist, you can create a parameter by clicking the service and clicking
    Add Static Parameter
    on the
    Output Parameters
    tab that opens by default, entering the following parameters, and clicking
    Save
    . The custom parameter will be displayed in green, and can be freely edited and used as input in subsequent services as part of a linked parameter.
    • Data Type:
      Select the type of data from the following options:
      • Number
      • String
    • Key:
      Enter the key value for the parameter.
    • Value:
      Enter the value for the key.
  6. The output parameters of a service earlier in the sequence can be used as input for the services later in the sequence. To link parameters in this way, click
    Add Linked Parameter
    in the parameter that you want to link to in the
    Service Details
    pane, enter the following parameters, and then click
    Save
    . The linked parameter will appear as a line between the two resources and is listed in the
    Linked Parameters between Services
    section in the
    Service Details
    pane for both services. Any number of services can be linked together in this manner. All the services must be either not bound or all bound into a single chain. Multiple chains are not supported. The parent-child relationships are used to determine which service is presented to your users first during ordering. The parents are presented first, followed by their children, and then their children.
    Care must be taken that the bindings are technically correct. The system does not verify the bindings during the creation process. If the bindings are incorrect, the provisioning process will fail with an error.
    • Target Service:
      The child service that you want to bind to. This is automatically the service that you are creating the Linked Parameter in.
    • Target Parameter:
      Select the parameter in the child service that you want to bind to the output of an earlier service.
    • Source Service:
      Select the service that you want to use the output from (the parent service).
    • Source Parameter:
      Select the parameter in the parent service that you want to use the output from to populate the parameter selected in
      Target Parameter
      .
    • Select
      Output is in JSON format
      if the output of the Source Parameter is in the JSON format. If you select this, you will need to enter the JSON path in the field that is displayed. Enter the complete, strict JSON path complete with any underscores, backslashes, and colons like the example shown below. Stringified JSON is not allowed. In this example,
      key = "command_output"
      and
      path = "datacenter"
      where the path resolves to a string value.
      "command_output": { "value": { "cp4mcm_connection": "{CONNECTION}", "datacenter": "{DATA_CENTER}", "dvswitch": "anthwdc04-cp4mcm-dummy-nodelete" }, "type": [ "map", "string" ] }
  7. Click
    Create Pattern
    . The new pattern will be displayed in the
    Service Chaining
    page on the
    Drafts
    tab.
Binding parameters have the following rules:
  • If you bind a parameter from one service to another (service1 -> service2), you cannot have a second binding in the opposite direction (service2 -> service1) because this will create a cyclic dependency between the two. This limitation includes the entire chain, so for example if you have service1 -> S02 -> service3, you cannot link service3 -> service1.
  • All the services must be either not bound or all bound into a single chain. Multiple chains are not supported.
The order that the service appear in when the users order the pattern is either the order in which you added them for a pattern without bindings, or based on the child-parent relationships as shown in the diagram if the pattern has bindings. You can also set the order using Sequencing patterns.

Sequencing patterns

The sequencing feature was recently released to select clients that allows you to set the order in which the services are presented to your users without requiring you to link parameters.
Sequencing allows you to create branching chains. In this case, the child service that was added first will be displayed first in the ordering sequence.
Service Chaining sequencing is in limited release and might not be available on your tenant. For more information about enabling this flag, contact your Kyndryl representative. If you have the flag enabled, these procedures are used instead of those in step 6 of Creating a pattern.
To set the order in which the services will be displayed, complete these steps:
  1. Click the service that you want to link to.
  2. On the details window for the service, click the
    Links
    tab.
  3. Click
    Add Link
    .
  4. Select
    Without Parameter
    or
    With Parameter
    .
  5. The service that you selected is automatically filled in as the
    Target Service
    . Select the
    Source Service
    using the dropdown.
  6. If you selected
    With Parameter
    , select the
    Target Parameter
    from the dropdown that shows the parameters in the target service, and the
    Source Parameter
    from the source service.
    The system will check to see if you have created a cyclic dependency and display an error message in that case.
  7. If the source parameter is JSON, select
    Do you think the selected "Source Parameter" is a JSON?
    If you select this, you will need to enter the JSON path in the field that is displayed. Enter the complete, strict JSON path complete with any underscores, backslashes, and colons like the example shown below. Stringified JSON is not allowed. In this example,
    key = "command_output"
    and
    path = "datacenter"
    where the path resolves to a string value.
    "command_output": { "value": { "cp4mcm_connection": "{CONNECTION}", "datacenter": "{DATA_CENTER}", "dvswitch": "anthwdc04-cp4mcm-dummy-nodelete" }, "type": [ "map", "string" ] }
  8. Click
    Add
    .
Links can be edited by clicking the service and clicking the
Pencil
icon for the link you want to change. You can change a link with parameters to one without, and vice versa.

Adding conditions to patterns

In addition to linking services together with parameters, you can also create branching paths so that one branch or the other is selected based on criteria that you set. The conditional rule that determines what branch to take is defined as a node just like the services themselves. When a condition node is reached, the set of rules in that node are evaluated in the same order as they were defined. When a rule is matched, that branch of the pattern is selected and those services will be displayed to the user for provisioning.The nodes on any branch that is not taken are orphaned and will not be included when the order is submitted. You can include multiple additional nodes, including other conditional rules, within a branch. Any nodes that are come after the branch should have the conditional rule node set as their parent so they will be provisioned after the branch has been completed.
All services that are part of a branch are exclusive to that branch. If you want to use the same service in multiple branches, create duplicates of that service and add them to each branch.
To create a branching pattern, use the following API. In this pattern, NodeIds 1 and 2 are first. After NodeId 2, nodeId 5 is invoked that determines whether the operating system is Linux or Windows. If it is Linux, the chain continues with nodeId 3. Otherwise it continues with nodeId 4. After one of those branches is complete, the provisioning continues with nodeId 6.
  • API
    :
    POST /catalog/v2/admin/patterns
  • Sample payload:
{ "providers": [ "aws" ], "source": [ "serviceoffering" ], "status": "WorkInProgress", "chainedSOs": [ { "nodeId": "1", "serviceOfferingId": "9ded9fa4-b3af-497f-a6fb-62458c35cf42", "name": "vpc-for-chaining", "alias": "", "additionalOutputParams": [], "bindingParameters": {}, "provider": "aws", "providerCode": "aws", "nodeType": "serviceoffering", "parents": [] }, { "nodeId": "2", "serviceOfferingId": "e5c41b98-b887-43d7-b1ac-0ba4ad0cb897", "name": "subnet-for-chaining", "alias": "", "additionalOutputParams": [], "bindingParameters": { "vpc_id": "${chained.1.output.vpc_id}" }, "provider": "aws", "providerCode": "aws", "nodeType": "serviceoffering", "parents": [ "1" ] }, { "nodeId": "3", "serviceOfferingId": "2235db11-36be-4f06-8fd9-1cd0b2a0e310", "name": "ec2-for-chaining-linux", "alias": "", "additionalOutputParams": [], "bindingParameters": { "subnet_id": "${chained.2.output.subnet_id}" }, "provider": "aws", "providerCode": "aws", "nodeType": "serviceoffering", "parents": [] }, { "nodeId": "4", "serviceOfferingId": "fa8d27e1-8675-4827-bdc1-6e3ce67a9942", "name": "ec2-for-chaining-windows", "alias": "", "additionalOutputParams": [], "bindingParameters": { "subnet_id": "${chained.2.output.subnet_id}" }, "provider": "aws", "providerCode": "aws", "nodeType": "serviceoffering", "parents": [] }, { "nodeId": "6", "serviceOfferingId": "beb0c57e-d8fb-4a3b-89eb-d81fdf69f27f", "name": "network-interface-for-chaining", "alias": "", "additionalOutputParams": [], "bindingParameters": { "subnet_id": "${chained.2.output.subnet_id}", "instance_id": "${chained.5.output.instance_id}" }, "provider": "aws", "providerCode": "aws", "nodeType": "serviceoffering", "parents": [ "5" ] } ], "conditions": [ { "name": "OS Condition", "alias": "", "nodeId": "5", "nodeType": "decision", "parents": [ "2" ], "rules": { "3": [ "chainedSO.2.input.items[1].configGroups[2].configs[0].selectedValues[0].label==linux" ], "4": [ "chainedSO.2.input.items[1].configGroups[2].configs[0].selectedValues[0].label==windows" ] } } ], "patternName": "conditioning-test-6", "description": "", "rollbackOnError": true, "logo": "", "category": [ "compute" ], "labels": [] }
Keep in mind the following guidelines when adding conditions:
  • All branching service nodes belonging to a condition must have empty parents array and cannot be sequenced together with other regular service nodes.
  • Any regular service node pointing to the condition node as its parent will eventually point to the selected branch node after the condition's rule evaluation.
  • The selected branch node will eventually point to the parent of the condition node as its parent
  • It is possible to have a chain of regular service nodes originating from the all or some branch nodes, In this case all the unselected branch nodes are considered orphaned and child nodes of the orphaned nodes are also considered orphaned nodes and all orphaned nodes are deleted in the final result at the time of order submission
  • Condition nodes should only have a single parent, otherwise the behavior is not known or undefined.
  • You can create multiple condition nodes and have them sequenced in multiple different ways in the pattern definition.
To submit an order for a pattern with conditions, use this API:
  • API
    :
    POST /orders/v2/submit
  • Sample request payload:
{ "patternId": "07c23c98-dbe0-11ee-b967-be34a138c43a", "patternInstancePrefix": "mytest-pattern", "patternName": "conditioning-test-6", "context": [ { "tagValueCode": "Consume_Team1", "tagType": "team" }, { "tagValueCode": "admin_org", "tagType": "org" } ], "requestorAdditionalInfo": { "presetParams": {} }, "items": [ { "providerCode": "aws", "serviceOfferingId": "9ded9fa4-b3af-497f-a6fb-62458c35cf42", "providerAccountRefId": "1e55349d-db54-4b9b-8a85-529d601e6837", "providerCredentialRefId": "ef608a71-c648-4e1a-970f-2e194c225b73", "nodeId": "1", "serviceInstancePrefix": "vpc-for-chaining", "quantity": 1, "configGroups": [ { "configGroupCode": "Configure Region", "sections": [], "configs": [ { "configId": "AWS::Region", "selectedValues": [ { "label": "us-east-1", "valueId": "us-east-1" } ] } ] }, { "configGroupCode": "Aws vpc main", "sections": [], "configs": [ { "configId": "cidr_block", "selectedValues": [ { "label": "10.0.0.0/16", "valueId": "10.0.0.0/16" } ] }, { "configId": "instance_tenancy", "selectedValues": [ { "label": "default", "valueId": "default" } ] } ] } ], "additionalServices": [], "alias": "vpc-for-chaining" }, { "providerCode": "aws", "serviceOfferingId": "e5c41b98-b887-43d7-b1ac-0ba4ad0cb897", "providerAccountRefId": "1e55349d-db54-4b9b-8a85-529d601e6837", "providerCredentialRefId": "ef608a71-c648-4e1a-970f-2e194c225b73", "nodeId": "2", "serviceInstancePrefix": "subnet-for-chaining", "quantity": 1, "configGroups": [ { "configGroupCode": "Configure Region", "sections": [], "configs": [ { "configId": "AWS::Region", "selectedValues": [ { "label": "us-east-1", "valueId": "us-east-1" } ] } ] }, { "configGroupCode": "Aws subnet public_subnet", "sections": [], "configs": [ { "configId": "vpc_id", "selectedValues": [ { "label": "_binding_parameter_", "valueId": "_binding_parameter_" } ] }, { "configId": "cidr_block", "selectedValues": [ { "label": "10.0.1.0/24", "valueId": "10.0.1.0/24" } ] }, { "configId": "availability_zone", "selectedValues": [ { "label": "us-east-1a", "valueId": "us-east-1a" } ] } ] }, { "configGroupCode": "Configurations", "sections": [], "configs": [ { "configId": "operating_system", "selectedValues": [ { "label": "windows", "valueId": "windows" } ] } ] } ], "additionalServices": [], "alias": "subnet-for-chaining" }, { "providerCode": "aws", "serviceOfferingId": "2235db11-36be-4f06-8fd9-1cd0b2a0e310", "providerAccountRefId": "1e55349d-db54-4b9b-8a85-529d601e6837", "providerCredentialRefId": "ef608a71-c648-4e1a-970f-2e194c225b73", "nodeId": "3", "serviceInstancePrefix": "ec2-for-chaining-linux", "quantity": 1, "configGroups": [ { "configGroupCode": "Configure Region", "sections": [], "configs": [ { "configId": "AWS::Region", "selectedValues": [ { "label": "us-east-1", "valueId": "us-east-1" } ] } ] }, { "configGroupCode": "Aws instance server", "sections": [], "configs": [ { "configId": "ami", "selectedValues": [ { "label": "ami-0b5eea76982371e91", "valueId": "ami-0b5eea76982371e91" } ] }, { "configId": "instance_type", "selectedValues": [ { "label": "t2.micro", "valueId": "t2.micro" } ] }, { "configId": "subnet_id", "selectedValues": [ { "label": "_binding_parameter_", "valueId": "_binding_parameter_" } ] } ] } ], "additionalServices": [], "alias": "ec2-for-chaining-linux" }, { "providerCode": "aws", "serviceOfferingId": "fa8d27e1-8675-4827-bdc1-6e3ce67a9942", "providerAccountRefId": "1e55349d-db54-4b9b-8a85-529d601e6837", "providerCredentialRefId": "ef608a71-c648-4e1a-970f-2e194c225b73", "nodeId": "4", "serviceInstancePrefix": "ec2-for-chaining-windows", "quantity": 1, "configGroups": [ { "configGroupCode": "Configure Region", "sections": [], "configs": [ { "configId": "AWS::Region", "selectedValues": [ { "label": "us-east-1", "valueId": "us-east-1" } ] } ] }, { "configGroupCode": "Aws instance server", "sections": [], "configs": [ { "configId": "ami", "selectedValues": [ { "label": "ami-0ee25f582ea1faaac", "valueId": "ami-0ee25f582ea1faaac" } ] }, { "configId": "instance_type", "selectedValues": [ { "label": "t2.micro", "valueId": "t2.micro" } ] }, { "configId": "subnet_id", "selectedValues": [ { "label": "_binding_parameter_", "valueId": "_binding_parameter_" } ] } ] } ], "additionalServices": [], "alias": "ec2-for-chaining-windows" }, { "providerCode": "aws", "serviceOfferingId": "beb0c57e-d8fb-4a3b-89eb-d81fdf69f27f", "providerAccountRefId": "1e55349d-db54-4b9b-8a85-529d601e6837", "providerCredentialRefId": "ef608a71-c648-4e1a-970f-2e194c225b73", "serviceInstancePrefix": "ec2-for-chaining-windows", "quantity": 1, "nodeId": "6", "configGroups": [ { "configGroupCode": "Configure Region", "sections": [], "configs": [ { "configId": "AWS::Region", "selectedValues": [ { "label": "us-east-1", "valueId": "us-east-1" } ] } ] }, { "configGroupCode": "Aws network interface network_interface", "sections": [], "configs": [ { "configId": "subnet_id", "selectedValues": [ { "label": "_binding_parameter_", "valueId": "_binding_parameter_" } ] }, { "configId": "instance_id", "selectedValues": [ { "label": "_binding_parameter_", "valueId": "_binding_parameter_" } ] } ] } ], "additionalServices": [] } ] }

Managing patterns

To manage patterns, click the
Actions
icon for that pattern on the
Service Chaining
page. The options vary based on what state the pattern is in. Select
View
to view details about the parameters.
For Drafts, these options are available:
  • View:
    View the details of the pattern. See Creating a pattern for details about the fields.
  • Edit:
    Allows you to open the pattern and make changes. The steps are the same as Creating a pattern.
  • Preview:
    View the pattern as it will appear to users of the Catalog.
  • Publish:
    Depending on the status of the pattern, either make it available for use in the Catalog or remove it from the Catalog.
  • Clone:
    Create a duplicate of the pattern that you can then customize as desired. The cloned pattern will be created in the Work in Progress status.
  • Delete:
    Permanently remove the pattern from the system.
For Published chains, these options are available:
  • View:
    View the details of the pattern. See Creating a pattern for details about the fields.
  • Clone:
    Create a duplicate of the pattern that you can then customize as desired. The cloned pattern will be created in the Work in Progress status.
  • Retire:
    Remove the pattern from the Catalog so that it can no longer be ordered.
For Retired chains, these options are available:
  • View:
    View the details of the pattern. See Creating a pattern.
  • Clone:
    Create a duplicate of the pattern that you can then customize as desired. The cloned pattern will be created in the Work in Progress status.
  • Unretire:
    Changed the pattern back into the Drafts status.
  • Delete:
    Permanently remove the pattern from the system.
A pattern goes into the Block state if one or more services in the pattern are retired. The pattern will be displayed with a
Blocked
icon. To unblock a pattern, either edit it to removed the retired services or, if it has been published, clone it and edit out the services and replace the original with the cloned version.

Known issues

The following are the known issues for Service Chaining.
  • The following features are not supported:
    • Base price of the pattern
    • Quote generation
    • Shopping carts
  • After a Logo has been added, it cannot be removed.
  • Services cannot be moved on the planning pane after they are added to a chain.
  • Hard to distinguish service names in the
    Select Service
    dropdown list.
  • Information related to patterns is not available on the
    Approve Order
    page.
  • The actual values of bound parameters do not appear during the ordering process. They are displayed as __binding_parameter__.
  • No dropdown option for Pattern Order is available on the Order History page to view individual service status.
  • Day2Ops is not supported.
  • When patterns that have multiple copies of services have these options:
    1. When the patterns are Completed with Failure, some resources are not getting deleted properly.
    2. When Retrying a pattern that is Completed with Failure, the order is displayed as completed successfully but some of the targeted resources are not deleted.
  • Service components are still loading after deletion of a pattern.
  • Linking of the configurations of one service to another is not allowed. Services can only be linked using output parameters.
  • Using a Static Parameter of the type JSON/Object as a Linked Parameter is not supported.
Do you have two minutes for a quick survey?
Take Survey