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的更多相关文章

  1. 3.Ansible varialbes实战

    varialbes 1.什么是变量? ​ 以一个固定的字符串,表示一个不固定的值 version: 1.12 2.定义变量? 1.在playbook中定义变量? >1.vars 关键字 [roo ...

  2. ansible自动化部署之场景应用

    ansible自动化配置管理 官方网站: https://docs.ansible.com 一.安装 配置 启动 (ansible由红帽收购) (1)什么是ansible ansible是IT自动化配 ...

  3. 如何利用ansible callback插件对执行结果进行解析

    最近在写一个批量巡检工具,利用ansible将脚本推到各个机器上执行,然后将执行的结果以json格式返回来. 如下所示: # ansible node2 -m script -a /root/pyth ...

  4. 《Ansible权威指南》笔记(2)——Inventory配置

    四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...

  5. useful Ansible commands

    This article includes some useful Ansible commands. I will try to write blogs by English. You may wa ...

  6. 《Ansible权威指南》笔记(4)——Playbook

    七.Playbook1.语法特性如下:(1)"---"首行顶格开始(2)#号注释(3)缩进统一,不同的缩进代表不同的级别,缩进要对齐,空格和tab不能混用(4)区别大小写,键值对k ...

  7. 《Ansible权威指南》笔记(3)——Ad-Hoc命令集,常用模块

    五.Ad-Hoc命令集1.Ad-Hoc命令集通过/usr/bin/ansible命令实现:ansible <host-pattern> [options]    -v,--verbose  ...

  8. 《Ansible权威指南》笔记(1)——安装,ssh密钥登陆,命令

    2016-12-23 读这本<Ansible权威指南>学习ansible,根据本书内容和网上的各种文档,以及经过自己测试,写出以下笔记.另,这本书内容很好,但印刷错误比较多,作者说第二版会 ...

  9. 自动化运维工具ansible部署以及使用

    测试环境master 192.168.16.74webserver1 192.168.16.70webserver2 192.168.16.72安装ansiblerpm -Uvh http://ftp ...

随机推荐

  1. C# vs2017创建Com组件,并注册

    1.创建一个普通类库dll项目,如:MyCom. 2.导出接口,添加Guid,Guid为全局唯一标识,可以用VS2017自带工具获取.获取Guid的方法,如图: (1)打开自带Guid工具. (2)首 ...

  2. Linux 查找目录下大于*M的文件

    1. 查找指定文件夹下等于1M的文件 find ./ -size 1M | wc -l 2. 查找指定文件夹下大于1M的文件 find ./target_path -size +1M | wc -l

  3. 大数据安全利器ranger 编译安装

    ranger大数据领域的一个集中式安全管理框架,它可以对诸如hdfs.hive.kafka.storm等组件进行细粒度的权限控制.本文将介绍部署过程 1.  部署准备 ranger:    进入apa ...

  4. 七、数据提取之JSON与JsonPATH

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与 ...

  5. AtCoder - 2140 (思维)

    题意 https://vjudge.net/problem/AtCoder-2140 每次告诉你新的a:b,计算最后最小的a+b. 思路 如 3 2 3 1 1 3 2 先令a=2,b=3,发现新的为 ...

  6. C学习笔记(4)--- 指针的应用(第一部分)

    1.指针(pointer)概念: 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址.就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明.指针变量声明的一般形式为: ...

  7. axios如何先请求A接口然后在请求B接口

    总结:在第一个then的请求结束后,在添加一个then,表示请求第二个接口,在第二个then里面写第二个接口的请求方式 axios.get("./a.json").then(res ...

  8. luoguP3071 [USACO13JAN]座位Seating

    https://www.luogu.org/problem/P3071 AC代码: https://www.luogu.org/blog/user33426/solution-p3071 莫名其妙RE ...

  9. 接口是用get还是post,如何选择?

    为了保证信息安全性,注册.登录等操作通常都会使用POST请求,GET请求一般用来获取信息 GET与POST的区别可以参考下方链接 https://www.cnblogs.com/hyddd/archi ...

  10. matlib调用python时转py格式为matlib格式

    因为需要,我用matlib调用python代码. 调用成功但是遇到问题 如下 调用完的结果为python格式   (py.list,py.xx) matlib根本不能用 查了半天一个能解决的方法都没 ...