ansible-playbook动态变量与引用(lookups)

之前的文章介绍了ansible-playbook的静态变量,其实ansible还支持从外部数据拉取信息,即动态获取变量。

1.lookups file

原理:使用python的codecs.open打开文件然后把结果返回给变量。

新建lookup.yaml文件,内容如下:

---

- hosts: all

  gather_facts: False

  vars:

  contents: "{{ lookup('file', '/etc/sysconfig/network-scripts/ifcfg-lo') }}"

  tasks:

  - name: debug lookups

    debug: msg="The content is {% for i in contents.split("\n") %} {{ i }} {% endfor %}"

运行结果如下:

2.lookups password

这种方式可以对传入的数据进行加密,修改lookup.yaml文件,内容如下:

---

- hosts: all

  gather_facts: False

  vars:

   contents: "{{ lookup('password', 'Ansible') }}"

  tasks:

  - name: debug lookups

    debug: msg="First contents is {{ contents }} "

运行结果如下:

3.lookups pipe

原理:使用python的subprocess.Popen模块,在被管理节点上执行命令,然后把结果传递给变量。

修改lookup.yaml文件,内容如下:

---

- hosts: all

  gather_facts: False

  vars:

  contents: "{{ lookup('pipe', 'date +%Y-%m-%d') }}"

  tasks:

  - name: debug lookups

    debug: msg="The content is {% for i in contents.split("\n") %} {{ i }} {% endfor %}"

运行结果如下:

4.lookups redis_kv

该方式是从Redis数据库中get数据,因为需要控制节点连接Redis,所以需要安装Redis Python库。在本地安装了一个Redis服务器,然后给Ansible设置了一个值。修改lookup.yaml文件,内容如下:

---

- hosts: all

  gather_facts: False

  vars:

  contents: "{{ lookup('redis_kv', 'redis://localhost:6379, ansible') }}"

  tasks:

  - name: debug lookups

    debug: msg="The content is {% for i in contents.split("\n") %} {{ i }} {% endfor %}"

由于实验环境的限制,这里就不放运行后的截图了。

5.lookups template

template跟file方式有点类似,都是读取文件,但是template在读取文件之前需要把jinja模板渲染完后再读取,下面我们新建一个jinja模板文件lookups.j2,内容如下:

worker_processes {{ ansible_processor_cores }}

IPaddress {{ ansible_default_ipv4.address }}

修改lookup.yaml文件,内容如下:

---

- hosts: all

  gather_facts: True

  vars:

  contents: "{{ lookup('template', 'template.j2') }}"

  tasks:

  - name: debug lookups

    debug: msg="The content is {% for i in contents.split("\n") %} {{ i }} {% endfor %}"

gather_facts 参数需要设置为 True,不然无法获取到主机的信息。运行结果如下:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容