Support connection to arbitrary Openstack clouds

https://blueprints.launchpad.net/mistral/+spec/mistral-multi-vim-support

Problem description

Mistral is configured to execute workflows on a specific cloud (VIM (Virtual Infrastructure Manager) in ETSI MANO terms). In order to execute workflows on a different cloud one needs to start a new Mistral instance with the cloud specific configuration. When Mistral is used in standalone mode, this is an undesired overhead and can cause unpredictable resource usage patterns.

This blueprint proposes to extend the workflow execution parameters to make it possible to target a specific cloud without modifying the configuration of the Mistral service.

Use Cases

  • As a tenant, I want to execute the same workflow on different clouds without having to start a new Mistral instance with changed configuration.

Proposed change

Both the Mistral server and command line client are affected.

The ‘execution-create’ functionality should take parameters that describe the target cloud for the execution. The following optional parameters should be added:

  • target_auth_url: auth URL of the target cloud

  • target_auth_token: valid authentication token for the target cloud

  • target_ca_cert: CA cert of target cloud

If both present, these are used to execute the workflow actions. If none are present, then the current legacy operation mode is used, and the preconfigured authentication URL is used in the actions. In any other case the execution creation should fail.

These parameters are stored in the context field of the execution.

The parameters are added as headers to the HTTP API request.

The self authentication of Mistral should be carried out the same way as done currently.

Cron triggers need the admin credentials for the tartget cloud. We do not consider this case in the current proposal.

Alternatives

  • Start mulitple Mistral instances with different settings.

  • This is an inflexible solution for the problem and the setup of the new instances incurs significant administrative overhead.

Data model impact

The change affects the context information of the execution object by including the target auth URL and target token. The context is stored as Json, so this change should not require DB migration.

REST API impact

POST /executions

This method should now accept the new optional target_* parameters according to the specified rules.

Output should not change.

End user impact

The python-mistralclient should accept the following parameters:

  • TARGET_OS_USERNAME: user name on the target cloud

  • TARGET_OS_PASSWORD: password on the target cloud

  • TARGET_OS_TENANT: tenant on the target cloud

  • TARGET_OS_AUTH_URL: keystone URL of the target cloud

  • TARGET_OS_CA_CERT: CA cert of target cloud

The client should authenticate both towards the OS_AUTH_URL and TARGET_OS_AUTH_URL keystones.

Either all or none of these parameters should be set.

Performance Impact

None.

Deployer impact

This change takes effect immediately after deployment.

Implementation

Assignee(s)

Primary assignee:

Other contributors:

Work Items

  • Implement the changes in the python-mistralclient

    • Add support for taking new parameters from environment and command line

  • Implement the changes in Mistral

    • Inject auth URI in execution context * Reason: Actions require the target Auth URI * Tasks:

      • Set auth_uri in context either from the TARGET_OS_AUTH_URL header or from CONF.

    • Eliminate admin user for Keystone

      • Reason: Admin credentials should not be required to connect to target cloud.

      • Tasks:

        • Use non-admin Keystone client

        • Use ‘tokens’ API to retrieve service endpoints

    • Use auth URL from context to create service clients

      • Reason: service clients need to connect to target cloud

      • Task:

        • Do as stated above

    • Add new headers to allowed_headers

      • Reason: this feature may be used in the future

Dependencies

None.

Testing

  • Execute a Mistral workflow with targeting a different cloud than what is declared in the configuration.

  • Create two simultaneously ran executions of the same mistral workflow targeting different clouds/regions/tenants. Check if both succeed.

References

None.