如何访问用于调用Ansible的命令行参数?

如何访问用于调用Ansible的命令行参数?,ansible,command-line-interface,Ansible,Command Line Interface,我想打印出用于调用ansible playbook的命令行参数。例如,如果我这样做了 ansible playbook foo.yml-e bar=qux ,我想访问上面的字符串,以便我可以作为任务执行 -shell:slack\u notify.sh“{{ansible\u cli\u invocation}” 其中,ansible\u cli\u invocation是一个字符串,其值为“ansible playboo.yml-e bar=qux”。有什么方法可以做到这一点吗?我不确定你

我想打印出用于调用ansible playbook的命令行参数。例如,如果我这样做了

ansible playbook foo.yml-e bar=qux

,我想访问上面的字符串,以便我可以作为任务执行

-shell:slack\u notify.sh“{{ansible\u cli\u invocation}”


其中,
ansible\u cli\u invocation
是一个字符串,其值为
“ansible playboo.yml-e bar=qux”
。有什么方法可以做到这一点吗?

我不确定你是否可以开箱即用。
但你可以编写一个小动作插件:

from ansible.plugins.action import ActionBase
import sys

class ActionModule(ActionBase):

    TRANSFERS_FILES = False

    def run(self, tmp=None, task_vars=None):
        return { 'changed': False, 'ansible_facts': { 'argv': sys.argv } }
将其另存为
/action\u plugins/get_argv.py
,并创建一个空文件
/library/get_argv.py
。 这将创建本地操作
get_argv
,用参数列表填充
argv
事实

然后在你的剧本中:

- get_argv:
- shell: slack_notify.sh "{{ argv | join(' ') }}"

仅供参考,你可以用它来代替你的shell脚本。@XiongChiamiov谢谢你的提示!我必须在我正在运行的playbook位置创建
action\u插件
library
文件夹(我尝试将文件夹放在ansible项目根目录中,ansible找不到模块)@oper它们应该在执行ansible的文件夹中,或者您可以将它们放在其他地方,并在ansible中设置路径。cfgI假设我忘记添加我在非标准的
/playbooks
子文件夹中有playbooks(因此我在上面的评论)。感谢您的澄清;上游文档确实提到您可以在ansible.cfg之类的文件中设置库文件夹的位置,但如果可能的话,我会尽量避免进一步的自定义。@opert在这种情况下,您应该将它们放在
/playbooks/action\u plugins/
/playbooks/library
中,如果我在第一次评论中没有明确说明,但那正是我所做的;我只是在为子孙后代评论我是如何使它发挥作用的。