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

时间:2014-08-26 12:18:15

标签: automation ansible digital-ocean

当我用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 }}

但这无效。

1 个答案:

答案 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 }}" }