ansible 默认提供了很多模块来供我们使用。
在 Linux 中,我们可以通过 ansible-doc -l 命令查看到当前 ansible 都支持哪些模块
通过ansible-doc -s 模块名 又可以查看该模块有哪些参数可以使用。
1.ansible常用的几个模块及其相应的参数设置
copy file ron group user yum service script ping command raw get_url
ansible-inventory:定义主机
ansible-playbook:角色指定
ansible-doc:文档
ansible-vault:加密解秘用到
-m 匹配默认的命令模块
-a 指定的模块参数
-f 10个线程并发操作默认为5个
-m shell :运行shell脚本
1.模块的文档查看及其指定模块的参数查看相应的被管理节点
[devops@server1 ansible]$ ansible-doc copy 查看copy模块的帮助文档
[devops@server1 ansible]$ ansible test -a 'df -h' 查看定义的test主机上的挂载使用情况
2.copy模块的应用
用法
src :本地文件路径,可以是绝对和相对
dest= :不可省,如果src是目录,则dest也是目录。只能是绝对路径
group :指明文件属组
mode :指明权限
owner :指明所有者
content :直接写出内容,并将其复制给远程主机
//直接写出复制到远端主机的内容
3.file模块的应用
用法
//创建链接文件
path=/PATH/TO/SOMEFILE src=/PATH/TO/SOMEFILE state=link
path指向的路径生成一个链接文件,链接文件指向src指向的路径。
//创建目录
path=/PATH/TO/SOMEFILE state=directory
//删除文件
path=/PATH/TO/SOMEFILE state=absent (也可以使用present表示添加文件)
//修改远程主机文件的相应权限
//创建目录
//删除文件
3.yum模块
进行安装相应的软件时首先会做采集动作,如果安装的软件已经存在就不会进行安装
用法:
name= : 指明管理程序包包名
state :present,installed表示安装程序包,latest表明安装最新版本;absent和removed表示卸载安装包,默认是安装最新版本
准备:
//在被管理节点server2,server3配置可以对其进行远程操作的sudo
[root@server2 ~]# vim /etc/sudoers
[root@server3 ~]# vim /etc/sudoers
文件添加内容如下:
93 devops ALL=(ALL) NOPASSWD: ALL
//进行安装时需要切换超级用户身份来执行,因此需要ansible管理节点server1上的devops用户下配置超级用户执行权限
[devops@server1 ansible]$ vim ansible.cfg
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
应用:
//在被管理节点安装httpd并且开启httpd
[devops@server1 ansible]$ ansible db -m yum -a 'name=httpd state=present'
[devops@server1 ansible]$ ansible db -m service -a 'name=httpd state=started'
测试:
[devops@server1 ansible]$ curl server3 //测试默认发布页面
[devops@server1 ansible]$ ansible db -m copy -a 'content="www.westos.org\n" dest=/var/www/html/index.html'
[devops@server1 ansible]$ curl server3 //测试
www.westos.org
4.service模块
用法:
name= :管理服务的名称
enabled : 是否开机启动
state : started/stopped启动或停止服务;restart重启服务;reloaded重新加载配置文件,注意如果服务没有起来会启动服务。
//在被管理节点开启火墙并且设置火墙开机自启
[devops@server1 ansible]$ ansible db -m service -a 'name=firewalld state=started'
[devops@server1 ansible]$ ansible db -m service -a 'name=firewalld state=started enabled=true
测试:再次访问server3发现访问不到
//重新添加火墙策略
[devops@server1 ansible]$ ansible db -m firewalld -a 'service=http state=enabled permanent=yes immediate=yes' //添加火墙策略