ansible自动化运维(三)

1.管理变量

1)变量的作用:将playbook中的某些值使用变量代替,从而简化playbook的编写。

2)变量可能包含下面这些值:
· 要创建的用户
· 要安装的软件包
· 要重启的服务
· 要从互联网检索的文档

3)命令变量规则:
变量名称必须以字母开头,并且只能含有字母、数字和下划线。
例如:
web server (错误)
westos.file (错误)
1stfle (错误)
web_server (正确)
remote_file (正确)
file1 (正确)

4)定义变量
三个范围级别:
<1>全局范围:从命令行或者ansible配置设置的变量
<2>play范围:在play和相关结构中设置的变量
<3>主机范围:由清单、事实收集或者注册的任务,在主机组和个别主机上设置的变量。
注:如果多个级别定义了相同名称的变量,优先采用级别最高的变量,窄范围优先于广范围

5)playbook中的变量:
<1> 常见方式:在playbook开头中的vars块中:
在这里插入图片描述
<2> 在外部文件定义playbook变量:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
<3>在playbook中使用变量:将变量名称放在花括号内即可
在这里插入图片描述
注意:当变量用作开始一个值的第一元素时,必须使用引号,否则会报错

6)主机变量和组变量:
直接应用于主机的清单变量分为俩大类
<1>主机变量:应用于特定主机
<2>组变量:应用于一个主机组或一组主机组中的所有主机
主机变量优先于组变量,但是playbook中定义的变量比这俩者更高

定义主机变量和组变量:
方法一(比较旧,不建议采用)
<1>定义主机变量
在这里插入图片描述
<2>定义组变量
在这里插入图片描述
<3>定义嵌套组user变量
在这里插入图片描述
方法一这种做法使得清单文件难以处理,在同一文件中混合提供主机和变量信息,语法也过时
方法二:使用目录填充主机和组变量
定义主机和主机变量的首选做法时与清单文件或目录相同的工作目录中,创建group_vars和host_vars俩个目录,这俩个目录分别用于包含用于定义组变量和主机变量的文件。
创建group_vars/servers的yaml文件,设置变量为值:user : student
同样需要在host_vars目录中创建名称和主机匹配的文件来存放主机变量。

所以,一个项目目录中包含:
ansible.cfg(配置文件)、group_vars(定义组变量的目录)、host_vars(定义主机变量的目录)、inventory(清单文件)、playbook.yml(playbook文件)
从命令行覆盖目录:
清单变量可以被playbook中设置的变量覆盖、俩者又可通过命令行参数覆盖。
使用数组作为变量:
在这里插入图片描述
访问有俩种方法:
<1>
users.lilei.first_name
users.liyanan.home_dir

<2>变量被定义为python字典,可以使用替代语法来访问:
users[‘lilei’][‘first_name’]

7)使用已注册变量捕获命令输出
管理员可以使用register语句捕获命令输出
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
管理变量的练习:
创建playbook,来安装apache并开启,使可被访问,playbook查询web服务器并确认它已经设置好并在运行。

vim ansible.cfg   ##创建配置文件

在这里插入图片描述

扫描二维码关注公众号,回复: 10885256 查看本文章
vim inventory  ##创建清单文件

在这里插入图片描述

vim playbook.yml  ##创建yaml文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.管理机密

目标:使用ansible vault加密敏感变量,并运行vault加密变量文件的的playbook

1>介绍ansible vault
ansible可能需要访问密码或者api密钥等敏感数据,以便配置主机。
加密解密工具:ansible-vault命令
【注】:ansible vault 不实施自有的加密函数,而使用外部python工具集。

