将文件复制到 ansible 主机并替换自定义变量

Copy file to ansible host with custom variables substituted

我正在编写一个 ansible-playbook,它应该有助于为持续交付管道生成构建代理。除其他问题外,我还需要在此类代理上安装 oracle 客户端。我想做类似

的事情
- name: "Provide response file"
  copy: src=/custom.rsp dest=/opt/oracle 

在 custom.rsp 文件中,我有一些要替换的变量。通常,可以使用单独的 shell 命令来完成,如下所示:

- name: "Substitute Vars"
  shell: "sed 's|<PARAMETER>|<VALUE>|g' -i /opt/oracle/custom.rsp"

不过我不喜欢。应该有一种更方便的方法来做到这一点。有人给我提示吗?

您想使用 template 而不是复制静态文件。

此外,当使用复制或模板模块时,dest 参数是完整路径和文件名,而不仅仅是路径。所以如果你想在目录 /opt/oracle 中得到 custom.rsp 的副本,那么你需要这样做:

- name: "Provide response file"
  template: src=/custom.rsp dest=/opt/oracle/custom.rsp

我将用一个例子来扩展 Bruce 的回答: 这是我的一部分 inventory.yaml:

kafka_stage:
  children:
    kafka_with_zookeeper_stage:
    kafka_only_stage:
  vars:
    zookeeper_hosts: "kafka-stage01:2181,kafka-stage02:2181,kafka-stage03:2181"
kafka_with_zookeeper_stage:
  hosts:
    kafka-stage01:
      broker_id: 0
    kafka-stage02:
      broker_id: 1
  vars:
    services:
      kafka:
      zookeeper:

这是配置文件的一部分:

# The id of the broker. This must be set to a unique integer for each broker.
broker.id={{ broker_id }}
# {{ zookeeper_hosts }}
advertised.listeners=PLAINTEXT://{{ ansible_host }}:9092
# {{ services }}

剧本中的这个命令:

- name: Copy to Host
  ansible.builtin.template:
    src: my_configfile.properties
    dest: /tmp/hejsan.properties

在远程主机 kafka-stage02 上给我这个:

# The id of the broker. This must be set to a unique integer for each broker.
broker.id=1
# kafka-stage01:2181,kafka-stage02:2181,kafka-stage03:2181
advertised.listeners=PLAINTEXT://kafka-stage02:9092
# {'kafka': None, 'zookeeper': None}