Ansible 之 概念和常用模块介绍

1  概述



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

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。主要包括如下的特性:

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

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

(3)、模块化,调用特定的模块,完成特定任务,各种模块核心模块、command模块、还支持自定义模块;

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

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

(6)、基于Python语言实现,由Paramiko, PyYAML和Jinja2三个关键模块;

(7)、部署简单,无agent

(8)、支持幂等性;

(9)、ansible:用于Configuration和Command and Control

本文将通过例子介绍ansible的配置和ansible的常用模块使用



2  ansible配置介绍



安装服务包

服务包在epel源中,直接安装

yum -y install ansible

配置文件:/etc/ansible/ansible.cfg

主机清单:/etc/ansible/hosts

主程序:

ansible

ansible-playbook

ansible-doc

ansible的简单使用格式:

ansible  HOST-PATTERN  -m MOD_NAME  -a  MOD_ARGS -f FORKS -C -u USERNAME -c CONNECTION

简要命令介绍

-m指明要加载的模块,因为不同的功能需要调用不同的模块,模块才是完成功能的核心,如果不指定模块,默认是command命令,在目标主机上执行一个命令

-a 定义模块的操作

-f:指定一批要执行机器的数量

查看所有主机

ansible all --list-hosts

查看对应组 websrvs 的所有的主机

ansible websrvs --list-hosts

检查状态

ansible all -m ping

执行命令,默认是模块是command

如执行ifconfig命令

ansible all -a 'ifconfig'

等价于如下命令

ansible all -m command -a 'ifconfig'

查看模块类列表,和模块的功能解释,自带模块叫标准模块,可以自定义模块。

ansible-doc -l



3  ansible的常用模块



获取模块列表:ansible-doc  -l

查看对应模块详细介绍的命令: ansible-doc -s module

Ansible:无代理模式,建议通过ssh管理, 由模块实现相应的管理

      常用模块:

文件管理  copy, file, fetch, get_url

软件包安装管理:yum, easy_install, pip,apt

服务管理: service

用户管理:   group, user

任务计划:     cron, at

命令管理:    command, shell

自动将脚本复制到远端执行后删除:   script

测试管理: ping

3.1  实验环境准备

73是ansible主机,63,,65,72,75是被管理的主机,操作前同步时间

ansibles服务包在epel源中,或者extras(仅次于os外的仓库)包中。配置好yum源后

yum -y install ansible

在ansible主机端生成密钥 ,或者直接在hosts文件定义时,直接写入密码,但是这种方式不安全,建议生成ssh 的key文件

生成ssh key,分发到到每台需要管控的主机上

ssh-keygen -t rsa -P ''
for i in 63 65 72 75 ;do ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]$i;done

#注意,这里如果机器太多,可以通过except命令输入yes和密码实现自动化分发ssh key

73上配置如下

在hosts文件定义要管理的主机,纳入同一组,一个主机可以纳入多个组,

vim  /etc/ansible/hosts
[websrvs]
172.18.50.72
172.18.50.75
[dbsrvs]
172.18.50.63
172.18.50.65

完成hosts配置和认证后,不需要重启任何服务,可以直接使用ansible

3.2  常用模块介绍

command模块:在远程主机运行命令;

chdir:执行命令前切换工作目录至指定的位置;

create=/PATH/TO/SOMEFILE+OR_DIR:如果此次给定的文件或者目录存在,则不执行命令

remove,

removes=/PATH/TO/SOMEFILE_OR_DIR:如果此处给定的文件或目录不存在,则不执行命令;与create相反,意为:令此处给定的文件或目录存在时方执行命令;

例子

在172.18.50.63的/tmp下创建文件73abc和目录test,但是遵循幂等原则,mkdir命令如果对应目录以及存在,就会报错

ansible 172.18.50.63 -m command -a "touch 73abc chdir=/tmp"
ansible 172.18.50.63 -m command -a "mkdir test chdir=/tmp"

查看管理主机的当前路径,如果不更改路径,默认在该路径下执行操作

ansible 172.18.50.63 -m command -a "pwd"

shell模块:在远程主机在shell进程下运行命令,支持shell特性,如管道等;

chdir=:执行命令前切换工作目录至指定的位置;

creates=/PATH/TO/SOMEFILE_OR_DIR:如果此处给定的文件或目录存在,则不执行命令;

removes=/PATH/TO/SOMEFILE_OR_DIR:如果此处给定的文件或目录不存在,则不执行命令;意为:令此处给定的文件或目录存在时方执行命令;

executable=/PATH/TO/SHELL:指定运行命令使用的shell解释器;

例子

完成高级shell命令,如管道命令和重定向命令,需要用shell模块来执行,跟command命令相似

如执行以下命令,虽然没有保存,但是更改密码没有成功,模块需要指定shell模块执行成功

