ansible应用配置模块说明
- 第一个模块(command)命令模块 批量执行命令
command 命令模块 批量执行命令 默认模块
ansible oldboy -m command -a "hostname"
- 第二个模块(shell)命令模块 批量执行命令 万能模块
shell 命令模块 批量执行命令 万能模块
ansible oldboy -m shell -a "yum install -y htop"
ansible oldboy -m shell -a "cd /tmp;pwd"
用法问题:
01. 不如专业模块执行批量管理功能效率更高
02. 不像专业模块具有幂等性(一个命令可以反复操作执行)
第一个里程: 编写脚本
第二个里程: 将脚本进行分发
ansible oldboy -m copy -a "src=/server/scripts/create_user.sh dest=/server/scripts/"
第三个里程: 修改脚本权限
ansible oldboy -m file -a "path=/server/scripts/create_user.sh mode=755"
第四个里程: 批量执行脚本
ansible oldboy -m shell -a "/server/scripts/create_user.sh"
script 命令模块 批量运行脚本
第一个里程: 编写脚本
第二个里程: 批量执行脚本
ansible oldboy -m script -a "/server/scripts/create_user.sh"
- 第四个模块(copy)文件模块 可以将管理端数据进行批量分发/可以移动调整被管理端数据位置
文件模块 可以将管理端数据进行批量分发/可以移动调整被管理端数据位置
重要模块参数:
src: 指定管理端要分发的数据路径信息
dest: 指定数据传输到被管理端什么目录中
mode: 数据传输完毕后,设置数据权限信息
owner: 数据传输完毕后,设置数据属主信息
group: 数据传输完毕后,设置数据属组信息
backup: 是否开启数据分发备份功能 了解
remote_src: 指定源的路径信息,从被管理端进行读取
content: 可以直接不在管理端创建文件,对文件进行分发,并且可以编辑文件简单内容信息
validate: ???
模块参数用法一:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ mode=600 owner=oldboy group=oldboy"
说明: 对目录进行分发
1) 修改文件权限信息 和 文件属主属组信息
2) 可以在被管理端创建指定目录信息
ansible oldboy -m copy -a "src=/oldboy/ dest=/oldboy/"
说明: 对目录进行分发
src指定目录后面有斜线 oldboy/ xxxxxx
src指定目录后面没斜线 oldboy xxxxxx
模块参数用法二: 备份数据/还原数据方法
传输备份文件数据方法一:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/ backup=yes"
传输备份文件数据方法二:
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/oldboy/oldboy.txt.bak remote_src=yes"
还原数据
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt.bak dest=/oldboy/oldboy.txt remote_src=yes"
============================================================================
参数说明
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/ remote_src=yes"
== 相应被管理端 mv /oldboy/oldboy.txt /opt/
ansible oldboy -m copy -a "src=/oldboy/oldboy.txt dest=/opt/"
== 相应管理端 scp -rp /oldboy/oldboy.txt xx.xx.xx.xx:/opt/
============================================================================
文件模块 进行数据拉取操作
重要参数:
src : 指定远程主机需要拉取数据信息
dest : 将数据保存到本地管理主机什么路径中
拉取数据方法:
ansible oldboy -m fetch -a "src=/opt/password.txt dest=/oldboy"
拉取后数据信息
[root@m01 ~]# tree /tmp/172.16.1.41/
/tmp/172.16.1.41/
└── etc
└── httpd
└── conf
└── httpd.conf
3 directories, 1 file
- 第六个模块(file) 文件模型 可以修改文件数据属性信息(直接修改数据属性)/创建或删除数据信息
重要参数:
path: 指定要操作的远程主机数据路径信息
mode: 修改文件权限信息
owner: 修改文件属主信息
group: 修改文件属组信息
state: 状态参数信息
创建目录(directory) 创建文件(touch) 创建软连接(link) 创建硬链接(hard) 删除文件(absent) 查看文件是否存在(file)
模块参数用法一: 修改文件属性信息
修改文件权限属性信息:
ansible 172.16.1.41 -m file -a "path=/etc/hosts mode=666 owner=oldboy group=oldboy"
修改目录权限属性信息: 问题* 如何递归修改目录权限???
ansible 172.16.1.41 -m file -a "path=/oldboy/ mode=666 owner=oldgirl group=oldgirl"
说明: 只是修改目录本身权限,不会进行递归修改权限信息(没有-R功能)
模块参数用法二: 创建或删除文件数据
创建目录:
ansible 172.16.1.41 -m file -a "path=/oldboy/ state=directory"
创建文件:
ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=touch"
创建链接:
ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt path=/oldboy/oldboy_soft_link state=link" --- 创建软链接
ansible 172.16.1.41 -m file -a "src=/oldboy/oldboy.txt path=/oldboy/oldboy_hard_link state=hard" --- 创建硬链接
删除数据:
ansible 172.16.1.41 -m file -a "path=/oldboy/oldboy.txt state=absent"
检查普通文件是否存在
ansible 172.16.1.41 -m file -a "path=/etc/hosts state=file"
- 第七个模块: (user) 用户模块 创建或删除用户信息
name: 指定创建用户名称信息
create_home: 创建用户是否有家目录
shell: 指定用是否能够登陆系统 虚拟用户 /sbin/nologin
uid: 指定用户uid数值
password 指定用户密码信息*** 使用密文信息设置密码
state: 默认present表示创建用户 使用absent删除用户信息
group: 指定用户属于哪个用户组 (主要组) == useradd -g
groups: 指定用户属于哪个用户组 (附属组) == useradd -G
模块参数用法一: 创建用户
ansible 172.16.1.41 -m user -a "name=rsync uid=2000 create_home=no shell=/sbin/nologin" --- 创建虚拟用户
ansible 172.16.1.41 -m user -a "name=oldboy uid=2001" --- 创建普通用户
模块参数用法二: 给创建用户设置密码
ansible 172.16.1.41 -m user -a 'name=oldboy password=$6$123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1'
模块参数用法三: 删除用户信息
ansible 172.16.1.41 -m user -a 'name=oldboy state=absent'
说明: 在删除用户是不会删除用户家目录. 问题* 如何将用户家目录删除 == userdel -r
[root@backup oldboy]# ll /home/oldboy -d
drwx------ 2 2001 2001 83 Aug 23 11:33 /home/oldboy
================================================================================================
补充: 利用user模块创建密文密码信息
方法一:
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
mypassword: 指定明文密码信息
mysecretsalt: 密码加密方式
生成密文密码
[root@m01 ~]# ansible all -i localhost, -m debug -a "msg={{ 'oldboy123' | password_hash('sha512', '123456') }}"
localhost | SUCCESS => {
"msg": "$6$123456$yryajH2qY8ydGAcmwCNSmZM1/fI4gYqwTzXn9abB73ZmaDWJoe5s5Y.gOHgtBgqYrqRLB1Dsv6QTZsKsJbibJ1"
}
方法二: 利用python命令生成密文信息
第一个历程: 安装pip下载工具
yum install -y python-pip
第二个历程: 利用pip工具下载python程序包
pip install passlib
第三个历程: 生成密文信息
[root@m01 ~]# python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
Password:
$6$IQhh.egT4ow2dzmd$fk9W1.J4q1ArQ8nykkhh5A0waFbgU1Qa4sUdNm42.oYSpSMmIIl0262cSDg1Q6Ph8p3rnqHOs372A.GzD11.w/
================================================================================================
- 第八个模块: (group) 用户模块 创建或删除用户组信息
重要参数信息
name: 指定创建用户组名称信息
gid: 指定创建用户组id编号信息
state: 默认present 指定absent表示删除用户组
模块参数用法一: 创建指定用户组
ansible 172.16.1.41 -m group -a "name=oldboy gid=3000"
模块参数用法二: 删除指定用户组
ansible 172.16.1.41 -m group -a "name=oldboy state=absent"
- 第九个模块: (yum) 安装软件模块 安装软件/卸载软件
name: 指定需要安装软件名称
state: 指定状态信息
安装软件(installed latest present) 卸载软件(absent removed)
模块参数用法一: 安装软件程序
ansible 172.16.1.41 -m yum -a "name=telnet-server state=installed"
模块参数用法二: 卸载软件程序
ansible 172.16.1.41 -m yum -a "name=telnet-server state=absent"
- 第十个模块: (service) 系统模块 控制服务运行状态
重要参数:
name: 指定要管理的服务名称
state: 指定服务运行状态
停止(stopped) 启动(started) 重启(restarted) 平滑重启(reloaded)
enabled: 指定服务是否开机自动启动 yes开机自启 no开机不要运行
模块参数用法一: 控制服务运行状态:
ansible 172.16.1.41 -m service -a "name=rsyncd state=started"
ansible 172.16.1.41 -m service -a "name=rsyncd state=stopped"
ansible 172.16.1.41 -m service -a "name=rsyncd state=restarted"
ansible 172.16.1.41 -m service -a "name=rsyncd state=reloaded"
模块参数用法二: 设置服务开机运行状态:
ansible 172.16.1.41 -m service -a "name=rsyncd enabled=no"
ansible 172.16.1.41 -m service -a "name=rsyncd enabled=yes"
- 第十一个模块:( cron ) 系统模块 批量设置定时任务
name : 定义定时任务注释信息/避免出现重复的定时任务
minute : 指定时间信息中分钟信息 (0-59 */5 0,10)
hour : 指定时间信息中小时信息 (0-23 *)
day : 指定时间信息中日期信息 (1-31)
month : 指定时间信息中月份信息 (1-12)
weekday : 指定时间信息中星期信息 (0-6)
job : 指定定时任务命令信息
crontab -e
* * * * * 执行定时任务 &>/dev/null
模块参数用法一: 批量设置定时任务
ansible 172.16.1.41 -m cron -a "name=crond-id-02 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
模块参数用法二: 删除定时任务
ansible 172.16.1.41 -m cron -a "name=crond-id-02 state=absent"
模块参数用法三: 注释定时任务
ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
ansible 172.16.1.41 -m cron -a "name=crond-id-01 minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=no"
- 第十二个模块:( mount ) 系统模块 进行批量挂载操作
src: 挂载存储设备信息
path: 挂载点目录信息
fstype: 挂载的文件系统类型
state: 指定挂载或是卸载
挂载: mounted present
mounted: 临时挂载存储目录信息 永久也挂载了存储目录信息 推荐
present: 只是实现永久挂载
卸载: unmounted absent
unmounted: 只是实现临时卸载
absent: 临时实现卸载 永久也实现卸载操作
参数操作方法一: 进行挂载操作
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=mounted"
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=present"
参数操作方法二: 进行卸载操作
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=unmounted"
ansible 172.16.1.41 -m mount -a "src=172.16.1.31:/data path=/mnt fstype=nfs state=absent"