【问题标题】:Accessing 2 remote servers in rundeck ansible playbook Inline Workflow在 rundeck ansible playbook Inline Workflow 中访问 2 个远程服务器
【发布时间】:2020-02-20 20:01:44
【问题描述】:

我有一个 ansible 作业,它在一个远程服务器 (remote1) 上获取信息,然后在另一台远程服务器 (remote2) 上使用该信息。

在 Rundeck 中,我可以成功地分别从每个服务器获取信息。

对于 remote1(始终是同一台服务器),内联 playbook 如下所示:

---

- hosts: ${option.master}
  gather_facts: false

  tasks:

    - shell: cat /etc/redhat-release
      register: redhat_rel
    - debug: msg={{ redhat_rel.stdout }}

额外的 ansible 参数是:

--limit "${option.master}" -i /etc/ansible/hosts,${option.master}:5555

对于远程 2(在选项部分调用的不同服务器,内联剧本如下所示:

---

- hosts: all
  gather_facts: false

  tasks:

    - shell: cat /etc/redhat-release
      register: redhat_rel2
    - debug: msg={{ redhat_rel2.stdout }}

额外的 ansible 参数是:

--limit "${option.hostitem}" -i ${option.hostitem}, -e "ansible_user=${option.username} ansible_port=${option.port}"

但我不能将它们组合在一个剧本中,例如:

---

- hosts: ${option.master}
  gather_facts: false

  tasks:

    - shell: cat /etc/redhat-release
      register: redhat_rel
    - debug: msg={{ redhat_rel.stdout }}

- hosts: all
  gather_facts: false

  tasks:

    - shell: cat /etc/redhat-release
      register: redhat_rel2
    - debug: msg={{ redhat_rel2.stdout }}

额外的 ansible 参数是:

--limit "${option.master} ${option.hostitem}" -i /etc/ansible/hosts,$(option.master}:21716, ${option.hostitem}, -e "ansible_user=${option.username} ansible_port=${option.port}"

Rundeck 错误是:

ansible-playbook: error: unrecognized arguments: server.com,
14:55:10        Failed: AnsibleNonZero: ERROR: Ansible execution returned with non zero code.
14:55:10        Execution failed: 57800 in project Automation: [Workflow result: , step failures: {1=Dispatch failed on 1 nodes: [rdprod01: AnsibleNonZero: ERROR: Ansible execution returned with non zero code. + {dataContext=MultiDataContextImpl(map={}, base=null)} ]}, Node failures: {rdprod01=[AnsibleNonZero: ERROR: Ansible execution returned with non zero code. + {dataContext=MultiDataContextImpl(map={}, base=null)} ]}, status: failed]

请注意,我可以在命令行上运行 Ansible 脚本,但当我尝试将其与 Rundeck 集成时却不行。

请指教。

谢谢

【问题讨论】:

    标签: ansible rundeck


    【解决方案1】:

    我认为最好的方法是创建两个作业(对于每个剧本,分派到各个节点)并使用 Job Reference Step 从父作业调用该作业。你可以看到一个很好的例子hereHerehere 你可以看到为什么这是一个好方法。

    【讨论】:

    • 如何在内联工作流节点步骤之间传递变量。第 1 步:-主机:${option.master} 任务:-名称:在主 shell 上获取数据:/get/some/data 寄存器:this_data -名称:使用变量 add_host 注册虚拟主机:名称:“DUMMY_HOST”MASTER_DATA:“ {{ this_data.stdout }}" 第 2 步:-主机:${option.client} 任务:-名称:主 shell 的 Echo 输出:echo {{ hostvars['DUMMY_HOST']['MASTER_DATA'] }} 寄存器:MASTER_DATA_VAR我得到未定义的变量错误。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2016-01-07
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-21
    相关资源
    最近更新 更多