场景
高度定制化的场景
格式一致,内容不一致
为每个 主机 设定不同的属性如:hostname
setup 模块查看主机属性
ansible localhost -m setup
ansible localhost -m setup -a 'filter=*host*'
ansible localhost -m setup -a 'filter=*host*' -o
变量表现形式
设定变量
变量名=变量值
例:
nginx_port=80
获取变量
{{ nginx_port }}
实现方式
- 1、目标主机默认属性
- 2、主机清单中定义的特有属性
- 3、命令行定义的特定属性
- 4、playbook 中定义的特定属性
- 5、专用yaml定义的特定属性
优先级 1 < 2 < 4 < 5 < 3
基于ansible主机属性定制操作
setup 模块中的变量
ansible localhost -m setup -a
setup 模块中获取到的主机变量可以直接当变量使用
ansible localhost -m setup -a "filter=ansible_all_ipv4_addresses"
使用 setup 中的变量
---
- hosts: all
remote_user: root
tasks:
- name: create file
file: name=/var/log/{{ ansible_all_ipv4_addresses }}.log state=touch
在 /etc/ansible/hosts 中定义变量
文章目录
定义变量
- 公共变量
针对所有主机或主机组中所有主机列表定义统一变量
[web_group:vars]
var1=value1
var2=value2
- 普通变量
针对单个目标主机定义变量
192.168.8.14 nginx_port=81
ps: 普通变量 比 公共变量 优先级高
使用变量
---
- hosts: all
remote_user: root
tasks:
- name: create file
# 这个变量来自 ansible 自带的变量,所有能从 setup 模块直接获取的属性都能 直接当做变量使用
file: name=/var/log/{{ ansible_fqdn }}.log state=touch owner=daemon
实践
普通变量
配置
- /etc/ansible/hosts
[web]
192.168.8.14 hostid=14
192.168.8.15 hostid=15
192.168.8.16 hostid=16
- hostname.yaml
---
- hosts: web
remote_user: root
tasks:
- name: create hostname
hostname: name=ansible{{ hostid }}
执行
ansible-playbook -C hostname.yaml
ansible-playbook hostname.yaml
公共变量
配置
- /etc/ansible/hosts
[web]
192.168.8.14 hostid=14
192.168.8.15 hostid=15
192.168.8.16 hostid=16
[web:vars]
head=www.
tail=.example
- hostname.yaml
---
- hosts: web
remote_user: root
tasks:
- name: create hostname
hostname: name={{ head }}ansible{{ hostid }}{{ tail }}
命令行变量简介
命令行变量是优先级最高的变量设置方法,在命令行中指定变量,我们可以通过 ansible 或 ansible-playbook 中 -e 参数来指定变量,两者的实现范围不一样。
实践
ansible
语法
ansible <host> -e <var1>=<value1> -m <moudel> -a <params>
实践
ansible web -e 'head=www. tail=.ansible.org' -m hostname -a 'name={{ head }}ansible.{{ hostid }}{{ tail }}'
ansible-playbook
配置
- hostname.yaml
---
- hosts: web
remote_user: root
tasks:
- name: create hostname
hostname: name={{ head }}ansible{{ hostid }}{{ tail }}
语法
ansible-playbook -e head=http hostname.yaml
在playbook 中 通过 vars 配置项来设置变量
实践
配置
hostname.yaml
---
- hosts: web
remote_user: root
vars:
- head: www.
- hostid: hostid
- tail: .ansible.top
tasks:
- name: create hostname
hostname: name={{ head }}ansible{{ hostid }}{{ tail }}
执行
ansible-playbook hostname.yaml
ansible 给出的变量配置方法比较多,为了解决配置过多导致的混乱,在项目创建初期就用 专用 配置文件来定义变量,防止配置难以维护的现象出现
实践
配置文件
yaml 格式定义变量文件
- vars.yaml
---
head: http.
tail: .ansible.org
- hostname.yaml
---
- hosts: web
remote_user: root
vars_files:
- vars.yaml
vars:
- head: www.
- hostid: hostid
- tail: .ansible.top
tasks:
- name: create hostname
hostname: name={{ head }}ansible{{ hostid }}{{ tail }}
运行
ansible-playbook hostname.yaml