Ansible:更改playbooks位置

4

我把所有的playbook放在了/etc/ansible/playbooks目录中,我想在电脑的任何地方执行它们。

我尝试在ansible.cfg文件中配置playbook_dir变量。

[defaults]
playbook_dir = /etc/ansible/playbooks/

我尝试将ANSIBLE_PLAYBOOK_DIR变量放入~/.bashrc文件中

export ANSIBLE_PLAYBOOK_DIR=/etc/ansible/playbooks/

但是在这两种情况下,我仅仅得到了相同的错误:

nor@nor:~$ ansible-playbook test3.yaml
ERROR! the playbook: test3.yaml could not be found

这是我的 Ansible 版本:
ansible 2.9.7
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/nor/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.7/dist-packages/ansible
  executable location = /usr/local/bin/ansible
  python version = 3.7.3 (default, Oct  7 2019, 12:56:13) [GCC 8.3.0]

有人知道这个问题是什么,以及如何解决吗?

3个回答

1

根据https://manpages.debian.org/testing/ansible/ansible-inventory.1.en.html :

--playbook-dir 'BASEDIR'

由于此工具不使用playbooks,因此用此选项作为替代playbook目录。这将设置许多功能的相对路径,包括roles/group_vars等。

这意味着ANSIBLE_PLAYBOOK_DIR不能用作指定playbook的绝对/相对路径的替换,而是告诉playbook应在哪里查找角色、主机/组变量等。

你想要实现的目标在ansible方面没有解决方案,你需要通过相应地配置你的shell profile来实现此目标。 在你的 .bashrc 文件中设置以下内容:

export playbooks_dir=/path/to/playbooks

当您调用playbook时,请使用ansible-playbook $playbooks_dir/test3.yml


0

PLAYBOOK_DIR 说:

“许多非playbook CLI都有一个--playbook-dir参数;这将设置其默认值。”

不幸的是,文档中没有任何提示,“非playbook CLI”可能是什么。显然,ansible-playbook不是其中之一。


顺便说一下,如果您正在寻找一个面向命令行的框架,请尝试ansible-runner。例如,导出private_data_dir的位置。

shell> export ansible_private=/path/to/<private-data-dir>

然后运行playbook

shell> ansible-runner -p playbook.yml run $ansible_private

请问您能否详细说明一下如何使用ansible-runner来实现作者的问题? - Ashark
1
我已将示例放入答案中。要从预定义目录运行playbooks,需要使用外部工具。因此,出于明显的原因,可能更喜欢使用ansible-runner。对于这个问题没有解决方案,因此引入了“值得一提”的介绍(FWIW)。 - Vladimir Botka

0

正如其他人所说,ANSIBLE_PLAYBOOK_DIR 用于设置 roles/、files/ 等的相对目录。在我看来,它并不是非常有用。

如果我理解 OP 的意思,这是我使用所有版本的 Ansible 实现类似结果的方法...

PPWD=$PWD cd /my/playbook/dir && ansible-playbook my_playbook.yml; cd $PPWD

解释:

PPWD=$PWD 是为了记住当前/现在/上一个工作目录,然后 cd /my/playbook/dir,如果成功则运行 ansible-playbook my_playbook.yml(一切都是相对于那里的);无论如何,始终要切换回先前的工作目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接