如何通过ansible传递群组主机?

时间:2019-04-05 18:54:35

标签: ansible vertica ansible-2.x

我正在扮演一个角色,以自动完成vertica的安装。该角色在3节点群集上运行。我被困在2个地方。

  1. 我正在尝试运行以下命令,我想从我的组清单中传递主机,我传递了run_once,它将仅在第一台主机上运行(这是我想要的),但如何传递所有3个主机(例如--hosts xx.xxx.xx.xx,xx.xxx.xx.xx,xx.xxx.xx.xx)如何实现?

  2. 我希望Ansible使用我通过的pem密钥安装vertica。密钥应存储在哪里。

    - name: Install vertica
      command: /opt/vertica/sbin/install_vertica --hosts x.xx.xx.xx,xx.xxx.xx.xx,xx.xxx.xx.xx --rpm /opt/vertica-{{ vertica_version }}.x86_64.RHEL6.rpm --dba-user-password-disabled --point-to-point --data-dir /vertica/data --ssh-identity x.pem
      when: vertica_already_installed|failed
      run_once: True
      become: yes
    

正在寻找建议!

谢谢!

1 个答案:

答案 0 :(得分:1)

  

我正在尝试运行以下命令,我想从组清单中传递主机...

Ansible为您提供groups变量。这是一本字典,其关键字是组名,值是每个组中主机的列表。因此,例如,如果您有一个名为vertica_servers的组,则可以这样编写:

- name: Install vertica
    command: /opt/vertica/sbin/install_vertica --hosts ','.join(groups.vertica_servers) ...
  

我希望Ansible使用我通过的pem密钥安装vertica。密钥应存储在哪里?

听起来您有ssh私钥,install_vertica命令将使用它来访问群集中的主机。首先,需要使该私钥在运行install_vertica命令的远程主机上可用。您可以使用copy任务来做到这一点:

- name: install private key
  copy:
    src: "{{ private_key_file }}"
    dest: "/root/.ssh/vertica_key.pem"
    mode: "0400"
    owner: root
    group: root

然后将该路径传递给您的install_vertica命令:

- name: Install vertica
    command: /opt/vertica/sbin/install_vertica --hosts ','.join(groups.vertica_servers) --ssh-identity /root/.ssh/vertica_key.pem

这假定您已将private_key_file设置为本地系统上密钥的路径。