Ansible Yml必须存储为字典/哈希
我有一个用户名及其ssh密钥的yaml文件,存储方式如下:Ansible Yml必须存储为字典/哈希,ansible,Ansible,我有一个用户名及其ssh密钥的yaml文件,存储方式如下: --- -用户:鲍勃 姓名:鲍勃·麦克鲍勃 ssh_密钥: -ssh rsa。。。 -用户:弗雷德 姓名:弗雷德·麦克弗雷德 ssh_密钥: -ssh rsa。。。 我正在尝试获取用户和ssh\u密钥密钥,以便使用此文件在linux主机上设置用户 但Ansible似乎不喜欢此文件的格式,因为此简单任务会引发错误: -name:获取SSH密钥 包括以下变量: 文件:../admins.yml 名称:ssh_密钥 不幸的是,我无法更改a
---
-用户:鲍勃
姓名:鲍勃·麦克鲍勃
ssh_密钥:
-ssh rsa。。。
-用户:弗雷德
姓名:弗雷德·麦克弗雷德
ssh_密钥:
-ssh rsa。。。
我正在尝试获取用户
和ssh\u密钥
密钥,以便使用此文件在linux主机上设置用户
但Ansible似乎不喜欢此文件的格式,因为此简单任务会引发错误:
-name:获取SSH密钥
包括以下变量:
文件:../admins.yml
名称:ssh_密钥
不幸的是,我无法更改admins.yml
文件的格式,因为它在其他工具中使用,更改格式会破坏它们。对我如何解决这个问题有什么建议吗 看起来ansible希望
admins.yml
文件如下所示:
---
傅:
-用户:鲍勃
我叫鲍勃·麦克鲍勃
ssh_密钥:
-ssh-rsa。。
正如您所说,给定的vars文件的格式无效。您可以使用任务以您描述的方式修复文件,然后尝试加载它
lineinfle
任务可用于实现此技巧,如下例所示:
---
- hosts: localhost
gather_facts: false
vars:
tasks:
- name: fix vars file
lineinfile:
path: "{{ playbook_dir }}/vars_file.yml"
insertafter: "^---$"
line: "ssh_keys:"
backup: yes
- name: Get SSH Keys
include_vars:
file: "{{ playbook_dir }}/vars_file.yml"
- debug: var=ssh_keys
如果不希望编辑该文件,可以复制到新文件名(vars_file_fixed.yml),然后应用lineinfile并加载它
干杯正如您所说,给定的vars文件的格式无效。您可以使用任务以您描述的方式修复文件,然后尝试加载它
lineinfle
任务可用于实现此技巧,如下例所示:
---
- hosts: localhost
gather_facts: false
vars:
tasks:
- name: fix vars file
lineinfile:
path: "{{ playbook_dir }}/vars_file.yml"
insertafter: "^---$"
line: "ssh_keys:"
backup: yes
- name: Get SSH Keys
include_vars:
file: "{{ playbook_dir }}/vars_file.yml"
- debug: var=ssh_keys
如果不希望编辑该文件,可以复制到新文件名(vars_file_fixed.yml),然后应用lineinfile并加载它
干杯您发现,
include_vars
需要一个包含顶层dict键的文件。但在ansible中还有其他读取yaml文件的方法
如果无法更改文件,最简单的方法是使用和读取变量中的内容
下面是一个示例剧本。对于这个测试,上面的示例数据存储在与剧本相同的文件夹中。相应地调整
---
-主机:本地主机
收集事实:错误
变量:
管理员:{{lookup('file','admins.yml')| from_yaml}
任务:
-名称:显示管理员用户列表
调试:
变量:管理员
其中:
PLAY [localhost] ***********************************************************************************************************************************************************************************************************************
TASK [Show admin users list] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"admins": [
{
"name": "bob McBob",
"ssh_keys": [
"ssh-rsa ..."
],
"user": "bob"
},
{
"name": "fred McFred",
"ssh_keys": [
"ssh-rsa ..."
],
"user": "fred"
}
]
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
正如您所发现的,
include\u vars
需要一个包含顶层dict键的文件。但在ansible中还有其他读取yaml文件的方法
如果无法更改文件,最简单的方法是使用和读取变量中的内容
下面是一个示例剧本。对于这个测试,上面的示例数据存储在与剧本相同的文件夹中。相应地调整
---
-主机:本地主机
收集事实:错误
变量:
管理员:{{lookup('file','admins.yml')| from_yaml}
任务:
-名称:显示管理员用户列表
调试:
变量:管理员
其中:
PLAY [localhost] ***********************************************************************************************************************************************************************************************************************
TASK [Show admin users list] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"admins": [
{
"name": "bob McBob",
"ssh_keys": [
"ssh-rsa ..."
],
"user": "bob"
},
{
"name": "fred McFred",
"ssh_keys": [
"ssh-rsa ..."
],
"user": "fred"
}
]
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0