理解ansible裏的item和with_items

item是循環變量,參考node

變量名僅能由字母、數字和下劃線組成且只能以字母開頭。 linux

facts是由正在通訊的遠程目標主機發回的信息這些信息被保存在ansible變量中。要獲取指定的遠程主機所支持的全部facts可以使用以下命令進行
ansible hostname -m setup 這個命令能夠得到被監控端主機的各類信息將這些信息獲得後保存到變量中。 shell


自定義變量
在 yaml 中能夠使用vars關鍵字來定義變量
vars:
var_name: value bash


變量的引用
{{ var_name }} ide


特殊的變量迭代
當有須要重複性執行的任務時能夠使用迭代機制。其使用格式爲將須要迭代的內容定義爲item變量引用並經過with_items語句來指明迭代的元素列表便可。 code


示例
例如在被控端添加 2 個用戶 rem

方式1通常作法 it

  • name: add user testuser1
    user: name=testuser1 state=present groups=wheel
  • name: add user testuser2
    user: name=testuser2 state=present groups=wheel

方式2使用變量方式 class

  • name: add several users
    vars:
    user1: testuser1
    user2: testuser2
    user: name={{ user1 }} state=present groups=wheel
    user: name={{ user2 }} state=present groups=wheel

方式3使用迭代方式 test

  1. 建立兩個用戶

    [root@linux-node1 create_user]# cat c_u.yml 
    - hosts: db
    remote_user: root
    tasks:
    
    - name: add several users
    user: name={{ item }} state=present groups=wheel   
    with_items:     
    - testuser1
    - testuser2
    - name: add several users
    user: name={{ item.name }} state=present groups={{ item.groups }}    
    with_items:    
    - { name: 'testuser1', groups: 'wheel' }    
    - { name: 'testuser2', groups: 'root' }
  2. 執行

    [root@linux-node1 create_user]# ansible-playbook c_u.yml 
    PLAY [db] ******************************************************************************************************************************************
    
    TASK [Gathering Facts] *****************************************************************************************************************************
    ok: [192.168.182.129]
    
    TASK [add several users] ***************************************************************************************************************************
    changed: [192.168.182.129] => (item=testuser1)
    changed: [192.168.182.129] => (item=testuser2)
    
    TASK [add several users] ***************************************************************************************************************************
    ok: [192.168.182.129] => (item={u'name': u'testuser1', u'groups': u'wheel'})
    changed: [192.168.182.129] => (item={u'name': u'testuser2', u'groups': u'root'})
    
    PLAY RECAP *****************************************************************************************************************************************
    192.168.182.129            : ok=3    changed=2    unreachable=0    failed=0
  3. 檢查結果
    [root@linux-node1 create_user]# ansible db -m shell -a 'grep test* /etc/passwd'
    192.168.182.129 | SUCCESS | rc=0 >>
    testuser1:x:3308:3308::/home/testuser1:/bin/bash
    testuser2:x:3309:3309::/home/testuser2:/bin/bash
相關文章
相關標籤/搜索