变量的基本概述
变量的使用
变量冲突
变量注册
facts变量
一、变量的基本概述
变量的含义
以一个固定的字符串表示一个不固定的值
二、变量的使用
- 定义变量
1.在playbook中定义变量
vars:表示关键字
root@manager~/project1]# cat f2.yml
- hosts: webservers
vars:
- file_name: playbook_vars
#调用共享var_file文件
vars_files: ./vars_file.yml
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
传输完成后,会在web端生成一个playbook_vars
[root@web~]# ls /tmp/
playbook_vars
2.vars_file 属于一种共享的方式
[root@manager~/project1]# cat vars_file.yml
web_packages: httpd
ftp_packages: vsftpd
[root@manager~/project1]# cat f2.yml
- hosts: webservers
vars:
- file_name: playbook_vars
#调用共享var_file文件
vars_files: ./vars_file.yml
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
- name: Installed Packages {{ web_packages }}
yum:
name: "{{ web_packages }}"
state: present
- 在inventory主机清单中定义变量
1.清单文件中直接定义 hosts文件定义
[root@manager~/project1]# cat hosts
[webservers]
172.16.1.7
172.16.1.8
[webservers:vars]
file_name=hostsfile_group_vars
[root@manager~/project1]# cat f3.yml
- hosts: webservers
tasks:
- name: Create New File
file:
path: /tmp/{{ file_name }}
state: touch
[root@web~]# ls /tmp/
hostsfile_group_vars
2.创建hosts_vars group_vars 目录
[root@manager~/project1]# mkdir host_vars
[root@manager~/project1]# mkdir group_vars
#1.单个主机定义和使用方式 (host_vars能分别对不同的主机定义变量)
[root@manager project1]# cat host_vars/172.16.1.7
host_vars_name: 172.16.1.7
[root@manager project1]# cat host_vars/172.16.1.8
host_vars_name: 172.16.1.8
[root@manager project1]# cat f4.yml
- hosts: webservers
tasks:
- name: Create New File
file:
path: /opt/{{ host_vars_name }}
state: touch
#2.针对主机组定义的方式
#给指定的webserver组设定变量.其他组主机无法使用该变量
[root@manager project1]# cat group_vars/webservers
group_host_vars: webservers
[root@manager project1]# cat f5.yml
- hosts: webservers
tasks:
- name: Create New File {{ group_host_vars }}
file:
path: /opt/{{ group_host_vars }}
state: touch
#3.针对主机组定义的方式 (给所有的主机和主机组设定变量)
[root@manager project1]# cat group_vars/all
group_host_vars: all
①单个主机定义和使用方式 (host_vars能分别对不同的主机定义变量)
[root@manager project1]# cat host_vars/172.16.1.7
host_vars_name: 172.16.1.7
[root@manager project1]# cat host_vars/172.16.1.8
host_vars_name: 172.16.1.8
[root@manager project1]# cat f4.yml
- hosts: webservers
tasks:
- name: Create New File
file:
path: /opt/{{ host_vars_name }}
state: touch
② 针对主机组定义的方式(给指定的webserver组设定变量,其他组无法使用该变量)
[root@manager~/project1]# cat group_vars/webservers
group_host_vars: webservers
[root@manager~/project1]# cat f5.yml
- hosts: web
tasks:
- name: Create New File {{ group_host_vars}}
file:
path: /opt/{{ group_host_vars }}
state: touch
③ 针对主机组定义的方式 (给所有的主机和主机组设定变量)
[root@manager~/project1]# cat group_vars/all
group_host_vars: all
[root@manager~/project1]# cat f5.yml
- hosts: web
tasks:
- name: Create New File {{ group_host_vars}}
file:
path: /opt/{{ group_host_vars }}
state: touch
- 通过外置传参定义变量 -e
[root@manager~/project1]# cat f6.yml
- hosts: web
tasks:
- name: Create New File {{ web_vars}}
file:
path: /opt/{{ web_vars }}
state: touch
[root@manager~/project1]# ansibe-palybook -i hosts f6.yml -e "web_vars=123"
[root@backup~]# ls /opt/ #(172.16.1.41)
123 webservers
三、变量冲突
定义相同的变量不同的值,来测试变量的优先级,操作步骤:
① 在playbook中定义vars变量
② 在playbook中定义vars_files变量
③ 在inventory主机定义变量
④ 在inventory主机组定义变量
⑤ 在host_vars中定义变量
⑥ 在group_vars中定义变量组
⑦ 通过执行命令传递变量
优先级测试:
外置传入参数优先级最高 ---> playbook ( vars_files(共享)--->vars(私有) )
---> host_vars --> group_vars/group_name ---> group_vars/all
四、变量注册
[root@manager project1]# cat f8.yml
- hosts: webservers
tasks:
# System_Status=$(netstat -lntp)
- name: Get Network Status
shell: netstat -lntp | grep "nginx"
register: System_Status
# echo "$System_Status"
- name: Debug output Variables
debug:
msg: "{{ System_Status.stdout_lines }}"
五、facts变量
Ansible facts是在被管理主机上通过ansible自动采集发现的变量。facts包含每台特定的主机信息。如被控端主机的主机名、ip地址、系统版本、CPU数量、内存状态、磁盘状态……
facts使用场景
1)通过facts变量检查被控端硬件CPU信息,从而生成不同的Nginx配置文件
2)通过facts变量检查被控端主机名称信息,从而生成不同的Zabbix配置文件
3)通过facts变量检查被控端内存状态信息,从而生成不同的memcached的配置文件
4)通过facts变量……
#1.根据主机的cpu信息,生成不同的配置.
A: 1核心 work_process 1;
B: 2核心 work_process 2;
[root@manager~/project1]# cat f10.yml
- hosts: webservers
tasks:
- name: Configure Nginx.conf
template:
src: ./file/nginx.conf.j2
dest: /etc/nginx/nginx.conf
[root@manager~/project1]# cat file/nginx.conf.j2
user www;
worker_processes {{ ansible_processor_vcpus }};
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections {{ansible_processor_vcpus * 1024 }};
}
#2.根据主机名称设定不同配置文件
zabbix_agent
Server: ===> 指向172.16.1.61
Hostname: web01 web02
[root@manager project1]# cat ./file/zabbix_agent.conf.j2
Server={{ zabbix_server_ip }}
ServerActive={{ zabbix_server_ip }}
Hostname={{ ansible_hostname }}
[root@manager project1]# cat f11.yml
- hosts: webservers
vars:
- zabbix_server_ip: 172.16.1.61
tasks:
- name: Configure zabbix-agent.conf
template:
src: ./file/zabbix_agent.conf.j2
dest: /tmp/zabbix-agent.conf
#3.根据主机的内存生成不同的配置文件,memcached
[root@manager project1]# cat f12.yml
- hosts: webservers
tasks:
- name: Installed Memcached Server
yum:
name: memcached
state: present
- name: Configure Memcached Server
template:
src: ./file/memcached.j2
dest: /etc/sysconfig/memcached
notify: Restart Memcached Server
- name: System Memcached Server
systemd:
name: memcached
state: started
enabled: yes
handlers:
- name: Restart Memcached Server
systemd:
name: memcached
state: restarted
[root@manager project1]# cat file/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS=""
网友评论