Ansible playbook 根据条件动态设置变量
首先新建 inventory,主机列表如下:
node-01 ansible_host=192.168.64.30 node-02 ansible_host=192.168.64.31 [app] node-01 [db] node-02
然后新建一个 test.yml,新增如下内容:
- hosts: db[0]:app[0] # 支持索引取值 vars: - Role: "{{ 'db' if 'app' in group_names else 'app' }}" # 动态设置变量 - Ports: app: 4503 db: 4502 pre_tasks: # 默认tasks只能在roles执行完后才执行,而pre-tasks可以在roles之前执行 - name: Debug debug: msg: This is a test message. roles: - testrole
新建 roles/testrole/defaults/main.yml
--- RESTLink: 'http://{{ inventory_hostname }}:{{ Ports[Role] }}'
新建 roles/testrole/tasks/main.yml
--- - debug: msg: "Final URL is {{ RESTLink }}"
执行该 playbook
ansible-playbook -i inventory test.yml
输出结果是:
PLAY [db[0]:app[0]] ******************************************************************************************************************************************* TASK [Gathering Facts] **************************************************************************************************************************************** Tuesday 27 August 2019 18:22:30 +0800 (0:00:00.121) 0:00:00.121 ******** ok: [node-01] ok: [node-02] TASK [debug] ************************************************************************************************************************************************** Tuesday 27 August 2019 18:22:32 +0800 (0:00:02.242) 0:00:02.363 ******** ok: [node-02] => { "msg": "This is a test message." } ok: [node-01] => { "msg": "This is a test message." } TASK [testrole : Debug] *************************************************************************************************************************************** Tuesday 27 August 2019 18:22:33 +0800 (0:00:00.255) 0:00:02.620 ******** ok: [node-02] => { "msg": "Final URL is http://node-02:4503" } ok: [node-01] => { "msg": "Final URL is http://node-01:4502" } PLAY RECAP **************************************************************************************************************************************************** node-01 : ok=3 changed=0 unreachable=0 failed=0 node-02 : ok=3 changed=0 unreachable=0 failed=0
总结:
1. When used in this manner, the order of execution for your playbook is as follows:
- Any
pre_tasks
defined in the play. - Any handlers triggered so far will be run.
- Each role listed in
roles
will execute in turn. Any role dependencies defined in the rolesmeta/main.yml
will be run first, subject to tag filtering and conditionals. - Any
tasks
defined in the play. - Any handlers triggered so far will be run.
- Any
post_tasks
defined in the play. - Any handlers triggered so far will be run.
原文地址:https://www.cnblogs.com/joneyhsiao/p/11420178.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。