阶段六:企业级自动化配置工具之Ansible进阶
Ansible模块(重点理解)
copy模块(重点)
作用:copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)
本机:nginx.conf,copy模块:分发到所有web节点
https://docs.ansible.com/ansible/latest/modules/copy_module.html#copy-module
在master上准备一个文件,拷贝此文件到webserver的所有机器上
master# echo master > /tmp/file1
master# ansible webserver -m copy -a 'src=/tmp/file1 dest=/tmp/file2'使用content参数直接往远程文件里写内容(会覆盖原内容)
master# ansible webserver -m copy -a 'content="ansible\n" dest=/tmp/file2'注意:ansible中-a后面的参数里也有引号时,记得要单引双引交叉使用,如果都为双引会出现问题
使用force参数控制是否强制覆盖
如果目标文件已经存在,则不覆盖
touch /tmp/file2
master# ansible webserver -m copy -a 'src=/tmp/file2 dest=/tmp/file3 force=no'如果目标文件已经存在,则会强制覆盖
master# ansible webserver -m copy -a 'src=/tmp/file2 dest=/tmp/file3 force=yes'使用backup参数控制是否备份文件
backup=yes表示如果拷贝的文件内容与原内容不一样,则会备份远程主机的那一份
webserver的机器上会将/tmp/file3备份一份(备份文件命名加上时间),再远程拷贝新的文件为/tmp/file3
master# ansible webserver -m copy -a 'src=/etc/fstab dest=/tmp/file3 backup=yes owner=daemon group=daemon mode=0777'简单理解:就是对目标文件进行备份操作
copy模块拷贝时要注意拷贝目录后面是否带"/"符号
/etc/yum.repos.d后面不带/符号,则表示把/etc/yum.repos.d整个目录拷贝到/tmp/目录下
master# ansible webserver -m copy -a 'src=/etc/yum.repos.d dest=/tmp'/etc/yum.repos.d/后面带/符号,则表示把/etc/yum.repos.d/目录里所有文件拷贝到/tmp/目录下
master# ansible group1 -m copy -a 'src=/etc/yum.repos.d/ dest=/tmp/'
小结:
Ansible有一个特殊模块,用于把本地文件拷贝到远程服务器,这个模块(copy)
copy模块有两个常用的参数:(src)、(dest)
fetch模块
作用:fetch模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地(master),类似于收作业!!!
https://docs.ansible.com/ansible/latest/modules/fetch_module.html#fetch-module
注意: fetch模块不能从远程拷贝目录到本地
第1步: 在两台被管理机上分别创建一个同名文件(但内容不同)
agent1# echo agent1 > /tmp/1.txt
agent2# echo agent2 > /tmp/1.txt第2步: 从master上fecth文件(因为webserver里有2台机器,为了避免同名文件文件冲突,它使用了不同的目录)
master# ansible webserver -m fetch -a 'src=/tmp/1.txt dest=/tmp/'
192.168.88.102 | CHANGED => {
"changed": true,
"checksum": "d2911a028d3fcdf775a4e26c0b9c9d981551ae41",
"dest": "/tmp/192.168.88.102/tmp/1.txt",
"md5sum": "0d59da0b2723eb03ecfbb0d779e6eca5",
"remote_checksum": "d2911a028d3fcdf775a4e26c0b9c9d981551ae41",
"remote_md5sum": null
}
192.168.88.103 | CHANGED => {
"changed": true,
"checksum": "b27fb3c4285612643593d53045035bd8d972c995",
"dest": "/tmp/192.168.88.103/tmp/1.txt",
"md5sum": "cd0bd22f33d6324908dbadf6bc128f52",
"remote_checksum": "b27fb3c4285612643593d53045035bd8d972c995",
"remote_md5sum": null
}安装tree:
# yum install tree -y
# 以大树结构显示文件信息(包含多层)
# tree /tmp命令作用:
- 使用
yum包管理器执行install操作,对软件包进行安装、更新、删除或查询。
执行结果:
- 成功后软件包会按指定动作完成安装、更新、删除或查询;失败时检查仓库、网络和权限。
关键参数:
注意事项:
作用:user模块用于管理用户账号和用户属性。
https://docs.ansible.com/ansible/latest/modules/user_module.html#user-module
案例1:创建aaa用户,默认为普通用户,创建家目录
案例2:创建bbb系统用户,并且登录shell环境为/sbin/nologin$1$DpcyhW2G$Kb/y1f.lyLI4MpRlHU9oq0
passwd可以使用-l选项,代表lock,锁定账号,不允许登录系统
下一句命令注意一下格式,密码要用双引号引起来,单引号的话验证时会密码不正确案例4:创建一个普通用户叫hadoop,并产生空密码密钥对
案例5:删除aaa用户,但家目录默认没有删除案例6:删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录
小结:
创建用户(state=present)和删除用户(state=absent)
作用:group模块用于管理用户组和用户组属性。
https://docs.ansible.com/ansible/latest/modules/group_module.html#group-module
创建组删除组(如果有用户的gid为此组,则删除不了)
小结:
group模块比较简单,主要用于(创建用户组)和(删除用户组)
聊聊计划任务(定时器)=>(重点)
*/1:每分钟图解:
常见格式:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,"1,2,5,7,8,9" 中杠(-):可以用整数之间的中杠表示一个整数范围,例如"2-6"表示"2,3,4,5,6" 正斜线(/):可以用正斜线指定时间的间隔频率,例如"0-23/2"表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
时间案例:案例:每分钟创建一个文件/root/file_202404171733.txt
问题:在crontab中如果出现了%百分号,默认无法执行
解决:添加反斜杠转义\%cron模块用于管理周期性时间任务
https://docs.ansible.com/ansible/latest/modules/cron_module.html#cron-module
创建一个cron任务,不指定user的话,默认就是root(因为我这里是用root操作的)。
如果minute,hour,day,month,week不指定的话,默认都为\*
删除cron任务小结:
Ansible可以通过cron模块创建或者移除计划任务!
yum模块用于使用yum命令来实现软件包的安装与卸载。
https://docs.ansible.com/ansible/latest/modules/yum_module.html#yum-module
或
使用yum安装httpd,httpd-devel软件,state=latest表示安装最新版本
或使用yum卸载httpd,httpd-devel软件
或
作用:service模块用于控制服务的启动,关闭,开机自启动等。
https://docs.ansible.com/ansible/latest/modules/service_module.html#service-module
启动httpd服务,如何没有安装,首先进行软件的安装,通过yum模块去进行软件的安装,并设为开机自动启动state服务管理可以选参数:"reloaded"、"restarted"、"started"、"stopped"
关闭vsftpd服务,并设为开机不自动启动
小结:
yum/dnf模块:主要负责(安装或卸载软件)
service模块:主要负责(服务的管理、启动、停止、重启、开机自启、开机不自启)
作用:script模块用于在远程机器上执行master本地脚本。
https://docs.ansible.com/ansible/latest/modules/script_module.html#script-module
在master上准备一个脚本
#!/bin/bash关键参数:
注意事项:
tasks: dnf: copy: loop: notify: user: service: handlers: service:
第二步:找到如下两个文件(/etc/vsftpd/ftpusers,/etc/vsftpd/user_list)
去掉root账号(否则root无法登录)
第三步:使用课件中提供的FlashFXP连接FTP服务,如下图所示:
工作职责:
说明:
/etc/exports:NFS默认配置文件
*代表任意主机均可挂载访问/share目录注意事项:
tasks:
handlers:
tasks:
小结:
注意:NFS服务全名(nfs-server)
作用:把变量、任务、handlers分别作为角色,按文件夹来实现分离编写过程!
files:用来存放由copy模块或script模块调用的文件。 tasks:至少有一个main.yml文件,定义各tasks。 handlers:有一个main.yml文件,定义各handlers。 templates:用来存放jinjia2模板。 vars:有一个main.yml文件,定义变量。 meta:有一个main.yml文件,定义此角色的特殊设定及其依赖关系,类似说明书。
/etc/ansible/roles/按需求修改配置文件后,拷贝到httpd角色目录里的files子目录
**第7步:编写lamp的playbook文件调用前面定义好的三个角色**
roles:
小结:
缺点:文件夹太多,过于冗余
常见问题:
问题1:YAML语法有错误,千万不要按Tab键,如果出错了,可以借助于YAML校检工具
https://www.bejson.com/validators/yaml_editor/index.html
问题2:Roles脚本是一个整体,不要单独执行某个yaml文件应该统一执行最终的yaml,如lamp.yaml
单独执行某个main.yml,报错信息如下:
以上其实不是错误,而是也能为main.yml文件不完整导致的!
注意事项:
**第8步:编写lamp的playbook文件调用前面定义好的三个角色**
roles: