Loops 如何使用ansible循环

Loops 如何使用ansible循环,loops,ansible,Loops,Ansible,变量文件 我有一个变量文件 fruits: - apple - banana - orange - strawberry - grapes - papaya users: - user_name: 'john' user_age: 45 - user_name: 'yash' user_age: 95 - user_name: 'srk' user_age: 52 - user_name: 'alia' user_age:

变量文件

我有一个变量文件

fruits:
  - apple
  - banana
  - orange
  - strawberry
  - grapes
  - papaya

users:
  - user_name: 'john'
    user_age: 45
  - user_name: 'yash'
    user_age: 95
  - user_name: 'srk'
    user_age: 52
  - user_name: 'alia'
    user_age: 26
剧本任务

还有我的ansible任务,只是尝试创建一个文本文件,并在文件中按垂直顺序添加变量

- hosts: localhost
  gather_facts: true
  vars_files:
    - variables.var # this is my variable file in the same dir that playbook have.
  tasks:
    - name: add fruits to the list
      lineinfile:
        create: yes
        line: "{{ item }}"
        path: /home/ansible/ansible-demo2/fruits.txt
      loop:
        - "{{ fruits|flatten }}"

    - name: add uses to the list
      lineinfile:
        create: yes
        line: "{{ item.user_name }} ==> {{ item.user_age }}"
        path: /home/ansible/ansible-demo2/users.txt
      loop:
        - "{{ users|flatten(levels=1) }}"

错误

但我的行为越来越怪异。下面是fruits任务的输出和users任务的错误

TASK [add fruits to the list] ***************************************************************************************************************************
ok: [localhost] => (item=[u'apple', u'banana', u'orange', u'strawberry', u'grapes', u'papaya'])
[WARNING]: The value ['apple', 'banana', 'orange', 'strawberry', 'grapes', 'papaya'] (type list) in a string field was converted to u"['apple',
'banana', 'orange', 'strawberry', 'grapes', 'papaya']" (type string). If this does not look like what you expect, quote the entire value to ensure it
does not change.

TASK [add uses to the list] *****************************************************************************************************************************
fatal: [localhost]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'list object' has no attribute 'user_name'
\n\nThe error appears to be in '/home/ansible/ansible-demo2/myansible.yml': line 18, column 7, but may\nbe elsewhere in the file depending on the exact s
yntax problem.\n\nThe offending line appears to be:\n\n\n    - name: add uses to the list\n      ^ here\n"}
预期产出

在文本文件中按垂直顺序列出

对问题的评论:

我感到惊讶的是,每件事都能很好地处理
,而不是
循环
,甚至
用户名
变量都已定义,但仍然表示未定义。现在我无法找出到底出了什么问题

参考资料:

以下是我正在引用的文档:

编辑:变量调试输出

我调试变量。产量低于

TASK [debug] ********************************************************************************************************************************************
ok: [localhost] => {
    "fruits": [
        "apple",
        "banana",
        "orange",
        "strawberry",        "grapes",        "papaya"
    ]
}

TASK [debug] ********************************************************************************************************************************************
ok: [localhost] => {
    "users": [
        {
            "user_age": 45,
            "user_name": "john"
        },
        {
            "user_age": 95,
            "user_name": "yash"
        },
        {
            "user_age": 52,
            "user_name": "srk"
        },
        {
            "user_age": 26,
            "user_name": "alia"
        }
    ]
}
Q:“[警告]:字符串字段中的值['apple',…](类型列表)已转换为u“['apple',…](类型字符串)

答:从代码上看,不清楚转换的原因是什么。下面的数据和剧本按预期工作

shell>cat data.yml
水果:
-苹果
-香蕉
-橙色的
-草莓的
-葡萄
-木瓜
用户:
-用户名:“john”
用户年龄:45
-用户名:“yash”
用户年龄:95
-用户名:“srk”
用户年龄:52
-用户名:“alia”
用户年龄:26
shell>cat playbook.yml
-主机:本地主机
vars_文件:
-data.yml
任务:
-名称:将水果添加到列表中
线条填充:
创建:是
行:“{{item}}”
路径:fruits.txt
循环:“{{fruits}}”
-名称:将用途添加到列表中
线条填充:
创建:是
行:“{item.user_name}}=>{{{item.user_age}”
路径:users.txt
循环:“{{users}}”
给予

shell>cat fruits.txt
苹果
香蕉
橙色
草莓
葡萄
番木瓜
shell>cat users.txt
约翰==>45
yash==>95
srk==>52
alia==>26

问:“2个变量果1和果2。。。将其数据附加到单个文件中。。。在具有2个变量的单个任务中”

答:用修改后的数据

shell>cat data.yml
成果1:
-苹果
-香蕉
-橙色的
成果2:
-草莓的
-葡萄
-木瓜
这项任务给出了相同的结果

-name:将水果添加到列表中
线条填充:
创建:是
行:“{{item}}”
路径:fruits.txt
循环:{{FROUTS1+FROUTS2}}”


对这个问题的评论:“我很惊讶每件事都能很好地与_项一起工作,而不是与循环一起工作”


A:看。

我认为一切都一样,但你没有在循环中使用
flatte
,我仍然得到相同的错误。对于你在答案顶部提到的错误,我已经尝试过了,它给了我输出
[u'apple',u'banana',u'orange',u'草莓',u'grapes',u'papaya']
在文本文件中,请参见变量的类型
-debug:msg=“{{fruits | type_debug}”“
我刚刚比较了你的yml和我的yml。我在声明循环变量时发现的差异。这导致了错误。由于我是ansible的新手,您能解释一下最好的方法吗?我有两个变量水果1和水果2,希望将它们的数据附加到单个文件中,是否可以在单个任务中定义2个变量???如何读取带有变量的文件?(组变量、主机变量、变量文件、包括变量…)@VladimirBotka我正在使用
vars\u文件
变量可能有问题。测试它
-debug:var=fruits
@VladimirBotka先生,请用调试结果检查更新的答案数据格式似乎有问题<代码>“草莓”、“葡萄”、“木瓜”不应在同一行。