将文件复制到 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}
我正在编写一个 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}