ansible 172.18.50.63 -m command -a "echo test6666 | passwd --stdin test66"

正确命令

ansible 172.18.50.63 -m shell -a "echo test6666 | passwd --stdin test66"

将每台主机上的/root/host1重定向到文件/etc/hosts里

ansible all -m shell -a "cat /root/host1 >> /etc/hosts"

group模块:管理组账号

name=

state= #创建用present,删除用absent

system=

gid=

例子

创建组test89,指定gid为1008

ansible 172.18.50.63 -m group -a "name=test89 gid=1008"

user模块:管理用户账号

name=

system=

uid=

shell=

group=

groups=

comment=

home=

generate_ssh_key={true | false}

local=

例子

创建账号sunny99,指定uid为1990

ansible 172.18.50.63 -m user -a "name=sunny99 uid=1990"

copy模块:将文件拷贝到远程主机 

用法:

(1) src=  dest=

(2) content=  dest=

owner, group, mode

例子

拷贝当前目录下的hello.sh文件到所有主机/tmp目录下

ansible all -m copy -a "src=hello.sh dest=/tmp/ owner=daemon group=sunny mode=755"

用content直接在所有主机的目录/tmp下生成文件hi.txt,并写入内容

ansible all -m copy -a "content='hello,sunny\nhow are you\n' dest=/tmp/hi.txt owner=sunny group=sunny mode=664"

fetch模块:从远端节点取文件,会在本地对应的目录下,即dest指定的目录下,创建一个以主机ip命令的目录,同时在该ip目录下,创建src指定的目录,将文件放到对应的目录下

例子

从远端的主机的/tmp下获取hi.txt文件,放到本地的/tmp下,那么在本地tmp下会生成以所有主机ip命名的目录

ansible all -m fetch -a "src=/tmp/hi.txt dest=/tmp/"

get_url模块:从互联网上下载模块到每一台管理的主机,是幂等的。

get_url模块:从互联网上(http,https,ftp协议)下载模块到每一台管理的主机,是幂等的。

url=

dest=

sha256sum=

owner, group, mode

例子

下载url对应的目录,并且保存到主机172.18.50.63的/root/blog1里

ansible 172.18.50.63 -m get_url -a "url=http://blog.51cto.com/ghbsunny/2044309 dest=/root/blog1"

file模块:设置文件属性,注意file的stat比较特殊

用法:

(1) 创建链接文件(必须的):*path=  src=  state=link

(2) 修改属性:path=  owner= mode= group=

(3) 创建目录:path=  state=directory

幂等, state=directory会自动创建一个目录

注意:state属性的可用值:file,directory,link,hard,touch,absent

例子

创建连接

ansible 172.18.50.63 -m file -a "path=/tmp/hidirlink src=/tmp/hidir state=link"

创建目录/tmp/hidir

ansible 172.18.50.63 -m file -a "path=/tmp/hidir state=directory"

修改目录/tmp/hidir的属性

ansible 172.18.50.63 -m file -a "path=/tmp/hidir mode=666 owner=sunny"

创建文件hitxt,并修改相关属性

ansible 172.18.50.63 -m file -a "path=/tmp/hitxt state=touch owner=sunny mode=770"

cron 模块:管理 cron.d 和 crontab条目.

minute=

day=

month=

weekday=

hour=

*job= #定制任务

*name= #表示以谁的身份身份编辑,不是远端运行的账号,crontab条目的描述,或者如果设置了env,则是环境变量的名称。 如果state = absent,则是必需的。注意,如果没有设置name和state = present,那么总是会创建一个新的crontab条目,而不管现有条目是什么。

user= #表示该计划任务在远程主机以谁的身份运行,远程主机需要拥有该账号

state=

present:创建

absent:删除

例子

创建一个计划任务,其中,远程主机以sunny账号执行该计划任务

ansible 172.18.50.63 -m cron -a "minute=00 hour=*/6 day=3 state=present user=sunny job='/usr/sbin/ntpdate 172.18.50.61'"

hostname模块:管理主机名

name=

例子

更改主机名为CentOS6CC

ansible 172.18.50.63 -m hostname -a "name=CentOS6C"

pip模块:管理python的库依赖管理模块

name=

state=

version=

npm模块:用npm管理node.js包,:实现安装功能的组件

yum模块:使用“yum”包管理器管理包

name=:程序包名称,可以带版本号;

state=

present, latest,installed:安装

absent,remove:卸载

其他的包管理工具:apt(debian),zypper(suse), dnf(fedora),rpm,dpkg

例子

安装tree包

ansible 172.18.50.63 -m yum -a "name=tree state=latest"

查看tree包信息,这里使用默认的command模块查看

ansible 172.18.50.63  -a "rpm -qi tree"

service模块:管理服务

*name=  *星号表示必须选项

state=

started

