Ansible最佳实践布局下无法使用ansible-playbook运行playbooks

95次阅读
没有评论

问题描述

在使用Ansible时,遇到了一些问题。他按照Ansible最佳实践文档中的建议设置了目录结构,但是对如何实际使用这个结构不清楚。他的目录结构如下:

inventory/
  client1/
    group_vars/
      all
      credentials.yml <encrypted>
    router
    switch
    firewall
    host_vars/
      router1
      switch1
      firewall1
    hosts
  client2/
    group_vars/
      all
      credentials.yml <encrypted>
    router
    switch
    firewall
    host_vars/
      router1
      switch1
      firewall1
    hosts
roles/
  role1/
    tasks/
      main.yml
  role2/
    tasks/
      main.yml

他的hosts文件包含了路由器、交换机和防火墙的信息,如下所示:

[router]
router1 ansible_host=1.2.3.4

[switch]
switch1 ansible_host=5.6.7.8

[firewall]
firewall1 ansible_host=9.10.11.12

他想知道如何在运行ansible-playbook命令时选择特定的主机,以及如何指定位于根目录中的playbooks,而不需要每次都返回上级目录。此外,他还想知道如何加载额外的凭据文件或组变量。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

问题1:如何选择特定的主机运行ansible-playbook?

要选择特定的主机运行ansible-playbook,可以在play中使用hosts关键字指定主机。例如,要选择router1这个主机,可以这样写:

- hosts: router1

问题2:如何指定位于根目录中的playbooks?

要指定位于根目录中的playbooks,可以配置DEFAULT_HOST_LIST。例如,可以这样运行playbook:

ANSIBLE_HOSTS=$PWD/inventory/client1/hosts ansible-playbook myplaybook.yml

问题3:如何加载额外的凭据文件或组变量?

有很多方法可以加载额外的凭据文件或组变量。可以使用include_vars指令加载额外的凭据文件。对于组变量,可以根据需要选择适合的方法。详细的选项可以参考Variable precedence: Where should I put a variable?
以上是针对用户提出的问题的解决方案。希望对您有所帮助!

正文完