Configuration 是否可以进行动态查找

Configuration 是否可以进行动态查找,configuration,ansible,Configuration,Ansible,我有一个环境,其中一个用户的sudo密码在几个服务器上是不同的。这可以看作是一种安全功能:-D 我想将sudo密码(在时间点将保险库/安全性放在一边)保存在一个文件中: 苏多普德酒店 苏多普德酒店 苏多普德酒店 在我的ansible剧本中,我使用了类似的东西: --- - hosts: all tasks: - include: '{{ inventory_hostname }}' vars: ansible_become: true ansible_become_us

我有一个环境,其中一个用户的sudo密码在几个服务器上是不同的。这可以看作是一种安全功能:-D

我想将sudo密码(在时间点将保险库/安全性放在一边)保存在一个文件中:

  • 苏多普德酒店
  • 苏多普德酒店
  • 苏多普德酒店
在我的ansible剧本中,我使用了类似的东西:

---
- 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你的答案!