自动化运维工具之ansible

  • ansible

ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

主要包括:

(1)、连接插件connection plugins:负责和被监控端实现通信;

(2)、host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;

(3)、各种模块核心模块、command模块、自定义模块;

(4)、借助于插件完成记录日志邮件等功能;

(5)、playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

ansible的架构:

特性

1.no agent: 不需要在被管控主机上安装任何软件

2.no server: 无服务器端,使用时直接运行命令即可

3.modules in any languages:基于模块工作,可使用任意语言开发模块,

4.yaml,not code:使用yaml语言定制剧本playbook,

5.ssh by default:基于SSH工作

优点

(1)、轻量级,无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

(2)、批量任务执行可以写成脚本,而且不用分发到远程就可以执行

(3)、使用python编写,维护更简单,ruby语法过于复杂;

=============================================================

ansible的部署以及应用

环境准备在pxe里有

三台机器、一台master、两台node

Ansible的安装部署:以rpm的为例

方法1:

在线安装(EPEL源)

[[email protected] ~]# yum install -y epel-reseale

[[email protected] ~]# yum install -y ansible

方法2:

自己制作本地yum源

[[email protected] ~]# yum install -y ansible

ansible的配置文件:

[[email protected] ~]# rpm -qc ansible

/etc/ansible/ansible.cfg

/etc/ansible/hosts

/etc/ansible/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

ansible基于SSH的方式工作

基于用户名,密码

192.168.10.1 ansible_ssh_user=root ansible_ssh_pass=redhat

基于密钥

Ansible的使用流程:

1、配置基于密钥的SSH

[[email protected] ~]# ssh-keygen -t rsa

[[email protected] ~]# ssh-copy-id -i 192.168.87.102

2、编辑/etc/ansible/hosts文件,指定被管理端的IP地址或者主机名

# vim /etc/ansible/hosts

[test]

192.168.87.102

3、使用ansible的模块

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

=============================================================

常用的模块:

如何查看ansible支持的模块

[[email protected] ~]# ansible-doc -l

查看模块支持的参数

# ansible-doc <模块名称>

[[email protected] ~]# ansible-doc ping

ansible模块的说明:

# ansible <pattern> -m <module_name> [-a <arguments>]

1、ping模块

检测被管理端是否在线

[[email protected] ~]# ansible test -m ping              ---->test是自己在 /etc/ansible/hosts定义的

2、command 模块

在被管理端执行命令

不支持重定向,管道

默认模块

[[email protected] ~]# ansible test -m command -a ‘uptime‘

[[email protected] ~]# ansible test -m command -a ‘date‘

[[email protected] ~]# ansible test -m command -a ‘touch /tmp/aa.txt‘

参数:

chdir=<Directory>

[[email protected] ~]# ansible test -m command -a "chdir=/tmp ls ./"

3、shell 模块

在被管理端执行命令

支持重定向,管道

[[email protected] ~]# ansible test -m shell -a ‘echo "hello ansible" > /tmp/bb.txt‘

4.copy模块

拷贝ansible管理端的文件到远程主机的指定位置

常见参数有:

dest=    指明拷贝文件的目标目录位置,使用绝对路径,如果源是目录,则目标也要是目录,如果目标文件已存在,会覆盖原有内容

src=\‘#\‘"   指明本地路径下的某个文件,可以使用相对路径和绝对路径,支持直接指定目录,如果源是目录,则目标也要是目录

mode=    指明复制时,目标文件的权限

owner=   指明复制时,目标文件的属主

group=   指明复制时,目标文件的属组

content= 指明复制到目标主机上的内容,不能与src一起使用,相当于复制content指明的数据,到目标文件中

[[email protected] ~]# ansible test -m copy -a "src=/etc/hosts dest=/tmp"

[[email protected] ~]# ansible test -m copy -a "src=/etc/passwd dest=/tmp mode=600owner=nobody group=nobody"

5.cron模块

管理计划任务的模块

常见参数有:

minute=  指明计划任务的分钟,支持格式:0-59,*,*/2等,与正常cron任务定义的一样的语法,省略时,默认为*,也就是每分钟都执行

hour=    指明计划任务的小时,支持的语法:0-23,*,*/2等,省略时,默认为*,也就是每小时都执行

day=     指明计划任务的天,支持的语法:1-31,*,*/2等,省略时,默认为*,也就是每天都执行

