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

时间:2015-11-04 17:26:01

标签: copy ansible ansible-playbook

我正在开发一个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"
但是,我不喜欢它。应该有一种更方便的方法来做到这一点。有人给我一个暗示吗?

2 个答案:

答案 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}