ansible 自动化运维工具

一.ansible简介

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

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

二.ansible的特点:

1.部署简单,只需在主控端部署Ansible环境,被控端无需做任何操作,轻量级,没有agent,更新时,只需在操作机上进行一次更新即可;

2.默认使用SSH协议对设备进行管理

3.有大量常规运维操作模块,可实现日常绝大部分操作

4.配置简单、功能强大、扩展性强

5.支持API及自定义模块,可通过Python轻松扩展

6.通过Playbooks(剧本)来定制强大的配置、状态管理

7.提供一个功能强大、操作性强的Web管理界面和REST API接口

三.ansible的架构:

ansible的架构

五个组成部分:

1)ansible:核心

2)modules:包括 Ansible 自带的核心模块(core modules)及自定义模块(custom modules)

3)Plugins :完成模块功能的补充,包括连接插件、邮件插件等

4)Playbooks : 剧本;定义 Ansible 多任务配置文件,由Ansible 自动执行

5)host Inventory : 定义 Ansible 管理主机的清单

四.ansible工作流程:

ansible工作流程

简单流程:

1)加载默认的配置文件,默认/etc/ansible/ansible.cfg

2)查找对应的主机配置文件,找到要执行的主机或者组

3)加载自己对应的模块文件,如command

4) 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器端

5)对应执行用户的家目录的.ansible/tmp/XXX/XXX.PY文件

6)给文件+x执行,执行并返回结果

7)删除临时py文件,sleep 0退出

五.安装ansible

1.需要下载epel源才能安装ansible.

yum install epel-release -y

2.yum install ansible  -y

版本介绍

3.主要配置文件和命令:

/etc/ansible/ansible.cfg      #主配置文件,配置ansible工作特性

/etc/ansible/hosts        #主机清单

/etc/ansible/roles/       #存放角色的目录

/usr/bin/ansible          #主程序,临时命令执行工具

/usr/bin/ansible-doc #查看配置文档,模块功能查看工具

/usr/bin/ansible-galaxy    #下载/上传代码或Roles模块的官网平台

/usr/bin/ansible-playbook   #定制自动化任务,编排剧本工具

/usr/bin/ansible-pull          #远程执行命令的工具

/usr/bin/ansible-vault       #文件加密工具

/usr/bin/ansible-console      #基于Console界面与用户交互的执行工具

3.1.ansible默认配置文件:

[defaults] 默认配置

#inventory = /etc/ansible/hosts #主机列表配置文件

#library = /usr/share/my_modules/ #库文件存放目录

#module_utils = /usr/share/my_module_utils/ #模块存放目录

#remote_tmp = ~/.ansible/tmp #临时py命令文件存放在远程主机目录

#local_tmp = ~/.ansible/tmp #本机的临时命令执行目录

#forks = 5 #默认并发数 

#poll_interval = 15 #时间间隔

#sudo_user = root #默认sudo用户

#ask_sudo_pass = True #每次执行ansible命令是否询问sudo用户密码

#ask_pass = True #每次执行ansible命令是否询问ssh密码

#transport = smart #传输方式

#remote_port = 22 #远程端口号

#module_lang = C

#module_set_locale = False

host_key_checking = False  #检查对应服务器的host_key,建议取消注释.

log_path=/var/log/ansible.log #记录日志及位置,默认不记录 建议取消注释

4.免秘钥登录被管理的服务器:

操作步骤:ssh免秘钥登录

如果出现ssh链接较慢的现象,这里则需要修改sshd服务的两个参数来解决该问题:

UseDNS no

GSSAPIAuthentication no

5.ansible主要参数详解

ansible <host-pattern> [-f forks] [-m module_name] [-a args]

-v :打印详细模式

-i PATH :指定host文件路径

-f NUM:指定fork开启同步进程的个数,默认是5

-m NAME:指定module模块,默认为command模块

-a MODULE_ARGS:module模块的参数或者命令

-k:输入远程被管理端root的密码,

-sudo:基于sudo执行

-K:提示输入sudo密码与sudo一起使用

-u USERNAME:执行执行用户

-C:测试执行过程,不改变真实内容,相当于预演

-T TIMEOUT:执行命令超时事件,默认为10s

--version:查看Ansible软件的版本信息

ansible-doc -l --------->查看模块列表

ansible-doc  -s 模块名称 --------->查看相关模块参数

6.测试连接被控制服务器:

ansible  -m ping  ip地址

测试连接被控制服务器

7.主机清单中增加被控端主机,需要注意的是,主机清单也支持分组模式,这里将三台主机分为web_ceshi组

主机清单中增加被控端主机

/etc/ansible/host中存在三类主机:未分组的主机,有组的主机(一组属于"webservers"组的主机)和数据库有关("dbservers"组中的数据库服务器集合)

