微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以根据现有事实设置 Ansible Vars?

如何解决是否可以根据现有事实设置 Ansible Vars?

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

一个 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_*”Vars。

能做到吗?显然这是行不通的,我无法找到解决方案。

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

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

在此先感谢您的帮助。

解决方法

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

剧本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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。