Ansible varialbes
Posted baozexu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible varialbes相关的知识,希望对你有一定的参考价值。
1.什么是变量?
? 以一个固定的字符串,表示一个不固定的值 version: 1.12
2.定义变量?
1.在playbook中定义变量?
- vars 关键字
[root@manager project1]# cat f2.yml - hosts: webservers vars: - file_name: playbook_vars tasks: - name: Create New File file: path: /tmp/{{ file_name }} state: touch
- 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 #调用共享vars_file文件,只不过刚好文件名叫vars_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
2.在inventory主机清单中定义变量?
- 1.清单文件中直接定义 hosts文件定义--
[webservers] 172.16.1.7 172.16.1.8 [webservers:vars] file_name=hostsfile_group_vars
- 2.创建hosts_vars group_vars 目录
[root@manager project1]# mkdir hosts_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 [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.通过外置传参定义变量? -e
[root@manager project1]# ansible-playbook -i hosts f6.yml -e "web_vars=123"
3.变量冲突,优先级?
6.定义相同的变量不同的值,来测试变量的优先级。操作步骤如下 file_name:
??1)在plabook中定义vars变量
??2)在playbook中定义vars_files变量
??3)在inventory主机定义变量
??4)在inventory主机组定义变量
??5)在host_vars中定义变量
??6)在group_vars中定义变量 组 all组
??7)通过执行命令传递变量
?
?
优先级测试:
外置传入参数优先级最高 ---> playbook ( vars_files(共享)--->vars(私有) )
---> host_vars --> group_vars/group_name ---> group_vars/all
4.变量注册?
[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 }}"
5.facts变量?
#1.根据主机的cpu信息,生成不同的配置.
A: 1核心 work_process 1;
B: 2核心 work_process 2;
#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=""
1.根据cpu
2.根据内存
3.根据主机名
4.Redis配置文件 bind本地地址
5.操作系统不统一
变量可以进行运算 + - * //
#1.定义变量
playbook
vars 私有
vars_files 共享
inventory
host_vars
group_vars
group_vars/group_name
group_vars/all
外置传参
-e
#2.测试优先级
在不改变playbook变量的情况下,使用新的值测试.
#3.变量注册register
1.将任务执行的结果存储至特定的变量中
2.可以使用debug模块将变量进行打印输出
python: 字典
json 格式化数据
{
k1: v1
k2: v2
}
#4.facts
[root@manager project1]# cat f13.yml
- hosts: webservers
tasks:
- name: RANDOM
shell: echo "$RANDOM"
register: System_SJ
- name: Debug
debug:
msg: "web_{{ System_SJ.stdout }}"
#1.提取facts变量中的IP地址 mac地址 UUID 等等 只要唯一
ansible_default_ipv4.address
[root@manager project1]# cat f14.yml
- hosts: webservers
tasks:
- name: Debug
debug:
msg: "web_{{ ansible_default_ipv4.address }}"
以上是关于Ansible varialbes的主要内容,如果未能解决你的问题,请参考以下文章
[Pytorch系列-20]:Pytorch基础 - Varialbe变量的手工求导和自动链式求导
Tensorflow get_variable和Varialbe的区别