16.RedHat认证-Ansible自动化运维(中)

16.RedHat认证-Ansible自动化运维(中)

部署Ansible

Ansible的Inventory文件

Inventory文件定义了ansible管理的主机,说白了就是Inventory文件中的内容是记录被管理的主机。
Inventory文件分为两种,一种是静态的Inventory文件,一种是动态的Inventory文件。
静态的Inventory文件其实非常好理解,就是txt文本记录的被管理主机。只要不修改这个静态
Inventory文件,被管理的主机就不会发生变化。动态的Inventory文件是能动态的输出被管理主机。动态Inventory文件的原理就是一个脚本,大部分
都是python的脚本。动态Inventory文件能连接到某个管理系统的节点信息数据库,并将节点信息以特
定的格式输出(绝大多数情况下是json),也就是说动态Inventory文件输出的主机信息是管理系统节
点信息数据库的内容。也就是说节点信息数据库的变化就会导致Inventory输出的被管理主机数量不同。
所以称之为动态的Inventory文件。

静态Inventory

# 我们只讲静态inventory#静态Inventory文件就是txt文件,下面是一个简单的txt格式Inventory文件(这个文件名自定义)ssh workstation   # 登录到workstation控制节点中
# 创建inventory文件,写入以下被管理主机的名称/IP地址,均可。
[student@workstation ~]$ vim inventory
[student@workstation ~]$ cat inventory 
servera
serverb
serverc
serverd
---------------------------------------------------------------------------------------
#Inventory文件还可以定义主机组
#一个主机文件可以属于多个组
[student@workstation ~]$ cat inventory
[storage]
servera
serverb[compute]
serverc
serverd---------------------------------------------------------------------------------------# 特殊的主机组
在ansible的Inventory文件中有两个特殊的组。一个是all,一个是ungrouped。
all主机组表示Inventory文件中所有的主机
ungrouped主机组表示不属于任何主机组的被管理主机

Inventory的嵌套组

#Inventory的嵌套组定义
[student@workstation ~]$ cat inventory
------------------------------------
[storage]
servera
serverb[compute]
serverc
serverd[cloud:children]
storage
compute
------------------------------------
嵌套的主机组必须要在组名后面加上“:children”,否则嵌套主机组会认为下面的名字指定的是某个主机,而不是某个主机组。

Inventory文件定义主机范围

比如想定义192.168.0.0~192.168.0.255和192.168.1.0~192.168.1.255,总共有512个主机
#中级玩家
192.168.0.[0:255]
192.168.1.[0:255]
#高级玩家
192.168.[0:1].[0:255]server[a:d]#无论是嵌套的主机组的定义还是指定Inventory主机的范围,本意都是让Inventory文件看起来别那么复杂。

查看Inventory文件的主机信息

# 目前inventory文件里的主机组
[student@workstation ~]$ cat inventory
[storage]
servera
serverb[compute]
serverc
serverd[cloud:children]
storage
compute
------------------------------------------------
# 查看主机组信息
[student@workstation ~]$ ansible -i /home/student/inventory storage --list-hostshosts (2):serveraserverbansible命令-i参数可以指定Inventory文件的路径,由于在你的ansible控制节点里面可能有多个
Inventory文件,所以使用正确的Inventory文件就非常有必要。
当然还有其他方式可以指定Inventory文件的路径,但是-i参数的优先级是最高的。[student@workstation ~]$ ansible -i ./inventory cloud --list-hostshosts (4):serveraserverbservercserverd
[student@workstation ~]$ ansible -i /home/student/ergou storage --listhosts
hosts (2):
servera
serverb
storage表示storage主机组。
--list-hosts表示列出你想查看的主机

Ansible Inventory文件的练习

