使用 lineinfile 的 Ansible 循环

使用 lineinfile 的 Ansible 循环

我在一个非常简单的游戏中遇到了错误,

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

答案1

您的指令缩进错误loop。这不是一个论点lineinfile;这是一个任务设置:

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

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

相关内容