如何使用Ansible主机组运行Glusterfs-cli命令“peer probe”,条件为“when”

时间:2017-06-18 12:17:20

标签: ansible glusterfs

我尝试创建ansible角色,以便在AWS Centos实例中创建glusterfs卷副本。我成功创建了卷并安装了glusterfs。我试图在主机组的每台机器上使用这个topic建议运行“gluster peer probe”。 我有在主机组上运行“glusterfs”角色的剧本:

[Server]
devserver1.net ansible_user=ec2-user ansible_ssh_private_key_file=/some.pem
devserver2.net ansible_user=ec2-user ansible_ssh_private_key_file=/some.pem

当这个任务在这个主机组的特定主机内运行时,我现在正在尝试运行“gluster peer probe ...”。像那样:

- name: gluster peer probe in server1
  shell: gluster peer probe {{ stackName }}server2.net
  when: "'{{ stackName }}server1.net' == {{ inventory_hostname }}"

- name: gluster peer probe in server2
  shell: gluster peer probe {{ stackName }}server1.net
  when: "'{{ stackName }}server2.net' == {{ inventory_hostname }}"

StackName是playbook的预定义库存“dev”变量 它失败了,错误:

  

失败! => {“failed”:true,“msg”:“条件检查”{{   stackName}} inventory_hostname中的server1.net失败了。该   错误是:评估条件时出错({{stackName   inventory_hostname中的server1.net:'server1'是   undefined \ n \ n错误似乎已经出现   'ansible / roles / glusterfs / tasks / main.yml':第69行,第3列,但是   可能在文件的其他位置,具体取决于确切的语法   问题。\ n \ n违规行似乎是:\ n \ n \ n-名称:gluster   来自server1的对等探测器\ n ^ here \ n“}

有人建议我怎么做吗?或者我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

你不应该在Ansible的when条件中添加Jinja2模板(带表达式)。整个参数应该是单个Jinja2表达式本身:

when: "stackName + 'server1.net' == inventory_hostname"

答案 1 :(得分:0)

我们这样做的方式(并为我们工作)

- name: Form a cluster.
  command: "gluster peer probe {{ peernode }}"
  loop: "{{ ansible_play_hosts | flatten(levels=1) }}"
  loop_control:
    loop_var: peernode
    pause: 2
  register: glusterpeerprobe
  become: true
  run_once: true
  any_errors_fatal: true
  changed_when: "'peer probe: success.' in glusterpeerprobe.stdout_lines"