运维自动化工具之Ansible

Posted 纵享山河万里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维自动化工具之Ansible相关的知识,希望对你有一定的参考价值。

一.简介

1.什么是ansible?

          ansible的官方标题为:"Ansible is Simple IT Automation",也就是说ansible是一种简单的自动化IT工具.

    工具目标:1.自动化部署APP 2.自动化管理配置项 3.自动化的持续交付 4.自动化的云服务管理

2.ansible特性

   模块化:调用特定的模块,完成特定的任务

   Paramiko (Python对ssh的实现),PyYaml,Jinja2(模板语言)三个关键模块

   支持自定义模块,可使用任何编程语言写模块

   基于Python语言实现

   部署简单,基于python和SSH(默认已安装),agentless,无需代理不依赖       

   KPI(无需SSL) 安全,

   基于OpenSSH 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况

   支持playbook编排任务,YAML格式,编排任务,支持丰富的数据结构

   较强大的多层解决方案role

二.安装

 1.   方法一(推荐):yum安装 :

yum -y install epel-release
yum install ansible -y

 2.  方法二:编译安装:

yum -y install python-jinja2 PyYAML python-paramiko python-babel 
python-crypto 
tar xf ansible-1.5.4.tar.gz 
cd ansible-1.5.4 
python setup.py build 
python setup.py install 
mkdir /etc/ansible 
cp -r examples/* /etc/ansible 

还有git方法安装和pip安装,在这里我就不赘述了,上述两种办法安装即可,更推荐使用yum安装.

ansible --version:结果如下图所示即为成功

三.相关文件

/etc/ansible/ansible.cfg   主配置文件 

/etc/ansible/hosts         主机清单

/etc/ansible/roles          存放角色的目录

 前两个比较重要,需要着重记忆.

/usr/bin/ansible        主程序,临时命令执行工具

/usr/bin/ansible-doc      查看配置文档,模块功能查看工具

/usr/bin/ansible-galaxy     下载或者上传优秀代码

/usr/bin/ansible-playbook      定制自动化任务,编排剧本工具

/usr/bin/ansible-pull          远程执行命令的工具

/usr/bin/ansible-vault             文件加密工具

/usr/bin/ansible-consolr           基于console界面与用户交互的执行工具

四.配置

  1. /etc/ansible/host文件的详解:文件遵循INI文件风格,中括号中的字符为组名。 可以将同一个主机同时归并到多个不同的组中, 此外,当如若目标主机使用了非默认的SSH端口,还可以在主机名称之后使用冒号加端口号来标明.需要用哪个组就往哪个组加.

 如图所示我只在webservers上添加了两台服务器.

2./etc/ansible/ansible.cfg

 我这里是将最下面三行的注释取消掉了.

五.相关命令详解

1.ping模块:探测网络中被管理主机是否能够真常使用,走ssh协议,如果对方主机网络正常则返回pong.有两种书写方法,第一种是要输入密码的,第二种是免密登录:

 

 免密登录需要提前实现key验证,具体操作如下:

 ssh-copy-id root@192.168.204.138

注意:这里的IP地址为需要执行免密登录服务器的IP地址!!!!!!!

另外补充一条:ansible all --list   列出所有主机

2.setup模块:主要用于获取主机信息

 (第一个箭头所指为主机组,第二个箭头所指为模块名.第三个箭头所指的为网卡名称)

3.file模块:主要用于远程主机上的文件操作

group:定义文件或目录的属组

mode:定义文件或目录的权限

owner:定义文件或目录的属主

path:必选项,定义文件或者目录的路径

recurse:递归的设置文件的属性,只对目录有效

src:要被链接的源文件的路径

dest:要被链接到的路径

state:  directory:如果目录不存在,创建目录

link:创建软连接

hard:创建硬链接

touch:如果文件不存在,则会创建一个新文件,如果文件已存在,则更新其最后修改时间

absent:删除目录,文件或者取消链接文件

例:将目录下的hello.txt文件从root目录下软连接到/tmp目录下

 

ansible webservers -m file -a "src=/root/hello.txt dest=/tmp/hello.txt state=link"

 如上命令就用到了前面所说的参数,用法十分明显

 (使用shell模块我们可以看到文件已经变为软连接了,后面会为大家讲到shell模块)

4.copy模块:复制文件到远程主机

backup:在覆盖之前将原文件备份,有两个选项 yes| no

剩下的参数和file模块的差不多,在这里我就不一一赘述了.

例:将本机的file.txt文件传输到远程主机的/tmp目录下:

ansible webservers -m copy -a "src=/root/file.txt dest=/tmp/"

我们计数复制文件时加/和不加/是有区别的

例:ansible webservers -m copy -a "src=/tmp  dest=/" 

这个的意思是将/tmp目录及目录下文件复制到/目录下

:ansible webservers -m copy -a "src=/tmp/  dest=/"

这个的意思是将/tmp目录下文件复制到/目录下,二者是不一样的

5.yum模块:使用yum包管理器来管理软件包

config_file:yum的配置文件

name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径

state:状态

present:安装

absent:删除

latest:安装最新的

例:安装最新版的tree

ansible webservers -m yum -a "name=tree state=latest"

6.cron模块:添加、删除、更新操作系统的定时任务

name:任务计划名称

cron_file:替换客户端该用户的任务计划的文件

minute:分(0-59, * ,*/2)

