[英]How to run Ansible playbook conditionally?
我如何根據條件運行一些劇本。 我將解釋我目前的情況 - 我有一個主要的 yml - main.yml
正在導入 4 個劇本,條件如下 -
---
- import_playbook: current-deployment-status.yml
- import_playbook: current-config-status.yml
- import_playbook: full-deployment.yml
when: target_release_version != current_release
- import_playbook: only-config-change.yml
#when: config_var.changed == true and target_release_version == current_release
第一個劇本current-deployment-status.yml
獲取部署的當前發布版本並注冊一個變量current_release
。 同樣,第二個劇本做一些配置檢查並注冊到變量config_var
中。
現在基於這兩個變量,我必須執行我進一步的劇本。 如果target_release_version == current_release
那么我不想進行部署,所以只有在滿足上述條件時才執行full-deployment.yml
。
同樣,如果只需要更改配置而無需部署: config_var.changed == true and target_release_version == current_release
,則執行only-config-change.yml
有沒有辦法僅在條件滿足時才執行劇本,否則跳過它並繼續進行。
請讓我知道是否有人可以指導我正確的方向
是的,您可以使用 set_facts ansible 模塊來實現它。
主.yml
---
- import_playbook: current-deployment-status.yml
- import_playbook: current-config-status.yml
- import_playbook: full-deployment.yml
when: target_release_version != current_release
- import_playbook: only-config-change.yml
when: config_var.changed == true and target_release_version == current_release
當前部署狀態.yml
- name : Playbook current-deployment-status
hosts: all
user: ubuntu
gather_facts: True
tasks:
- name: echo playbook name
shell: echo "current-deployment-status.yml"
- set_fact:
current_release: "2"
當前配置狀態.yml
- name : Playbook current-config-status.yml
hosts: all
user: ubuntu
gather_facts: True
tasks:
- name: echo playbook name
shell: echo "current-config-status.yml"
- name: task2
shell: echo "another task"
register: config_var
- debug: msg="{{config_var.changed}}"
完全部署.yml
- name : Playbook
hosts: all
user: ubuntu
gather_facts: True
tasks:
- name: echo playbook name
shell: echo "full_deployment.yml"
僅配置更改.yml
- name : Playbook only-config-change.yml
hosts: all
user: ubuntu
gather_facts: True
tasks:
- name: echo playbook name
shell: echo "only-config-change.yml"
ansible-playbook -i 172.31.6.248, main.yml -v --extra-vars "target_release_version=2"
ubuntu@ip-172-31-38-43:~/ansible_test$ ansible-playbook -i 172.31.6.248, main.yml -v --extra-vars "target_release_version=2"
PLAY [Playbook current-deployment-status] ***********************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.31.6.248]
TASK [echo playbook name] ***************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"current-deployment-status.yml\"", "delta": "0:00:00.002429", "end": "2020-05-31 16:46:29.900240", "rc": 0, "start": "2020-05-31 16:46:29.897811", "stderr": "", "stderr_lines": [], "stdout": "current-deployment-status.yml", "stdout_lines": ["current-deployment-status.yml"]}
TASK [set_fact] *************************************************************************************************************************
ok: [172.31.6.248] => {"ansible_facts": {"current_release": "2"}, "changed": false}
PLAY [Playbook current-config-status.yml] ***********************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.31.6.248]
TASK [echo playbook name] ***************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"current-config-status.yml\"", "delta": "0:00:00.002484", "end": "2020-05-31 16:46:30.776486", "rc": 0, "start": "2020-05-31 16:46:30.774002", "stderr": "", "stderr_lines": [], "stdout": "current-config-status.yml", "stdout_lines": ["current-config-status.yml"]}
TASK [task2] ****************************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"another task\"", "delta": "0:00:00.002473", "end": "2020-05-31 16:46:31.048677", "rc": 0, "start": "2020-05-31 16:46:31.046204", "stderr": "", "stderr_lines": [], "stdout": "another task", "stdout_lines": ["another task"]}
TASK [debug] ****************************************************************************************************************************
ok: [172.31.6.248] => {
"msg": true
}
PLAY [Playbook full_deployment.yml] *****************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
skipping: [172.31.6.248] => {"changed": false, "skip_reason": "Conditional result was False"}
TASK [echo playbook name] ***************************************************************************************************************
skipping: [172.31.6.248] => {"changed": false, "skip_reason": "Conditional result was False"}
PLAY [Playbook only-config-change.yml] **************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.31.6.248]
TASK [echo playbook name] ***************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"only-config-change.yml\"", "delta": "0:00:00.002585", "end": "2020-05-31 16:46:32.017156", "rc": 0, "start": "2020-05-31 16:46:32.014571", "stderr": "", "stderr_lines": [], "stdout": "only-config-change.yml", "stdout_lines": ["only-config-change.yml"]}
PLAY RECAP ******************************************************************************************************************************
172.31.6.248 : ok=9 changed=4 unreachable=0 failed=0
ansible-playbook -i 172.31.6.248, main.yml -v --extra-vars "target_release_version=3"
PLAY [Playbook current-deployment-status] ***********************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.31.6.248]
TASK [echo playbook name] ***************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"current-deployment-status.yml\"", "delta": "0:00:00.002490", "end": "2020-05-31 16:48:28.611482", "rc": 0, "start": "2020-05-31 16:48:28.608992", "stderr": "", "stderr_lines": [], "stdout": "current-deployment-status.yml", "stdout_lines": ["current-deployment-status.yml"]}
TASK [set_fact] *************************************************************************************************************************
ok: [172.31.6.248] => {"ansible_facts": {"current_release": "2"}, "changed": false}
PLAY [Playbook current-config-status.yml] ***********************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.31.6.248]
TASK [echo playbook name] ***************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"current-config-status.yml\"", "delta": "0:00:00.002565", "end": "2020-05-31 16:48:29.440319", "rc": 0, "start": "2020-05-31 16:48:29.437754", "stderr": "", "stderr_lines": [], "stdout": "current-config-status.yml", "stdout_lines": ["current-config-status.yml"]}
TASK [task2] ****************************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"another task\"", "delta": "0:00:00.002459", "end": "2020-05-31 16:48:29.703006", "rc": 0, "start": "2020-05-31 16:48:29.700547", "stderr": "", "stderr_lines": [], "stdout": "another task", "stdout_lines": ["another task"]}
TASK [debug] ****************************************************************************************************************************
ok: [172.31.6.248] => {
"msg": true
}
PLAY [Playbook full_deployment.yml] *****************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
ok: [172.31.6.248]
TASK [echo playbook name] ***************************************************************************************************************
changed: [172.31.6.248] => {"changed": true, "cmd": "echo \"full_deployment.yml\"", "delta": "0:00:00.002509", "end": "2020-05-31 16:48:30.610648", "rc": 0, "start": "2020-05-31 16:48:30.608139", "stderr": "", "stderr_lines": [], "stdout": "full_deployment.yml", "stdout_lines": ["full_deployment.yml"]}
PLAY [Playbook only-config-change.yml] **************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************
skipping: [172.31.6.248] => {"changed": false, "skip_reason": "Conditional result was False"}
TASK [echo playbook name] ***************************************************************************************************************
skipping: [172.31.6.248] => {"changed": false, "skip_reason": "Conditional result was False"}
PLAY RECAP ******************************************************************************************************************************
172.31.6.248 : ok=9 changed=4 unreachable=0 failed=0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.