playbook之变量的使用

在平时运维工作中有时候需要根据不同的远程节点或者针对不同的IP的系统做不同的配置部署.Ansible可以根据不同的IP地址来对各个节点上的配置文件做不同的处理,这里就需要用到变量,变量可以定义在不同的地方。本节分为变量的定义和变量的使用两个部分

变量定义

1.定义在hosts主机中:如
[http_server:vars]
http_port=80
maxRequestsPerChild=808

2.在playbook中直接定义:如
- hosts:db_server
  vars:
  mysql_port: 3306

3.通过文件包含和角色定义变量:如
---
http_port: 8099
max_clients: 321

变量使用:

在模板文件中使用变量:
My amp goes to {{ max_amp_value }}

在playbooks文件中使用变量:
template: src=foo.cfg.j2 dest={{ remote_install_path }}/foo.cfg

在定义变量中引用其他变量:
- hosts: app_servers
  vars:
    app_path: "{{ base_path }}/22"

使用系统的信息:facts
ansible hostname -m setup

关闭facts
如果你确信不需要主机的任何facts信息,而且对远程节点主机都了解的很清楚,那么可以将其关闭。远程操作节点较多的时候,关闭facts会提升ansible的性能。只需要在play中设置如下:

- hosts: whatever
  gather_facts: no

注册变量:
一个任务的运行结果都可以保存到一个变量中,供稍后使用,有时候需要将运行的命令的角色保存起来,并作为下一个人任务的执行条件。在运行playbooks的时候可以使用-v参数来显示执行过程中的结果信息。如:

- hosts: webserver

  tasks:

     - shell: /usr/bin/foo
       register: foo_result
       ignore_errors: True

     - shell: /usr/bin/bar
       when: foo_result.rc == 5

使用系统变量案例

---
- hosts: test
  vars:
    http_port: 80
    maxRequestsPerChild: 808
  tasks:
    - name: echo {{ansible_all_ipv4_addresses}}
      echo:{{ansible_all_ipv4_addresses}}

猜你喜欢

转载自blog.csdn.net/sinat_34789167/article/details/81163675