はじめに
先日、Ansible Tower 3.7 がリリースされました。
ワークフロージョブテンプレートに対して、ワークフローノードを定義する awx.awx.tower_workflow_job_template_node
が、Asnible Tower 3.6 系に対しては使えなかったのですが、3.7 に試したら使えるようになってました。(もともとの使い方がうまくなかったのであればすみません・・)
もともと AWX には使えていたので、同等の実装が入ったのだと思います。
簡単なサンプルで検証します。
- 動作環境
awx.awx
collection 11.2.0
利用するファイル
ワークフローを定義する変数ファイルと、それを利用する Playbook です。
- 変数定義ファイル(抜粋)
workflow_templates: - name: wf_show desicription: show command workflow nodes: - identifier: node101 # 内部識別ID unified_job_template: jt_show # 実行するジョブテンプレート success_nodes: # 成功時に進めるノード(緑のリンク) - node201 - node202 failure_nodes: # 障害発生時に進めるノード(赤のリンク) - node209 - identifier: node201 unified_job_template: jt_show success_nodes: - node301 - identifier: node202 unified_job_template: jt_show success_nodes: - node301 - identifier: node209 unified_job_template: jt_show - identifier: node301 unified_job_template: jt_show
- Playbook(タスク抜粋)
- name: create workflow templates node awx.awx.tower_workflow_job_template_node: identifier: "{{ item.1.identifier }}" unified_job_template: "{{ item.1.unified_job_template | default(omit) }}" # 実行するジョブテンプレート workflow_job_template: "{{ item.0.name }}" # 関連付けるワークフロージョブテンプレート名 loop: "{{ workflow_templates | subelements('nodes') }}" loop_control: label: "{{ item.1.identifier }}"
Ansible Tower 3.6 までのエラー
3.6 までは、こんなエラーになっていました。(抜粋)
TASK [create workflow templates node] ****************************************** failed: [tower36] (item=node101) => {"ansible_loop_var": "item", "changed": false, "item": [{"allow_simultaneous": true, "desicription": "show command workflow", "extra_vars": {"wf_var1": "hello_wf1"}, "name": "wf_show", "nodes": [{"failure_nodes": ["node209"], "identifier": "node101", "success_nodes": ["node201", "node202"], "unified_job_template": "jt_show"}, {"identifier": "node201", "success_nodes": ["node301"], "unified_job_template": "jt_show"}, {"identifier": "node202", "success_nodes": ["node301"], "unified_job_template": "jt_show"}, {"identifier": "node209", "unified_job_template": "jt_show"}, {"all_parents_must_converge": true, "identifier": "node301", "unified_job_template": "jt_show"}], "survey": {"description": "", "name": "", "spec": [{"default": "new_username", "max": 1024, "min": 0, "question_description": "追加ユーザ名を入力してください", "question_name": "Enter new user name", "required": true, "type": "text", "variable": "new_username"}, {"default": "password", "max": 32, "min": 0, "question_description": "パスワードを入力してください", "question_name": "Enter new user password", "required": true, "type": "password", "variable": "new_password"}, {"choices": "operator\nadministrator", "default": "operator", "question_description": "役割を選択してください", "question_name": "Enter new user role", "required": true, "type": "multiplechoice", "variable": "new_role"}]}, "survey_enabled": true}, {"failure_nodes": ["node209"], "identifier": "node101", "success_nodes": ["node201", "node202"], "unified_job_template": "jt_show"}], "msg": "Got a 400 response when trying to get one from workflow_job_template_nodes, detail: WorkflowJobTemplateNode has no field named 'identifier'"}
おそらく、WorkflowJobTemplateNode has no field named 'identifier'
がポイントで、3.6 には API 仕様としてまだこのキーがなかったということだと思います。
Ansible Tower 3.7.0 の場合(正常)
3.7.0 は以下のように正常に実行できました。
TASK [create workflow templates node] ******************************************************************** changed: [tower37] => (item=node101) changed: [tower37] => (item=node201) changed: [tower37] => (item=node202) changed: [tower37] => (item=node209) changed: [tower37] => (item=node301)
参考までに、作成されたワークフローを掲載します。(実際は、前述のタスクのあとにノード間のリンクを定義するタスクを実行済み)
おわりに
Ansible Tower の設定を自動化できる箇所が増えてよかったです。