Ansible基础入门-基础模块的使用
Posted 运维部落
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible基础入门-基础模块的使用相关的知识,希望对你有一定的参考价值。
朋友们晚上好,今天我为大家带来的分享是:
Ansible基础入门-基础模块的使用
难度指数: 3星(满星5星)
技术指数: 5星(满星5星)
理论指数: 2星(满星5星)
面向人群: 自动化运维&初中级运维
简单做下自我介绍:
经过上次松涛老师高屋建瓴地对Ansible的整体介绍后,本期我们着重就几个技术细节进行重点介绍,包括:
Host inventory
模块部分:
GROUP
USER
COPY
CRON
SHELL(结合COMMAND
旨在为即将或正在使用ansible的初级选手提供一个可落地的思路和实践方法,而Ansible达人们还请多批评指正,闲言少叙,我们直奔主题
华丽的分隔线
众所周知,ansible是自动化运维神器,首先,我们来了解一下ansible的整体架构
接下来,我们对上图中ansible的核心组件进行简单的解析
Ansible core : 即ansible软件本身
Host iventory : 主机池,定义可以由ansible来管理的主机
Core modules : 核心模块,即ansible自带的模块,可完成大部分任务
Custom modules : 用户自己编写定制的模块,实现特定功能
Playbook : 用于定义多个任务在一个文件中,可多次使用
Connection plugin : 用来连接每一个被管理主机,实现一些辅助功能
今天我们将借助一些ansible基础命令来初步了解一下Host inventory,深入学习几个常用的Core module
我们来看一条简单的ansible命令:
ansible datanodes -m command -a “uptime”
下面我们对其基本命令格式进行解析
adnsible的基本使用格式,如下:
ansible <host-pattern> [-f forks] [-m module_name] [-a args]
-f forks: 启动的并发线程数
-m module_name: 要使用的模块
-a args: 模块所需的参数
# ansible datanodes -m command -a uptime
中,datanodes即所谓的host-pattern定义在/etc/ansible/hosts文件中,格式如下:
data[4:6]为data4,data5,data6的简写形式
只有在/etc/ansible/hosts中定义过的主机,才能被ansible管理
主机变量
可以在inventory中定义主机时为其添加主机变量以便于在playbook中使用。例如:
[webservers]
www1.magedu.com http_port=80 maxRequestsPerChild=100
www2.magedu.com http_port=8080 maxRequestsPerChild=200
需要注意的是这些变量只能在playbook中使用
组变量
组变量是指赋予给指定组内所有主机上的在playboo中可用的变量。例如:
[webservers]
www1.magedu.com
www2.magedu.com
共享如下变量:
[webservers:vars]
ntp_server=ntp.magedu.com
nfs_server=nfs.magedu.com
如此,ntp_server和nfs_server两个变量,便可被webservers组内所有主机共享Ansible管理远程主机默认使用root用户,通过ssh对各主机进行管理建议使用ssh密钥免密码认证来连接各主机,但也可以全用指定用户和密码,可直接在ansible hosts文件中指定:
总结ssh相关的参数如下,以供参考:
ansible_ssh_host
ansible_ssh_port
指定ssh连接端口号
ansible_ssh_user
指定ssh默认使用哪个用户进行管理
ansible_ssh_pass
ssh连接所用的密码 (这非常不安全,强烈建议全用ssh密钥认证或交互式输入密码 --ask-pass )
ansible_sudo_pass
指定sudo的密码 (这非常不安全,强烈建议全用ssh密钥认证或交互式输入密码 --ask-pass)
简单明了,不是吗?
关于主机池的应用,先说这么多,下面我们深入介绍一下几个常用的核心模块
Ansible 默认使用command模块,所以
#ansible –m command datanodes -a uptime
可以简写为:
#ansible datanodes -a uptime
如图所示:
执行命令成功,返回结果为绿色
Anbible的模块那么多,我该如何获取各模块的信息和帮助呢?
Ansible为我们提供了ansible-doc命令
基本用法为:
ansible-doc [-M module_path] [-l] [-s] [module...]
-M 文件路径, --moudle-path=文件路径
指定额外目录来寻找模块所需的库文件
-s, --snipet=
产生一段可以应用playbook中内容,类似于一种任务模板
-l, --list=
显示简洁的模块列表和一些简单的注释
# ansible-doc -l
如图所示,ansible-doc会显示两列信息左侧为模块名,右侧为模块简介左右一一对应简单明了
以group模块为例
# ansible-doc -s group
Group总共四个参数
gid: 指定所建组的ID,可选
name: 指定组名
state: 设定组的状态,默认为present,设置为absent时,表示删除该组
system: 值为yes时,表示该组将会被创建为系统组
(注意:group模块需要依赖系统命令:groupadd,groupdel,groupmod)
如此,我们在各datanode结点上分别创建名为developer的组
删除developer组操作
# ansible datanodes -m group -a 'name=develoer state=absent'
user模块
ansible-doc user
user模块常用的参数有:
name: 指定所建用户的用户名
group: 指定所建用户的主组,可选
groups: 指定所建用户的附加组,如果设置为空(’groups=’),则清空所有附加组信息
shell: 指定使用哪种shell
uid: 指定用户的ID
state: 设定帐号状态,当值为absent时,将会删除指定用户
一个直观的例子:
ansible all –m user –a ‘name=dev uid=666 group=develoer’
我们看到,uid和group均为我们设置的值,group显示的是gid,gid501即为我们刚才新建的组ID,状态值state为present.当我们需要删除用户时,使用state设为absent就可以了,如:
ansible all –m user –a ‘name=dev uid=666 group=develoer state=absent’
顾名思义,copy模块是用来远程传输文件的
常用参数如下:
src: 指定本地源文件路径,绝对路径或相对路径都可以,如果路径指向一个目录,则会把目录下所有文件全部复制
dest:远程主机的上文件存放路径,必做使用绝对路径
content: 直接在命令中指定文件内容,使用该内容在远程主机上生成文件
backup: 是否备份目标文件,默认为no
owner: 指定文件属主
group: 指定文件属组
mode: 指定文件权限,如640
一个简单的例子
我们要把本地文件/etc/issue复制到远程主机/tmp/目录下
属主为:zabbix用户
同时,还要求只有属主对该文件有读写权限
ansible datanodes -m copy -a 'src=/etc/issue dest=/tmp/issue.ansible mode=600 owner=zabbix'
登录dota2主机进行验证:
content 参数的用法
• 比如,我们传送一段内容
• “hello world
• how are you ?”
• 到远程主机上的文件/tmp/content.ansible中, 操作如下:
# ansible datanodes -m copy -a 'content="hello world!\n how are you? \n" dest="/tmp/content.ansible"'
登录data3主机进行验证:
content可以对\n进行转义,是不是很棒?!~
cron模块
批量管理定时任务
cron模块下的参数:day,hour,minute,month,weekday与系统crontab中的值一一对应
默认值都是*
job:指定要定期执行的任务
name: 给任务一个简单的名字或注释,必选
state: 设定任务状态,absent表示删除该定时任务
为了演示效果
要求:每分钟ping 一个www.baidu.com
# ansible data1 -m cron -a 'name="ping test" minute="*/1" job="ping www.baidu.com" '
shell模块
在远程主机上执行命令
类似command模块
但是稍有不同,功能更为强大
比如,使用command中要使用管道符“|”
报出一系列的错误
使后shell模块后
顺利执行,所以,当命令中需要用到管道符时,一定要使用shell模块替代command模块,最后,给初学者一个最容易上手的模块
ping模块
Ping 模块用于检测主机的网络连通性
正常通信的主机,会返回一个pong信号
未来的"人人运维"
以上是关于Ansible基础入门-基础模块的使用的主要内容,如果未能解决你的问题,请参考以下文章