我尝试创建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“}
有人建议我怎么做吗?或者我在这里做错了什么?
答案 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"