我正在开发一个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"
但是,我不喜欢它。应该有一种更方便的方法来做到这一点。有人给我一个暗示吗?
答案 0 :(得分:7)
您希望使用template而不是复制静态文件。
此外,使用副本或模板模块时,dest
参数是完整路径AND文件名,而不仅仅是路径。因此,如果您想在目录/ opt / oracle中获得custom.rsp
的副本,那么您需要这样做:
- name: "Provide response file"
template: src=/custom.rsp dest=/opt/oracle/custom.rsp
答案 1 :(得分:1)
我将用一个例子来扩展布鲁斯的回答: 这是我的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}