month=   指明计划任务的月,支持的语法为:1-12,*,*/2等,省略时,默认为*,也就是每月都执行

weekday= 指明计划任务的星期几,支持的语法为:0-6,*等,省略时,默认为*,也就是每星期几都执行

reboot   指明计划任务执行的时间为每次重启之后

name=    给该计划任务取个名称,必须要给明。每个任务的名称不能一样。

job=     执行的任务是什么,当state=present时才有意义

state=present|absent   表示这个任务是创建还是删除,present表示创建,absent表示删除,默认是present

[[email protected] ~]# ansible test -m cron -a ‘minute=*/5 name=Ajob job="/usr/sbin/ntpdate 172.16.8.100 &> /dev/null" state=present‘

7.file模块

用于设定远程主机上的文件属性

常见参数有:

path=   指明对哪个文件修改其属性

src=\‘#\‘" 指明path=指明的文件是软链接文件,其对应的源文件是谁,必须要在state=link时才有用

state=directory|link|absent   表示创建的文件是目录还是软链接

owner=   指明文件的属主

group=   指明文件的属组

mode=   指明文件的权限

创建软链接的用法:

src=\‘#\‘"  state=link

修改文件属性的用法:

path=  owner=  mode=  group=

创建目录的用法:

path=  state=directory

删除文件:

path= state=absent

创建软连接

[[email protected] ~]# ansible test -m file -a ‘src=/etc/passwd path=/tmp/passwd.link state=link‘

删除文件

[[email protected] ~]# ansible test -m file -a ‘path=/tmp/cc.txt state=absent‘

修改文件属性

[[email protected] ~]# ansible test -m file -a ‘path=/tmp/bb.txt mode=700 owner=root group=nobody‘

创建目录

[[email protected] ~]# ansible test -m file -a ‘path=/tmp/bj state=directory‘

删除目录

[[email protected] ~]# ansible test -m file -a ‘path=/tmp/bj state=absent‘

8.hostname模块

管理远程主机上的主机名

常用参数有

name=  指明主机名

[[email protected] ~]# ansible test -m shell -a ‘hostname‘

9.yum模块

基于yum机制,对远程主机管理程序包

常用参数有:

name=   指明程序包的名称,可以带上版本号,不指明版本,就是默认最新版本

name=httpd

name=httpd-2.2.15

state=present|lastest|absent   指明对程序包执行的操作,present表示安装程序包,latest表示安装最新版本的程序包,absent表示卸载程序包

disablerepo=     在用yum安装时,临时禁用某个仓库,仓库的ID

enablerepo=     在用yum安装时,临时启用某个仓库,仓库的ID

conf_file=       指明yum运行时采用哪个配置文件,而不是使用默认的配置文件

disable_gpg_check=yes|no   是否启用gpg-check

卸载软件包:

[[email protected] ~]# ansible test -m yum -a ‘name=httpd state=absent‘

安装软件包:

[[email protected] ~]# ansible test -m yum -a ‘name=httpd state=present‘

10、service模块

用来管理远程主机上的服务的模块

常见参数有:

name=                             被管理的服务名称(/etc/init.d)

state=started|stopped|restarted   表示启动或关闭或重启

enabled=yes|no                    表示要不要设定该服务开机自启动

runlevel=                       如果设定了enabled开机自动启动,则要定义在哪些运行级别下自动启动

[[email protected] ~]# ansible test -m service -a ‘name=nginx state=started‘

11. uri模块

如果远端是web服务器,可以利用ansible直接请求某个网页

常见参数有:

url=       指明请求的url的路径,如:http://10.1.32.68/test.jpg

user=      如果请求的url需要认证,则认证的用户名是什么

password=  如果请求的url需要认证,则认证的密码是什么

method=    指明请求的方法,如GET、POST, PUT, DELETE, HEAD

[[email protected] ~]# ansible test -m uri -a ‘url=http://192.168.87.102/index.html‘

12.group模块

用来添加或删除远端主机的用户组

常见参数有:

name=                  被管理的组名

state=present|absent   是添加还是删除,不指名默认为添加

gid=                   指明GID

system=yes|no          是否为系统组

[[email protected] ~]# ansible test -m group -a ‘name=hr gid=2000 state=present‘

13.user模块

管理远程主机上的用户的账号

常见参数有:

name=   指明要管理的账号名称

state=present|absent   指明是创建账号还是删除账号,present表示创建,absent表示删除

