如何在2台服务器上修改同一文件的不同值

时间:2019-07-17 10:01:58

标签: ansible

两个服务器的同一目录中存在相同的文件。我想分别修改此文件中的某个值,但是内容不同,如何修改

服务器1:

# /opt/center/conf/properties
kafka=test

服务器2:

# /opt/center/conf/properties
kafka=test

现在,我想将它们更改为增量值(node-all的数量)并将其修改为以下值(如果我的node-all有2个)

↓↓↓↓↓↓↓↓

服务器1:

# /opt/center/conf/properties
kafka=node1

服务器2:

# /opt/center/conf/properties
kafka=node2

我尝试了这种方法,但是他修改的两个文件具有相同的内容,这不是我想要的。

- name: modify properties
  replace:
    path=/opt/center/conf/properties
    regexp="^(kafka=+)[^\n]+$"
    replace="kafka=node{{index+1}}"
  loop: "{{groups['node-all']}}"
  run_once: true
  loop_control:
    index_var: index

结果:

服务器1:

# /opt/center/conf/properties
kafka=node2

服务器2:

# /opt/center/conf/properties
kafka=node2

1 个答案:

答案 0 :(得分:1)

您可以使用hostvars变量,从而避免算术运算。

主机文件

[node-all]
node1 ansible_ssh_host=10.10.10.72 kafkaname="node01"
node2 ansible_ssh_host=10.10.10.73 kafkaname="node02"

Playbook变成

- name: modify properties
  replace:
    path=/opt/center/conf/properties
    regexp="^(kafka=+)[^\n]+$"
    replace="kafka={{ hostvars[inventory_hostname].kafkaname }}"

更新,如果不想更改主机文件,请根据需要添加+1。

- name: modify properties
  replace:
    path=/opt/center/conf/properties
    regexp="^(kafka=+)[^\n]+$"
    replace="kafka=node{{ groups['all'].index(inventory_hostname) }}"