当前位置: 首页 > 知识库问答 >
问题:

如何组合每个主机的多个VAR文件?

澹台蕴藉
2023-03-14

我有一个在多个服务器上运行的剧本。所有服务器都需要指定sudo密码,该密码特定于运行Playbook的每个用户。在运行playbook时,我不能使用--ask-bare-pass,因为服务器上的sudo密码不同。这与另一个关于多个sudo密码的问题中的情况相同。

一个可行的解决方案是在host_vars中指定ansible_bece_pass:

# host_vars/prod01.yml
ansible_become_pass: secret_prod01_password
domain: prod01.example.com
# host_vars/prod02.yml
ansible_become_pass: secret_prod02_password
domain: prod02.example.com

除了ANSIBLE_BEOME_PASS之外,每个主机还定义了其他变量。这些变量应该提交给git存储库。但是,由于ANSIBLE_BOOME_PASS特定于运行playbook的每个用户,所以我希望有一个单独的文件(理想情况下是拱形的)来指定每个主机的密码。

我设想如下:

# host_vars/prod01.yml: shared in git
domain: prod01.example.com
# host_vars/prod01_secret.yml: in .gitignore
ansible_become_pass: secret_prod01_password

我想在运行PlayBook时,Ansible会将这两个文件组合在一起。这在Ansible有可能吗?如果是,怎么做?

共有1个答案

叶元凯
2023-03-14

您应该能够将include_vars任务与inventory_hostname或ansible_hostname变量一起使用。例如:

- name: Include host specific variables
  include_vars: "{{ ansible_hostname }}.yml"

- name: Include host specific secret variables
  include_vars: "{{ ansible_hostname }}_secret.yml"

一个更好的解决方案是解决用户在不同主机上拥有唯一密码的问题。

 类似资料:
  • 我是java新手,我在VSCODE上编码。我创建2.java文件,如下图所示: 这些是每个文件: Main.java:

  • 如您所知,您可以使用“主机”文件将主机名映射到IP地址。这非常有用,尤其是在您开发时,因为您可以更改项目1的localhost。 这部分很清楚,但不幸的是,我不知道如何设置它来打开具有相同IP的多个项目。我尝试了一些没有成功的事情,例如: 我查了一些相关的问题,但找不到答案。那么,我能以某种方式完成我想做的事情吗?有什么建议吗?

  • 在我的应用程序中,我调用了4个不同的API(都在不同的主机上)。我希望为每个主机和其他参数(如保持活动状态等)提供一个单独的连接池。我可以使用单个WebClient实现这一点,还是需要4个不同的WebClient实例? 另外,为每个主机设置一个单独的连接池有意义吗?如果没有,我可以使用单个WebClient实现这一点吗?

  • 问题内容: 在运行Apache和PHP 5的一台Linux服务器上,我们有多个带有单独日志文件的虚拟主机。我们似乎无法将虚拟主机之间的php分开。 覆盖在此设置的似乎没有做任何事情。 有没有办法为每个虚拟主机设置单独的php ? 问题答案: 要设置 Apache ( 而不是PHP )日志,最简单的方法是: 如果没有前导“ /”,则假定是相对的。 Apache错误日志页面