① command 模块 【批量管理主机执行命令 (默认)】
command模块官方资料说明
ansible command模块批量执行一条命令
去web端检查
web端
使用shell模块去web端检查后,发现并没有创建oldboy.txt 文件,因为command 模块不识别特殊符号,要使用shell模块才可以
去web端检查
web端
使用shell模块后,文件创建成功,而且内容也追加进去了
官方说明:* The command(s) will not be processed through the shell, so variables like
$HOME
and operations like"<"
,">"
,"|"
,";"
and"&"
will not work. Use the shell module if you need these features.
命令将不会通过shell处理像 $home 和 < > , |等特殊符号,如果需要这些功能,请使用shell模块
command模块参数:
1. chdir 参数
Change into this directory before running the command.
chdir参数的使用在运行命令之前切换到此目录(默认目录在家目录下)
2. creates 参数
If it already exists, this step won't be run.
creates参数判断一个文件是否存在,如果存在,后续命令不会执行
3. removes 参数
If it already exists, this step will be run.
removes参数判断一个文件是否存在,如果存在,运行后续命令
② shell 模块【批量管理主机执行命令(万能模块)】
shell模块官方资料说明
1. chdir 参数
Change into this directory before running the command.
chdir模块在运行命令之前切换到此目录(默认目录在家目录下)
2. creates 参数
If it already exists, this step won't be run.
creates 参数判断一个文件是否存在,如果存在,后续命令不会执行
3. removes 参数
If it already exists, this step will be run.
removes参数判断一个文件是否存在,如果存在,运行后续命令
shell 模块虽然通用,但是不能够所有功能都是用shell模块,但是不如专门处理相应工作的模块来完成,例如以下 script模块来举例说明
③ script 脚本 批量执行脚本信息
script 模块官方资料说明
要执行的脚本如上,现在在管理端 /server/scripts/ 有一个yum.sh的脚本
如果使用shell模块执行
-
第一步 编写脚本
-
第二步 将脚本进行分发
如果运行, 系统会在远程主机上寻找这个脚本文件,然而远程主机并没有这个脚本文件
-
第三步 运行脚本 sh 或者让脚本直接运行,还要授予执行权限
-
第四步 批量运行脚本
ansible web -m shell -a 'sh /server/scripts/yum.sh' sh 运行脚本
ansible web -m shell -a '/server/scripts/yum.sh' 脚本直接运行方式
如果使用script 模块的话
第一步: 编写脚本
第二步:批量运行脚本, 不需要分发,不需要加权限
script 脚本④ yum 批量部署软件程序
yum 模块官方资料说明
yum 模块参数:
1. name 指定安装软件的名称
2. state 指定软件安装或卸载
2.1 installed 安装
ansible 172.16.1.8 -m yum -a 'name=tree state=installed'
installed安装
2.2 removed 卸载
ansible 172.16.1.8 -m yum -a 'name=tree state=removed'
卸载
⑤ service 批量管理服务运行状态
service 模块官方资料说明
service 模块参数:
1. name 指定服务名称
2. state:
2.1 reloaded 重新载入
2.2 restarted 重新启动
2.3 started 重启
2.4 stopped 停止
3. enabled
Whether the service should start on boot. (服务是否开机启动)
3.1 yes
3.2 no
ansible 172.16.1.8 -m service -a 'name=rsyncd state=started enabled=yes'
启动rsyncd服务,并设置开机自动启动
⑥ copy 将管理端主机数据文件分发给被管理端 / 将被管理端目录中的数据移动到其他目录
copy 模块官方资料说明
copy 模块参数:
1. src 将管理端什么数据进行分发
Local path to a file to copy to the remote server.
2. dest 将数据分发到远程主机什么路径中
Remote absolute path where the file should be copied to.
3. owner 传输文件后修改文件属主权限
Name of the user that should own the file/directory, as would be fed to chown.
4. group 传输文件后修改文件属组权限
Name of the group that should own the file/directory, as would be fed to chown.
5. mode 直接修改文件权限为(12位)
The permissions of the destination file or directory.
6.backup 在分发传输文件之前,将源文件进行备份,按照时间信息备份
7.remote_src(???)
Influence whether src needs to be transferred or already is present remotely.
8. content 当使用而不是SRC时,将文件内容直接设置为指定值。(只能创建简单信息,不识别换行)
When used instead of src, sets the contents of a file directly to the specified value.
ansible 172.16.1.7 -m copy -a 'src=/etc/hosts dest=/tmp owner=oldboy group=oldboy mode=666'
(使用到前五个参数)发送一个文件到172.16.1.7 主机 ,属主是oldboy 属组是oldboy 权限是666
ansible 172.16.1.7 -m copy -a 'src=/etc/hosts dest=/tmp owner=oldboy group=oldboy mode=666 backup=yes'
在远端进行分发文件的备份,备份到分发远端目录下,然后以文件名+时间格式备份
(功能不常用,无法自动恢复文件)
ansible 172.16.1.7 -m copy -a 'content=123 dest/tmp/ mode=600 '
src和content冲突,不能同时使用 src and content are mutually exclusive
⑦ fetch 从远端节点拉取文件 Fetch files from remote nodes
copy 模块参数
1. src 要获取的远程系统上的文件
The file on the remote system to fetch.
2. dest 保存文件的目录(不同版本,有时候用的是path)
A directory to save the file into.
ansible all -m fetch -a 'src=/tmp/oldboy.txt dest=/tmp'
拉取结果将远端/tmp/oldboy.txt 保存到本地/tmp
保存到本地的方式是以远端主机IP 为目录名,拉取的文件再IP 命名的目录下,这样是为了防止多个主机拉取文件
⑧ file 修改文件属性信息,用于创建数据信息(文件,目录,链接),删除
file模块官方资料说明
path: 指定处理数据路径信息
owner: 传输文件之后修改文件属主权限
group: 传输文件之后修改文件属组权限
mode: 直接修改文件权限位(12位)
state:
touch(创建文件) directory(创建目录) hard(创建硬链接) link(创建软连接) absent(删除数据)
创建文件
ansible all -m file -a 'path=/tmp/oldboy.txt mode=777 state=touch'
其中一个主机查看结果
创建目录
ansible all -m file -a 'path=/tmp/oldboy mode=644 state=directory'
其中一个主机查看结果
创建多级目录
ansible all -m file -a 'path=/tmp/oldboy/oldboy1/oldboy2/oldboy3 mode=644 state=directory'
查看结果
创建软链接
ansible all -m file -a 'src=/tmp/oldboy.txt path=/tmp/old.soft state=link'
查看结果
创建硬链接
ansible all -m file -a 'src=/tmp/oldboy.txt path=/tmp/old.hard state=hard'
查看结果
批量删除文件
ansible all -m file -a 'path=/tmp/oldboy.txt state=absent'
查看结果
批量删除目录(可递归删除子目录)
ansible all -m file -a 'path=/tmp/oldboy state=absent'
查看结果
⑨ mount 批量挂载
mount模块参数
1. src: 指定需要被挂载存储数据信息 分区/共享目录
2. path: 挂载点目录
3. fstype: 指定挂载后,文件系统类型 ext3 ext4 xfs nfs
4. state:
4.1 mounted
mounted 特点:01. 会立即进行挂载操作 02. 可以实现永久挂载(会在/etc/fstab下写入挂载信息)
4.2 present
present 特点:可以实现永久挂载,但不会立即进行挂载
4.3 unmounted
unmounted 特点: 进行临时卸载,但不会删除etc/fstab 下写入的信息
4.4 absent
absent 特点 01. 临时卸载 02. 永久卸载(还会删除/etc/fstab文件中的条目) 03. 挂载点目录会被删除
批量挂载
ansible 172.16.1.7 -m mount -a 'path=/test src=172.16.1.31:/test_mount fstype=nfs state=mounted'
查看结果使用mounted挂载:会立即进行挂载操作,而且会在/etc/fstab下写入挂载信息,挂载时候注意src与path不要混淆了
ansible 172.16.1.7 -m mount -a 'path=/test src=172.16.1.31:/test_mount fstype=nfs state=present'
使用present使用present挂载:不会立即进行挂载操作,但会在/etc/fstab下写入挂载信息=
批量卸载挂载点
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt state=unmounted fstype=nfs"
使用unmounted使用unmounted会临时卸载,但不会删除etc/fstab 下写入的信息
ansible 172.16.1.7 -m mount -a "src=172.16.1.31:/data path=/mnt state=absent fstype=nfs"
使用absent使用absent,会临时卸载,还会删除/etc/fstab文件中的条目,还会删除挂载点目录
⑩ cron定时任务模块
cron 模块参数
cron 模块官方资料
1 name: 定义定时任务注释信息
2 minute: 表示分钟信息
3 hour: 表示小时信息
4 day: 表示日期信息
5 month:表示月份信息
6 weekday:表示星期信息
7 job: 表示定义任务信息
8 state:
8.1 present 创建定时任务 (默认创建定时任务,不加也会创建定时任务)
8.2 absent 删除定时任务
利用ansible编写时间同步定时任务:每隔5分钟,进行时间同步:
ansible 172.16.1.7 -m cron -a "name='date sync' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null'"
注意:name和job参数后边要加单引号,不然会报错
删除定时任务(必须是ansible创建的定时任务才可以删除,系统创建的不能)
ansible 172.16.1.7 -m cron -a "name='date sync' state=absent"
临时注释定时任务(不会再定时任务服务配置中删除条目)
ansible 172.16.1.7 -m cron -a "name='date sync' minute=*/5 job='ntpdate ntp1.aliyun.com &>/dev/null' disabled=yes"
取消注释把 ·disabled· 改为 no
⑪ user 批量创建用户模块
user模块官方资料说明
user模块参数
1.name: 指定用户名称
2.uid: 指定用户uid信息
3.group: 指定属于哪个组 主要组
4.groups: 指定属于哪个组 附属组
5.password: 指定用户密码信息(必须密文的信息)
6.shell: 指定用户shell信息 /sbin/nologin
7.remove:删除用户时 ,是否删除用户家目录
7.1 yes
7.2 no (默认参数 no )
state 的值设置为 absent 时,表示删除用户,但是不会删除用户的家目录等信息,因为 remove 参数的默认值为 no,如果设置为yes,在删除用户的同时,会删除用户的家目录。当 state=absent 并且 remove=yes 时,相当于执行 “userdel --remove” 命令。
8.state:
8.1present (默认创建)
8.2absent (删除)
9.create_home:
9.1 yes 创建家目录
9.2 no 不创建家目录
批量创建用户old
创建一个用户名为old的系统用户,uid为1200 创建家目录,state可以不加,默认就是present
ansible all -m user -a 'name=old uid=1200 group=oldboy shell=/bin/bash create_home=yes state=present'
ansible
10如何为用户模块生成加密密码?
How do I generate encrypted passwords for the user module?
方法一:
ansible all -i localhost, -m debug -a "msg={{ 'mypassword' | password_hash('sha512', 'mysecretsalt') }}"
mypassword 指定明文密码
加密结果mysecretsalt 加密计算方式(辅助计算)
加密之后在password参数后边加上加密后的密码
加上password选项
方法一:
使用Python Passlib 生成加密密码
首先要安装
yum install -y python-pip
安装Python-pip
yum install -y passlib
安装passlib
安装之后直接运行以下命令
python -c "from passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass()))"
python 方式加密密码
password输入明文密码就可以
将加密后的秘钥,加入到password参数后边,如方法一
删除用户加删除家目录
ansible all -m user -a 'name=old state=absent remove=yes'
网友评论