ansible自动化运维(二)——环境部署及常用模块的使用

本文介绍了Ansible的环境部署步骤,包括配置文件、主机清单和角色目录设置。详细讲解了如何安装、配置以及测试Ansible,确保所有节点能通过SSH免密通信。接着,文章列举了几个常用的Ansible模块,如command、copy、file、yum、service和firewalld,展示了它们在实际操作中的应用,如文件复制、权限管理、服务安装和启动以及防火墙规则设置。

实验环境

主机ip
server1(主控端)172.25.6.1
server2(节点)172.25.6.2
server3(节点)172.25.6.3

一、环境部署

ansible的配置文件:

  • /etc/ansible/ansible.cfg 主配置文件,配置ansible工作特性
  • /etc/ansible/hosts 主机清单
  • /etc/ansible/roles/ 存放角色的目录

1.下载ansible所需要的相关rpm包及其依赖包,进行安装

ansible-2.7.8-1.el7.noarch.rpm
ansible-tower-setup-bundle-3.4.2-1.el7.tar.gz
libtomcrypt-1.17-25.el7.x86_64.rpm
libtommath-0.42.0-5.el7.x86_64.rpm
python2-crypto-2.6.1-13.el7.x86_64.rpm
python2-jmespath-0.9.0-1.el7.noarch.rpm
python-httplib2-0.9.2-0.1.el7.noarch.rpm
python-keyczar-0.71c-2.el7.noarch.rpm
python-paramiko-2.1.1-0.9.el7.noarch.rpm
sshpass-1.06-1.el7.x86_64.rpm
[root@server1 ansible]# yum install -y *

在这里插入图片描述

2.编辑/etc/hosts文件,添加本地解析(因为ansible的连接是通过ssh)

[root@server1 ~]# vim /etc/hosts

在这里插入图片描述
3.添加普通用户使用ansible

[root@server1 ~]# useradd devops
[root@server1 ~]# su - devops 
[devops@server1 ~]$ mkdir ansible
[devops@server1 ~]$ cd ansible/
[devops@server1 ansible]$ ls
[devops@server1 ansible]$ 

在这里插入图片描述

4.编辑ansible主配置文件

[devops@server1 ansible]$ vim ansible.cfg
[devops@server1 ansible]$ cat ansible.cfg 
[defaults]


inventory      = inventory		管理主机的清单

在这里插入图片描述

5.设置ansible主机

[devops@server1 ansible]$ vim inventory
[devops@server1 ansible]$ cat inventory 
[test]
server2

[db]
server3

[webservers:children]
test
db
[devops@server1 ansible]$ 

在这里插入图片描述
6.给两个节点server2和server3同样添加devops用户,并且设置密码

[root@server2 ~]# useradd devops
[root@server2 ~]# passwd devops 
[root@server3 ~]# useradd devops
[root@server3 ~]# passwd devops 

7.设置ssh免密登陆

[devops@server1 ansible]$ ssh-keygen
[devops@server1 ansible]$ ssh-copy-id server2
[devops@server1 ansible]$ ssh-copy-id server3

在这里插入图片描述
下面使用的密码为前面设置的devops密码
在这里插入图片描述
8.测试ansible

  • 查看所有的节点
    在这里插入图片描述
  • 测试所有的ansible节点是否可以ping通
    在这里插入图片描述

二、ansible常用参数及命令

参数功能
-m要执行的模块,默认为command
-a指定模块的参数
-ussh连接的用户名,默认用root,ansible.cfg中可以配置
-b,–become变成那个用户身份,不提示密码
-k提示输入ssh登录密码,当使用密码验证的时候用
-ssudo运行
-Usudo到哪个用户,默认为root
-K提示输入sudo密码,当不是NOPASSWD模式时使用
-C只是测试一下会改变什么内容,不会真正去执行
-c连接类型(default=smart)
-ffork多少进程并发处理,默认为5个
-i指定hosts文件路径,默认default=/etc/ansible/hosts
-I指定pattern,对已匹配的主机中再过滤一次
-list-host只打印有哪些主机会执行这个命令,不会实际执行
-M要执行的模块路径,默认为/usr/share/ansible
-o压缩输出,摘要输出
–private-key私钥路径
-Tssh连接超时时间,默认是10秒
-t日志输出到该目录,日志文件名以主机命名
-v显示详细日志

2.常用命令

ansible server2 -m setup  		##查看指定主机server1上的facts变量信息
ansible all -m setup   			##查看指定的所有主机上的facts变量信息
ansible '*' -m setup			##同上

在这里插入图片描述
在这里插入图片描述

ansible-doc -l							##列出有哪些可用的模块,按q退出

在这里插入图片描述

ansible-doc -l | wc -l		##列出有多少个可用的模块
ansible-doc user			##查看user模块的帮助文档,按q退出。也可以在最后一行输入/passwd,来过滤与passwd有关的内容
ansible test -a 'df -h'  	##在test组执行df -h命令

在这里插入图片描述

三、ansible常用模块

1.默认模块command

一般来说如果-m后面没有加模块则默认使用command模块

2.copy模块

[devops@server1 ansible]$ ansible test -m copy -a 'src=/etc/passwd dest=/tmp/passwd'		
##src源地址,dest为节点主机目标地址

在这里插入图片描述

查看是否将本机文件复制到server2上
在这里插入图片描述
在这里插入图片描述
3.file模块

查看server2的/tmp下的文件权限(刚刚复制过去的文件)
在这里插入图片描述
查看权限
在这里插入图片描述
在这里插入图片描述
4.yum模块

需要注意的是我们在使用yum的时候普通用户是要有sudo权限的
因此先设置server2和server3中devops用户的sudo权限

[root@server2 ~]# vim /etc/sudoers	#保存退出时如果显示权力不够,则加wq!强制保存即可
[root@server3 ~]# vim /etc/sudoers

在这里插入图片描述
权限设置好以后,尝试在server2上安装httpd服务

[devops@server1 ansible]$ ansible test -m yum -a 'name=httpd state=present' -b	
##一定要加-b,指定sudo,否则回报错

在这里插入图片描述
查看是否下载成功

[devops@server1 ansible]$ ansible test -a 'rpm -q httpd'

在这里插入图片描述

当然如果不愿意加-b去特别指定的话,我们也可以修改主配置文件,给与sudo所需要的权限

[devops@server1 ansible]$ vim ansible.cfg 
[devops@server1 ansible]$ cat ansible.cfg 
[defaults]


inventory      = inventory

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

在这里插入图片描述

我们去尝试在server2和server3上都安装httpd,不加参数-b

[devops@server1 ansible]$ ansible webservers -m yum -a 'name=httpd state=present'

在这里插入图片描述

5.service模块

启动db(server3)的httpd服务

[devops@server1 ansible]$ ansible db -m service -a 'name=httpd state=started'

在这里插入图片描述
我们给它写一个默认发布界面,方便我们测试

[devops@server1 ansible]$ ansible db -m copy -a 'content="hello world\n" dest=/var/www/html/index.html'

在这里插入图片描述
6.firewalld防火墙模块

首先,开启防火墙

[devops@server1 ansible]$ ansible db -m service -a 'name=firewalld state=started enabled=true'

在这里插入图片描述
测试:

在这里插入图片描述
我们把httpd服务加入防火墙的白名单:

[devops@server1 ansible]$ ansible db -m firewalld -a 'service=http state=enabled permanent=yes immediate=yes'

在这里插入图片描述
关闭防火墙

[devops@server1 ansible]$ ansible db -m service -a 'name=firewalld state=stopped enabled=false'

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值