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 }}"

最新文章

  1. kpvalidate开辟验证组件,通用Java Web请求服务器端数据验证组件
  2. Python自动化之django URL
  3. 【Gym 100971K】Palindromization
  4. ecshop2.72文件结构说明
  5. 纯CSS3制作九款可爱复古相机
  6. silverlight的第一个程序
  7. 5.1 CUDA atomic原子操作
  8. PostgreSQL9.5 新特性
  9. 使用Unity创建塔防游戏(Part2)
  10. 一篇关于PHP性能的文章
  11. 洛谷 P2820 局域网
  12. 解决pre-commit hook failed (add --no-verify to bypass)的问题
  13. 【数学建模】day07-数理统计II
  14. 一步一步配置 Dell OME 监控 Dell 服务器硬件报警
  15. POJ3422或洛谷2045 Kaka's Matrix Travels
  16. 使用postman做接口测试(三)
  17. ubuntu16.4搭建tensorflow环境
  18. LPCTSTR和LPTSTR和char *究竟有什么区别
  19. Linux中bash编程
  20. Oracle是如何工作的?实例是如何响应用户请求?一条SQL的执行过程~

热门文章

  1. 微信小程序使用weui构建搜索栏(searchbar)+导航(navbar)
  2. C# 运行时的关系
  3. netcore之RabbitMQ入门
  4. OceanBase 架构初探
  5. nginx的共享字典项api(操作方法)
  6. 8. 多态——编译时类型&运行时类型
  7. C++中的异常处理(上)
  8. centos7.6离线安装mysql5.7(附下载链接)
  9. python3.5.3rc1学习九:正则表达式
  10. monkey参数