hour:时(0-23, * ,*/2)

day:日(1-31, * ,*/2)

month:月(1-12, * , */2)

weekday:周(0-6或1-7, *)

job:任何计划执行的命令

backup:是否备份之前的任务计划

user:新建任务计划的用户

state:指定任务计划present、absent 

例:

ansible webservers -m cron -a "minute=*/2 day=2 name=touchfile  job='touch /tmp/xiaoqiang.txt'"

意思为每个月2号每隔两分钟在/tmp/创建一个xiaoqiang.txt的文件

7.service模块:实现远程管理服务的生命周期

enabled #开机启动 yes|no

name #服务名称,必选项

runlevel #运行级别

state:    started开启    stopped停止    restarted重启   

例:

ansible webservers -m service -a "name=httpd state=started"

启动apache服务

ansible webservers -m service -a "name=keepalived enabled=yes"

将keepalived设置为开启自启

8.user模块:创建用户

group  属组

groups  附加组

home  设置家目录

name  用户名

remove  删除用户并删除用户的家目录

shell  用户登录后的

shell system  系统用户

uid  用户的id

state 创建或删除

shell 制定用户shell环境

例:

ansible webservers -m user -a "name=alex  home=/opt/alex uid=3000 group=root“

意为创建一个名为alex的用户并指定家目录为/opt/alex uid=3000 属组为root

9.command模块:通过-a直接执行命令

creates:一个文件名,当该文件存在,则该命令不执行

chdir:在执行指令之前,先切换到该指定目录

removes:删除一个文件名,当该文件不存在,则该选项不执行

executable:切换shell来执行命令.执行路径必须为一个绝对路径

例:

ansible webservers -a "ls"

10.shell模块:用法和command一样,不过shell模块可以执行任何命令,就像在本机执行一样.

ansible webservers -m shell -a "ls -l | grep -E .*.txt"

过滤/root/目录下所有以.txt结尾的文件

ansble的基础常见模块大概就这么多,整理不易,希望对大家的学习有所帮助,后续还会继续更新ansible-playbook的具体内容.

以上是关于运维自动化工具之Ansible的主要内容,如果未能解决你的问题,请参考以下文章

自动化运维工具之ansible

自动化运维工具之ansible的简单应用

运维自动化工具之Ansible

自动化运维工具之Ansible

Ansible自动化运维工具Ansible变量之Facts变量

运维打怪升级之Ansible自动化运维工具