Prior to this change we had workflow defined inside python-tripleoclient, and most API calls were made directly to Heat. This worked OK but there was too much "business logic" inside the client, which doesn't work well if non-python clients (such as tripleo-ui) want to interact with TripleO.
To solve this problem, number of mistral workflows and custom actions have been implemented, which are available via the Mistral API on the undercloud. This can be considered the primary "TripleO API" for driving all deployment tasks now.
Here's a diagram showing how it fits together:
Overview of Mistral integration in TripleO |
Mistral workflows and actions
There are two primary interfaces to mistral, workflows which are a yaml definition of a process or series of tasks, and actions which are a concrete definition of how to do a specific task (such as call some OpenStack API).Workflows and actions can defined directly via the mistral API, or a wrapper called a workbook. Mistral actions are also defined via a python plugin interface, which TripleO uses to run some tasks such as running jinja2 on tripleo-heat-templates prior to calling Heat to orchestrate the deployment.
Mistral workflows, in detail
Here I'm going to show how to view and interact with the mistral workflows used by TripleO directly, which is useful to understand what TripleO is doing "under the hood" during a deployment, and also for debugging/development.First we view the mistral workbooks loaded into Mistral - these contain the TripleO specific workflows and are defined in tripleo-common
[stack@undercloud ~]$ . stackrc [stack@undercloud ~]$ mistral workbook-list +----------------------------+--------+---------------------+------------+ | Name | Tags | Created at | Updated at | +----------------------------+--------+---------------------+------------+ | tripleo.deployment.v1 | <none> | 2017-02-27 17:59:04 | None | | tripleo.package_update.v1 | <none> | 2017-02-27 17:59:06 | None | | tripleo.plan_management.v1 | <none> | 2017-02-27 17:59:09 | None | | tripleo.scale.v1 | <none> | 2017-02-27 17:59:11 | None | | tripleo.stack.v1 | <none> | 2017-02-27 17:59:13 | None | | tripleo.validations.v1 | <none> | 2017-02-27 17:59:15 | None | | tripleo.baremetal.v1 | <none> | 2017-02-28 19:26:33 | None | +----------------------------+--------+---------------------+------------+
The name of the workbook constitutes a namespace for the workflows it contains, so we can view the related workflows using grep (I also grep for tag_node to reduce the number of matches).
[stack@undercloud ~]$ mistral workflow-list | grep "tripleo.baremetal.v1" | grep tag_node | 75d2566c-13d9-4aa3-b18d-8e8fc0dd2119 | tripleo.baremetal.v1.tag_nodes | 660c5ec71ce043c1a43d3529e7065a9d | <none> | tag_node_uuids, untag_nod... | 2017-02-28 19:26:33 | None | | 7a4220cc-f323-44a4-bb0b-5824377af249 | tripleo.baremetal.v1.tag_node | 660c5ec71ce043c1a43d3529e7065a9d | <none> | node_uuid, role=None, que... | 2017-02-28 19:26:33 | None |
When you know the name of a workflow, you can inspect the required inputs, and run it directly via a mistral execution, in this case we're running the tripleo.baremetal.v1.tag_node workflow, which modifies the profile assigned in the ironic node capabilities (see tripleo-docs for more information about manual tagging of nodes)
[stack@undercloud ~]$ mistral workflow-get tripleo.baremetal.v1.tag_node +------------+------------------------------------------+ | Field | Value | +------------+------------------------------------------+ | ID | 7a4220cc-f323-44a4-bb0b-5824377af249 | | Name | tripleo.baremetal.v1.tag_node | | Project ID | 660c5ec71ce043c1a43d3529e7065a9d | | Tags | <none> | | Input | node_uuid, role=None, queue_name=tripleo | | Created at | 2017-02-28 19:26:33 | | Updated at | None | +------------+------------------------------------------+ [stack@undercloud ~]$ ironic node-list +--------------------------------------+-----------+---------------+-------------+--------------------+-------------+ | UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance | +--------------------------------------+-----------+---------------+-------------+--------------------+-------------+ | 30182cb9-eba9-4335-b6b4-d74fe2581102 | control-0 | None | power off | available | False | | 19fd7ea7-b4a0-4ae9-a06a-2f3d44f739e9 | compute-0 | None | power off | available | False | +--------------------------------------+-----------+---------------+-------------+--------------------+-------------+ [stack@undercloud ~]$ mistral execution-create tripleo.baremetal.v1.tag_node '{"node_uuid": "30182cb9-eba9-4335-b6b4-d74fe2581102", "role": "test"}' +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | ID | 6a141065-ad6e-4477-b1a8-c178e6fcadcb | | Workflow ID | 7a4220cc-f323-44a4-bb0b-5824377af249 | | Workflow name | tripleo.baremetal.v1.tag_node | | Description | | | Task Execution ID | <none> | | State | RUNNING | | State info | None | | Created at | 2017-03-03 09:53:10 | | Updated at | 2017-03-03 09:53:10 | +-------------------+--------------------------------------+
At this point the mistral workflow is running, and it'll either succeed or fail, and also create some output (which in the TripleO model is sometimes returned to the Ux via a Zaqar queue). We can view the status, and the outputs (truncated for brevity):
[stack@undercloud ~]$ mistral execution-list | grep 6a141065-ad6e-4477-b1a8-c178e6fcadcb | 6a141065-ad6e-4477-b1a8-c178e6fcadcb | 7a4220cc-f323-44a4-bb0b-5824377af249 | tripleo.baremetal.v1.tag_node | | <none> | SUCCESS | None | 2017-03-03 09:53:10 | 2017-03-03 09:53:11 | [stack@undercloud ~]$ mistral execution-get-output 6a141065-ad6e-4477-b1a8-c178e6fcadcb { "status": "SUCCESS", "message": { ...
So that's it - we ran a mistral workflow, it suceeded and we looked at the output, now we can see the result looking at the node in Ironic, it worked! :)
[stack@undercloud ~]$ ironic node-show 30182cb9-eba9-4335-b6b4-d74fe2581102 | grep profile | | u'cpus': u'2', u'capabilities': u'profile:test,cpu_hugepages:true,boot_o |
Mistral workflows, create your own!
Here I'll show how to develop your own custom workflows (which isn't something we expect operators to necessarily do, but is now part of many developers workflow during feature development for TripleO).First, we create a simple yaml definition of the workflow, as defined in the v2 Mistral DSL - this example lists all available ironic nodes, then finds those which match the "test" profile we assigned in the example above:
This example uses the mistral built-in "ironic" action, which is basically a pass-through action exposing the python-ironicclient interfaces. Similar actions exist for the majority of OpenStack python clients, so this is a pretty flexible interface.
Now we can now upload the workflow (not wrapped in a workbook this time, so we use workflow-create), run it via execution create, then look at the outputs - we can see that the matching_nodes output matches the ID of the node we tagged in the example above - success! :)
[stack@undercloud tripleo-common]$ mistral workflow-create shtest.yaml +--------------------------------------+-------------------------+----------------------------------+--------+--------------+---------------------+------------+ | ID | Name | Project ID | Tags | Input | Created at | Updated at | +--------------------------------------+-------------------------+----------------------------------+--------+--------------+---------------------+------------+ | 2b8f2bea-f3dd-42f0-ad16-79987c75df4d | test_nodes_with_profile | 660c5ec71ce043c1a43d3529e7065a9d | <none> | profile=test | 2017-03-03 10:18:48 | None | +--------------------------------------+-------------------------+----------------------------------+--------+--------------+---------------------+------------+ [stack@undercloud tripleo-common]$ mistral execution-create test_nodes_with_profile +-------------------+--------------------------------------+ | Field | Value | +-------------------+--------------------------------------+ | ID | 2392ed1c-96b4-4787-9d11-0f3069e9a7e5 | | Workflow ID | 2b8f2bea-f3dd-42f0-ad16-79987c75df4d | | Workflow name | test_nodes_with_profile | | Description | | | Task Execution ID | <none> | | State | RUNNING | | State info | None | | Created at | 2017-03-03 10:19:30 | | Updated at | 2017-03-03 10:19:30 | +-------------------+--------------------------------------+ [stack@undercloud tripleo-common]$ mistral execution-list | grep 2392ed1c-96b4-4787-9d11-0f3069e9a7e5 | 2392ed1c-96b4-4787-9d11-0f3069e9a7e5 | 2b8f2bea-f3dd-42f0-ad16-79987c75df4d | test_nodes_with_profile | | <none> | SUCCESS | None | 2017-03-03 10:19:30 | 2017-03-03 10:19:31 | [stack@undercloud tripleo-common]$ mistral execution-get-output 2392ed1c-96b4-4787-9d11-0f3069e9a7e5 { "matching_nodes": [ "30182cb9-eba9-4335-b6b4-d74fe2581102" ], "available_nodes": [ "30182cb9-eba9-4335-b6b4-d74fe2581102", "19fd7ea7-b4a0-4ae9-a06a-2f3d44f739e9" ] }
Using this basic example, you can see how to develop workflows which can then easily be copied into the tripleo-common workbooks, and integrated into the TripleO deployment workflow.
In a future post, I'll dig into the use of custom actions, and how to develop/debug those.
Nice!
ReplyDeleteGreat post as usual from hardy!! Good job stacker!!
ReplyDeleteNice post .Keep updating Devops Online Course
ReplyDeleteVery nice post here thanks for it .I always like and such a super contents of these post.Excellent and very cool idea and great content of different kinds of the valuable information's.
ReplyDeleteartificial intelligence and machine learning course in chennai
machine learning classroom training in chennai
machine learning certification in chennai
Android training in chennai
PMP training in chennai
Connected Health Solutions
ReplyDeleteEnterprise imaging solutions to help you archive, consolidate, access, and share medical imaging data across departments, locations and regions.
Thanks for sharing, nice post! Post really provice useful information!
ReplyDeleteGiaonhan247 chuyên dịch vụ mua hộ hàng mỹ trên website hàng đầu Mỹ ebay việt nam cũng như vận chuyển hàng đi mỹ và vận chuyển ship hàng mỹ về VN uy tín, giá rẻ.
Thanks for delivering a good stuff Openstack....
ReplyDeleteOpenstack Training
Openstack Certification Training
OpenStack Online Training
Openstack Training Course
Openstack Training in Hyderabad
Nice Blog!!. Thanks For Sharing..
ReplyDeleteHR Pay Roll Software
JAVA Development Services
Hotel Billing Software
Web Design Company
Hospital Management Software
SAP Software Services
osb online training
ReplyDeleteoracle scm online training
abinitio online training
spark online training
scala online training
Interesting information.share more updates.
ReplyDeleteOpenstack Training
Great Article
ReplyDeleteI have learned something new from
your article, This will definitely help me in my future works, Thanks for sharing it
Best Software Development company
Best web development company
Mobile app development company
Good Post. I like your blog. Thanks for Sharing
ReplyDeleteVisit us: ui path online training
Visit us: uipath training in hyderabad
Borgata Hotel Casino & Spa - Mapyro
ReplyDeleteFree WiFi and parking. Located in the 세종특별자치 출장마사지 Atlantic City Marina District, 여수 출장마사지 this casino resort offers a spa and a fitness center, a 통영 출장안마 seasonal outdoor pool, and a restaurant.Free WiFi: 7.8 Rating: 3.7 · 4,949 reviews · Price range: $$$Does Borgata Hotel 성남 출장안마 Casino & Spa have a 부산광역 출장마사지 restaurant on site?What days are Borgata Hotel Casino & Spa open?
Excellent site work, please share us more.
ReplyDeleteWallpapaer Engine Crack
Final Draft Crack
Advanced Systemcare Crack
Emsisoft Anti Malware Crack