ansible 资料
1.ansible 介绍
Ansible 来源于科幻小说,是一种超光速通讯设备。
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行
命令等功能。支持linux、BSD、MacOS、等 支持openstack 、docker等结合使用。
1.1ansible 结构
Ansible 核心组建说明:
Ansible :Ansible 得核心程序
host lnventory :记录了每个由Ansible 管理得主机信息,包括ssh端口,root账号密码。IP地址等等可以通过file 来加载,可以通过CMDB加载
Playbooks:YAML 格式文件,多个任务定义再一个文件中,使用时可以统一调用,“剧本”用来定义那些主机需要调用哪些模块来完成得功能,
Core Modules:Ansible 执行任何管理人网都不是由Ansible自己完成,而是由核心模块完成;Ansible管理主机之前,先调用Core Modules 中得模块。然后指明管理Host Lnventory中的主机,就可以完成管理主机。
Custom Modules:自定义模块,完成,Ansible 核心模块无法完成的功能,此模块支持任务语言编写
Connection Plugins:连接插件,Ansible 和Host 通信使
Ansible 工作流程:
Ansile--->host (主机资源定义)--->模块(核心模块/自定义模块)--->插件(ssh)
1.2ansible 特性
no agent 不v要安装客户端(只需要支持ssh)
no server 不需要启动服务(ansible)
基于模块工作,可以使用任意语言开发模块
基于ssh 工作(基于**认证)
YMAL格式 编排任务,支持丰富的数据结构(剧本playbook)
使用python 编写 维护简单
2.ansible的安装部署
主机 :192.168.142.138 vm1.linux.com (ansible 服务端)
192.168.142.142 vm2.linux.com
192.168.142.143 vm3.linux.com
安装方法1:在线安装(epel源)
安装方法2:自己制作本地yum源 (准备好相应的软件)
ssh 如果有可以忽略 版本低的可以升级下
安装完怎么让ansible 工作呢
工作流程
1.配置**对
2.配置ansible hosts 文件,(该文件不是/etc/hosts 文件)
3.测试连接(通过模块)
ansible 的配置文件
[[email protected] ~]# rpm -qc ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
配置**
编辑/etc/ansible/hosts 文件,指定被管理端的IP 地址或者主机名
hosts 配置文件写法
写法1:
node1.ansible.com
node2.ansible.com
192.168.1.1
写法2:以组的方式
[webserver] ----可以随意定义
192.168.10.1
192.168.10.2
[dbserver]
192.168.20.1
192.168.20.2
为方便管理主机推荐使用组的形势配置主机
3.Ansible 命令使用方法
# ansible <PATTERN> -m <module_name> -a <arguments>
PATTERN的写法:
某一个主机组的名称 web
所有主机 all, *
写IP地址或系列主机名
one.example.com
one.example.com:two.example.com >>>支持写多个主机名,不同的主机名间使用冒号":"隔开
192.168.1.50
192.168.1.* >>>支持通配符
webservers:!phoenix >>>对属于webservers组中的主机,但不属于phoenix组的主机
webservers:&phoenix >>>对同时属于webservers和phoenix组中的主机进行操作
正则表达式, 必须以~开头
~(web|db).*\.example\.com
4.常见模块
4.1 测试被管理端主机存活状态
Ansible 查看帮助:
查看模块使用方法:
Ansible-doc [模块名]
4.2ping 模块
测试管理端与被管理端的连接情况
4.3user 模块
管理远程主机上的用户的账号
常见参数有:
name= 指明要管理的账号名称
state=present|absent 指明是创建账号还是删除账号,present表示创建,absent表示删除
system=yes|no 指明是否为系统账号
uid= 指明用户UID
group= 指明用户的基本组
groups= 指明用户的附加组
shell= 指明默认的shell ()
home= 指明用户的家目录
move_home=yes|no 当home设定了家目录,如果要创建的家目录已存在,是否将已存在的家目录进行移动
password= 指明用户的密码,最好使用加密好的字符串
comment= 指明用户的注释信息
remove=yes|no 当state=absent时,也就是删除用户时,是否要删除用户的家目录
4.4group 模块
用来添加或删除远端主机的用户组
常见参数有:
name= 被管理的组名
state=present|absent 是添加还是删除,不指名默认为添加
gid= 指明GID
system=yes|no 是否为系统组
4.5 file模块
用于设定远程主机上的文件属性
常见参数有:
path= 指明对哪个文件修改其属性
src= 指明path=指明的文件是软链接文件,其对应的源文件是谁,必须要在state=link时才有用
state=directory|link|absent 表示创建的文件是目录还是软链接
owner= 指明文件的属主
group= 指明文件的属组
mode= 指明文件的权限
创建软链接的用法:
src= path= state=link
修改文件属性的用法:
path= owner= mode= group=
创建目录的用法:
path= state=directory
删除文件:
path= state=absent
4.6 copy 模块
拷贝ansible管理端的文件到远程主机的指定位置
常见参数有:
dest= 指明拷贝文件的目标目录位置,使用绝对路径,如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容
src= 指明本地路径下的某个文件,可以使用相对路径和绝对路径,支持直接指定目录,如果源是目录,则目标也要是目录
mode= 指明复制时,目标文件的权限
owner= 指明复制时,目标文件的属主
group= 指明复制时,目标文件的属组
content= 指明复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据,到目标文件中
4.7shell 模块
在被管理端执行命令 (常用命令)
支持重定向,管道
参数: chdir=<Directory>
4.8 command 模块
在被管理端执行命令 (常用命令)
不支持重定向,管道
默认模块
参数:chdir=<Directory>
4.9 yum模块
基于yum机制,对远程主机管理程序包
常用参数有:
name= 指明程序包的名称,可以带上版本号,不指明版本,就是默认最新版本
name=httpd
name=httpd-2.2.15
state=present|lastest|absent 指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包
disablerepo= 在用yum安装时,临时禁用某个仓库,仓库的ID 仓库id查看方式 (yum repolist)
enablerepo= 在用yum安装时,临时启用某个仓库,仓库的ID
conf_file= 指明yum运行时采用哪个配置文件,而不是使用默认的配置文件
disable_gpg_check=yes|no 是否启用gpg-check
4.10 service模块
用来管理远程主机上的服务的模块
常见参数有:
name= 被管理的服务名称(/etc/init.d)
state=started|stopped|restarted 表示启动或关闭或重启
enabled=yes|no 表示要不要设定该服务开机自启动
runlevel= 如果设定了enabled开机自动启动,则要定义在哪些运行级别下自动启动
4.11 Uri模块
如果远端是web服务器,可以利用ansible直接请求某个网页
常用作网站测试
常见参数有:
url= 指明请求的url的路径,如:http://10.1.32.68/test.jpg
user= 如果请求的url需要认证,则认证的用户名是什么
password= 如果请求的url需要认证,则认证的密码是什么
method= 指明请求的方法,如GET、POST, PUT, DELETE, HEAD
4.12 cron模块
管理计划任务的模块
常见参数有:
minute= 指明计划任务的分钟,支持格式:0-59,*,*/2等,与正常cron任务定义的一样的语法,省略时,默认为*,也就是每分钟都执行
hour= 指明计划任务的小时,支持的语法:0-23,*,*/2等,省略时,默认为*,也就是每小时都执行
day= 指明计划任务的天,支持的语法:1-31,*,*/2等,省略时,默认为*,也就是每天都执行
month= 指明计划任务的月,支持的语法为:1-12,*,*/2等,省略时,默认为*,也就是每月都执行
weekday= 指明计划任务的星期几,支持的语法为:0-6,7 ,*等,省略时,默认为*,也就是每星期几都执行
reboot 指明计划任务执行的时间为每次重启之后
name= 给该计划任务取个名称,必须要给明。每个任务的名称不能一样。
job= 执行的任务是什么,当state=present时才有意义
state=present|absent 表示这个任务是创建还是删除,present表示创建,absent表示删除,默认是present
4.13 hostname模块
管理远程主机上的主机名
常用参数有
name= 指明主机名
4.14 script模块
将管理端的某个脚本,移动到远端主机(不需要指明传递到远端主机的哪个路径下,系统会自动移动,然后执行),
一般是自动移动到远端主机的/root/.ansible/tmp目录下,然后自动给予其权限,然后再开个子shell然后运行脚本,运行完成后删除脚本
4.15 setup模块
可收集远程主机的facts变量的信息,相当于收集了目标主机的相关信息(如内核版本、操作系统信息、cpu、…),保存在ansible的内置变量中,之后我们有需要用到时,直接调用变量即可
4.16 fetch模块
从远程主机拉取文件到本地
一般情况下,只会从一个远程节点拉取数据
常见参数有:
dest= 从远程主机上拉取的文件存放在本地的位置,一般只能是目录
src= 指明远程主机上要拉取的文件,只能是文件,不能是目录
4.17 mount模块
配置挂载点
选项:
dumpfstype:必选项,挂载文件的类型
name:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件
state:必选项 present:只处理
fstab中的配置
absent:删除挂载点
mounted:自动创建挂载点并挂载之
umounted:卸载
4.ansible playbook
1.Playbook 简介
简单来说,playbooks 是一种简单的配置管理系统与多机器部署系统的基础.与现有的其他系统有不同之处,且非常适合于复杂应用的部署.
Playbooks 可用于声明配置,更强大的地方在于,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤.并且可以同步或异步的发起任务.
Playbooks 的格式是YAML(详见:YAML 语法),语法做到最小化,意在避免 playbooks 成为一种编程语言或是脚本,但它也并不是一个配置模型或过程的模型.
playbook 由一个或多个 ‘plays’ 组成.它的内容是一个以 ‘plays’ 为元素的列表.
在 play 之中,一组机器被映射为定义好的角色.在 ansible 中,play 的内容,被称为 tasks,即任务.在基本层次的应用中,一个任务是一个对 ansible 模块的调用,
playbook的基础组件:
Playbook 文件必须是*.yml结尾。
hosts:运行指定任务的目标主机,多个主机用:冒号分隔
remote_user:在远程主机上执行任务的用户;可以全局指定,也可以单个任务指定
sudo_user:表示以sudo方式运行任务时,切换为哪个用户身份运行
tasks: 任务列表
示例测试文件语法
[[email protected] ~]# ansible-playbook --syntax-check vm.yml
测试执行
[[email protected] ~]# ansible-playbook --check vm.yml
Ansible 中文权威指南。