2016-09-15 87 views
3

我想輸出用於調用ansible-playbook的命令行參數。例如,如果我這樣做如何訪問用於調用Ansible的命令行參數?

ansible-playbook foo.yml -e bar=quux

,我想有機會獲得上面的字符串,這樣我可以作爲一個任務做

- shell: slack_notify.sh "{{ ansible_cli_invocation }}"

其中ansible_cli_invocation是一個字符串價值"ansible-playbook foo.yml -e bar=quux"。有沒有辦法做到這一點?

+0

FYI有[鬆弛模塊(https://docs.ansible.com/ansible/slack_module.html),你可以改用你的shell腳本。 –

+0

@XiongChiamiov感謝您的提示! –

回答

3

我不確定你可以開箱即用。
但你可以寫一個微小的動作插件:

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_plugins/get_argv.py,也使一個文件./library/get_argv.py。 這會創建本地動作get_argv,其中使用參數列表填充argv事實。

然後在你的劇本:

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

我不得不在我正在運行的playbook的位置創建'action_plugins'和'library'文件夾(我嘗試將這些文件夾放在ansible project root中,並且找不到該模塊)。 –

+0

@opert他們應該在你執行ansible的文件夾中,或者你可以把它們放在其他地方,並在你的ansible.cfg中設置路徑 –

+0

我想我忘了補充說我有一個非標準的'。/ playbooks'子文件夾(因此我上面的評論)。感謝澄清;上游文檔確實提到你可以在ansible.cfg等文件夾中設置庫文件夾的位置,但如果可能的話,我會盡量避免進一步的自定義。 –