参考:http://blog.51cto.com/191226139/2066936

   Ansible是什么

  Ansible 简单的说是一个配置管理系统(configuration management system)。你只需要可以使用 ssh 访问你的服务器或设备就行。它也不同于其他工具,因为它使用推送的方式,而不是像 puppet 等 那样使用拉取安装agent的方式。你可以将代码部署到任意数量的服务器上。

  

  Ansible能做什么

  ansible可以帮助我们完成一些批量任务,或者完成一些需要经常重复的工作。

  比如:同时在100台服务器上安装nginx服务,并在安装后启动它们。

  比如:将某个文件一次性拷贝到100台服务器上。

  比如:每当有新服务器加入工作环境时,你都要为新服务器部署某个服务,也就是说你需要经常重复的完成相同的工作。 这些场景中我们都可以使用到ansible。

  

  Ansible特性

 模块化:调用特定的模块,完成特定任务
 有Paramiko,PyYAML,Jinja2(模板语言)三个关键模块
 支持自定义模块
 基于Python语言实现
 部署简单,基于python和SSH(默认已安装),agentless
 安全,基于OpenSSH
 支持playbook编排任务
 幂等性:一个任务执行1遍和执行n遍效果一样,不因重复执行带来意外情况
 无需代理不依赖PKI(无需ssl)
 可使用任何编程语言写模块
 YAML格式,编排任务,支持丰富的数据结构
 较强大的多层解决方案

  

  Ansible架构

  Ansible工作原理

  

  Ansible主要组成部分功能说明

 PLAYBOOKS:
任务剧本(任务集),编排定义Ansible任务集的配置文件,由Ansible顺序依次执行,通常是JSON格式的YML文件
 INVENTORY:
Ansible管理主机的清单/etc/anaible/hosts
 MODULES:
Ansible执行命令的功能模块,多数为内置的核心模块,也可自定义,ansible-doc –l 可查看模块
 PLUGINS:
模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用
 API:
供第三方程序调用的应用程序编程接口
 ANSIBLE:
组合INVENTORY、 API、 MODULES、PLUGINS的绿框,可以理解为是ansible命令工具,其为核心执行工具

  注意事项

 执行ansible的主机一般称为主控端,中控,master或堡垒机
 主控端Python版本需要2.6或以上
 被控端Python版本小于2.4需要安装python-simplejson
 被控端如开启SELinux需要安装libselinux-python
 windows不能做为主控端

  安装Ansible

  以CentOS为例

  安装环境查看

  安装

yum -y install ansible

  查看版本

  

  Ansible 功能详解

  配置文件

配置文件或指令	描述
/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界面与用户交互的执行工具

  Ansible 配置文件

Ansible 配置文件/etc/ansible/ansible.cfg (一般保持默认)
 [defaults]
 #inventory = /etc/ansible/hosts # 主机列表配置文件
 #library = /usr/share/my_modules/ # 库文件存放目录
 #remote_tmp = $HOME/.ansible/tmp #临时py命令文件存放在远程主机目录
 #local_tmp = $HOME/.ansible/tmp # 本机的临时命令执行目录
 #forks = 5 # 默认并发数
 #sudo_user = root # 默认sudo 用户
 #ask_sudo_pass = True #每次执行ansible命令是否询问ssh密码
 #ask_pass = True #连接时提示输入ssh密码
 #remote_port = 22 #远程主机的默认端口,生产中这个端口应该会不同
 #log_path = /var/log/ansible.log #日志
 #host_key_checking = False # 检查对应服务器的host_key,建议取消注释。也就是不会弹出

  

  试验规划,两台主机192.168.56.11作为主控端,192.168.56.12被控端

  修改配置文件/etc/ansible/hosts

[webservers]
192.168.56.11
192.168.56.12

  webserves代表一个组,下面有两台主机

  执行命令

ansible 192.168.56.11 -m ping

  执行失败

  非常抱歉哦,竟然是失败的。为什么呢?Ansible是基于ssh进行工作的,那么当ssh一台远程主要的时候,是不是需要输入密码呢?可是这一条指令并没有提示输入口令呢

  加参数-k输入密码

  设置免密码登录 参考https://www.cnblogs.com/minseo/p/10043128.html

  就不会提示需要输入密码了

  Ansible常用命令语法

ansible <host-pattern> [-m module_name] [options]
指令 匹配规则的主机清单 -m 模块名 选项 --version 显示版本
-a 模块参数(如果有)
-m module 指定模块,默认为command
-v 详细过程 –vv -vvv更详细
--list-hosts 显示主机列表,可简写--list
-k, --ask-pass 提示连接密码,默认Key验证
-K,--ask-become-pass 提示使用sudo密码
-C, --check 检查,并不执行
-T, --timeout=TIMEOUT 执行命令的超时时间,默认10s
-u, --user=REMOTE_USER 执行远程执行的用户
-U, SUDO_USER, --sudo-user 指定sudu用户
-b, --become 代替旧版的sudo 切换
ansible-doc: 显示模块帮助
ansible-doc [options] [module...] -a 显示所有模块的文档
-l, --list 列出可用模块
-s, --snippet 显示指定模块的简要说明 例子:#ansible-doc ping 由于ansible的模块有1378个(2.4.2.0),并且一直在持续更新。因此,这个指令必须要掌握的。
#ansible-doc -l |wc -l
1378

  Ansible 的命令执行过程以 ansible all -m command -a 'ls -l /' -vvv 这条命令为例,根据显示的信息时行解读

