Ansible的食用指南

Ansible的使用背景

当测试环境只有1-2台主机时,我们要完成一个版本包的部署或者提取一个日志是非常之容易的事情,但是随着项目进度的进行,动辄上千台甚至上百台主机的话,我们一台一台的执行命令显然是不现实的,这个时候便引入我们的主角:ansible

——2023年12月12日更新

安装报错解决方案

问题1:Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

CentOS-8 - Base - mirrors.aliyun.com                                                                                                                         45  B/s | 2.3 kB     00:51    
Errors during downloading metadata for repository 'base':
  - Curl error (6): Couldn't resolve host name for http://mirrors.cloud.aliyuncs.com/centos/8/os/x86_64/repodata/repomd.xml [Could not resolve host: mirrors.cloud.aliyuncs.com]
  - Curl error (28): Timeout was reached for http://mirrors.aliyuncs.com/centos/8/os/x86_64/repodata/repomd.xml [Connection timed out after 30001 milliseconds]
  - Status code: 404 for http://mirrors.aliyun.com/centos/8/os/x86_64/repodata/repomd.xml (IP: 124.165.216.219)
Error: Failed to download metadata for repo 'base': Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

 解决办法:CentOS更改yum源与更新系统

第一步:查看系统信息

cat  /etc/redhat-release

第二步:根据你的系统版本号,例如centos7还是centos8还是centos 21.10LTS_SP2等,根据下面的信息进行调整配置,确保你已经安装了wget

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

 参考博客:错误:Failed to download metadata for repo ‘base‘: Cannot download repomd.xml-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/u011106915/article/details/118381375

问题2:"msg": "Failed to connect to the host via ssh: ssh: connect to host 10.10.100.00 port 22: Connection refused\r\n", 

解决办法:更改配置文件中的端口(如下文的host_local中添加ansible_port=223即修改为你主机实际的端口号即可)

Ansible是什么

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible基于模块化工作,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的,并且上手容易,学习简单。

Ansible程序结构及配置

安装目录如下(yum安装):

  • 配置文件目录:/etc/ansible/ (/etc:所有的系统管理所需要的配置文件和子目录)

  • 执行文件目录:/usr/bin/ (/usr:存放应用程序和目录;/bin:是binary的缩写,这个目录存放着最经常使用的命令)

  • Lib库依赖目录:/usr/lib/pythonX.X/site-packages/ansible/ (/lib:系统开机所需要最基本的动态连接共享库)

其他配置项如下:

图片

ansible的默认配置文件路径为 /etc/ansible,一般不会使用这些默认文件,我们可以根据需要在本地目录中创建配置文件:例如host_local

cat host_local[web] #用[]代表一个主机组10.xxx.xxx.11110.xxx.xxx.112[all:vars]ansible_ssh_user="" #输入你各主机的用户名ansible_ssh_pass="" #输入你各主机的密码

Ansible的执行

Ansible在运行时,首先读取ansible.cfg中的配置,根据规则获取Inventory中的管理主机列表,并行的在这些主机中执行配置的任务,最后等待执行返回的结果。

Ansible的命令具体格式:

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

-i inventory    #指定主机清单的路径,默认为/etc/ansible/hosts,上面举例host_local即你想要批量的执行脚本或者命令,总得要有要执行的主机列表吧

-f forks    #并行任务数,默认为5

-m module_name    #执行模块的名字,默认使用 command 模块即你想要批量执行脚本或者命令,现在已经知道了主机列表,总得进一步了解你需要做什么吧

-a args    #模块的参数,如果执行默认command的模块,即是命令参数,如:“ls”,“pwd”等等

主机联通性测试:

$ ansible -i host_local web -m ping|head10.xxx.xxx.111| SUCCESS => {    "changed": false,    "ping": "pong"}10.xxx.xxx.112| SUCCESS => {    "changed": false,    "ping": "pong"}

#以上结果代表着我们可以正常连接远程主机,接下来的操作才可以正常进行

shell模块

shell模块可以在远程主机上调用shell解释器运行命令,支持shell的各种功能,例如管道只要是我们的shell命令,都可以通过这个模块在远程主机上运行

ansible -i host_local 10.xxx.xxx.111 -m shell -a "ps -ef |grep abc.sh"

Copy模块

copy模块可以将本地文件复制到远程主机(并指定权限)

ansible -i host_local all -m copy -a "src=./adc.tar.gz dest=/xxx/xxx/tower.tar.gz mode=0755"

src #被复制到远程主机的本地文件,可以是绝对路径,也可以是相对路径;

dest #必选项,将源文件复制到的远程主机的绝对路径。

file模块

模块主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。directory:如果目录不存在,就创建目录;absent:删除目录、文件或者取消链接文件。

ansible -i host_local all -m file -a 'path=/log/web state=directory'

fetch模块

fetch模块用于从远程某主机获取(复制)文件到本地

ansible -i host_local 10.xxx.xxx.111 -m fetch -a "src=./log/web/tower.log dest=/home/adc/ flat=yes"

src:在远程拉取的文件,可以是一个file或目录

dest:用来存放文件的目录

flat:参数用于指定是否将文件复制到指定目录下的根目录中

(默认情况下,当您使用 Fetch 模块时,Ansible 将文件复制到指定目录中的子目录中,该子目录的名称基于远程主机上文件的完整路径。例如./log/web/tower.log文件从远程复制到本地的家目录中将默认复制到home/log/web/中。如在使用 Fetch 模块时将 flat=yes 参数设置为 yes,则将文件复制到指定目录的根目录下,而不是使用子目录。这意味着文件名将保持不变,并且将被复制到指定的目录中)

另外fetch模块执行时需要远程主机有读取权限且文件(目录)真实存在,同时本地主机需要有写入权限。

service模块

service模块用于服务程序的管理

ansible -i host_local web -m service -a 'name=nginx state=started enabled=true'

name #服务名称;enabled #设置开机启动

state #有四种状态,分别为:started--->启动服务, stopped--->停止服务, restarted--->重启服务, reloaded--->重载配置

script模块

script模块用于将本机的脚本在远程主机上运行,该模块直接指定脚本的路径即可。script 模块将脚本文件复制到远程主机上的一个临时目录中,然后在远程主机上执行该脚本。因此,如果使用脚本模块运行的任何脚本需要其他文件或资源,则必须确保这些文件或资源也被复制到远程主机上。

ansible -i host_local web -m script -a '/tmp/cp.sh'
  • 24
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值