1

有以下YML文件,按預期工作我如何循環ansible變量

--- 
- hosts: local 
- name: Example of provisioning servers 
hosts: 127.0.0.1 
connection: local 
tasks: 
- name: Modify security group 
    local_action: 
    module: ec2_group 
    name: ansible_trail 
    description: Modify SG Rules 
    region: us-east-1 
    rules: 
     - proto: tcp 
     from_port: 22 
     to_port: 22 
     cidr_ip: 198.168.45.23 
    purge_rules: true* 

我要重複同樣的動作爲我所有的安全組的怎麼做,在ansible。

,而不是在分配名稱:optv5_ansible_trail我想從列表或文件中的值。

回答

0

我不是你的要求完全清楚,但我給它一個鏡頭。你可能想使用with_itemshttp://docs.ansible.com/ansible/playbooks_loops.html#standard-loops

我要一刺,說你可能想是這樣的:

tasks: 
    - name: Modify security group 
    local_action: 
     module: ec2_group 
     name: "{{ item }}" 
     description: Modify SG Rules 
     region: us-east-1 
     rules: 
     - proto: tcp 
      from_port: 22 
      to_port: 22 
      cidr_ip: 198.168.45.23 
     purge_rules: true* 
    with_items: "{{ security_groups }}" 

哪裏security_groups是安全組的名稱的列表。這將對security_groups列表中的每個項目調用local_action任務一次,並將item作爲迭代中的當前項目。

您也可以使用更復雜的數據結構,並用點表示法訪問這些文件(例如item.name,如果security_groups是字典是有鑰匙name的列表)。

+0

感謝丹的幫助,如果我將下面的代碼包含到代碼中,我會得到錯誤。 with_items: - optv5_ansible_trail - ansible_trail – sabarinath

+0

嘗試with_items:security_groups沒有括號和引號。這可能取決於你所在的版本。 –

0

什麼丹說會的工作,但如果你不想使用一個變量文件,只是添加/刪除的東西作爲一次操作你的所有安全組也可以直接指定名稱:

tasks: 
    - name: Modify security group 
    local_action: 
     module: ec2_group 
     name: "{{ item }}" 
     description: Modify SG Rules 
     region: us-east-1 
     rules: 
     - proto: tcp 
      from_port: 22 
      to_port: 22 
      cidr_ip: 198.168.45.23 
     purge_rules: true* 
    with_items: 
     - name-1 
     - name-2 
     - name-3