我正在扮演一个角色,以自动完成vertica的安装。该角色在3节点群集上运行。我被困在2个地方。
我正在尝试运行以下命令,我想从我的组清单中传递主机,我传递了run_once,它将仅在第一台主机上运行(这是我想要的),但如何传递所有3个主机(例如--hosts xx.xxx.xx.xx,xx.xxx.xx.xx,xx.xxx.xx.xx)如何实现?
我希望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
正在寻找建议!
谢谢!
答案 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
设置为本地系统上密钥的路径。