2>创建加密文件:
格式:ansible-vault create filename
例如:
在这里插入图片描述
3>创建加密文件同时将密码保存在westos(注意使用文件系统权限对文件进行保护),westos文件中必须先写入密码:
格式:ansible-vault create --vault-password-file=westos filename
例如:
在这里插入图片描述
4>查看加密文件:
方法:ansible-vault view filename
在这里插入图片描述
5>编辑现有的加密文件,如上面的test和test2.yml文件
原理:将文件解密为一个临时文件,并编辑;保存,复制内容并删除临时文件。
【注】:edit 命令编辑文件时,他始终是重写文件,因此只有在更改文件时使用,查看尽量使用view,同理vim命令,他可以查看文件,但是使用它只要动了就视为对文件做了更改,所以查看文件一般用cat。
在这里插入图片描述
6>加密现有的文件
方法:ansible-vault encrypt filename ##filename 参数可以是多个
如:
在这里插入图片描述
【注】:可以使用–output=filename 将加密文件保存为新的文件,使用此参数时输入文件只能是一个
如:
在这里插入图片描述
7>解密现有的文件
方法:ansible-vault decrypt filename
如:
在这里插入图片描述
7>解密的同时改名
在这里插入图片描述
8>更改加密文件密码(可以一次更改多个文件)
方法:ansible-vault rekey filename
如:
在这里插入图片描述
【注】:使用vault密码文件时,最好使用 - -new-vault-password-file
在这里插入图片描述
9> playbook 和ansible vault
运行加密的playbook,没有密码则报错:
在这里插入图片描述
交互式提供密码:

ansible-playbook  --vault-id @prompt intranet.yml 

在这里插入图片描述
【注】:2.4之前的ansible,使用- - ask-vault-pass提供交互式密码

3.管理事实

1>事实包括:主机名称,内核版本,网络接口,IP地址等。
2>描述ansible事实
查看主机信息:
在这里插入图片描述

ansible-playbook  facts.yml  ##运行facts.yml文件

在这里插入图片描述
3>将事实结果转换为动态的值,如显示主机的ip
在这里插入图片描述
在这里插入图片描述

ansible-playbook facts.yml

在这里插入图片描述
4>将ansible事实作为变量注入
使用setup模块显示所有事实信息:

ansible rhel7_node2.westos.com -m setup ##使用setup 模块显示所有事实信息

在这里插入图片描述
关闭事实收集,可以提升执行速率
未关闭之前执行playbook:
在这里插入图片描述
关闭事实收集:
在这里插入图片描述
再此执行,发现速率明显提高
在这里插入图片描述
5>创建自定义事实
可以使用INI格式或者JSON格式
在这里插入图片描述
在这里插入图片描述
自定义格式不能使用ymal格式,使用最为接近的json最好

自定义事实例如:

mkdir /etc/ansible/facts.d  ##在ansible主配置目录中新建一个facts.d 的目录
cd  /etc/ansible/facts.d   ##移动进入facts.d 目录
vim  custom.fact   ##新建一个custom.fact文件,此文件必须以.fact结尾

在这里插入图片描述
在这里插入图片描述
接着在当前主机中测试一下,使用setup模块显示所有事实信息,结果中会在ansible_local键值队中看到我们自己定义的事实信息。

ansible localhost -m setup

在这里插入图片描述
自定义事实的使用方法和默认事实的使用方法相同

4.使用魔法变量

1>常用的魔法变量有四个:
(1)hostvars ##包含受管主机的变量,可以用于获取另一台受管主机的变量的值
(2)group_names ##列出当前受管主机所属的所有组
(3) groups ##列出清单中所有的组和主机
(4) inventory_hostname ##包含清单中配置的当前受管主机的主机名称。

2>用途之一:使用debug模块报告特定主机的hostvars的值
在这里插入图片描述

5.练习

(1)管理事实练习一
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接着创建自定义变量:

vim custom.fact  ##创建自定义变量

在这里插入图片描述
创建playbook:

vim facts.yml

在这里插入图片描述
使用刚才的变量,检测ansible_local变量,当前应该是没有的。

ansible web -m setup

在这里插入图片描述
现在语法检测:

ansible-playbook --syntax-check facts.yml

在这里插入图片描述
现在编写主playbook

vim playbook.yml

在这里插入图片描述
验证httpd服务没有在rhel7_node2上运行

ansible rhel7_node2.westos.com -m command -a 'systemctl status httpd'

在这里插入图片描述
接下来语法检测:

在这里插入图片描述
运行:

发布了35 篇原创文章 · 获赞 0 · 访问量 1404

猜你喜欢

转载自blog.csdn.net/qq_44749796/article/details/105394457