运维自动化之ansible

Ansible ginotang 865℃ 0评论

ansible简介

ansible是一个强大的运维自动化工具,在主控制机器上安装ansible,通过ssh连接,就可以方便地管理其他机器,被管理的机器上不需要安装任何客户端,且通过ssh连接,传输的数据受到安全的保护。ansible强大,但学习曲线简单,学习ansible并不需要太多的编程知识。

安装ansible

以centos7为例子,通过yum安装ansible

如果提示找不到ansible包,可能没有安装epel repo。可以通过下面的命令先安装epel

ansible配置文件

ansible有一个名为ansible.cfg的配置文件,ansible会在以下三个地方寻找这个文件

  1. ANSIBLE_CONFIG变量的值
  2. /etc/ansible目录
  3. 用户home目录

最先找到的优先生效,默认这个文件在/etc/ansible目录下。

使用ansible

ansible是通过ssh管理受控端的,因此,如果希望运行ansible命令的时候无须输入密码,就要把服务器的公钥存放到受控端中。假设受控端为centos7-host1和centos7-host2:

第一条ansible命令

命令解释:

  • ansible ansible的其中一个命令行工具
  • all 所有受控的主机,这些主机保存在invertory文件中
  • -m ping -m(module)表示使用指定的ansible模块,这里是ping模块

也就是说,该命令使用ping测试所有主机是否在线,通常来说,ansible可以根据返回文本的颜色判断命令执行状态,成功执行的文本颜色为绿色,失败的为红色

Inventory

inventory是指所有的受控主机,这些主机保存在/etc/ansible/hosts文件中。我们可以使用两种方式编写这个文件

  • ini配置方式,默认方式
  • yaml配置方式

我们可以决定是否对主机进行分组保存,每一个分组以方括号[]区分。inventory默认有两个分组:allungrouped,all包括了所有的主机,而ungrouped则包括所有没有分组的主机。例如分三组,local、webserver和database,配置文件编写如下:

ini方式

yaml方式

yaml方式中一定不能忘记主机后面的冒号:,否则可能会解析错误;主机可以使用域名,也可以使用ip地址。本地主机最好使用ansible_connection=local变量标识,否则本地主机会和远程主机一样处理

查看分组中的主机

正则匹配

主机可以使用正则匹配,例如:

  • webserver[01:10] 匹配webserver01到webserver10之间的所有主机
  • database-[a:f] 匹配database-a到database-f之间的所有主机
  • 192.168.11.[7:8] 匹配192.168.11.7和192.168.11.8

除了inventory文件支持正则匹配之外,ansible命令也支持正则,例如:

Ad-Hoc和playbook

ansible可以通过两种方式执行任务,它们是:

  • Ad-Hoc
  • playbook

它们的区别类似于shell的行内代码和script脚本文件,前者适合执行一些临时性的或者简单的任务;后者则适合执行复杂的,且以后会重复执行的任务。可以认为playbook由多条Ad-Hoc任务组合而成,但稍有不同。

Ad-Hoc

前面我们已经使用过Ad-Hoc的方式执行任务,例如

playbook

playbook文件使用yaml编写,一个playbook文件可以由一个或多个play组成,每一个play由hosts标识区分。例如:

包含一个play的playbook

包含两个play的playbook

上面的playbook示例使用了yum模块,该模块相当于centos系统的yum功能,用于管理软件包。

playbook文件由ansible-playbook命令执行,例如执行example.yml:

检查playbook语法

ansible-playbook命令提供了语法检查选项--syntax-check。例如检查httpd.yml的语法

如果playbook中的语法没有错误,则显示如上,否则会输出错误信息。

Dry run选项

Dry run的意思是模拟playbook的运行过程,但实际上对系统不造成任何影响。

开启dry run模式的选项是--check

在2.2版本之后,通过check_mode变量,可以针对特定的任务开启和关闭Dry run模式。

模块

ansible的强大在于它内置了非常多的模块,可以通过下面的命令列出所有ansible支持的模块

在ansible 2.6.0版本中,一共有1800多个模块。

常用模块

虽然模块很多,但是常用的模块不外乎下面这些

  1. ping 网络测试模块
  2. command/shell 命令执行模块
  3. script 脚本执行模块
  4. user 用户管理模块
  5. yum/apt 软件包管理模块,针对不同的系统有不同的模块
  6. service/systemd 服务管理模块
  7. file/copy 文件管理模块
  8. git 版本管理模块

更多模块的资料可到官方网站查询

如果需要获得相关模块的使用方法,可以使用下面的命令

模块的简单使用

使用ping模块

使用command/shell模块

两者的作用类似

返回结果:

使用service/systemd模块

两者的作用类似

由于返回的内容太多,不在这里列出。

转载请注明:Pure nonsense » 运维自动化之ansible

喜欢 (0)
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x
()
x