获取本地ip地址并在目标文件中替换为值

时间:2018-11-29 20:15:57

标签: ansible ansible-template

我正在执行以下任务,并将目标文件中的全部内容替换为ip地址

---
- hosts: localhost
  connection: local
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - debug: var=ansible_default_ipv4.address
    - copy: content="{{ ansible_all_ipv4_addresses }}" dest=/root/curator.yml

我在curator.yml中有变量,我想用IP地址更新变量{{ansible_default_ipv4.address}}。

---
client:
  hosts:
    - {{ ansible_default_ipv4.address }}
  port: 9200
  url_prefix:
  use_ssl: False
  ssl_no_validate: False
  http_auth:
  timeout: 30
  master_only: False

logging:
  loglevel: INFO
  logfile:
  logformat: default
  blacklist: ['elasticsearch', 'urllib3']

当我执行上述剧本任务时,它会将debugator输出中的ip地址替换为curator.yml中的全部信息

PLAY [本地主机] *********************************************** ****************************************************** *******************

任务[聚会事实] ********************************************** ****************************************************** ************** 好的:[localhost]

任务[调试] *********************************************** ****************************************************** *********************** 好的:[localhost] => {     “ ansible_all_ipv4_addresses”:[         “ 10.0.0.5”     ] }

任务[调试] *********************************************** ****************************************************** *********************** 好的:[localhost] => {     “ ansible_default_ipv4.address”:“ 10.0.0.5” }

任务[副本] *********************************************** ****************************************************** ************************ 更改为:[localhost]

PLAY RECAP ********************************************* ****************************************************** *********************** 本地主机:ok = 4更改= 1不可达= 0失败= 0

我也被包括在下面的任务中,但是看起来不起作用

#- name: rewrite
#  vars:
#    ansible_default_ipv4.address: "{{ ansible_default_ipv4.address[0] }}"
#  template:
#    src: templates/curator.yml.j2
#    dest: /root/curator.yml

1 个答案:

答案 0 :(得分:0)

复制和模板任务有问题:

  1. 复制任务-使用content参数时,它将“将文件内容直接设置为指定值” copy_module

  2. 模板任务-您无法使用。(“。dot”)表示法定义/更新vars(甚至set_fact),甚至不需要,因为ansible_default_ipv4.address变量已经定义并设置该值。

这将起作用:

---
- name: Update ip
  hosts: 127.0.0.1
  connection: local
  tasks:
    - debug: var=ansible_all_ipv4_addresses
    - debug: var=ansible_default_ipv4.address
    - name: Template file with ip
      template:
        src: templates/curator.yml.j2
        dest: /root/curator.yml
...