Ath*_*pos 5 automation ansible digital-ocean
当我用ansible调用一本剧本时,我想创建一个任意数量的水滴.例如:我需要创建10个运行一些python代码的小滴.
$ ansible-playbook install_pyapp_commission_new.yml --extra-vars "number_of_droplets_to_create=10"
Run Code Online (Sandbox Code Playgroud)
我尝试过使用with_sequence: count = X但你不能将它应用于角色或内部任务(据我所知).我的剧本看起来像这样:
- name: Digital Ocean Provisioning
hosts: 127.0.0.1
gather_facts: false
connection: local
roles:
- { role: do_provision, do_droplet_number: "{{ number_of_droplets_to_create | default(01) }}" }
- name: Setting up application
gather_facts: true
user: root
hosts: do_instances
roles:
- { role: application, wait_time: 60 }
Run Code Online (Sandbox Code Playgroud)
所以我将输入的液滴数量传递给do_provisionas,do_droplet_number因为atm我每次运行创建一个(这样我可以从bash并行运行10个,每个都有不同的数字,从而实现我的目标,但这是一个肮脏的解决方案).
我想做这样的事情:
- name: Digital Ocean Provisioning
hosts: 127.0.0.1
gather_facts: false
connection: local
roles:
- { role: do_provision, do_droplet_number: "{{ item }}" }
with_sequence: count={{ number_of_droplets_to_create }}
Run Code Online (Sandbox Code Playgroud)
但这不是有效的.
小智 0
这应该使用循环而不是 with_sequence 来工作。
它将循环转移到角色中,因为剧本不能包含“何时”。需要“when”来防止在 do_droplet_number 为 0 时创建液滴。
剧本
- name: list hosts
hosts: all
gather_facts: false
vars:
thiscount: "{{ mycount | default('0') }}"
roles:
- { role: do-provision, do_droplet_number: "{{ thiscount }}" }
Run Code Online (Sandbox Code Playgroud)
角色/do-provision/task/main.yml
- name: display number
debug:
msg: "mycount {{ item }}"
loop: "{{ range(0, do_droplet_number|int) |list }}"
when: thiscount > 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
781 次 |
| 最近记录: |