Configuration 是否可以进行动态查找
我有一个环境,其中一个用户的sudo密码在几个服务器上是不同的。这可以看作是一种安全功能:-D 我想将sudo密码(在时间点将保险库/安全性放在一边)保存在一个文件中:Configuration 是否可以进行动态查找,configuration,ansible,Configuration,Ansible,我有一个环境,其中一个用户的sudo密码在几个服务器上是不同的。这可以看作是一种安全功能:-D 我想将sudo密码(在时间点将保险库/安全性放在一边)保存在一个文件中: 苏多普德酒店 苏多普德酒店 苏多普德酒店 在我的ansible剧本中,我使用了类似的东西: --- - hosts: all tasks: - include: '{{ inventory_hostname }}' vars: ansible_become: true ansible_become_us
- 苏多普德酒店
- 苏多普德酒店
- 苏多普德酒店
---
- hosts: all
tasks:
- include: '{{ inventory_hostname }}'
vars:
ansible_become: true
ansible_become_user: root
ansible_become_pass: "{{ lookup('file','{{ inventory_hostname }}.sudopwd') }}"
如果每台主机有一个文件,它就工作得很好。
现在我怎样才能让它更“动态”
比如说,我有一个名为searchsudopwd
的脚本,它是一个简单的bash脚本(实际上可以是任何语言)
我如何将其与ansible一起使用?我的剧本中有什么需要修改才能发挥作用
我试过这样的方法:
---
- hosts: all
tasks:
- include: '{{ inventory_hostname }}'
vars:
ansible_become: true
ansible_become_user: root
ansible_become_pass: "{{ item }}"
with_lines: searchsudopwd '{{ inventory_hostname }}'
但它不起作用
如果我的想法不起作用,有没有办法像“默认”密码一样,只获取特定主机的密码
谢谢你的帮助和时间 我认为,如果需要,最好将密码放在各个主机变量文件中,并将默认密码放在组变量/all中。把它都放在保险库里。(但是您有一个Ansible Vault的共享密码。) 我有一个名为“ml01”的主机,所以我更改了您的脚本:
$ cat /home/jscheible/searchsudopwd
#!/usr/bin/env bash
if [[ "$1" == "ml01" ]]; then
echo "pwd1"
elif [[ "$1" == "host2" ]]; then
echo "pwd2"
else
echo "default pwd"
fi
要使用密码调用该本地程序,只需在游戏中将其调用为delegate\u To:localhost
:
$ cat show_pwd
---
- hosts: all
connection: ssh
gather_facts: false
tasks:
- name: Do passwd lookup
command: /home/jscheible/searchsudopwd {{ inventory_hostname }}
delegate_to: localhost
register: result
- name: Show results
debug:
var: result.stdout
delegate_to: localhost
以下是我的测试结果:
$ ansible-playbook show_pwd
PLAY [all] *********************************************************************
TASK [Do passwd lookup] ********************************************************
changed: [al01 -> localhost]
changed: [ml01 -> localhost]
TASK [Show results] ************************************************************
ok: [al01 -> localhost] => {
"result.stdout": "default pwd"
}
ok: [ml01 -> localhost] => {
"result.stdout": "pwd1"
}
PLAY RECAP *********************************************************************
我认为,如果需要,最好将密码放在单独的主机变量文件中,并将默认密码放在组变量/all中。把它都放在保险库里。(但是您有一个Ansible Vault的共享密码。) 我有一个名为“ml01”的主机,所以我更改了您的脚本:
$ cat /home/jscheible/searchsudopwd
#!/usr/bin/env bash
if [[ "$1" == "ml01" ]]; then
echo "pwd1"
elif [[ "$1" == "host2" ]]; then
echo "pwd2"
else
echo "default pwd"
fi
要使用密码调用该本地程序,只需在游戏中将其调用为delegate\u To:localhost
:
$ cat show_pwd
---
- hosts: all
connection: ssh
gather_facts: false
tasks:
- name: Do passwd lookup
command: /home/jscheible/searchsudopwd {{ inventory_hostname }}
delegate_to: localhost
register: result
- name: Show results
debug:
var: result.stdout
delegate_to: localhost
以下是我的测试结果:
$ ansible-playbook show_pwd
PLAY [all] *********************************************************************
TASK [Do passwd lookup] ********************************************************
changed: [al01 -> localhost]
changed: [ml01 -> localhost]
TASK [Show results] ************************************************************
ok: [al01 -> localhost] => {
"result.stdout": "default pwd"
}
ok: [ml01 -> localhost] => {
"result.stdout": "pwd1"
}
PLAY RECAP *********************************************************************
有很多便利的
实际上,您可以将文件
查找替换为管道
查找:
ansible_become_pass: "{{ lookup('pipe','/path_on_ansible_machine/searchsudopwd '+inventory_hostname) }}"
有很多便利的
实际上,您可以将文件
查找替换为管道
查找:
ansible_become_pass: "{{ lookup('pipe','/path_on_ansible_machine/searchsudopwd '+inventory_hostname) }}"
谢谢:-)我不知道“主持人”!我已经测试过了,它的工作原理和我预期的一样!我没有检查你答案的其他部分,但与主机/组变量解决方案相比似乎“太复杂了”。如果我有足够的声誉,我将+1你的答案!谢谢:-)我不知道“主持人”!我已经测试过了,它的工作原理和我预期的一样!我没有检查你答案的其他部分,但与主机/组变量解决方案相比似乎“太复杂了”。如果我有足够的声誉,我将+1你的答案!