Ansible基础入门-基础模块的使用

Posted 运维部落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible基础入门-基础模块的使用相关的知识,希望对你有一定的参考价值。

朋友们晚上好,今天我为大家带来的分享是:

Ansible-的使用

难度指数: 3星(星5星)

指数: 5星(星5星)

指数: 2星(星5星)

面向人群:化运&初中


简单做下自我介绍:

09年开始接触linux,大学期间便开始从事linux相关工作,先后就职于上海盛大游戏,永大(中国),KiiCloud等企业,马哥教育答疑讲师

经过上次松涛老高屋建瓴地Ansible的整体介后,本期我着重就几个技术细节进行重点介,包括:

Host inventory

部分:

GROUP

USER

COPY

CRON

SHELLCOMMAND

旨在即将或正在使用ansible的初级选手提供一个可落地的思路和践方法,而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”

Ansible基础入门-基础模块的使用

下面我们对其基本命令格式行解析

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文件中,格式如下:

Ansible基础入门-基础模块的使用

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文件中指定:

Ansible基础入门-基础模块的使用总结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基础入门-基础模块的使用

所示,ansible-doc会示两列信息侧为名,右侧为块简左右一一对应简单明了

以group模块为

# ansible-doc -s group

Ansible基础入门-基础模块的使用

Group共四个参数

gid: 指定所建的ID,可

name: 指定

state: 的状,默认为present,absent,表示该组

system: 值为yes,表示该组将会被统组

(注意:group模需要依命令:groupadd,groupdel,groupmod)

Ansible基础入门-基础模块的使用

如此,我在各datanode点上分别创建名developer

除developer操作

# ansible datanodes -m group -a 'name=develoer state=absent'

Ansible基础入门-基础模块的使用

user

ansible-doc user

Ansible基础入门-基础模块的使用

user常用的参数有:

name: 指定所建用的用

group: 指定所建用的主,可

groups: 指定所建用的附加,如果空(’groups=’),清空所有附加信息

shell: 指定使用哪种shell

uid: 指定用的ID

state: 号状,当值为absent,将会除指定用

一个直的例子:

ansible all –m user –a ‘name=dev uid=666 group=develoer’

Ansible基础入门-基础模块的使用

看到,uid和group均们设置的值,group示的是gid,gid501即们刚才新建的ID,态值statepresent.当我需要除用户时,使用state设为absent就可以了,如:

ansible all –m user –a ‘name=dev uid=666 group=develoer state=absent’

Ansible基础入门-基础模块的使用

名思,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'

Ansible基础入门-基础模块的使用

dota2主机验证

Ansible基础入门-基础模块的使用

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"'

Ansible基础入门-基础模块的使用

data3主机验证:

Ansible基础入门-基础模块的使用

content可以\n转义,是不是很棒?!~

cron

批量管理定时任务

Ansible基础入门-基础模块的使用

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" '

Ansible基础入门-基础模块的使用

shell模块

在远程主机上执行命令
类似command模块

但是稍有不同,功能更为强大

比如,使用command中要使用管道符“|”

报出一系列的错误

Ansible基础入门-基础模块的使用

使后shell模块后

Ansible基础入门-基础模块的使用

顺利执行,所以,当命令中需要用到管道符时,一定要使用shell模块替代command模块,最后,给初学者一个最容易上手的模块

ping模块

Ping 模块用于检测主机的网络连通性

正常通信的主机,会返回一个pong信号

未来的"人人运维"


以上是关于Ansible基础入门-基础模块的使用的主要内容,如果未能解决你的问题,请参考以下文章

马哥金牌分享 | 十五分钟实现Ansible常用模块入门

ansible的使用和安装

Ansible的基础使用和快速入门

Ansible系列-基础篇-Ansible 常见模块的使用

ansible模块的基础使用

ansible命令应用基础