Ansible

帶有 lineinfile 的 Ansible 循環

  • June 18, 2020

我在一個非常簡單的遊戲中遇到了錯誤,

- name: add to environment                                                          
 lineinfile:                                                                       
   path: /etc/environment                                                          
   line: "{{ item }}"                                                              
   loop:                                                                           
     - "foo=1"                                                                     
     - "bar=2"

如果它們不存在,我只想將這些行添加到該文件中。我得到的錯誤是,

致命的:

$$ 10.1.38.15 $$: 失敗的!=> {“msg”: “該任務包含一個帶有未定義變數的選項。錯誤是:‘item’ 未定義\n\n錯誤似乎在 ‘/home/ecarroll/cp/ansible/roles/sandbox /tasks/main.yml’:第 6 行,第 3 列,但可能\n位於文件中的其他位置,具體取決於確切的語法問題。\n\n違規行似乎是:\n\n dest: /\n- name : 添加到環境\n ^ 這裡\n”}

你錯誤地縮進了你的loop指令。這不是一個論點lineinfile;這是一個任務設置:

- name: add to environment                                                          
 lineinfile:                                                                       
   path: /etc/environment                                                          
   line: "{{ item }}"                                                              
 loop:                                                                           
   - "foo=1"                                                                     
   - "bar=2"

我已經用循環實現了 ansible lineinfile 模組,它按預期工作。

能夠使用 lineinfile 循環模組在 sudoers 文件中添加多個條目。

希望這能滿足您的要求

- name: "Providing sudo access to linux team users"
 lineinfile:
   path: /etc/sudoers
   line: '{{item}}   ALL=(ALL)       NOPASSWD: ALL'
   state: present
   create: yes
   validate: 'visudo -cf %s'
 loop:
   - Admin.Linux
   - Admin.Unix

ansible 播放執行輸出

TASK [Providing sudo access to accenture linux team members]
changed: [ANSIBLECLINETNODE] => (item=Admin.Linux)
changed: [ANSIBLECLINETNODE] => (item=Admin.Unix)

下面是 sudoers 文件輸出

[root@ANSIBLECLINETNODE~]# cat /etc/sudoers| tail -2
Admin.Linux   ALL=(ALL)       NOPASSWD: ALL
Admin.Unix   ALL=(ALL)       NOPASSWD: ALL

引用自:https://unix.stackexchange.com/questions/560254