stopped

restarted

enabled=

runlevel=

例子

启动mysql服务

ansible 172.18.50.63 -m service -a "name=mysqld state=started"

setup模块:获取facts,收集每个主机的变量

例子

获取172.18.50.72主机的变量

ansible 172.18.50.72 -m setup

git模块:版本追踪和管理的工具

repo:仓库路径

dest=目标路径

version=指明获取的版本,默认是获得最新的版本

例子

从git hub上下载代码

推送git 版本,服务器和远程主机都要安装git命令才能实现

ansible 172.18.50.63 -m git -a "repo=https://github.com/happyfish100/fastdfs.git dest=/tmp/fastdfs"

实现如下命令的作用

直接下载git hub上的代码

git clone https://github.com/happyfish100/fastdfs.git

deploy_helper:部署模块

haprxoy 模块:

backend=

host=

state=

weight=



Ansible 之 概念和常用模块介绍

时间: 2024-11-06 22:41:47

Ansible 之 概念和常用模块介绍的相关文章

Ansible 自动化运维工具之inventory和常用模块介绍

一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主机集合就叫做inventory.在ansible中,描述你主机的默认方法是将它们列在一个文本文件中,这个文件叫inventory文件. 一个简单的inventory文件可能只包含一组主机名的列表,如下: ftp.testansible.com samba.testansible.com mail.t

Ansible的安装、配置及常用模块介绍

Ansible的安装.配置及常用模块介绍 ansible安装方式 1. ansible安装常用两种方式,yum安装和pip程序安装 这里提供二种安装方式,任选一种即可: 1.使用yum安装 yum install epel-release -y yum install ansible –y 2. 使用pip(python的包管理模块)安装 pip install ansible   #如果没pip,需先安装pip.yum可直接安装: yum install python-pip pip inst

python基础31[常用模块介绍]

python基础31[常用模块介绍] python除了关键字(keywords)和内置的类型和函数(builtins),更多的功能是通过libraries(即modules)来提供的. 常用的libraries(modules)如下: 1)python运行时服务 * copy: copy模块提供了对复合(compound)对象(list,tuple,dict,custom class)进行浅拷贝和深拷贝的功能. * pickle: pickle模块被用来序列化python的对象到bytes流,从

Ansible常用模块介绍及使用

ansible常用命令解析: 查看当前 ansible 都支持哪些模块: ansible-doc -l 查看某一模块可以使用的参数:ansible-doc -s copy (eg:copy模块) ansible用法: ansible 主机名 -m 模块名 -a 模块参数 -m:模块的名字,如果执行单一的命令不用加-m,默认走command -a: 模块参数,如果模块是command,-a 后面跟的就是命令参数 -i : 指定hosts文件位置      默认:/etc/ansible/hosts

Ansible 常用模块介绍

ansible提供了众多模块,我们可以在ansible主机上运行ansible-doc -l命令查看ansible所有支持的模块.通过ansible-doc -s MODULE_NAME  命令可以查看指定模块的所有参数 查看所有模块 [email protected]:/etc/ansible/roles/tomcat8_install/tasks# ansible-doc  -l less 436 Copyright (C) 1984-2009 Mark Nudelman less come

ansible基础—安装与常用模块

ansible介绍: ansible是一个基于python开发的轻量级自动化运维管理工具,可以用来批量执行命令,安装程序,支持playbook编排.它通过ssh协议来连接主机,省去了在每一台主机安装客户端的麻烦,相对比puppet和saltstack,显得更为简单和轻量. ansible命令参数: Usage: ansible <host-pattern> [options] Options:   -a MODULE_ARGS, --args=MODULE_ARGS              

IIS7 常用模块介绍说明

1.1.0   IIS常用的功能模块介绍: 1)         静态内容:可发布静态 Web 文件格式,比如 HTML 页面和图像文件. 2)         默认文档:允许您配置当用户未在 URL 中指定文件时供 Web 服务器返回的默认文件. 3)         目录浏览:允许用户查看 Web 服务器上的目录的内容.当用户未在 URL 中指定文件以及禁用或未配置默认文档时,使用“目录浏览”在目录中提供自动生成的所有目录和文件的列表.建议将该功能禁用. 4)         HTTP错误:

常用模块介绍之读书人的事怎么能说是偷呢?(盗用老师的微博)

常用模块 一 time模块 时间表示形式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串:(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. (2)格式化的时间字符串(Format String): '1988-03-16' (3)元组(struct_time) :struct_time元

Ansible安装部署及常用模块详解

Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> -m NAME,–module-name=NAME:指定执行使用的模块 -u USERNAME,–user=USERNAME:指定远程主机以USERNAME运行命令 -s,–sudo:相当于Linux系统下的sudo命令 -USUDO_USERNAME,–sudo-user=SUDO_USERNAME:使用