六.模块的使用

1.ping模块的使用:

测试分组服务器进行存活性检测:

分组服务器进行存活性检测

2.command模块:

选项:

1)chdir    # 在执行命令之前,先切换到该目录

改变目录

2)creates  # 一个文件名,当这个文件存在,则该命令不执行,可以用来做判断

存在不创建文件

removes      # 一个文件名,这个文件不存在,则该命令不执行,与creates相反的判断

不存在不执行

3.shell模块: -a 的参数就是shell命令

shell模块

4.copy模块

报错:Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!

解决方法(被控制端操作):

yum install libselinux-python -y  

关闭selinux

1)指定文件复制

文件复制

2)指定内容复制:

指定文件复制

5.file模块

1)创建目录: 

-a 'path=目录位置 state=directory group=属组 ower=属主  mode=权限'

2)创建链接:

-a 'path=链接文件位置  src=源文件位置 state=link '

-a ' src=源文件位置  dest=链接文件位置 state=hard '   ------>硬链接

3)删除文件:

-a 'path=文件位置  state=absent'

6.fetch

1)拉取远程主机文件到本地:

拉取文件

7.cron计划任务模块:

参数:

1)action:

cron backup=  #如果设置,创建一个crontab备份 【yes|no】

cron_file=    #如果指定, 使用这个文件cron.d,而不是单个用户

2)crontab

  day=    #日应该运行的工作(1-31, *, */2, )

  hour=  # 小时 (0-23, *, */2, )

  minute=    #分钟(0-59, *, */2, )

  month=    #月(1-12, *, /2, )

  weekday  # 周 ( 0-6forSunday-Saturday,, )

  job=      #指明运行的命令是什么

  name=  #定时任务描述

  reboot    # 任务在重启时运行,不建议使用,建议使用special_time

  special_time  #特殊的时间范围,参数:reboot(重启时),annually(每年),monthly(每月),weekly(每周),daily(每天),hourly(每小时)

  state  #指定状态,present表示添加定时任务,也是默认设置,absent表示删除定时任务

  user    #以哪个用户的身份执行

实例:

ansible web-ceshi  -m cron -a "name='Clear the iptable' minute=*/5  job='/sbin/iptables  -F' state=absent"

ansible web-ceshi  -m cron -a 'name="list df every hour" special_time=hourly job="/bin/df -lh >> /app/disk_total &> /dev/null"

ansible web-ceshi  -m cron -a "name='Clear the iptable' minute=*/5 job='/sbin/iptables -F'  "

8.yum模块:

实例1:ansible web-ceshi  -m yum -a "name=/app/zabbix-release-3.4-2.el7.noarch.rpm state=present disable_gpg_check=yes"

参数:

name:#所安装的包的名称

state= #present安装, latest安装最新的, absent 卸载软件。

disable_gpg_check #是否禁止GPG checking,只用于`present‘ or `latest’。

9.user模块,group模块:

1)user模块是请求的是useradd, userdel, usermod三个指令。

常用参数

参数名选项说明

home   指定用户的家目录,需要与create home配合使

groups   指定用户的属组

uid   指定用的uid

password   指定用户的密码

name   指定用户名

createhome   是否创建家目录 yes|no

system   是否为系统用户

remove   当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r

state   是创建还是删除

shell   指定用户的shell环境

指定password参数时,不能使用明文密码,因为后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中,所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。不同的发行版默认使用的加密方式可能会有区别,具体可以查看/etc/login.defs文件确认,centos 6.5版本使用的是SHA512加密算法

eg:创建用户along01,uid=1111,组为along,家目录在/app/along01 下

ansible web-ceshi  -m user -a 'name=along01 comment="along01 is along" uid=1111 group=along shell=/bin/bash home=/app/along01'

ansible web-ceshi  -m shell -a "cat /etc/passwd |grep along01" 查看

ansible web-ceshi -m user -a "name=along01 state=absent" 删除用户

ansible web-ceshi  -m group  -a 'name=along state=present'

10.远端执行脚本:

 ansible  -m script  web-ceshi  -a '脚本名称' 

11.setup模块

查询全部信息

1)ansible all -m setup --tree /tmp/facts 

将所有主机的信息输入到监控端的/tmp/facts目录下,每台主机的信息输入到主机名文件中

2)查看部分详细信息:

过滤信息

13. get_url模块

目的:将http://192.168.1.115/favicon.ico文件下载到指定节点的/tmp目录下

命令:ansible web-ceshi  -m get_url -a 'url=http://192.168.1.115/favicon.ico  dest=/tmp'


要想更好更简便的使用,请多参考官网的帮助文档http://docs.ansible.com/ansible/latest/intro_adhoc.html 或者使用ansible-hoc 模块名查看!!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容