一文带你了解Ansible
Posted 新钛云服
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一文带你了解Ansible相关的知识,希望对你有一定的参考价值。
一、Ansible简介
二、Ansible使用
2.1 Ansible安装
2.2 Ansible简单使用
[ ]
10.30.X.X:22 ansible_ssh_user=root ansible_ssh_pass='' ansible_sudo_pass=''
三、Inventory
3.1 主机方式使用
3.2 主机组方式使用
很简单,上图中的centos6、centos7、dev、ops都是主机组名。和主机使用方式一样,使用主机组时,直接调用主机组名即可。
比如:
ansible -i /hosts centos6 -m ping
3.3 动态Inventory
inventory不仅仅只有静态文件,我们也可以动态的获取外部的主机数据。由于动态inventory不是这篇文章的重点,我们就不再赘述了。
3.4 参数说明
四、 Ad-hoc
Ansible中操作主机主要有两种方式,ad-hoc和playbook。playbook主要作用于那些复杂、定期的操作上,而ad-hoc就主要作用于那些简单、临时的操作上。
Ad-hoc有点类似于linux上的一句话shell,通常情况下,ad-hoc用的还是很多的。毕竟,运维管理中,还是有许多的临时操作,没必要每次都写一个playbook去执行吧!
其实,归根结底,ad-hoc就是使用ansible的单个模块,操作主机实现单个功能。
具体使用方式:
ansible -i 【inventory文件路径】 【操作的对象】 -m 【模块名】 -a 【模块参数】
Ansible具有丰富的功能模块(module),基本满足运维操作的大部分需求。下面我就挑一些我们常用的module说明。
4.1 command模块
command模块是ansible提供的一种命令模块,允许执行一些简单的linux命令。但是不支持扩展的shell命令,比如管道和重定向。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m command -a 【模块参数】
举例:
4.2 shell模块
上面的command模块受制于ansible,不能执行扩展的shell命令,但是shell模块却能执行。shell中管道、重定向等功能,该模块也支持。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m shell -a 【模块参数】
举例:
4.3 script模块
该模块作用主要是执行管理主机的指定脚本。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m script -a 【模块参数】
举例:
4.4 service模块
service模块。是ansible中一种操作service比较方便的模块。它类似于把centos6中的service和centos7中的systemctl等,这些管理服务包的工具结合为一体的存在。
简单说,假设你想开启一台centos6和一台centos7上nginx服务,大概你需要在centos6上执行service nginx start,并且在centos7上执行systemctl start nginx。而service模块,一条命令就行了:ansible all -m service -a "name=nginx state=started"。
当然,service还是有前提的。你想要操控的服务,必须能被BSD init,OpenRC,SysV,Solaris SMF,systemd,upstart中的任意一种工具所管理。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m service -a 【模块参数】
模块参数说明:
name参数:服务名称,比如:mariadb、nginx、saltstack等。
state参数:设置服务的状态,假设我们想开机某服务,则此参数可以设置为started。
具体值包括:started、stopped、restarted、reloaded。
enabled参数:是否将该服务设置为开机自启动项,yes表示设置为开机自启动,no则不设置为开机自启动。
举例:
然后到目标服务器上查看该服务状态,的确启动了。
4.5 cron模块
该模块是计划任务模块,相当于linux上的crontab功能。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m cron -a 【模块参数】
模块参数说明:
minute参数:分钟设定位,默认“*”,范围(0-59,/数字)
hour参数:小时设定位,默认“*”,范围(0-23,/数字)
day参数:日期设定位,默认“*”,范围(1-31,/数字)
month参数:月期设定位,默认“*”,范围(1-12,/数字)
weekday参数:周设定位,默认“*”,范围(0-6)
special_time参数:特殊时间范围,范围:reboot(重启时)、annually(每年)、monthly(每月)、weekly(每周)、daily(每天)、hourly(每小时)。
name参数:定时任务名
user参数:指定以哪个用户身份执行
job参数:执行的命令
state参数:根据定时任务名,修改或删除对应的任务
4.6 user模块
user模块。管理和创建服务器的用户账号,或者删除用户。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m user -a 【模块参数】
模块参数说明:
name参数:指定用户名。
password参数:用户密码。
comment参数:描述信息。
group参数:指定基础用户组。
home参数:指定用户家目录。
createhome参数:是否创建家目录。
move_home参数:移动家目录。
shell参数:默认shell。
uid参数:指定用户uid。
state参数:默认为创建,设置为absent,表示删除。
4.7 group模块
group模块。管理和创建服务器的用户组,或者删除用户组。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m group -a 【模块参数】
模块参数说明:
name参数:指定用户组名。
gid参数:指定用户组gid。
state参数:默认为创建,设置为absent,表示删除。
4.8 file模块
file模块。文件模块,具备对文件或文件夹等对象操作的功能。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m file -a 【模块参数】
模块参数说明:
owner参数:用于指定被操作对象的用户,对应的用户必须在远程主机中存在!
group参数:用于指定被操作对象的用户组,对应的用户组必须在远程主机中存在!
mode参数:设置被操作对象的权限。
src参数:源文件,主要是用来创建软连接或者硬链接的。
path参数:被操作对象的路径,基本上是和state一起搭配使用的,必填。
state参数:该参数主要作用,就是对被操作对象执行相应的操作。具体:directory创建目录、file创建文件、link创建软连接、hard创建硬链接、touch创建空白文件、absent删除对象。
4.9 copy模块
copy模块。复制文件到远程主机,这是我最喜欢的ansible模块,因为它把文件从本地分发到远程服务器非常方便。
使用方式如下:
ansible -i 【inventory文件路径】 【操作的对象】 -m copy -a 【模块参数】
模块参数说明:
src参数:本地文件路径。
dest参数:远程文件路径。
content参数:文件内容,可以替代src,直接向远程文件写内容。
force参数:如果包含相同文件名文件,是否强制覆盖,yes覆盖,no不覆盖。
backup参数:如果包含相同文件名文件,将原文件覆盖之前,备份原文件,yes备份,no不备份。
举例:
ansible还有其它丰富的模块,这里就不一一介绍了,感兴趣的朋友可以查阅ansible官网!
五、Playbook
上文,我们说了ad-hoc的基本使用。
但是在运维工作中,不可能都是这种单一模块的操作,更多的是需要多个模块协同完成运维操作!
我们假设一个模块就是一个task,那么playbook就相当于多个task组合起来的组织。
基础参数:
Hosts:执行任务(task)的远程目标主机。
remote_user:执行任务,所使用的用户。
tasks:任务。
handlers:通知任务,与tasks不同,只有在接受到通知时,才会被触发执行。
templates:使用模板语言的文本文件,使用jinja2语法书写。
variables:变量,变量替换{{ variable_name }}。
5.1 编写Playbook
5.2 执行Playbook
六、Tower
6.1 Tower安装
Tower是Ansible官方提供的一款管理ansible的前端dashboard页面工具。
下载:
https://releases.ansible.com/ansible-tower/setup/ansible-tower-setup-latest.tar.gz?sc_cid=701f20000012w8YAAQ
解压:
解压后修改其中的inventory文件,修改其中的admin/pg/rabbitmq的密码。
安装:
./setup.sh
6.2 Tower使用
6.3 Tower初体验
6.3.2 添加project
6.3.3 添加template
6.3.4 执行template
七、总结
了解新钛云服
新钛云服出品的部分精品技术干货
以上是关于一文带你了解Ansible的主要内容,如果未能解决你的问题,请参考以下文章