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先生,请用调试结果检查更新的答案数据格式似乎有问题<代码>“草莓”、“葡萄”、“木瓜”不应在同一行。