[kiosk@foundation0 ~]$ ssh workstation # 登录到workstation主机
[student@workstation ~]$ lab deploy-inventory start # 执行这条命令(其实就是给默认的inventory文件做了备份而已)# 练习1:编辑/etc/ansible/hosts 文件,加入 servera.lab.example.com 主机
[student@workstation ~]$ sudo vim /etc/ansible/hosts  # 编辑这个hosts文件
[student@workstation ~]$ cat /etc/ansible/hosts #写入这一条主机。其余的注释啥的全都删掉,留这一行就可以,作为练习。
servera.lab.example.com【注意】
# /etc/ansible/hosts 是ansible配置文件指定Inventory默认的文件
# 如果使用ansible命令不加-i参数,默认就会使用这个Inventory文件。# 练习2:编辑/etc/ansible/hosts 文件,加入webservers主机组,并在主机组加入serverb.lab.example.com主机
[student@workstation ~]$ sudo vim /etc/ansible/hosts
[student@workstation ~]$ cat /etc/ansible/hosts
servera.lab.example.com[webservers]
serverb.lab.example.com# 练习3:查看主机和主机组的信息
[student@workstation ~]$ ansible all --list-hosts  # 查看所有主机信息hosts (2):servera.lab.example.comserverb.lab.example.com[student@workstation ~]$ ansible ungrouped --list-hosts # 查看未加入主机组的主机信息hosts (1):servera.lab.example.com[student@workstation ~]$ ansible webservers --list-hosts # 查看主机组的信息hosts (1):serverb.lab.example.com

在这里插入图片描述

# 练习4:依照上面的图中信息,在/deploy-inventory 目录下自定义一个inventory文件。按照上面给出的信息,写一个inventory文件
#		然后建立一个嵌套组,里面包含了raleigh 和 mountainview两个主机组student@workstation ~]$ mkdir ~/deploy-inventory
[student@workstation ~]$ cd deploy-inventory/
[student@workstation deploy-inventory]$ vim inventory
-----------------------------------------------------
[webserver]
server[a:d].lab.example.com[raleigh]
server[a:b].lab.example.com[mountainview]
serverc.lab.example.com[london]
serverd.lab.example.com[development]
servera.lab.example.com[testing]
serverb.lab.example.com[production]
server[c:d].lab.example.com[us:children]
raleigh
mountainview
-----------------------------------------------------
[student@workstation deploy-inventory]$ ansible -i ./inventory us --list-hostshosts (3):servera.lab.example.comserverb.lab.example.comserverc.lab.example.com[student@workstation deploy-inventory]$ ansible -i ./inventory production --list-hostshosts (2):serverc.lab.example.comserverd.lab.example.com[student@workstation deploy-inventory]$ ansible -i ./inventory ungrouped --list-hosts[WARNING]: No hosts matched, nothing to dohosts (0):# 再次执行 lab deploy-inventory finish 命令。
# 这个命令意思就是练习完成,完全恢复到练习之前的环境了。
[student@workstation deploy-inventory]$ cd
[student@workstation ~]$ lab deploy-inventory finish

Ansible的配置文件