system=yes|no   指明是否为系统账号

uid=   指明用户UID

group=   指明用户的基本组

groups=   指明用户的附加组

shell=   指明默认的shell

home=   指明用户的家目录

move_home=yes|no   当home设定了家目录,如果要创建的家目录已存在,是否将已存在的家目录进行移动

password=   指明用户的密码,最好使用加密好的字符串         opssl passwd -l -salt ‘123‘ ‘redhat‘  生成加密密码

comment=   指明用户的注释信息

remove=yes|no   当state=absent时,也就是删除用户时,是否要删除用户的而家目录

[[email protected] ~]# ansible test -m user -a ‘name=martin group=hr groups=shichang uid=500 shell=/bin/bash home=/home/martin comment="martin user"‘

14.script模块

将管理端的某个脚本,移动到远端主机(不需要指明传递到远端主机的哪个路径下,系统会自动移动,然后执行),

一般是自动移动到远端主机的/root/.ansible/tmp目录下,然后自动给予其权限,然后再开个子shell然后运行脚本,运行完成后删除脚本

测试脚本

[[email protected] ~]# ansible test -m script -a ‘/root/1.sh‘

15.setup模块

可收集远程主机的facts变量的信息,相当于收集了目标主机的相关信息(如内核版本、操作系统信息、cpu、…),保存在ansible的内置变量中,之后我们有需要用到时,直接调用变量即可

[[email protected] ~]# ansible test -m setup

[email protected]#$%^&*其他的通过上面的方式查看[email protected]#$%^&*

时间: 2024-10-10 17:35:18

自动化运维工具之ansible的相关文章

自动化运维工具之ansible的简单应用

ansible: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,例如shell,copy,ping等,ansible只是提供一种框架.ansible的主要特性: 模块化:调用特定的模块,完成特定任务 基于Python语言实现,由Pa

自动化运维工具之ansible基础入门

自动化运维工具常用的有 ansible  saltstack  puppet等 ,前两者都是基于python开发,puppet基于ruby开发,今天我们简单介绍下ansible基础 一.基础知识: 1. 简介 ansible基于python开发,集合了众多运维工具的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的 (1) host inventory: 指定操作的主机,是一个配置文件里面定义监控的主机        (2) 各种模块核心模块.comman

自动化运维工具之Ansible(一)

1.简介: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric"虽然基本都没有用过")的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: 连接插件connection plugins:负责和被监控端实现通信: host inventor

自动化运维工具之Ansible(二)

一.Ansible基础安装 通过Yum安装rpm使用与epel6,7等.但是必须安装Python2.4或者更高的版本的Python. 添加源: wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum install ansible -y 二.Ansible配置 1.ssh面密钥登陆设置 ##生成公钥/私钥 ssh-keygen -t rsa ssh-copy-id -i ~/.ssh/id

自动化运维工具ansible的基本应用

在很多场景中我们都需要在多个主机上执行相同的命令或者是做相同的配置工作,此时,为了简化操作,我们可以借助一些自动化的工具来完成我们的需求,这种工具我们称之为自动化运维工具.ansible就是其中之一,下面我们就来用ansible来实现一些简单操作. 下面是ansible可以实现很多工具的功能,框架图如下所示:ansible不能实现操作系统的安装 ansible作者就是早期puppet和func的维护者之一,因为ansible充分吸取了puppet和func的优势,又力图避免他们的劣势. OS P

3.1 自动化运维工具ansible

自动化运维工具ansible 运维自动化发展历程及技术应用 Iaas 基础设施即服务Pass 平台服务SaaS 软件即服务 云计算工程师核心职能 Linux运维工程师职能划分 自动化动维应用场景 文件传输命令执行 应用部署配置管理任务流编排 企业实际应用场景分析 1 Dev开发环境 使用者:程序员功能:程序员开发软件,测试BUG的环境管理者:程序员123 2 测试环境 使用者:QA测试工程师功能:测试经过Dev环境测试通过的软件的功能管理者:运维说明:测试环境往往有多套,测试环境满足测试功能即可

自动化运维工具Ansible详细部署

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://sofar.blog.51cto.com/353572/1579894 ========================================================================================== 一.基础介绍 =========================================================

自动化运维工具Ansible实战(一)安装部署

1,基本介绍 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inventory:指定操作

Ansible自动化运维工具部署及使用

一.Ansible介绍 1.简介 ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能.ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信: (2).host inven