ad-hoc 常用模块
1. ping模块,主机连通性测试
ansible all -m ping2. command模块
命令模块接受命令名称,后面是空格分隔的列表参数。给定的命令将在所有选定的节点上执行,(此时command模块是默认模块,可忽略-m选项)。
它不会通过shell进行处理,比如$HOME和操作如"小于"<",">", "|", ";","&"' 工作(需要使用(shell)模块实现这些功能)。
chdir # 在执行命令之前,先切换到该目录
creates # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断
removes # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断
executable # 切换shell来执行命令,需要使用命令的绝对路径(不常用,常用下面shell 模块)
free_form # 要执行的Linux指令,一般使用Ansible的-a参数代替(不常用,常用下面shell 模块)范例:
ansible webs -m command -a 'chdir=/data ls'
ansible webs -m command -a 'creates=/data/f1 touch /data/f1'
# 在webs组主机里,如果两个主机data下都有f1,就不会在data下创建f1
ansible webs -m command -a 'removes=/data/f1 touch /data/f2'
# data下有f1文件就会创建f2文件3. shell模块
shell模块在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道、echo等
在配置文件中将模块进行修改,就不需要输入-m shell选项
范例:
ansible all -m shell -a 'cat /etc/passwd |grep root'
node2 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
node3 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash
node1 | CHANGED | rc=0 >>
root:x:0:0:root:/root:/bin/bash4. script 模块
在指定节点运行服务端的脚本
范例:
vim test.sh
#/bin/bash
touch /data/test #创建/data/test
df -h >> /data/test #将df内容追加到/data/test文件中结果:
# ansible webs -m script -a '/data/test.sh' # 在远程被控制的机器执行脚本
# ansible webs -m command -a "chdir=/data ls" # 查看文件生成
# ansible webs -m shell -a "cat /data/test # 查看文件内容正确5. copy模块
copy:复制文件到远程主机,可以改权限等
(1)用法:
① 复制文件
-a "src= dest= "
② 给定内容生成文件
-a "content= dest= "
(2)相关选项如下:
src:源,被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将递归复制。在这种情况下,如果路径使用“/”来结尾,则只复制目录里的内容,如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync。
dest:目标,必选项。要将源文件复制到的远程主机的绝对路径,如果源文件是一个目录,那么该路径也必须是个目录
backup:被管理的远程主机已经有文件了,在覆盖之前,将源文件备份,备份文件包含时间信息。有两个选项:yes|no
content:用于替代“src”,可以直接设定指定文件的值directory_mode:递归设定目录的权限,默认为系统默认权限
force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes
others:所有的file模块里的选项都可以在这里使用范例:
ansible all -m copy -a "src=/local/file dest=/remote/file"
# 指定内容, 直接生成目标文件
ansible all -m copy -a "content='test content\n' dest=/tmp/test.txt"
# 如目标存在, 默认覆盖, 此处指定先备份
ansible all -m copy -a "src=/root/test1.sh dest=/tmp/test2.sh owner=test mode=600 backup=yes"
# 复制/etc/下的文件, 不包括/etc/目录本身
ansible all -m copy -a "src=/etc/ dest=/backup"6. fetch 模块
从远程某主机获取文件到本地:
dest:用来存放文件的目录,例如存放目录为backup,源文件名称为/etc/profile
在主机pythonserver中,那么保存为/backup/pythonserver/etc/profile
Src:在远程拉取的文件,并且必须是一个file,不能是目录
注意:从远程获取到本地的文件,会保存到以远程主机的IP 为名的目录中,且保存目录结构
范例:
ansible srv -m fetch -a "src=/root/test.sh dest=/data/scripts"7. File 模块
设置文件属性
创建目录:-a "path= state=directory"
创建链接文件:-a "path= src= state=link"
删除文件:-a "path= state=absent"
范例:
ansible webs -m file -a "path=/data/f4 state=directory" # 在被控制端,创建f4 目录
ansible webs -m file -a "path=/data/ state=absent" # 删除data目录下的文件
ansible webs -m file -a "src=/data/fstab path=/data/fstab.link state=link" # 将/data/fstab 创建软链接为/data/fstab.link
ansible webs -m file -a "src=/data/fstab path=/data/fstab1.link state=hard" # 将/data/fstab创建硬链接为/data/fstab1.link8. hostname模块
管理主机名
范例:
ansible 192.168.34.102 -m hostname -a "name=centos102" # 修改为centos102
ansible 192.168.34.102 -a "hostname" # 查看当前修改后的主机名9. cron模块
管理cron计划任务;-a "": 设置管理节点生成定时任务
action:
cron backup= #如果设置,创建一个crontab备份 【yes|no】
cron_file= #如果指定, 使用这个文件cron.d,而不是单个用户
crontab
day= #日应该运行的工作( 1-31, *, */2, )
hour= # 小时 ( 0-23, *, */2, )
minute= #分钟( 0-59, *, */2, )
month= #月( 1-12, *, /2, )
weekday # 周 ( 0-6 for Sunday-Saturday,, )
job= #指明运行的命令是什么
name= #定时任务描述
reboot # 任务在重启时运行,不建议使用,建议使用special_time
special_time #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)
state #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务
user #以哪个用户的身份执行 范例:备份数据库
# 备份数据库脚本
vim mysql_backup.sh
mysqldump -A -F --single-transaction --master-data=2 -q -uroot | gzip >mysql_`date +%F_%T`.sql.gz
# 创建任务 周一至周五的每天2点30分执行
ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
# 禁用计划任务
ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=yes'
# 启用计划任务
ansible all -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=no'
# 删除计划任务
ansible all -m cron -a 'name="backup mysql" state=absent'10. yum模块
选项
conf_file #设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置
disable_gpg_check #是否禁止GPG checking,只用present or atest
disablerepo #临时禁止使用yum库。 只用于安装或更新时。``enablerepo ``#临时使用的yum库。只用于安装或更新时。
name= #所安装的包的名称
state= #present安装, latest安装最新的, absent 卸载软件。
update_cache #强制更新yum的缓存。范例
# 安装dstat 包,忽略gpg_check
ansible webs -m yum -a "name=dstat"
# 卸载dstat 包
ansible webs -m yum -a "name=dstat state=absent"
# 安装多个包:
ansible webs -m yum -a "name=httpd,vsftpd,memacahe"
# 卸载多个包;
ansible webs -m yum -a "name=httpd,vsftpd,memacahe,state=absent"
# 更新缓存
ansible webs -m yum -a "name=dstat update_cache=yes" apt 也是一样的
11. service模块
服务程序管理
选项
arguments #命令行提供额外的参数
enabled #设置开机启动。
name= #服务名称
runlevel #开机启动的级别,一般不用指定。
sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。
state #started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置范例
# 1、远程安装httpd服务
ansible all -m yum -a "name=httpd"
# 2、远程开启httpd服务:
ansible all -m service -a "name=httpd state=started" 远程操作开启服务
ansible all -m service -a "name=httpd state=enabled" 开机设置启动服务12. user模块
用户模块,管理用户帐号
选项
comment # 用户的描述信息
createhome # 是否创建家目录
force # 在使用state=absent是, 行为与userdel -force一致.
group # 指定基本组
groups # 指定附加组,如果指定为(groups=)表示删除所有组
home # 指定用户家目录
move_home # 如果设置为home=时, 试图将用户主目录移动到指定的目录
name # 指定用户名
non_unique # 该选项允许改变非唯一的用户ID值
password # 指定用户密码,若指定的是明文密码,是不能用的,需用md5加密过后的密码
remove # 在使用state=absent时, 行为是与userdel -remove一致
shell # 指定默认shell
state # 设置帐号状态,不指定为创建,指定值为absent表示删除
system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户
uid # 指定用户的uid
update_password # 更新用户密码范例:
# 创建一个test用户的详细信息
ansible all -m user -a 'name=test comment="test user" uid=200 home=/data/testhome group=root groups=bin,nobody shell=/sbin/nologin'
# 删除用户信息,但是不会删除用户家目录的文件信息
ansible all -m user -a "name=test state=absent"
# 查看当前创建的用户信息
ansible all -a "getent passwd test"
# 跟上后面的remove=yes就会删除家目录信息
ansiable all -a "name=test state=absent remove=yes" 13. group模块
选项
gid # 设置组的GID号
name= # 管理组的名称
state # 指定组状态,默认为创建,设置值为absent为删除
system # 设置值为yes,表示为创建系统组范例:
ansible webs -m group -a "name=testgroup system=yes“ 创建系统组
ansible webs -m group -a "name=testgroup state=absent" 删除组14. setup模块
查机器的所有facts信息
介绍
facts 组件是Ansible 用于采集被管机器设备信息的一个功能,我们可以使用setup 模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件。
setup模块,主要用于获取主机信息,在playbooks里经常会用到的一个参数gather_facts就与该模块相关。
setup模块下经常使用的一个参数是filter 参数,查询的是全部信息,很多,filter 相当于匹配筛选。
范例:
# 查询当前机器的全部信息
ansible all -m setup
# 查看当前主机的总内存大小
ansible all -m setup -a "filter=ansible_memtotal_mb" 其中filter是过滤的含义。
# 查看每个主机的centos版本号
ansible all -m setup -a "filter=ansible_distribution_major_version"