关于ansible的配置文件,有一些非常重要的细节知识需要掌握。
ansible的配置文件不是全局的,任何用户都可以有自己的ansible配置文件。
ansible的配置文件在安装的时候,就有一个缺省的配置文件
[student@workstation ~]$ rpm -qf /etc/ansible/ansible.cfg
ansible-2.8.0-1.el8ae.noarch如果你不想使用这个安装自带的ansible配置文件,你可以自己创建。
#一般在生产环境中,都是创建一个你自己的目录,然后在该目录下创建自己的ansible配置文件。[student@workstation ~]$ mkdir gzy
[student@workstation ~]$ cd gzy/#如何查看你当前正在使用哪个ansible的配置文件呢?
[student@workstation gzy]$ ansible --version ansible 2.8.0config file = /etc/ansible/ansible.cfg # 这个就是可以当前正在使用的配置文件configured module search path = ['/home/student/.ansible/plugins/modules','/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.6/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 3.6.8 (default, Apr 3 2019, 17:26:03) [GCC 8.2.120180905 (Red Hat 8.2.1-3)]------------------------------------------------------------
ansible的配置文件有4种形式可以指定,4种指定方式优先级是不同的。
如果没有任何其他的ansible配置文件,默认就会使用/etc/ansible/ansible.cfg#1.家目录下的.ansible.cfg优先级高于/etc/ansible/ansible.cfg
[student@workstation gzy]$ touch ~/.ansible.cfg
[student@workstation gzy]$ ansible --version | grep cfg
config file = /home/student/.ansible.cfg# 2.当前目录下的ansible.cfg的优先级高于~/.ansible.cfg(使用频率最高)
[student@workstation gzy]$ touch ansible.cfg
[student@workstation gzy]$ pwd
/home/student/gzy
[student@workstation gzy]$ ansible --version | grep cfg
config file = /home/student/gzy/ansible.cfg#3.ANSIBLE_CONFIG变量指定的配置文件优先级最高(基本很少使用)
[student@workstation gzy]$ touch /tmp/ansible.cfg
[student@workstation gzy]$ export ANSIBLE_CONFIG=/tmp/ansible.cfg
[student@workstation gzy]$ ansible --version | grep cfg
config file = /tmp/ansible.cfg
ansible配置文件的基本参数
当你毫无头绪的时候,可以先看示例文件,示例配置文件就是安装软件自带的那个配置文件。
[student@workstation gzy]$ grep -v "#" /etc/ansible/ansible.cfg | grep -v "^$"
[defaults]
[inventory]
[privilege_escalation]
[paramiko_connection]
[ssh_connection]
[persistent_connection]
[accelerate]
[selinux]
[colors]
[diff]# ansible的配置文件中是以sector作为划分的。每个方括号就表示一个sector。
# ansible文件中最常用的两个sector ->defaults ,privilege_escalation[defaults]
inventory = /etc/ansible/hosts
#表示该配置文件默认使用的Inventory文件是/etc/ansible/hosts
remote_user = ergou
#表示该配置文件使用ergou用户来去进行ssh连接
ask_pass = false
#表示使用ergou用户去ssh连接的时候不提示输入密码[privilege_escalation]
#如果你remote_user使用的是root用户,就不需要配置提权部分,如果你的remote_user不是root,但是不需要做特权操作,那么也可以不用配置这部分。如果是普通用户,但是需要做特权操作,那么就需要配置这部分。
become = true
#true表示需要提权,false就表示不需要提权
become_method = sudo
#表示提权的方式是sudo提权
become_user = root
#表示提权到root用户
become_ask_pass = false
#false表示进行sudo操作的时候不提示输入密码,true表示需要输入密码不是任何用户作为remote_user,且配置了提权就能真的提权。而必须要在被管理主机里面配置sudoers文件,让这个remote_user有提权的能力才可以。

在这里插入图片描述

ssh可以设置免密登陆,避免remote_user使用ssh登陆的时候需要输入密码
sudoers文件中也可以设置sudo命令不提示输入密码
Ansible配置文件练习
1.创建配置文件
[student@workstation ~]$ lab deploy-manage start  # 开始练习[student@workstation ~]$ mkdir ~/deploy-manage  
[student@workstation ~]$ cd ~/deploy-manage/
[student@workstation deploy-manage]$ cat > ansible.cfg <<END
> [defaults]
> inventory = ./inventory
> END2.配置Inventory文件
[student@workstation deploy-manage]$ cat > inventory <<END
> [myself]
> localhost
>
> [intranetweb]
> servera.lab.example.com
>
> [internetweb]
> serverb.lab.example.com
>
> [web:children]
> intranetweb
> internetweb
> END[student@workstation deploy-manage]$ ansible myself --list-hosts
hosts (1):
localhost[student@workstation deploy-manage]$ ansible intranetweb --list-hosts
hosts (1):
servera.lab.example.com[student@workstation deploy-manage]$ ansible internetweb --list-hosts
hosts (1):
serverb.lab.example.com[student@workstation deploy-manage]$ ansible web --list-hosts
hosts (2):
servera.lab.example.com
serverb.lab.example.com3.配置ansible配置文件提权部分
[student@workstation deploy-manage]$ cat >> ansible.cfg <<END
> [privilege_escalation]
> become = true
> become_method = sudo
> become_user = root
> become_ask_pass = true
> END[student@workstation deploy-manage]$ cat ansible.cfg
[defaults]
inventory = ./inventory
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = true[student@workstation deploy-manage]$ lab deploy-manage finish # 完成练习

Ansible管理方式

两种方式 ad Hoc(很少用) 和 playbook(工作中常用)

ad hoc命令

