自动化运维工具--Ansible常用模块
Posted walkman-sky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自动化运维工具--Ansible常用模块相关的知识,希望对你有一定的参考价值。
注意:-a 参数后的命令用单引号;双引号有可能会出问题,特别是在user模块
模块一:测试目标主机是否在线,ping模块
主机如果在线,则回复Pong
[[email protected] ~]# ansible web -m ping 192.168.30.36 | SUCCESS => { "changed": false, "ping": "pong" } 192.168.30.32 | SUCCESS => { "changed": false, "ping": "pong" }
模块二:command模块和shell模块
用于在各被管理主机节点运行指定的命令
shell与command的区别:command模块是执行ansible自带模块执行,如果要用> < | & ‘ ‘等管道,需要使用shell模块
[[email protected] tmp]# ansible web -m command -a ‘uptime‘ 192.168.30.32 | SUCCESS | rc=0 >> 21:10:43 up 138 days, 1:34, 1 user, load average: 0.00, 0.01, 0.05 192.168.30.36 | SUCCESS | rc=0 >> 21:08:30 up 95 days, 3:02, 4 users, load average: 0.00, 0.00, 0.00
shell模块:
[[email protected] tmp]# ansible web -m shell -a ‘cat /etc/fstab | grep ^UUID‘ 192.168.30.36 | SUCCESS | rc=0 >> UUID=28b3513d-9e6f-42a8-ade0-7700573fed2a /boot ext4 defaults 1 2 192.168.30.32 | SUCCESS | rc=0 >> UUID=de2e369a-c0e8-4188-89e0-db1f4aded764 /boot xfs defaults 0 0
相关选项如下:
creates:一个文件名,当文件名存在,则该命令不执行
chdir:在执行指令之前,先切换到该目录
free_from:要执行的Linux指令
removes:一个文件名,当文件名不存在,则该命令不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
参考:<https://docs.ansible.com/ansible/latest/modules/shell_module.html>
模块三:远程复制备份--copy模块
[[email protected] tmp]# ansible web -m copy -a ‘src=/etc/hosts dest=/tmp/hosts‘
相关选项:
backup:在覆盖前,将源文件备份,备份文件包含时间信息,有俩选项:yes|no content:用于替代”src”,可以直接设定指定文件的值 dest:必选项,要将源文件复制到远程主机的绝对路径,如果源文件是一个目录,那么该路径必须是个目录 directory_mode:递归设定目录的权限,默认为系统默认权限 force:如果目标主机包含该文件,但内容不同,如果设置为yes,则强制覆盖,如果为no,则只有当目标主机的目标位置不存在该文件时,才复制。默认为yes others:所有的file模块里的选项都可以在这里使用 src:被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径。如果路径是一个目录,他将递归复制。这种情况路径使用”/”来结尾,则只复制目录里的内容,如果没有使用“/”,则包含目录在内的全部内容复制,类似与rsync。 owner:指定属主 group:指定属组 mode:指定权限,可以以数字指定比如0644
参考:<https://docs.ansible.com/ansible/latest/modules/copy_module.html>
模块四:对远程文件管理--file模块
修改文件权限: [[email protected] ~]# ansible web -m file -a ‘path=/srv/a.txt mode=600 owner=snow group=snow‘ 创建一个文件: [[email protected] ~]# ansible web -m file -a ‘dest=/srv/a.txt state=touch‘ 创建一个目录文件: [[email protected] ~]# ansible web -m file -a ‘path=/srv/haha mode=600 state=directory‘ 创建一个软链接: [[email protected] ~]# ansible web -m file -a ‘dest=/srv/a.lnk src=/srv/a.txt state=link‘ 删除文件: [[email protected] ~]# ansible web -m file -a ‘path=/srv/a.lnk state=absent‘
相关选项:
force:需要在两种情况下强制创建软链接,一种源文件不存在,但之后会建立的情况;另一种是目标软链接存在,需要先取消之前的链接,再创建新链接,有两个选项:yes|no path:必选项,定义文件/目录的路径(alias:dest,name) recurse:递归设置文件的属性,只对目录有效 src:被链接的源文件路径,只能用于state=link情况 dest:目标文件路径,只能用于state-link情况 state: directory:如果目录文件不存在,就创建目录文件 *file:即使文件不存在也会被创建 link:创建软链接 hard:创建硬链接 touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间 absent:删除目录、文件或者取消链接文件
参考:<https://docs.ansible.com/ansible/latest/modules/file_module.html>
fetch模块
: 从远程服务器拉取文件至本机,只能fetch文件,不能fetch目录,如果拉目录,先tar/zip 再拉到本机即可。
使用参考:<https://docs.ansible.com/ansible/latest/modules/fetch_module.html>
模块五:程序包管理工具--yum模块
安装程序包(可接版本号): [[email protected] ~]# ansible web -m yum -a ‘name=httpd state=present‘ 安装最新程序包: [[email protected] ~]# ansible web -m yum -a ‘name=httpd state=latest‘ 卸载程序包: [[email protected] ~]# ansible web -m yum -a ‘name=httpd state=absent‘
相关选项:
conf_file #设定远程yum安装时所依赖的配置文件。如配置文件没有在默认的位置。 disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest‘。 disablerepo #临时禁止使用yum库。 只用于安装或更新时。 enablerepo #临时使用的yum库。只用于安装或更新时。 name= #所安装的包的名称 state= #present安装, latest安装最新的, absent 卸载软件。 update_cache #强制更新yum的缓存
参考:<https://docs.ansible.com/ansible/latest/modules/yum_module.html>
注意:此模块只能在Python2上使用,在Python3上需要使用dnf模块用于包管理
使用参考:<https://docs.ansible.com/ansible/latest/modules/dnf_module.html>
模块六:服务程序管理--Service模块
启动服务: [[email protected] ~]# ansible web -m service -a ‘name=httpd state=started‘ 开机启动服务: [[email protected] ~]# ansible web -m service -a ‘name=httpd enabled=yes‘
相关选项:
arguments #命令行提供额外的参数 enabled #设置开机启动。 name= #服务名称 runlevel #开机启动的级别,一般不用指定。 sleep #在重启服务的过程中,是否等待。如在服务关闭以后等待2秒再启动。 state #started启动服务, stopped停止服务, restarted重启服务, reloaded重载配置
参考:<https://docs.ansible.com/ansible/latest/modules/service_module.html>
模块七:管理计划任务--cron模块
[[email protected] ~]# ansible web -m cron -a ‘name="sync time" minute=*/10 job="/usr/sbin/ntpdate ntp.aliyun.com"‘
相关选项:
backup= # 如果设置,创建一个crontab备份 cron_file= #如果指定, 使用这个文件cron.d,而不是单个用户crontab day= # 日应该运行的工作( 1-31, *, */2, etc ) hour= # 小时 ( 0-23, *, */2, etc ) job= #指明运行的命令是什么 minute= #分钟( 0-59, *, */2, etc ) month= # 月( 1-12, *, */2, etc ) name= #定时任务描述 reboot # 任务在重启时运行,不建议使用,建议使用special_time special_time # 特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时) state #指定状态,prsent表示添加定时任务,也是默认设置,absent表示删除定时任务 user # 以哪个用户的身份执行 weekday # 周 ( 0-6 for Sunday-Saturday, *, etc )
参考:<https://docs.ansible.com/ansible/latest/modules/cron_module.html>
模块八:远程主机执行本地脚本--script模块
[[email protected] ~]# ansible web -m script -a ‘/tmp/a.sh‘
相关选项:
creates:一个文件名,当文件名存在,则该命令不执行
chdir:在执行指令之前,先切换到该目录
free_from:要执行的Linux指令
removes:一个文件名,当文件名不存在,则该命令不执行
executable:切换shell来执行指令,该执行路径必须是一个绝对路径
decrypt:使用Vault控制源文件的自动解码,选项yes|no
参考:<https://docs.ansible.com/ansible/latest/modules/script_module.html>
模块九:用户管理--User模块
创建加密密码:
[[email protected] ~]# echo 123456 | openssl passwd -1 -stdin $1$wMroVeEW$2ImLQiNupnwDJ5nk86F2X0
创建新用户:
[[email protected] ~]# ansible web -m user -a ‘name=wolf system=yes password=$1$wMroVeEW$2ImLQiNupnwDJ5nk86F2X0 state=present‘
更新用户密码:
[[email protected] ~]# ansible web -m user -a ‘name=wolf update_password=always password=$1$wMroVeEW$2ImLQiNupnwDJ5nk86F2X0‘
删除用户:
[[email protected] ~]# ansible web -m user -a ‘name=wolf remove=yes state=absent‘
相关选项:
comment # 用户的描述信息 createhom # 是否创建家目录,yes,默认项,即创建家目录;no,创建用户时不创建家目录. force # 在使用`state=absent‘是, 行为与`userdel --force‘一致. group # 指定基本组 groups # 指定附加组,如果指定为(‘groups=‘)表示删除所有组 home # 指定用户家目录 login_class #可以设置用户的登录类 FreeBSD, OpenBSD and NetBSD系统. move_home # 如果设置为`home=‘时, 试图将用户主目录移动到指定的目录 name= # 指定用户名 non_unique # 该选项允许改变非唯一的用户ID值 password # 指定用户密码,password参数需要接受md5加密后的值 remove # yes:删除家目录,需要指定此参数;no:默认项,删除用户时默认不删除用户家目录. shell # 指定默认shell state #设置帐号状态,默认值为present表示创建,可不写,指定值为absent表示删除 system # 当创建一个用户,设置这个用户是系统用户。这个设置不能更改现有用户。 uid #指定用户的uid update_password # 更新用户密码,always:新密码和旧密码不同时进行修改,on_create:为新建用户指定密码 expires #指明密码的过期时间
参考:<https://docs.ansible.com/ansible/latest/modules/user_module.html>
模块十:收集远程主机的信息--setup模块
收集可用的facts用于内建变量。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。如redhat系列用yum安装,而debian系列用apt来安装软件
[[email protected] ~]# ansible web -m setup
参考:<https://docs.ansible.com/ansible/latest/modules/setup_module.html>
以上是关于自动化运维工具--Ansible常用模块的主要内容,如果未能解决你的问题,请参考以下文章