使用Ansible创建任意数量的DigitalOcean液滴

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)