# 这里讲ad hoc是为了方便理解playbook#ad hoc的命令格式
ad hoc的命令格式其实就是
ansible "host-pattern" -m "moudle" -a "moudle argument" -i "inventroy-path"
host-pattern表示某个主机或者某个主机组
-m参数表示使用ansible的模块
-a参数后面跟的是模块的参数
-i参数后面跟的是Inventory的路径[student@workstation deploy-manage]$ cat ansible.cfg[defaults]inventory = ./inventory[privilege_escalation]become = truebecome_method = sudobecome_user = rootbecome_ask_pass = true
[student@workstation deploy-manage]$ cat inventory[myself]localhost[intranetweb]servera.lab.example.com[internetweb]serverb.lab.example.com[web:children]intranetwebinternetweb
# 用刚才的配置文件做练习。
[student@workstation deploy-manage]$ ansible intranetweb -m ping
BECOME password:    # 密码 student
servera.lab.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
ping模块表示在被管理主机上使用ping命令来ping控制节点。
如果success就表示你的被管理主机到控制节点是可达的。# 1.修改配置文件加入 ask_pass = true 表名需要主机密码
[student@workstation deploy-manage]$ cat ansible.cfg
[defaults]
inventory = ./inventory
ask_pass = true
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = true[student@workstation deploy-manage]$ ansible intranetweb -m ping
SSH password:  # student
BECOME password[defaults to SSH password]: # 直接回车,因为这里的密码也是student
servera.lab.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}# 2.修改配置文件 ,加入remote_user = root  远程用于设置为root
[student@workstation deploy-manage]$ cat ansible.cfg
[defaults]
inventory = ./inventory
ask_pass = true
remote_user = root
#[privilege_escalation]
#become = true
#become_method = sudo
#become_user = root
#become_ask_pass = true[student@workstation deploy-manage]$ ansible intranetweb -m ping
SSH password:  # student
servera.lab.example.com | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}# 注意:如果become_ask_pass = false 被设置为false,说明提权的时候,不需要用户输入密码,
# 但是如果你没有在登录的那台主机上的sudoers 文件设置免密登录,就会报错。
假设此时你要 ansible intranetweb -m ping 的主机是servera,远程登录用户是student
[student@workstation deploy-manage]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = student  #远程登录用户[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false  # 这里设置为false[student@workstation deploy-manage]$ ansible intranetweb -m ping
# 执行 ansible intranetweb -m ping 会报错,因为在servera里没有做免密登录。
#我们登录到servera 上,切换到root用户,修改 /etc/sudoers文件。在里面加入如下的命令
student         ALL=(ALL)       NOPASSWD: ALL
# 然后在执行,就会成功。

ansible-doc

[student@workstation ~]$ ansible-doc -l
列出当前系统所有的ansible模块[student@workstation ~]$ ansible-doc ping
查看ping模块的操作,查看到的都是playbook的操作

ansible基础模块使用

在这里插入图片描述

user模块

# 此时的配置文件和inventory文件
[student@workstation deploy-manage]$ cat ansible.cfg
[defaults]
inventory = ./inventory
ask_pass = false
remote_user = student
[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false[student@workstation deploy-manage]$ cat inventory
[myself]
localhost
[intranetweb]
servera.lab.example.com
[internetweb]
serverb.lab.example.com
[web:children]
intranetweb
internetweb# 添加一个用户
[student@workstation deploy-manage]$ ansible -m user -a 'name=glstest
uid=5000 state=present' intranetweb
servera.lab.example.com | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 5000,
"home": "/home/glstest",
"name": "glstest",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 5000
}
# 登录到被管理主机servera上可以看到成功创建了glstest用户
[root@servera ~]# id glstest
uid=5000(glstest) gid=5000(glstest) groups=5000(glstest)# 删除一个用户
[student@workstation deploy-manage]$ ansible -m user -a 'name=glstest
state=absent' intranetweb
servera.lab.example.com | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"force": false,
"name": "glstest",
"remove": false,
"state": "absent"
}
# 此时就没有该用户
[root@servera ~]# id glstest
id: ‘glstest1’: no such user

Ansible 综合练习

