【问题标题】:Is it possible to set Ansible Vars from existing facts?是否可以根据现有事实设置 Ansible Vars?
【发布时间】:2021-02-04 21:33:11
【问题描述】:

我发现很容易描述我想要做什么来展示我如何尝试实现它,如下所示。

在一个 playbook1.yml 中,我有:

- name: set facts with ssh connecton details
  set_fact:
    ssh_user: "user01"
    ssh_pass: "passw0rd"

在我的 playbook2.yml 中,我想做类似的事情:

import_playbook: playbook1.yml
Vars:
  ansible_user: "{{ ssh_user }}"
  ansible_ssh_pass: "{{ ssh_pass }}"

在此之后,我在 playbook2.yml 中的任务应该在连接到我的远程主机时尝试使用 sshpass,获取用户并为上面的“ansible_*”变量传递。

可以吗?显然这不起作用,我无法找到解决方案。

为 ssh Vars 设置 Ansible 事实确实有效 - 显然它需要 Vars 来触发 sshpass 并使用密码进行远程访问。

我知道 ssh 密钥是可行的方法,并且正在涵盖,但是我还需要针对此特定用例的解决方案。

提前感谢您的帮助。

【问题讨论】:

标签: variables ansible sshpass


【解决方案1】:

目前我找到的唯一解决方案是:

剧本1: 设置事实,并保存到文件中

在 playbook2 上:

Vars:
  ansible_user: "{{lookup(file',('userfactsfile')}}"
  ansible_ssh_pass: "{{lookup(file',('passfactsfile')}}"

Tasks:
- import_playbook: playbook1.yml

...
my actions here
...
delete userfactsfile
delete passfactsfile

还有一个问题:密码在 playbook 运行期间以明文形式保存。如果在此过程中出现意外中断,密码文件可能会存储在服务器中(这是同一工作中要解决的主要问题)。

可接受的解决方案是: 在将密码保存到 paybook1 中之前加密密码,但是,我遇到了一些技术挑战(我在 Ansible 中很菜鸟),但如果我能实现,仍然是一个可行的解决方案。 playbook1 中的加密将使用实际密码作为密码。事实上,密码在两个 playbook 中都是持久的。 在 playbook2 中,此密码将用于解密 Vars 查找中的密码文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-09
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多