如何在没有跳台主机的情况下运行相同的剧本和清单?

时间:2020-01-13 17:56:21

标签: ssh ansible

我的剧本和存货很少,我需要从2个不同的位置运行它们。

一个需要一个主持人,另一个不需要。

我已经在清单中定义了Jumphost,但是当尝试在本地的Playbook上运行该剧本时(不需要JumpHost)将会失败。

有没有一种方法可以根据主机名加载与SSH相关的var?

1 个答案:

答案 0 :(得分:-1)

如果您只需要在本地主机上运行内容,则可以执行特定任务:

尝试local_action。例如:

- name: copy file
  local_action:
    module: copy
    src: stfile
    dest: /path/to/testfile

或者您可以使用proxy_to:

- name: copy a file
  delegate_to: localhost
  copy:
    src: testfile
    dest: /path/to/testfile

编辑:好的,看来我误解了您的问题。您的问题似乎是您是在两个不同的主机上运行剧本,一个运行正常,一个运行失败,因此您需要一些逻辑来根据主机选择不同的变量?

您可以使用when条件将逻辑包括在任务中:

     - name: get ansible hostname    
       local_action:
          module: shell
          cmd: hostname
        register: hostname_output

     - shell: echo '{{variablefornonjumpbox}}' 
       when: hostname_output.stdout.find('jumpbox') != -1"

如果您需要基于主机名更改SSH目标和详细信息,则可以使用特殊变量,例如本页底部的变量: https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html

希望这会有所帮助。如果没有,我将需要澄清所使用的变量和看到的错误。