1. 加载自己的配置文件,默认/etc/ansible/ansible.cfg
Using /etc/ansible/ansible.cfg as config file 2.匹配主机清单
Parsed /etc/ansible/hosts inventory source with ini plugin 3. 加载指令对应的模块文件,如command,生成.py的文件到本机的临时目录,这个目录就是在/etc/ansible/ansible.cfg定义的
Using module file /usr/lib/python2.7/site-packages/ansible/modules/commands/command.py
PUT /tmp/tmp4JvsLH TO /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py 4. 通过ansible将模块或命令生成对应的临时py文件,并将该文件传输至远程服务器的对应执行用户$HOME/.ansible/tmp/ansible-tmp-数字/XXX.PY文件,
这个目录就是在/etc/ansible/ansible.cfg定义的
( umask 77 && mkdir -p "` echo /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861 `" ....)
sftp> put /tmp/tmp4JvsLH /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py\n' 5. 给文件+x 权限
'chmod u+x /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/ /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py && sleep 0' 6. 执行并返回结果
'/usr/bin/python /root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/command.py; 7. 删除临时py文件,sleep 0退出
rm -rf "/root/.ansible/tmp/ansible-tmp-1517301292.6-155771303493861/" > /dev/null 2>&1 && sleep 0 8.断开远程主机连接
'Shared connection to 7-db-3.hunk.tech closed.\r\n')

  执行结果状态

 绿色:执行成功并且不需要做改变的操作

 ×××:执行成功并且对目标主机做变更

 红色:执行失败

  

Ansible自动化运维之介绍安装与简单使用的更多相关文章

  1. ansible自动化运维工具的安装与使用

    运行环境 centOS6.6 ansible ansible的功能还是比较多的,博主只用它在集群上进行批量部署软件和维护的功能,其他不多做研究,有需要的话这篇文章会慢慢补充. ansible特点 轻量 ...

  2. Ansible自动化运维笔记1(安装配置)

    1.Ansible的安装 pip install ansible==1.9.1 ansible1.9.1版本依赖的软件有 Python2.6以上版本 paramiko模块 PyYAML Jinja2 ...

  3. ansible 自动化运维

    Ansible 自动化运维 ansible安装epel #yum list all *ansible*#yum install *ansible*#yum info ansible#rpm -ql a ...

  4. 简单聊一聊Ansible自动化运维

    一.Ansible概述 Ansible是今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块 ...

  5. Ansible 自动化运维——剧本(playbook)

    Ansible 自动化运维--剧本(playbook) 1.playbook介绍: playbook是ansible用于配置,部署,和管理被控节点的剧本.通过playbook的详细描述,执行其中的ta ...

  6. 一文详解 Ansible 自动化运维

    开源Linux 一个执着于技术的公众号 一.Ansible 概述 Ansible 是近年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误 ...

  7. Ansible自动化运维工具-上

    [Ansible特点] 1)Ansible与saltstack均是基于Python语言开发的 2)安装使用简单,基于不同插件和模块实现各种软件,平台,版本的管理以及支持虚拟容器多层级的部署 3)不需要 ...

  8. Ansible 自动化运维工具

    Ansible 自动化运维工具 Ansible是什么? Ansible是一个"配置管理工具"也是一个"自动化运维工具" Ansible 作用: Ansible是 ...

  9. ansible自动化运维03

    ansible自动化运维常用模块 常用模块实现的功能:安装软件包:修改配置文件:创建程序用户组:创建目录,并修改所属和权限:挂载:启动服务:测试. command模块: shell模块: 注意:com ...

随机推荐

  1. Oracle 12c: RMAN restore/recover pluggable database

    查看数据库状态 运行在归档模式,可拔插数据库name=pdborcl SQL> archive log list; Database log mode Archive Mode Automati ...

  2. 解决nginx access日志中400 bad request 错误(转)

    在access.log中有大量400错误,并以每天几百M的速度增加,占用大量空间.tail -f /opt/nginx/logs/access.log 116.236.228.180 - - [15/ ...

  3. 如果你喜欢python,那你迟早会喜欢上julia的!

    你可曾想过有那么一门语言: 这门语言能够有C语言一样的速度,Ruby一样得活力(dynamism).像homoiconic一样的语言,它像Lisp一样有宏,但是也像Matlab一样有显而易见.熟悉的数 ...

  4. 转 可能是最漂亮的Spring事务管理

    Snailclimb 2018年05月21日阅读 4246 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/… 微信阅读地 ...

  5. MVC 打印解决方案--SNF快速开发平台3.1

    SNF-MVC打印报表方案: 报表模块创建的过程如下: 利用Stimulsoft Reports客户端报表工具新增一个报表文件 *.mrt 当然你也可以拿好用的*.mrt模版文件进行复制出来一个,我常 ...

  6. 第三部分:Android 应用程序接口指南---第四节:动画和图形---第一章 属性动画及动画与图形概述

    第1章 属性动画及动画与图形概述 Android提供了一系列强大的API来把动画加到UI元素中,以及绘制自定义的2D和3D图像中去.下面的几节将综述这些可用的API以及系统的功能,同时帮你做出最优的选 ...

  7. mysql服务启动、停止、重启

    如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/etc/inint.d/mysqld sta ...

  8. git 创建标签

    在Git中打标签非常简单,首先,切换到需要打标签的分支上: $ git branch * dev master $ git checkout master Switched to branch 'ma ...

  9. 解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o...

    解决Redis之MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist o... ...

  10. 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

    现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...