当我用ansible调用一本剧本时,我想创建一个任意数量的水滴。 例如: 我需要创建10个运行一些python代码的小滴。
$ ansible-playbook install_pyapp_commission_new.yml --extra-vars "number_of_droplets_to_create=10"
我尝试使用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 }
所以我将输入的墨滴数传递给do_provision
作为do_droplet_number
,因为我每次运行创建一个(这样我可以从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 }}
但这无效。
答案 0 :(得分:0)
这应该使用循环而不是with_sequence。
它将循环转移到角色中,因为剧本不能包含“何时”。 当do_droplet_number为0时,需要使用“何时”来防止创建液滴。
剧本
replyChannel
角色/做准备/任务/main.yml
- name: list hosts
hosts: all
gather_facts: false
vars:
thiscount: "{{ mycount | default('0') }}"
roles:
- { role: do-provision, do_droplet_number: "{{ thiscount }}" }