linux 自动化运维工具ansible

一、ansible简介

1.ansible

ansible是新出现的自动化运维工具,基于Python研发。糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。仅需在管理工作站上安装ansible程序配置被管控主机的IP信息,被管控的主机无客户端。ansible应用程序存在于epel(第三方社区)源,依赖于很多python组件。主要包括:

  • 连接插件connection plugins:负责和被监控端实现通信;
  • host inventory:指定操作的主机,是一个配置文件里面定义监控的主机;
  • 各种模块核心模块、command模块、自定义模块;
  • 借助于插件完成记录日志邮件等功能;
  • playbook:剧本执行多个任务时,非必需可以让节点一次性运行多个任务。

2.ansible特性

  • 模块化设计,调用特定的模块来完成特定任务,本身是核心组件,短小精悍;
  • 基于Python语言实现,由Paramiko(python的一个可并发连接ssh主机功能库), PyYAML和Jinja2(模板化)三个关键模块实现;
  • 部署简单,agentless无客户端工具;
  • 主从模式工作;
  • 支持自定义模块功能;
  • 支持playbook剧本,连续任务按先后设置顺序完成;
  • 期望每个命令具有幂等性:

3.ansible架构

  • ansible core:ansible自身核心模块
  • host inventory:主机库,定义可管控的主机列表
  • connection plugins:连接插件,一般默认基于ssh协议连接
  • modules:core modules(自带模块)、custom modules(自定义模块)
  • playbooks:剧本,按照所设定编排的顺序执行完成安排任务

4.配置文件:

  • ansible应用程序的主配置文件:/etc/ansible/ansible.cfg
  • Host Inventory定义管控主机:/etc/ansible/hosts

二、ansible的安装部署

1、yum安装方式

1.1 查看操作系统版本

[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@localhost ~]# cat /etc/centos-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]#

1.2 安装 EPEL 源

[root@localhost ~]# yum y -y install  epel-release

1.3 查看安装的 EPEL 源

[root@localhost ~]# ll  /etc/yum.repos.d/epel*
-rw-r--r-- 1 root root  951 Oct  3  2017 /etc/yum.repos.d/epel.repo
-rw-r--r-- 1 root root 1050 Oct  3  2017 /etc/yum.repos.d/epel-testing.repo
[root@localhost ~]#

1.4 使用 yum 方式安装

[root@localhost ~]# yum install ansible  -y

1.5 安装完毕,查看版本

[root@localhost ~]# ansible --version
ansible 2.8.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Aug  4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)]
[root@localhost ~]#

2、Ansible 组成介绍

[root@localhost ~]# tree  /etc/ansible/
/etc/ansible/
├── ansible.cfg    # ansible 的配置文件
├── hosts   # ansible 的主仓库 用来存储需要管理的远程主机的相关信息
└── roles

1 directory, 2 files
[root@localhost ~]# 
  • 核心:ansible;
  • 核心模块(Core Modules):这些都是 ansible 自带的模块;
  • 扩展模块(Custom Modules):如果核心模块不是以完成某种功能,可以添加扩展功能;
  • 插件(Plugins):完成模块功能的补充;
  • 剧本(Playbooks):ansible 的任务配置文件,将多个任务定义在剧本中,由ansible 自动执行;
  • 连接插件(Connectior Plugins):ansible 基于连接插件连接到各个主机上,虽然ansible 是使用 ssh 连接到各个主机的,但是它还支持其他的连接方法,所以需要有连接插件;
  • 主机群(Host Inventor):定义 ansible 管理的主机

3、Ansible 的七个命令

安装完 ansible 后,发现 ansible 一共为我们提供了七个指令:ansible、ansible-doc、ansible-galaxy、ansible-lint、ansible-playbook、ansible-pull、ansible-vault 。这里我们只查看usage 部分,详细部分可以通过 “指令 -h” 的方式获取。

3.1 ansible

[root@localhost ~]#  ansible  -h
Usage: ansible <host-pattern> [options]

ansible 是指令核心部分,其主要用于执行 ad-hoc 命令,即单条命令。默认后面需要跟
主机和选项部分,默认不指定模块时,使用的是 command 模块。如:

[root@localhost ~]# ansible localhost -a 'date'
localhost | CHANGED | rc=0 >>
Fri Jun  7 11:51:33 CST 2019

You have new mail in /var/spool/mail/root
[root@localhost ~]#

** ansible 命令下的参数部分解释如下:**

-a 'Arguments', --args='Arguments' 命令行参数
-m NAME, --module-name=NAME 执行模块的名字,默认使用 command 模块,所以如果是只执行单一命令可以不用 -m 参数
-i PATH, --inventory=PATH 指定库存主机文件的路径,默认为/etc/ansible/hosts.
-u Username, --user=Username 执行用户,使用这个远程用户名而不是当前用户
-U --sud-user=SUDO_User sudo 到哪个用户,默认为 root
-k --ask-pass 登录密码,提示输入 SSH 密码而不是假设基于密钥的验证
-K --ask-sudo-pass 提示密码使用 sudo
-s --sudo sudo 运行
-S --su 用 su 命令
-s --snippet 指定模块显示剧本片段
-f --forks=NUM 并行任务数。NUM 被指定为一个整数,默认是 5。 #ansible testhosts -a "/sbin/reboot" -f 10 重启 testhosts 组的所有机器,每次重启 10 台
--private-key=PRIVATE_KEY_FILE 私钥路径,使用这个文件来验证连接
-v --verbose 详细信息
all 针对 hosts 定义的所有主机执行
-M MODULE_PATH, --module-path=MODULE_PATH 要执行的模块的路径,默认为/usr/share/ansible/
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文件
-o --one-line 压缩输出,摘要输出.尝试一切都在一行上输出。
-t Directory, --tree=Directory 将内容保存在该输出目录,结果保存在一个文件中在每台主机上。
-B 后台运行超时时间
-P 调查后台程序时间
-T Seconds, --timeout=Seconds 时间,单位秒 s
-P NUM, --poll=NUM 调查背景工作每隔数秒。需要- b
-c Connection, --connection=Connection 连接类型使用。可能的选项是 paramiko(SSH),SSH和地方。当地主要是用于 crontab 或启动。
--tags=TAGS 只执行指定标签的任务 例子:ansible-playbook test.yml --tags=copy 只执行标签为 copy 的那个任务
--list-hosts 只打印有哪些主机会执行这个 playbook 文件,不是实际执行该 playbook 文件
--list-tasks 列出所有将被执行的任务
-C, --check 只是测试一下会改变什么内容,不会真正去执行;相反,试图预测一些可能发生的变化
--syntax-check 执行语法检查的剧本,但不执行它
-l SUBSET, --limit=SUBSET 进一步限制所选主机/组模式 --limit=192.168.0.15 只对这个 ip
执行
--skip-tags=SKIP_TAGS 只运行戏剧和任务不匹配这些值的标签 --skip-tags=copy_start
-e EXTRA_VARS, --extra-vars=EXTRA_VARS 额外的变量设置为键=值或 YAML / JSON
-l,--limit 对指定的 主机/组 执行任务 --limit=192.168.0.10,192.168.0.11 或 -l 192.168.0.10 ,192.168.0.11 只对这个 2 个 ip 执行任务
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值