如何从Ansible剧本中确定命令行选项

时间:2019-09-26 17:48:10

标签: ansible

我需要确定某人在执行其剧本时是否使用过--ask-vault-pass选项。如果他们没有向ansible-playbook发出--ask-vault-pass命令,请执行失败。

如果有人像这样奔跑就通过:

ansible-playbook -i myinv.ini test.yml --ask-vault-pass

如果有人像这样奔跑就失败:

ansible-playbook -i myinv.ini test.yml

请注意,这不是我可以验证的extra-vars

1 个答案:

答案 0 :(得分:1)

以下内容未检测到--ask-vaul-pass选项,但仍然可以满足您的要求。无论如何,请注意仅检测到此选项不足以满足您的需要,因为您可以通过不同的方式提供保险库密码(--vault-passwork-file选项,环境变量...)

基本上,我正在测试一个我知道已编码的变量,如果我们无法解码,则会使剧本失败。我以测试为目标针对localhost,但是您可以针对任何组。这就是为什么我在测试任务上使用run_once以确保我们仅对游戏中的所有主机进行一次测试的原因。我还使用no_log来确保我们不会在屏幕上泄漏任何敏感数据。

- hosts: localhost
  gather_facts: false

  vars:
    test_var: !vault |
      $ANSIBLE_VAULT;1.1;AES256
      <encrypted data goes here>

  pre_tasks:
    - block:
        - name: verify we can decode vault
          debug:
            var: test_var
          no_log: true
          run_once: true
      rescue:
        - name: fail playbook if decode failed
          fail:
            msg: You did not provide a vault pass or it is not recognized
  tasks:
    - name: a task
      debug:
        msg: I'll be played if pre_tasks are ok

这能在您遇到的情况中解决这个问题吗?