1,简介
Ansible是基于Python开发的新型自动化运维工具。集成了众多运维工具(puppet、cfengine、chef、func、fabric)的优势,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible基于模块工作,不具备大规模部署的能力。真正批量部署的是ansible运行的模块,它只提供了一个框架。主要包括:
(1)连接插件:负责与被监控终端的通信;
(2)主机清单:指定 *** 作的主机,即配置文件中定义的监控主机;
(3)各种模块的核心模块、命令模块和自定义模块;
(4)借助插件,完成电子邮件的登录功能;
(5)剧本:当一个脚本执行多个任务时,不需要允许节点同时运行多个任务。
2,特征
(1)没有代理:不需要在被管理的主机上安装任何客户端;
(2)无服务器:没有服务器,使用时直接运行命令即可;
(3)任意语言的模块:基于模块工作,可以使用任意语言开发模块;
(4)yaml,不是代码:定制剧本;用yaml语言;
(5)ssh默认:基于ssh工作;
(6)强大的多层解决方案:可以实现多级指挥。
3,优点
(1),轻量级,无需在客户端安装代理,更新时只需在 *** 作机上更新一次;
(2)、批量任务执行可以写成脚本,不用分发到远程就可以执行;
(3),用python写的,维护比较简单,ruby语法太复杂;
(4),支持sudo。
3,工作流程
1,Ansible基本安装
(1),Python2.7安装
https://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz
#tarxvzfPython-2.7.8.tgz
#cdPython-2.7.8
#./configure-前缀=/usr/local
#make-jobs=`grepprocessor/proc/CPUinfo|WC-l'
#进行安装
##将python头文件复制到标准目录下,避免编译ansible时,找不到需要的头文件。
#CD/usr/local/include/python2.7
#cp-a./*/usr/local/include/
##备份旧版本python,象征性链接新版本python
#cd/usr/bin
#mvpythonpython2.6
#ln-s/usr/local/bin/python
##修改yum脚本以指向旧版本的python已阻止其运行。
#vim/usr/bin/yum
#!/usr/bin/python->;#!/usr/bin/python2.6
(2),设置工具模块安装
https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
#tarxvzfsetuptools-7.0.tar.gz
#cd安装工具-7.0
#pythonsetup.py安装
(3),PyCrypto模块安装
https://pypi.python.org/packages/source/p/pycrypto/pycrypto-2.6.1.tar.gz
#tarxvzfpycrypto-2.6.1.tar.gz
#cdpycrypto-2.6.1
#pythonsetup.py安装
(4),Pyyaml模块安装
http://pyyaml.org/download/libyaml/yaml-0.1.5.tar.gz
#tarxvzfyaml-0.1.5.tar.gz
#cdyaml-0.1.5
#./configure-前缀=/usr/local
#make-jobs=`grepprocessor/proc/CPUinfo|WC-l'
#进行安装
https://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.11.tar.gz
#tarxvzfPyYAML-3.11.tar.gz
#cdPyYAML-3.11
#pythonsetup.py安装
(5),金甲2模块安装
https://pypi.python.org/packages/source/M/markupsafe/markupsafe-0.9.3.tar.gz
#tarxvzfMarkupSafe-0.9.3.tar.gz
#cdMarkupSafe-0.9.3
#pythonsetup.py安装
https://pypi.python.org/packages/source/J/jinja2/jinja2-2.7.3.tar.gz
#tarxvzfJinja2-2.7.3.tar.gz
#cdJinja2-2.7.3
#pythonsetup.py安装
(6),帕拉米科模块安装
https://pypi.python.org/packages/source/e/ECDsa/ECDsa-0.11.tar.gz
#tarxvzfecdsa-0.11.tar.gz
#cdecdsa-0.11
#pythonsetup.py安装
https://pypi.python.org/packages/source/p/paramiko/paramiko-1.15.1.tar.gz
#tarxvzfparamiko-1.15.1.tar.gz
#cdparamiko-1.15.1
#pythonsetup.py安装
(7),SimpleJSON模块安装
https://pypi.python.org/packages/source/s/simpleJSON/simpleJSON-3.6.5.tar.gz
#tarxvzfsimplejson-3.6.5.tar.gz
#cd简单json-3.6.5
#pythonsetup.py安装
(8),Ansible安装
https://github.com/ansible/ansible/archive/v1.7.2.tar.gz
#tarxvzfansible-1.7.2.tar.gz
#cdansible-1.7.2
#pythonsetup.py安装
2,Ansible配置
(1),SSH无钥匙登录设置
#生成公钥/私钥
#ssh-keygen-trsa-P''
##写入信任文件(distribute/root/。ssh/id_rsa.pub连接到其他服务器,并在所有服务器上执行以下指令):
#cat/root/。ssh/id_RSA.pub>;>/root/。ssh/授权密钥
#chmod600/root/。ssh/授权密钥
(2),ansible配置
#mkdir-p/etc/ansible
#vim/etc/ansible/ansible.cfg
……
private_key_file=/root/。ssh/id_rsa
……
将ansible安装包中examples目录下的文件复制到/etc/ansible。
CP–r示例/*/etc/ansible/
##主机组定义
#vim/etc/ansible/hosts
[Linux服务器]
10.6.1.211
(3),简单测试
#ansiblelinuxserver-m命令-日期
注意:第一次需要输入“是”【用于公钥验证】,下一次不需要再次输入。
3,公共模块的使用
(1),设置(事实检测模块)
##用于查看远程主机的一些基本信息
#ansiblelinuxserver-m安装程序
检测主机上的所有基本信息。这个模块一般不单独使用,通常和剧本配合使用。
如果单独使用,通常会添加一个filter过滤参数。例如,我想获取网卡信息:
ansibleLinuxserver-msetup-a"filter=ansible_eth[0-1]"
(2)、乒
##用于测试远程主机的运行状态
#ansiblelinux-mping
(3)、文件
##设置文件的属性
相关选项如下:
强制:你需要在两种情况下强制创建软链接。一种是源文件不存在的时候,但是后面会建立;另一种是目标软链接已经存在。您需要先取消以前的软链接,然后创建一个新的。有两个选项:是|否。
组:定义文件/目录组。
模式:定义文件/目录的权限
Owner:定义文件/目录的所有者。
Path:必选,定义文件/目录的路径。
递归设置文件的属性,只对目录有效。
Src:链接源文件的路径,只适用于state=link的情况。
Dest:链接到的路径,仅在state=link时适用。
状态:
目录:如果目录不存在,请创建它。
文件:即使文件不存在,也不会被创建。
链接:创建一个软链接
硬链接:创建硬链接
触摸:如果文件不存在,将创建一个新文件,如果文件或目录已经存在,将更新其上次修改时间。
输入:删除目录、文件或取消文件链接。
示例:
##远程文件的符号链接创建
#ansibleLinuxserver-mfile-a"src=/etc/my.CNFdest=/tmp/my.CNFstate=link"
##远程文件信息查看
#ansiblelinuxserver-m命令-a"ls-l/tmp/my.cnf"
##远程文件符号链接删除
#a可启用的linuxserver-m文件-a"path=/tmp/my.CNFstate=absent"
##远程文件信息查看
#ansiblelinuxserver-m命令-a"ls-l/tmp/my.cnf"
注意:如上图,代表文件或链接已被删除。
(4)、copy
##将文件复制到远程主机
相关选项如下:
备份:在覆盖之前,备份源文件,备份文件包含时间信息。有两个选项:是|否
内容:不用“src”,可以直接设置指定文件的值。
Dest:必填。源文件要复制到的远程主机的绝对路径。如果源文件是目录,路径也必须是目录。
Directory_mode:递归设置目录的权限,默认为系统默认权限。
强制:如果目标主机包含该文件,但内容不同,如果设置为是,将被覆盖;如果为否,则只有当文件中不存在目标主机的目标位置时,才会进行复制。默认情况下是。
其他:这里可以使用文件模块中的所有选项。
Src:复制到远程主机的本地文件可以是绝对路径,也可以是相对路径。如果路径是一个目录,它将被递归复制。在这种情况下,如果路径以“/”结尾,则只复制目录中的内容;如果不是以“/”结尾,将复制包括目录在内的全部内容,类似于rsync。
示例:
##将本地文件“/etc/my.cnf”复制到远程服务器
#ansibleLinuxserver-mcopy-a"src=/etc/my.CNFdest=/tmp/my.CNFowner=rootgroup=rootmode=0644"
##远程文件信息查看
#ansiblelinuxserver-m命令-a"ls-l/tmp/my.cnf"
(5)、命令
##在远程主机上执行命令
相关选项如下:
创建:文件名。当文件存在时,将不执行该命令。
Free_form:要执行的linux指令
Chdir:在执行命令之前,切换到这个目录。
移除:文件名。当文件不存在时,将不执行该选项。
可执行:切换shell执行指令,执行路径必须是绝对路径。
示例:
#ansiblelinuxserver-m命令-aid
(6)、shell
##切换到shell,使用与command相同的参数执行指定的指令。
与command不同的是,这个模块可以支持命令管道,还有一个模块有这个功能:raw。
示例:
##首先在本地创建一个SHELL脚本
vim/root/cpu.sh
===============================================
#!/bin/bash
#显示当前系统的时间。
Echo"当前系统时间是:"`date+%f""%h:%m:%s`。
#显示当前系统中的核心数量。
Echo"服务器的cpu核心数:"`grepprocessor/proc/CPUinfo|WC-l`。
#ShowtheversionoftheSystem
echo"Systemversion:"`LSB_release-a|grep"description"|awk-f:'{print$2}'`1
===============================================
#chmod+x/root/cpu.sh
##将创建的脚本文件分发到远程
#ansibleLinuxserver-mcopy-a"src=~/CPU.shdest=/tmp/CPU.showner=rootgroup=rootmode=0755"
##远程执行
#ansibleLinuxserver-mshell-a"/tmp/CPU.sh"
(7)、其它并发10个。 参数-f 10表示并发进行,也就是10个进程同时运行,在使用的时候,默认的情况下为5, 选择合适的数据,从而使得系统能够进行处理 ansible atlanta -a "/sbin/reboot" -f 10
指定用户。Ansible默认使用当前用户。当需要使用其他用户时,可以使用选项-uusername,如下所示
ansible atlanta -a "/usr/bin/foo" -u username当需要使用sudo时,可以使用下面的,-ask-sudo-pass(-k)。此选项用于询问sudo的密码。如果设置了,如果没设置,就没必要用了。
ansible atlanta -a "/usr/bin/foo" -u username --sudo[--ask-sudo-pass]也可以在sudo到别的用户来进行执行,如下: ansible atlanta -a "/usr/bin/foo" -u username -U otheruser[--ask-sudo-pass]
(8)、yum,apt模块,软件管理的模块。
主要是state这个参数,代表安装,卸载等。就三个状态,present,latest,absent,前两个代表安装,后面一个是卸载。 例如: 安装ntp ansible linuxserver -m yum -a "name=ntp state=present" 卸载ntp ansible linuxserver -m yum -a "name=ntp state=absent"
(9)、用户管理模块
包括用户和用户组都可以进行管理。
修改用户测试的密码。
ansibleLinuxserver-muser-a'name=testpassword="$6$j3qo/FrIaBNPhB3g$nydeda.sodh4kdtveaj93VVC8y0xz/bcl0elgco0sfguvgudv4y/9taacfhxbvd.2e5oitywpydop/jstflz0"'
密码参数由sha512加密,可以由grb-crypt或Python模块生成。
python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())" 删除用户 ansible linuxserver -m user -a "name=steven1 remove=yes state=absent" (10)、Service服务模块启动、停止、重启、重装,对应的四种状态如下:
停止mysql服务. ansible linuxserver -m service -a "name=mysqld state=stopped"
(11),更多模块
其他常用的模块,如cron、synchronize等就不举例说明了,可以结合自己的系统环境进行测试。
服务:系统服务管理
Cron:计划任务管理
Yum:yum包安装管理
同步:使用rsync同步文件
用户:系统用户管理
组:系统用户组管理
有关更多模块,请参考:
#ansible-doc–l
查看如何使用ansible模块(http://docs.ansible.com/list_of_all_modules.html)
(12),一些概念上的补充
剧本的构成[/S2:剧本是一个或多个“剧本”的列表,这些剧本可以链接在一起,按照预先安排好的机制执行;所谓任务,无非是调用ansible的一个模块,模块参数中可以使用变量;模块执行是幂等的,这意味着多次执行是安全的,因为结果是一致的;
执行模式:任务列表中的任务在主机中指定的所有主机上逐一执行,即第一个任务在所有主机上完成后,第二个任务才开始。当按顺序运行一个剧本时,如果中间出错,所有执行的任务都会回滚。因此,修改剧本后,可以重新执行一次。
taskComposition:每个任务都要有自己的名字,用来输出剧本的执行结果。建议其内容尽可能清晰地描述任务执行步骤。如果未提供名称, *** 作的结果将用于输出;
notify指定了handler[/S2/]的执行机制:动作“notify”可以用来在每局结束时触发,notify中列出的动作称为handler。
一些学习材料:
http://blog.xiaorui.cc/category/ansible/
http://lixcto.blog.51cto.com/4834175/d-4
https://github.com/ansible/ansible-examples
http://rfyiamcool.blog.51cto.com/1030776/d-51
http://dl528888.blog.51cto.com/2382721/d-4/p-1
http://edu.51cto.com/course/course_id-2220.html
http://edu.51cto.com/course/course_id-2032.html
http://www.Shencan.net/index.PHP/category/%E8%87%aa%E5%8a%A8%E5%8c%96%E8%BF%90%E7%bb%B4/ansible/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)