首页 > 解决方案 > 如何确保 ansible playbook 使用来自不同文件的主机名或从命令行使用它?

问题描述

我有一个从命令行下面运行的 ansible 剧本,它工作正常。

ansible-playbook -e 'host_key_checking=False' -e 'num_serial=10' test.yml -u golden

它适用于/etc/ansible/hosts文件中指定的主机。但是有什么方法可以直接在命令行上传递主机名或在其中逐行生成带有主机名的新文件,以便我的 ansible 可以处理该主机名而不是使用默认/etc/ansible/hosts文件?

下面是我的ansible文件:

# This will copy files
---
- hosts: servers
  serial: "{{ num_serial }}"
  tasks:
      - name: copy files to server
        shell: "(ssh -o StrictHostKeyChecking=no abc.host.com 'ls -1 /var/lib/workspace/data/*' | parallel -j20 'scp -o StrictHostKeyChecking=no abc.host.com:{} /data/holder/files/procs/')"

      - name: sleep for 3 sec
        pause: seconds=3

现在我想生成一个新文件,该文件将逐行包含所有服务器,然后我的 ansible play book 代替该文件工作?这可能吗?

我正在运行 ansible 2.6.3 版本。

标签: ansible

解决方案


这个问题可能已经回答了,但只会再次回答以增加更多点。

始终在命令行中寻找与参数相关的帮助或所需的任何信息。

ansible-playbook --help | grep inventory 

  -i INVENTORY, --inventory=INVENTORY, --inventory-file=INVENTORY
                        specify inventory host path or comma separated host
                        list. --inventory-file is deprecated

对文件格式的 ansible 库存的支持有两个扩展:

  1. yml
  2. ini --> 指定 ini 扩展名不是强制性的。

清单链接提供了有关格式的更多信息,在选择要实施的任何格式之前应参考。

添加@HermanTheGermanHesse 答案,以便涵盖所有可能的点。

如果没有使用上述内容/您不想使用。Ansible 最后将引用 ansible.cfg 的主机和变量定义。

[defaults]
inventory = path/to/hosts
From here:

ansible.cfg 文件将按以下顺序选择:

  1. ANSIBLE_CONFIG 环境变量
  2. /ansible.cfg
  3. ~/.ansible.cfg
  4. /etc/ansible/ansible.cfg

推荐阅读