模块帮助
ansible-doc -l
列出ansible的模块
ansible-doc 模块名称
# 查看指定模块的教程
ansible-doc command
查看command模块的教程
退出教程时候建议不要使用ctrl+c 停止,某些shell工具会出现错误
command
ansible
默认的模块,执行命令,注意:shell中的"<"
,">"
,"|"
,";"
,"&"
,"$"
等特殊字符不能在command
模块中使用,如果需要使用,则用shell
模块
ansible web1 -a "pwd"
# 可以加-m command 或者 不加意思都是一样的
上面执行的命令默认是在root下执行
# chdir 先切换工作目录,再执行后面的命令,一般情况下在编译时候使用
ansible web1 -m command -a "chdir=/tmp pwd"
切换执行命令的目录,执行命令
# creates 如果creates的文件存在,则不执行后面的操作
ansible web1 -a "creates=/tmp1 echo "没有/tmp1""
# removes 和creates相反,如果removes的文件存在,才执行后面的操作
ansible web1 -a "removes=/tmp echo "有/tmp""
shell
专门用来执行
shell
命令的模块,和command
模块一样,参数基本一样,都有chdir,creates,removes
等参数
ansible web1 -m shell -a "chdir=/tmp pwd"
ansible web1 -m shell -a "cd /tmp && touch 123123 && ls"
script
用于在被管理机器上面执行
shell
脚本的模块,脚本无需在被管理机器上面存在,就是脚本在控制机上,直接运行到被管理主机上。
这个是脚本内容
ansible web1 -m script -a "/root/123.sh"
file
用于对文件的处理,创建,删除,权限控制等
path #要管理的文件路径
recurse #递归
state:
directory #创建目录,如果目标不存在则创建目录及其子目录
touch #创建文件,如果文件存在,则修改文件 属性
absent #删除文件或目录
mode #设置文件或目录权限
owner #设置文件或目录属主信息
group #设置文件或目录属组信息
link #创建软连接,需要和src配合使用
hard #创建硬连接,需要和src配合使用
# 创建目录
ansible web1 -m file -a 'path=/tmp/test1 state=directory'
# 创建文件
ansible web1 -m file -a 'path=/tmp/test2 state=touch'
# 建立软链接(src表示源文件,path表示目标文件)
ansible web1 -m file -a 'src=/tmp/test1 path=/tmp/test3 state=link'
# 删除文件
ansible web1 -m file -a 'path=/tmp/test2 state=absent'
# 创建文件时同时设置权限等信息
ansible web1 -m file -a 'path=/tmp/test4 state=directory mode=775 owner=root group=root'
copy
用于管理端复制文件到远程主机,并可以设置权限,属组,属主等
也就是将本地传到被管理端上
src #需要copy的文件的源路径
dest #需要copy的文件的目标路径
backup #对copy的文件进行备份
content #直接在远程主机被管理文件中添加内容,会覆盖原文件内容
mode #对copy到远端的文件设置权限
owner #对copy到远端的文件设置属主
group #对copy到远端文件设置属组
# 复制文件到远程主机并改名
ansible web1 -m copy -a 'src=./123.sh dest=/root/aa.sh'
# 复制文件到远程主机,并备份远程文件,安装时间信息备份文件(当更新文件内容后,重新copy时用到)
ansible web1 -m copy -a 'dest=/tmp/a.sh src=/root/ansible_test.sh backup=yes'
# 直接在远程主机a.sh中添加内容
ansible web1 -m copy -a 'content="#!/bin/bash\n echo `uptime`" dest=/root/a.sh'
# 复制文件到远程主机,并设置权限及属主与属组
ansible web1 -m copy -a 'dest=/tmp/passwd src=/etc/passwd mode=700 owner=root group=root'
fetch
用于从被管理机器上面拉取文件,拉取下来的内容会保留目录结构,一般情况用在收集被管理机器的日志文件等
# 从被管理机器上拉取cron日志文件,默认会已管理节点地址创建一个目录,并存放在内
ansible web1 -m fetch -a 'dest=/tmp src=/var/log/cron'
user
用于对系统用户的管理,用户的创建、删除、家目录、属组等设置
name #指定用户的名字
home #指定用户的家目录
uid #指定用户的uid
group #指定用户的用户组
groups #指定用户的附加组
password #指定用户的密码
shell #指定用户的登录shell
create_home #是否创建用户家目录,默认是yes
remove #删除用户时,指定是否删除家目录
state:
absent #删除用户
# 创建用户名指定家目录,指定uid及组
ansible web1 -m user -a 'name=mysql home=/opt/mysql uid=1002 group=root'
# 创建用户,不创建家目录,并且不能登录
ansible web1 -m user -a 'name=apache shell=/bin/nologin uid=1003 create_home=no'
# 删除用户
ansible web1 -m user -a 'name=apache state=absent'
# 删除用户并删除家目录
ansible web1 -m user -a 'name=mysql state=absent remove=yes'
group
用于创建组,当创建用户时如果需要指定组,组不存在的话就可以通过
group
先创建组
# 创建组
ansible web1 -m group -a 'name=www'
# 创建组并指定gid
ansible web1 -m group -a 'name=www1 gid=1005'
# 删除组
ansible web1 -m group -a 'name=www1 state=absent'
yum_repository
yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库
常用参数name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应的”中括号”内的仓库ID。baseurl参数:此参数用于设置 yum 仓库的 baseurl。description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的”name字段”对应的内容。file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中可以存在多个 yum 源。enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum 源,设置为 no 表示不启用对应的 yum 源。gpgcheck参数:此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证,设置为 yes 表示开启包验证功能gpgcakey参数:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。state参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
- 在 主机上设置ID为 aliEpel 的 yum 源,仓库配置文件路径为
/etc/yum.repos.d/dgf.repo
。
ansible all -m yum_repository -a 'name=local description="local" baseurl=file:///mnt enabled=1 gpgcheck=no file=dgf'
mount
用于挂载镜像等
ansible all -m mount -a "src=/dev/cdrom path=/mnt fstype=iso9660 state=present"
#添加开机自动挂载文件,但是不会立即挂载
ansible webserver -m mount -a "src=/dev/sr0 path=/mnt fstype=iso9660 state=mounted"
#立即挂载
yum
用于对软件包的管理,下载、安装、卸载、升级等操作
name #指定要操作的软件包名字
download_dir #指定下载软件包的存放路径,需要配合download_only一起使用
download_only #只下载软件包,而不进行安装,和yum --downloadonly一样
list:
installed #列出所有已安装的软件包
updates #列出所有可以更新的软件包
repos #列出所有的yum仓库
state:
installed, present #安装软件包(两者任选其一都可以)
removed, absent #卸载软件包
latest #安装最新软件包
# 列出所有已安装的软件包
ansible all -m yum -a 'list=installed'
# 列出所有可更新的软件包
ansible all -m yum -a 'list=repos'
#列出所有的yum仓库
ansible all -m yum -a 'list=repos'
#安装软件包
ansible all -m yum -a 'name=lrzsz state=installed'
#卸载软件包
ansible all -m yum -a 'name=lrzsz state=removed'
#安装包组,类似yum groupinstall 'Development Tools'
ansible all -m yum -a 'name="@Development Tools" state=installed'
Service
服务模块,用于对服务进行管理,服务的启动、关闭、开机自启等
name #指定需要管理的服务名
enabled #指定是否开机自启动
state: #指定服务状态
started #启动服务
stopped #停止服务
restarted #重启服务
reloaded #重载服务
# 启动服务,并设置开机自启动
ansible all -m service -a 'name=crond state=started enabled=yes'
# 查看模块参数
pip
#用于安装python中的包
# 使用pip时,需要保证被管理机器上有python-pip软件包
ansible all -m yum -a 'name=python-pip'
# 安装pip包
ansible all -m pip -a 'name=flask'
cron
用于指定计划任务,和
crontab -e
一样
job #指定需要执行的任务
minute #分钟
hour #小时
day #天
month #月
weekday #周
name #对计划任务进行描述
state:
absent #删除计划任务
# 创建一个计划任务,并描述是干嘛用的
ansible all -m cron -a "name='测试的计划任务' minute=* hour=* day=* month=* weekday=* job='/bin/bash /root/test.sh'"
# 创建一个没有带描述的计划任务
ansible all -m cron -a "job='/bin/sh /root/test.sh'"
# 删除计划任务
ansible all -m cron -a "name='测试的计划任务' job='/bin/bash /root/test.sh' state=absent"
setup
用于获取系统信息的一个模块
# 查看系统所有信息
setup
# filter 对系统信息进行过滤
ansible all -m setup -a 'filter=ansible_all_ipv4_addresses'
# 常用的过滤选项
ansible_all_ipv4_addresses 所有的ipv4地址
ansible_all_ipv6_addresses 所有的ipv6地址
ansible_architecture 系统的架构
ansible_date_time 系统时间
ansible_default_ipv4 系统的默认ipv4地址
ansible_distribution 系统名称
ansible_distribution_file_variety 系统的家族
ansible_distribution_major_version 系统的版本
ansible_domain 系统所在的域
ansible_fqdn 系统的主机名
ansible_hostname 系统的主机名,简写
ansible_os_family 系统的家族
ansible_processor_cores cpu的核数
ansible_processor_count cpu的颗数
ansible_processor_vcpus cpu的个数
find
find 模块可以帮助我们在被管理主机中查找符合条件的文件,就像 find 命令一样。
在主机的
/opt
目录中查找文件内容中包含 abc 字符串的文件,隐藏文件会被忽略,不会进行递归查找。
ansible all -m find -a 'paths=/opt contains=".*abc.*"'
在 主机的
/opt
目录以及其子目录中查找文件内容中包含 abc 字符串的文件,隐藏文件会被忽略。
ansible all -m find -a 'paths=/opt contains=".*abc.*" recurse=yes '
在主机的
/opt
目录中查找以.sh
结尾的文件,包括隐藏文件,但是不包括目录或其他文件类型,不会进行递归查找。
ansible all -m find -a 'paths=/opt patterns="*.sh" hidden=yes'
在主机的
/opt
目录中查找以.sh
结尾的,包括隐藏文件,包括所有文件类型,比如文件、目录、或者软链接,但是不会进行递归查找。
ansible all -m find -a 'paths=/opt patterns="*.sh" file_type=any hidden=yes'
在主机的
/opt
目录中查找以.sh
结尾的文件,只不过 patterns 对应的表达式为正则表达式,查找范围包括隐藏文件,包括所有文件类型,但是不会进行递归查找,不会对/opt
目录的子目录进行查找。
ansible all -m find -a 'paths=/opt patterns=".*\.sh" use_regex=yes file_type=any hidden=yes'
在 主机的 /opt目录中以及其子目录中查找 mtime 在1天以内的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。
ansible all -m find -a "paths=/opt patterns=*.sh get_checksum=yes hidden=yes recurse=yes"
ansible all -m find -a "paths=/opt age=-1d recurse=yes"
在主机的/opt目录中以及其子目录中查找大于 2g 的文件,不包含隐藏文件,不包含目录或软链接文件等文件类型。
ansible all -m find -a "paths=/opt size=2g recurse=yes"
在主机的
/opt
目录中以及其子目录中查找以.sh
结尾的文件,并且返回符合条件文件的 sha1 校验码,包括隐藏文件。
replace
replace 模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换。
常用参数path参数 :必须参数,指定要操作的文件,2.3版本之前,只能使用 dest, destfile, name指定要操作的文件,2.4版本中,仍然可以使用这些参数名,这些参数名作为 path 参数的别名使用。regexp参数 : 必须参数,指定一个 python 正则表达式,文件中与正则匹配的字符串将会被替换。replace参数 : 指定最终要替换成的字符串。backup参数 :是否在修改文件之前对文件进行备份,最好设置为yes。
把 主机中的
/opt/test
文件中的所有 ABC 替换成 abc。
ansible all -m replace -a 'path=/opt/test regexp="ABC" replace=abc'
把 testA 主机中的 /opt/test文件中的所有 ABC 替换成 abc,但是在操作文件之前进行备份。
ansible all -m replace -a 'path=/opt/test regexp="ABC" replace=abc backup=yes'