[student@workstation ~]$ lab deploy-review start
# 查看版本
[student@workstation ~]$ ansible --version 
# 创建配置文件
[student@workstation ~]$ mkdir  deploy-review
[student@workstation ~]$ cd deploy-review/
[student@workstation deploy-review]$ vim ansible.cfg
-------------------------------------------
[defaults]
remote_user = devops
inventory = ./inventory
ask_pass = false[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
-------------------------------------------# 创建inventory子目录,在里面下载inventory文件
[student@workstation deploy-review]$ mkdir inventory
[student@workstation deploy-review]$ cd inventory/
[student@workstation inventory]$ wget http://materials.example.com/labs/deploy-review/inventory
[student@workstation inventory]$ ls
inventory
[student@workstation inventory]$ cat inventory 
[internetweb]
serverb.lab.example.com[intranetweb]
servera.lab.example.com
serverc.lab.example.com
serverd.lab.example.com# 在所有主机上执行id命令
[student@workstation inventory]$ cd ..
[student@workstation deploy-review]$ ansible all -a "id"
servera.lab.example.com | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023serverd.lab.example.com | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023serverc.lab.example.com | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023serverb.lab.example.com | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 向所有被管理主机的/etc/下copy一个motd文件。
[student@workstation deploy-review]$ ansible all -m copy -a 'content="This server is managed by Ansible.\n" dest=/etc/motd'
# 执行两次,两次颜色不一样,第二次文件其实并没有被copy,都是绿色。第一次都是黄色。
[student@workstation deploy-review]$ ansible all -m copy -a 'content="This server is managed by Ansible.\n" dest=/etc/motd'
# 查看
[student@workstation deploy-review]$ ansible all -a 'cat /etc/motd'# 然后,进行评分
[student@workstation deploy-review]$ lab deploy-review gradeGrading the student's work on workstation:· Verify active configuration file............................  PASS· Verify servera /etc/motd....................................  PASS· Verify serverb /etc/motd....................................  PASS· Verify serverc /etc/motd....................................  PASS· Verify serverd /etc/motd....................................  PASSOverall lab grade..............................................  PASS# 完成实验,还原环境
[student@workstation deploy-review]$ cd ..
[student@workstation ~]$ lab deploy-review finish 

Ansible的playbook

ad hoc命令是单行,一个简单的任务,运行一次。ansible真正强大的地方是使用ansible的playbook重复运行多次复杂的任务。

一个play是是一组有序的任务,该paly对应着在inventory被选择的主机。一个playbook是一个包含若干个paly的text文本文件。

plays让你将又长又复杂的管理任务变的简单。在palybook中,你可以用易懂和立即能运行的格式将tasks保存在play中。tasks本身由于书写方式的原因,就是一个一部一部部署你的架构或者应用的文档。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

[student@workstation ~]$ cat .vimrc
autocmd FileType yaml setlocal ai ts=2 sw=2 et

每一个playbook就是一个整体的剧本

这个剧本里的每一集就是一个play

每一集的多个情节就是task

也就是说:一个playbook 里可以包含多个play

一个play可以可以包含多个task

运行一个playbook

#测试都放在ztf目录下去做
[student@workstation ~]$ mkdir ztf
[student@workstation ~]$ cd ztf/# 在这个目录下一定要记得创建一个配置文件和inventory文件
[student@workstation ztf]$ vim ansible.cfg
[defaults]
inventory = ./inventory
ask_pass = false
remote_user = student[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false
-----------------------------------------------------------
[student@workstation ztf]$ vim inventory
servera
------------------------------------------------------------
# 检查当前的配置文件是否路径正确
[student@workstation ztf]$ ansible --version
ansible 2.8.0config file = /home/student/ztf/ansible.cfgconfigured module search path = ['/home/student/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /usr/lib/python3.6/site-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 3.6.8 (default, Apr  3 2019, 17:26:03) [GCC 8.2.1 20180905 (Red Hat 8.2.1-3)]# ping一下servera,看是否通
[student@workstation ztf]$ ansible servera -m ping
servera | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"},"changed": false,"ping": "pong"
}# 执行简单的id命令 来测试查看免密登录是否正常(当然,你也可以用其他的Linux命令来检测)
[student@workstation ztf]$ ansible servera -a 'id'
servera | CHANGED | rc=0 >>
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023# 创建create_user.yaml文件(创建playbook)
[student@workstation ztf]$ vim create_user.yaml
-----------------------------------------------------------
---
- name: this is my first playhosts: serveratasks:- name: create a new useruser:name: lyuid: 1314state: present  	#  state状态:present 提供的意思,就是有这个用户就修改了uid,没有的话就添加
-----------------------------------------------------------
# 这个playbook 里只有一个play ,这个play被管理的主机是servera,里面有一个task ,这个task的名字是crete a new user,
# 这个task里面有一个user的模块,这个user的模块创建了一个ly用户,uid是1314# 执行playbook
[student@workstation ztf]$ ansible-playbook create_user.yaml  # 当前的yaml文件
[student@workstation ztf]$ ansible servera -a 'id ly'servera | CHANGED | rc=0 >>uid=1314(ly) gid=1314(ly) groups=1314(ly)

playbook的运行

ansible-playbook create_user.yaml  -v # 详细信息
ansible-playbook create_user.yaml -vv # 更加详细的信息 常用
ansible-playbook create_user.yaml -vvv # 不常用
ansible-playbook create_user.yaml -vvvv  # 不常用[student@workstation ~]$ ansible-playbook --syntax-check create_user.yaml  # 运行之前先检查语法是否正确

playbook的练习

#搭一个web服务器
# 登录到workstation上# 启动练习环境
[student@workstation ~]$ lab playbook-basic start# 进入 playbook-basic目录,创建一个site.yml文件 内容如下:
[student@workstation playbook-basic]$ vim site.yml   

在这里插入图片描述

# 检测语法错误
[student@workstation playbook-basic]$ ansible-playbook --syntax-check site.yml # 语法没有问题# 运行site.yml
[student@workstation playbook-basic]$ ansible-playbook site.yml 
# 运行会失败,因为我们把enable写错了,应该是enabled模块,少写了个d
# 重新运行即可成功# 测试
[student@workstation playbook-basic]$ curl serverc
This is a test page.
[student@workstation playbook-basic]$ curl serverd
This is a test page.# 环境还原
[student@workstation ~]$ lab playbook-basic finish

多playbook 的play

在这里插入图片描述

模块文档(important)

查文档的方式两种
# 第一种:官方文档---> http://docs.ansible.com# 第二种:ansible-doc 命令查看本地系统上安装的模块的信息(常用)ansible-doc -l  #显示模块名称列表以及其功能的概述ansible-doc [module-name] # 查看具体模块的信息比如:查看yum模块
ansible-doc yum # 其实最主要的就是查看里面的example示例。

这里提供一个文档工具,百度云链接放在下面,可以搜、下载很多的文档,不止ansible

链接:https://pan.baidu.com/s/1L7BrQm6DK7BO5mNIUVevzg
提取码:6666

模块维护

在这里插入图片描述

yaml注释

yaml注释用 ‘#’ 号

yaml字符串
不加引号,和单引号、双引号效果是一样的。

在这里插入图片描述

说明白点:| 就是你写的每一行都加了换行符,

​ > 就是你写的每一行都是一行,这一行结束才换行。

这个在写入一些文件内容的时候,尤其重要。

Yaml字典

在这里插入图片描述

Yaml列表

在这里插入图片描述

在这里插入图片描述

多play的playbook练习

[student@workstation ~]$ lab playbook-multi start
[student@workstation ~]$ cd playbook-multi/
[student@workstation playbook-multi]$ vim intranet.yml
---
- name: first playhosts: servera.lab.example.combecome: yestasks:- name: install packageyum:name:- httpd- firewalldstate: present- name: web contentcopy:content: "this is a test page\n"dest: /var/www/html/index.html- name: start firewalld serviceservice:name: firewalldenabled: truestate: started- name: set firewalld rulefirewalld:service: httppermanent: trueimmediate: yesstate: enabled- name: start httpd serviceservice:name: httpdenabled: truestate: started- name: second palyhosts: localhostbecome: notasks:- name: test web serveruri:url: http://servera.lab.example.comretrun_content: yesstatus_code: 200
# 运行intranet.yml
[student@workstation playbook-multi]$ ansible-playbook intranet.yml [student@workstation ~]$ lab playbook-multi finish

playbook综合实验

[student@workstation ~]$ lab playbook-review start[student@workstation playbook-review]$ vim internet.yml[student@workstation playbook-review]$ cat internet.yml 
---
- name: enable internet serviceshosts: serverb.lab.example.combecome: yestasks:- name: install some pkgsyum:name:- firewalld- httpd- mariadb-server- php- php-mysqlndstate: latest- name: set firewalld enabled and runningservice:name: firewalldenabled: yesstate: started- name: set firewalld rule to allow httpd servicefirewalld:service: httppermanent: yesimmediate: yesstate: enabled- name: set httpd enabled and runningservice:name: httpdenabled: yesstate: started- name: set mariadb enabled and runningservice:name: mariadbenabled: yesstate: started- name: use get_url module to download wen content file on managed hostget_url:url: http://materials.example.com/labs/playbook-review/index.phpdest: /var/www/html- name: second playhosts: localhostbecome: notasks:- name: access web serveruri:url: http://serverb.lab.example.comstatus_code: 200[student@workstation playbook-review]$ ansible-playbook --syntax-check internet.yml [student@workstation playbook-review]$ ansible-playbook internet.yml # 评分
[student@workstation playbook-review]$ lab playbook-review grade[student@workstation ~]$ lab playbook-review finish

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/31045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

家有老人小孩,室内灰尘危害大!资深家政教你选对除尘空气净化器

哈喽&#xff0c;各位亲爱的朋友们&#xff01;今天我们来聊聊每次大扫除时最让人头疼的问题——灰尘。你有没有发现&#xff0c;两天不打扫&#xff0c;桌子上就能积上一层灰&#xff1b;阳光一照&#xff0c;地板上的灰尘都在跳舞&#xff1b;整理被子的时候&#xff0c;空气…

板凳-------第58章SOCKET:TCP/IP网络基础

58.1 互联网 互联网会将不同的计算机网络连接起来并允许位于网络中的主机相互之间进行通信。互联网的目标是隐藏不同物理网络的细节以便向互联网中的所有主机呈现一个统一的网络架构&#xff0c;TCP/IP已经成了使用最为广泛的协议套件了&#xff0c; 术语Internet被用来指将全球…

2-7 基于matlab实现声纹识别

基于matlab实现声纹识别&#xff0c;通过提取声音信号的MFCC特征&#xff0c;然后形成特征向量&#xff0c;通过训练语音&#xff0c;对测试语音进行识别&#xff0c;可以识别训练库内的声音&#xff0c;也可以识别出训练库外的声音。程序已调通&#xff0c;可直接运行。 2-7 m…

Redis持久化主从哨兵分片集群

文章目录 1. 单点Redis的问题数据丢失问题并发能力问题故障恢复问题存储能力问题 2. Redis持久化 -> 数据丢失问题RDB持久化linux单机安装Redis步骤RDB持久化与恢复示例RDB机制RDB配置示例RDB的fork原理总结 AOF持久化AOF配置示例AOF文件重写RDB与AOF对比 3. Redis主从 ->…

Meta FAIR研究新成果:图像到文本、文本到音乐的生成模型,多标记预测模型以及AI生成语音检测技术

Meta AI研究实验室(FAIR)公开发布了多项新研究成果&#xff0c;包括图像到文本和文本到音乐的生成模型&#xff0c;多词预测模型&#xff0c;以及检测AI生成语音的技术。发布的成果体现了开放性、协作、卓越和规模化等核心原则。公开早期研究工作旨在激发迭代&#xff0c;推动A…

AI写论文网站,提升论文写作效率

学术研究与论文写作是一个衡量学者专业水平的重要标准。但是&#xff0c;论文写作过程中繁琐的文献检索、资料整理、数据分析等工作往往耗时费力。幸运的是&#xff0c;随着人工智能技术的发展&#xff0c;一系列AI写论文网站应运而生&#xff0c;它们极大地提升了我们论文写作…

代码随想录刷题复习day01

day01 数组-二分查找 class Solution {public int search(int[] nums, int target) {// 左闭右闭int left 0;int right nums.length - 1;int mid 0;while (right > left) {mid left (right - left) / 2;if (nums[mid] > target)right mid - 1;else if (nums[mid]…

ATFX汇市:英央行6月利率决议来袭,大概率按兵不动

ATFX汇市&#xff1a;昨日英国统计局刚公布5月CPI年率数据&#xff0c;今日英国央行就要公布利率决议结果&#xff0c;两项重磅数据同一周出现&#xff0c;GBPUSD或迎来高波动期。今日19:00&#xff0c;英国央行将公布6月利率决议结果&#xff0c;市场普遍预期其将维持5.25%的基…

双网卡设置路由网络不通原因之一:静态ip设置失败

1.主要现象&#xff1a; 外网通&#xff0c;内网不通 外网IP设置 内网IP设置 路由表设置 内网不通 2.主要原因&#xff1a;在适配器中设置的内网静态IP没有成功 设置静态IP失败 在命令行使用ipconfig命令看到内网适配器的静态IP为192.168.0.55&#xff0c;并不是我们设置的1…

【Esp32连接微信小程序蓝牙】附Arduino源码《 返回10007 相同特征id冲突问题》

前言 最近接了一个外包&#xff0c;发现了esp32连接小程序会有很多bug&#xff0c;所以接下来会慢慢更新解决方案&#xff0c;还是需要多接触项目才能进步呀兄弟们&#xff01; 附上uuid的生成链接&#xff1a; // See the following for generating UUIDs: // https://www.uu…

adb 查看哪些应用是双开的

adb shell pm list users 得到 这 里有 user 0 ,11,999 其中0是系统默认的&#xff0c;11是平行空间的&#xff0c;999是双开用户 pm list packages --user 999 -3 得到了999用户安装第三方应用的包名 pm list packages --user 11 -3 得到了隐私空间用户安装第三方应用的…

Linux源码阅读笔记02-进程原理及系统调用

进程和进程的生命周期 进程&#xff1a;指计算机中已运行的程序。进程本身不是基本的运行单位&#xff0c;而是线程的容器。程序本身不是基本的运行单位&#xff0c;而是线程的容器。程序是指令、数据和组织形式的描述&#xff0c;进程才是程序的真正运行实例。Linux内核把进程…

优思学院|IT行业学习六西格玛的价值

提到六西格玛&#xff08;Six Sigma&#xff09;&#xff0c;很多人可能首先想到的是制造业。六西格玛确实在制造业中有着广泛的应用和显著的效果&#xff0c;如提高产品质量、降低缺陷率、减少浪费等。那么&#xff0c;六西格玛在信息技术&#xff08;IT&#xff09;行业是否同…

医学图像预处理之z分数归一化

在医学图像处理中&#xff0c;Z分数标准化&#xff08;Z-score normalization&#xff09;是一种常用的数据标准化方法&#xff0c;其目的是将数据集中的每个图像像素值转换为具有均值为0和标准差为1的标准化值。这种标准化方法有助于改善图像的质量&#xff0c;便于后续图像处…

Window使用Hyper-V进行显卡直通

一、环境配置 处理器 Intel Xeon CPU E5-2680 v3 @ 2.50GHz 2.50 GHz 机带 RAM 64.0 GB 二、安装Hyper-V 控制面板–>程序和功能->启用或关闭winodws功能 三、打开Hyper-V安装windows 安装windows略过,记住(禁用检查点) 四、在本机Winows上以及管理员打开Powe…

山东华素制药有限公司:素心做药,感恩回报

在山东威海这片美丽的土地上,有一颗璀璨的明珠——山东华素制药有限公司。自2013年成立以来,这家企业以其深厚的制药底蕴、卓越的研发实力和坚定的社会责任,赢得了社会各界的广泛赞誉。它不仅是化学药品制剂制造的佼佼者,更是“素心做药,感恩回报”的典范。 一、素心做药,品质为…

MySQL快速安装(mysql8.0.30区别之前yum安装)

目录 一.初始化环境并解压 二.创建程序用户管理 三.修改mysql目录和配置文件的权限 四.修改配置文件 五.设置环境变量&#xff0c;申明/宣告mysql命令便于系统识别 六.初始化数据库 七.设置系统识别&#xff0c;进行操作 八.初始化数据库密码 九.用户并设置密码 十.赋…

18 Shell编程规范与变量

目录 18.1 Shell脚本概述 18.1.1 Shell的作用 18.1.2 编写第一个Shell脚本 18.1.3 重定向与管道操作 18.2 Shell变量的作用、类型 18.2.1 自定义变量 18.2.2 特殊的Shell变量 18.1 Shell脚本概述 可以批量处理、自动化地完成一系列维护任务&#xff0c;大大减轻管理员的负担。…

[leetcode hot 150]第十五题,三数之和

题目&#xff1a; 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复…

电脑怎么恢复出厂设置?系统还原怎么操作?就看这5个方法!

电脑怎么恢复出厂设置&#xff1f;如果您的电脑出现问题&#xff0c;在电脑上恢复出厂重置非常有用。它基本上可以重置电脑&#xff0c;使其恢复到下线时的状态&#xff0c;给你一个全新的开始。众所周知&#xff0c;我们使用电脑的时间越长&#xff0c;电脑上的文件和程序就会…