快速网站开发软件,wordpress 黄蓝 现代企业,做淘宝客进哪个网站,网站伪静态好还是静态好⾃动化运维利器Ansible-变量 一、变量命名规则二、变量的类型2.1 全局变量2.3 剧本变量2.4 资产变量2.5 facts变量2.6 注册变量 三、变量的优先级 按顺序食用#xff0c;口味更佳 ( 1 ) ⾃动化运维利器Ansible-基础 ( 2 ) ⾃动化运维利器 Ansible-Playbook ( 3 ) ⾃动化运维利… ⾃动化运维利器Ansible-变量 一、变量命名规则二、变量的类型2.1 全局变量2.3 剧本变量2.4 资产变量2.5 facts变量2.6 注册变量 三、变量的优先级 按顺序食用口味更佳 ( 1 ) ⾃动化运维利器Ansible-基础 ( 2 ) ⾃动化运维利器 Ansible-Playbook ( 3 ) ⾃动化运维利器 Ansible-变量 ( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制 ( 5 ) ⾃动化运维利器 Ansible-Jinja2 ( 6 ) ⾃动化运维利器 Ansible-最佳实战
ansible作为一门特殊的语言肯定要涉及到变量定义、控制结构的使⽤等特性。
一、变量命名规则
变量的名字由字母、下划线和数字组成必须以字⺟开头。保留关键字不能作为变量名称具体关键字比较多不在列举。 正确的变量命名: aimyon_36ztmy_1 错误的变量命名_aaa 2_bb 二、变量的类型
根据变量的作⽤范围⼤体的将变量分为:
全局变量剧本变量资产变量
2.1 全局变量
全局变量使⽤ansible 或使⽤ansible-playbook 时手动通过 -e 参数传递给Ansible 的变量。
通过ansible 或 ansible-playbook 的 help 帮助, 可以获取具体格式使⽤⽅式: ansible -h | grep var-e EXTRA_VARS,
--extra-varsEXTRA_VARS set additional variables as keyvalue or YAML/JSONansible-playbook -h | grep var-e EXTRA_VARS,
--extra-varsEXTRA_VARS set additional variables as keyvalue or YAML/JSON上述的help比较难懂通过下边的举例说明。 传统的kv形式 ansible all -i localhost, -m debug \-a msgmy key is {{ key }} -e keyvalue传递YAML/JSON的形式
cat a.json
{name:qfedu,type:school}ansible all -i localhost, -m debug \
-a msgname is {{ name }}, type is {{ type }} -e a.json2.3 剧本变量
该种变量和playbook有关定义在playbook中。
通过PLAY属性vars定义:
---
- name: test play varshosts: allvars:user: lileihome: /home/lileitasks:- name: create the user {{ user }}user:name: {{ user }}home: {{ home }}通过PLAY属性vars_files定义:
---
- name: test play varshosts: allvars_files:- vars/users.ymlcat vars/users.yml
---user: lileihome: /home/lilei
...当需要定义的变量很多时使用vars属性定义会显得很臃肿此时可以将变量抽取出来形成单独的YAML文件。 2.4 资产变量
ansible中的资产分为静态资产和动态资产资产变量就是和资产紧密相关的一种变量。
资产变量分为主机变量和主机组变量分别针对资产中的单个主机和主机组。
主机组变量 以下资产中定义了⼀个组变量home 此变量将针对webservers 这个主机组中的所有服务器有效。
cat hostsandgroupvars
[webservers]
172.18.0.3 userlilei
172.18.0.4
[webservers:vars] //home 是 web_servers 的组变量会针对这个组内的所有服务器⽣效。
home/home/lileiansible webservers -i hostsandgroupvars -m debug -a varhome
172.18.0.3 | SUCCESS {home: /home/lilei
}
172.18.0.4 | SUCCESS {home: /home/lilei
}主机变量 VS 主机组变量 当主机变量和组变量在同⼀个资产中发⽣重名的情况会有什么效果呢?
cat hosts_v2
[webservers]
172.18.0.3 userlilei //主机变量
172.18.0.4
[webservers:vars] //组变量
usertomansible webservers -i hosts_v2 -m debug -a varuser
172.18.0.3 | SUCCESS {user: lilei
}
172.18.0.4 | SUCCESS {user: tom
}在资产中定义了主机变量和组变量 user, 此时发现 172.18.0.3这台机器的主机变量 user 的优先级更⾼。 变量的继承 在介绍资产时说过资产的继承那么变量是否也存在继承关系呢?
cat hosts_v3
[webservers]
172.18.0.3
[dbservers]
172.18.0.4
[allservers]
[allservers:children]
dbservers
webservers
[allservers:vars]
userlileiwebservers和dbservers作为allservers的子类子类会继承父类的变量父类的变量属于组变量因此主机变量优先级会更高。 2.5 facts变量
Facts变量不包含在前⽂中介绍的全局变量、剧本变量及资产变量之内。
Facts变量不需要我们⼈为去声明变量名及赋值。
它的声明和赋值完全有Ansible 中的 setup 模块帮我们完成。它收集了有关被管理服务器的操作系统版本、服务器IP地址、主机名磁盘的使⽤情况、CPU个数、内存⼤⼩等等有关被管理服务器的私有信息。
在每次PlayBook运⾏的时候都会发现在PlayBook执⾏前都会有⼀个Gathering Facts的过程。这个过程就是收集被管理服务器的Facts信息过程。
⼿动收集Facts 变量
ansible all -i localhost, -c local -m setup过滤Facts Facts手动收集到的信息量很大因此需要使用fileter操作对信息进行过滤。 仅获取服务器的内存情况信息
ansible all -i localhost, -m setup -a filter*memory* -c local
localhost | SUCCESS {ansible_facts: {ansible_memory_mb: {nocache: {free: 508,used: 473},real: {free: 59,total: 981,used: 922},swap: {cached: 0,free: 1981,total: 1983,used: 2}}},changed: false
}默认情况下在执⾏PlayBook的时候它会去⾃动的获取每台被管理服务器的facts信息。 若在整个PlayBook 的执⾏过程中完全未使⽤过 Facts 变量此时我们可以将其关闭以加快PlayBook的执⾏速度。 ---
- name: a play examplehosts: webservers# 关闭 facts 变量收集功能gather_facts: noremote_user: roottasks:- name: install nginx packageyum: namenginx statepresent- name: copy nginx.conf to remote servercopy: srcnginx.conf
dest/etc/nginx/nginx.conf- name: start nginx serverservice:name: nginxenabled: truestate: started2.6 注册变量
注册变量往往⽤于保存⼀个task任务的执⾏结果, 以便于debug时使⽤。或者将此次task任务的结果作为条件去判断是否去执⾏其他task任务。注册变量在PlayBook中通过register关键字去实现。
Playbook
---
- name: install a package and print the resulthosts: webserversremote_user: roottasks:- name: install nginx packageyum: namenginx statepresentregister: install_result- name: print resultdebug: varinstall_result执行结果:
ok: [172.18.0.4] {install_result: {changed: false,failed: false,msg: ,rc: 0,results: [1:nginx-1.16.1-1.el7.ngx.x86_64
providing nginx is already installed]}
}三、变量的优先级
⽬前介绍了全局变量、剧本变量、资产变量、Facts变量及注册变量。
Facts变量不需要⼈为去声明、赋值注册变量只需通过关键字register去声明⽽不需要赋值。全局变量、剧本变量及资产变量则完全需要⼈为的去声明、赋值。
此处不在介绍变量优先级的验证过程直接说明优先级关系。
全局变量的定义
ansible-playbook -i hosts priority.yml -e userwww剧本变量的定义
---
- name: test variable priorityhosts: allremote_user: rootvars:user: mysqltasks:
- name: print the user valuedebug: msgthe user value is {{ user }}资本变量的定义
[dbservers]
172.18.0.3
[webservers]
172.18.0.4 ansible_ssh_port2222
[allservers:children]
dbservers
webservers
[allservers:vars]
usertomcat当⼀个变量同时在全局变量、剧本变量和资产变量中定义时优先级最⾼的是全局变量其次是剧本变量最后才是资产变量。 按顺序食用口味更佳 ( 1 ) ⾃动化运维利器Ansible-基础 ( 2 ) ⾃动化运维利器 Ansible-Playbook ( 3 ) ⾃动化运维利器 Ansible-变量 ( 4 ) ⾃动化运维利器AnsiblePlaybook的任务控制 ( 5 ) ⾃动化运维利器 Ansible-Jinja2 ( 6 ) ⾃动化运维利器 Ansible-最佳实战