============================================================================
文件相关模块
这部分模块开始模块中会有较多的选项。
---------------------------------------------------------
file模块
file模块不仅可以管理文件,还可以管理目录,管理软连接.
file模块相当于把touch命令,mkdir命令,rm命令,ln -s命令结合在一起了。
选项:
path:路径,必备选项;
src source源,源文件一般用于link(创建软连接模式) 用于指定源文件;
state
状态(模式) ,具体要做的什么,创建/删除,操作文件/操作目录
state=directory 创建目录
state=file (默认) 更新文件,如果文件不存在也不创建
state=link 创建软连接
state=touch 创建文件;
state state=absent 删除 ( 注意如果是目录递归删除目录. )
mode mode=755创建并修改权限
owner onwer=root
group group=root
案例05:创建/opt/lidao.txt
[root@m01 ~]# ansible all -m file -a 'path=/opt/haha.txt state=touch'
案例06: 创建目录/app/
[root@m01 ~]# ansible all -m file -a 'path=/app/a/b/c/d/e/g/ state=directory'
案例07: 创建软连接 /etc/hosts创建软连接到/opt/下
[root@m01 ~]# ansible all -m file -a 'path=/opt/hosts src=/etc/hosts state=link'
案例08: 创建/ans-backup/目录 所有者是mclind,权限是700
注:创建文件或目录的时候,修改权限,所有者
[root@m01 ~]# ansible all -m file -a 'path=/ans-backup/ owner=root group=root mode=700 state=directory'
案例09: 删除/oldboy/目录
---------------------------------------------------------
copy模块
批量分发:scp,1个节点(管理节点)发送文件或压缩包到所有被管理端,注意:copy是单向的传输
选项:
src source 源文件,管理端的某个文件.
dest destination 目标,被管理端的目录/文件.
backup backup=yes 则会在覆盖前进行备份,文件内容要有变化或区别.
mode 修改权限
owner 修改为指定所有者
group 修改为指定用户组
案例10: 分发书写好的/etc/hosts文件,如果文件存在则备份下:
[root@m01 ~]# ansible all -m copy -a 'src=/etc/hosts dest=/tmp/hosts'
注:
copy是推送,批量推送.
fetch是拉取,批量拉取.使用较少.
---------------------------------------------------------
lineinfile
修改配置文件使用,类似于sed -i 'sg'和sed 'cai',会有剧本里用;
---------------------------------------------------------
服务管理-systemd
systemd模块相当于是linux systemctl命令:
开启/关闭/重启服务
开机自启动;
选项:
name 用于指定服务名称
enabled yes开机自启动 (yes/no)
state
表示服务开,关,重启...
state=started 开启
state=stopped 关闭
state=reloaded 重读配置文件(服务支持)
state=restarted 重启(关闭再开启)
daemon-reload yes是否重新加载对应的服务的管理配置文件(未来讲解书写systemctl配置文件)
案例11: 开启crond服务并设置开机自启动.
案例12: 关闭firewalld服务并不让开机自启动
[root@m01 ~]# ansible all -m systemd -a 'name=crond enabled=yes state=started'
[root@m01 ~]# ansible all -m systemd -a 'name=firewalld enabled=no state=stopped'
[root@m01 ~]# ansible all -m systemd -a 'name=sshd enabled=yes state=reloaded/restarted'
注:
systemd模块适用于目前大部分的Linux系统.
service模块适用于管理旧的Linux系统
---------------------------------------------------------
软件管理,yum模块
get_url模块,wget命令
yum_repository模块yum源配置模块,未来可以通过copy模块分发配好的yum。
---------------------------------------------------------
yum模块并不只是yum命令,包含了yum/apt命令:
选项:
name 指定软件包名字,可以指定多个,通过","分割.
state
state=installed 安装(也可以写为present)(默认)
state=removed 删除 (也可以写为absent)
state=lastest 安装或更新
update_cache 可以设置为no加加速,表示不更新本地yum缓存.实际应用建议开启
案例13: 安装常用的软件htop,tree,lrzsz,sshpass
[root@m01 ~]# ansible all -m yum -a 'name=htop,tree,lrzsz,sshpass'
---------------------------------------------------------
get_url模块
相当于是wget命令.所有主机能访问网络才行。
推荐在管理节点下载好,使用copy仅分发即可。
选项:
url 指定要下载的地址
dest 下载到哪个目录
案例14: 下载zabbix-agent的软包到/app/tools下面
zabbix-agent地址为:https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm
注:有时候wget下载会提示需要什么certificate,可加选项--no-check-certificate跳过认证;
[root@m01 ~]# ansible all -m get_url -a 'url="https://mirrors.aliyun.com/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent-6.0.13-release1.el7.x86_64.rpm" dest=/tmp/'
后续可以调用yum模块安装本地的软件
name=/app/tools/xxxxx.rpm即可。
---------------------------------------------------------
yum_repository模块
未来书写好yum配置文件,copy分发过去即可。
选项:
name yum源中名字 [epel]
description yum源的注释说明 对应的 是name的内容
baseurl yum源中 baseurl 下载地址
enabled 是否启动这个源 yes/no
gpgcheck 是否启动gpgcheck功能 no
file 指定yum源的文件 自动添加 .repo 默认与模块名字一致。
例:
-m yum_repository -a 'name=epel description="Extra Packages for Enterprise Linux 7 - $basearch" baseurl="http://mirrors.aliyun.com/epel/7/$basearch" enabled=yes gpgcheck=no'
---------------------------------------------------------
用户管理
user用户管理 : useradd,userdel
group用户组管理 : groupadd
---------------------------------------------------------
user模块
选项:
name,例 wwww 用户名
uid 指定uid
group 指定用户组,一般用于事先创建好了用户组,通过选项指定下.
shell 指定命令解释器:默认是/bin/bash /sbin/nologin
create_home 是否创建家目录(yes/no)
state=present 添加
state=absent 删除
password 加密的密码
案例15: 创建www-ans用户uid 2000虚拟用户
[root@m01 ~]# ansible all -m user -a 'name=www-ans uid=2000 shell=/sbin/nologin create_home=no state=present'
案例16: 批量更新密码
[root@m01 ~]# ansible all -m shell -a 'echo 1 | passwd --stdin mclind'
[root@m01 ~]# ansible all -m user -a "name=mclind password={{ '1' | password_hash('sha512','suiyi') }} state=present"
注:关于{{}}相关的解释
{{ '1' | password_hash('sha512', 'suiyi') }}
表示1是密码,经过管道,传递给了password_hash()插件, sha512加密算法,lidao是随机字符用于生成随机加密后的密码
注:官方文档,https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#how-do-i-generate-encrypted%02passwords-for-the-user-module
---------------------------------------------------------
group模块
选项:
name 指定用户组名字
gid 指定组的gid
state=present添加
state=absent 删除
---------------------------------------------------------
mount模块
实现mount命令进行挂载可以修改/etc/fstab实现永久挂载
选项:
fstype filesystem type指定文件系统,xfs,ext4,iso9660,nfs
src 源地址(nfs地址 eg 172.16.1.31:/data )
path 注意这里不是dest,挂载点(要把源挂载到哪里)
state
state=absent 卸载并修改fstab
state=unmounted 卸载不修改/etc/fstab
state=present 仅修改/etc/fstab 不挂载
state=mounted 挂载并修改/etc/fstab
state=remounted 重新挂载
案例17: 通过ans管理在web01上挂载nfs:/data挂载到web01的/ans-upload/
#在web服务器上安装nfs
[root@m01 ~]# ansible web -m yum -a 'name=nfs-utils state=present'
#创建挂载点
[root@m01 ~]# ansible web -m file -a 'path=/ans-upload/ state=directory'
#挂载nfs
[root@m01 ~]# ansible web -m mount -a 'src=172.16.1.31:/data/ path=/ans-upload/ fstype=nfs state=mounted'
#检查
[root@m01 ~]# ansible web -a 'df -h'
[root@m01 ~]# ansible web -a 'grep upload /etc/fstab'
---------------------------------------------------------
cron模块
用于管理系统的定时任务,替代了crontab -e功能。
选项:
name 定时任务名字(一定要加上), 对应下面 注释 的内容
minute 分钟 minute="*/2"
hour 小时
day 日期
month 月份
week 周几
job 指定命令或脚本(定向到空) job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null"
state=present 添加定时任务(默认)
state=absent 删除
案例18: 每3分钟同步时间。
#清理已有定时任务,如果没有,会报错提示没有此文件或目录
[root@m01 ~]# ansible all -a "sed -i '/ntpdate/d' /var/spool/cron/root"
#重新创建定时同步时间任务
[root@m01 ~]# ansible all -m cron -a 'name="sync time by mclind" minute="*/3" job="/sbin/ntpdate ntp1.aliyun.com &>/dev/null" state=present'
#删除定时任务
[root@m01 ~]# ansible all -m cron -a 'name="sync time by mclind" state=absent'
============================================================================