ansible-变量 inventory变量 vars变量 vars_files

ansible变量简介

ansible支持变量,这些变量是在项目中重复使用的值,这样可以简化项目的创建及维护。
变量必须以字母开头,并且只能包含字母、数字和下划线。
变量的基本范围:

  1. 全局范围:从命令行或恶配置中设置的变量。
  2. play范围:在play中设置的变量。
  3. 主机范围:由inventory、fact收集或注册的任务而设置在主机上的变量。
    变量的优先级:
    如果定了多个基本的相同变量名,则优先级最高的优先执行(窄范围优先执行)。
    清单定义的变量被play覆盖,play定义的变量被命令行覆盖。
    通过-e选项给变量值
    这种方式是通过命令行向play中传递变量值,运行优先级最高。
    ansible-playbook -e 变量名=变量值 xxx.yml
$ vim user.yml
---
- name: creatr user
  hosts: webserver
  vars:
    user: jerry
  tasks:
    - name: create {{ user }}
      user: 
        name: "{{ user }}"
        state: present

$ ansible-playbook -e user=tom3 user.yml

inventory变量

主机清单变量分为两大类:应用于特定的主机的主机变量和组变量,适用于主机组和主机组中的所有主机。主机变量优先于组变量。

定义主机变量:
[webserver]
web.test.com user=tom shell=/sbin/nologin
定义组变量:
[dataserver]
[dataserver:vars]
user=jerry
以上是inventory的配置方法,现在已经不推荐了,因为在同一个文件中混合了关于主机和变量的信息,这样使得清单文件更难处理。我们可以使用以下的方法:
分文件定义 host 和 group 变量
#mkdir -p test/{group_vars,host_vars}
首先定义清单文件
$ vim test/inventory
[webserver]
web1.test.com
[dataserver]
db1.test.com
再定义变量
$ vim group_vars/user
user: rose
$ vim group_vars/db
pkg: mariadb-server
$ vim group_vars/web
web: httpd

**

vars变量

**

---
- name: creatr user
  hosts: servera.lab.example.com
  vars:
    user: jerry
    home: /home/jerry
    shell: /sbin/nologin
    uid: 4001
  tasks:
    - name: create {{ user }}
      user:
        name: "{{ user }}"
        uid: "{{ uid }}"
        shell: "{{ shell }}"
        home: "{{ home }}"
        state: present

需要说明的是,当变量作为第一个元素开始时,必须加””,否则ansible将变量当作字典。
个人觉得,这种定义变量的方式简单、直观,但是内容较多,不易读。

vars_files

vars_file也是ansible变量的一种形式,可以理解成将playbook中vars部分的内容放到playbook外的文件中,在book中指定一下vars_file的位置就可以。

$ vim install.yml
---
- name: install pkg
  hosts: localhost
  vars_files:
    - vars/pkg.yml
  tasks:
    - name: install {{ pkg }}
      yum:
        name: "{{ pkg }}"
        state: present
    - name: start and  enabled {{ server_pkg }}
      service:
        name: "{{ server_pkg }}"
        state: started
        enabled: yes

$ cat vars/pkg.yml 
pkg: httpd
server_pkg: httpd

你可能感兴趣的:(自动化,linux,运维,devops,ansible,自动化运维,Ansible)