1 介绍

Ansible 是一个系统自动化工具,用来做系统配管理,批量对远程主机执行操作指令。

2 实验环境

ip

角色

192.168.40.71

ansible管控端

192.168.40.72

远程机器A

192.168.40.73

远程机器B

在管控端安装ansible:

yum install epel-release

  yum install ansible

配置管控端可无密登陆A/B机器

在管控端生成key并复制到A、B机器

  ssh-keygen -t rsa

  ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.40.72

  ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.40.73

验证可无密登陆即配置成功

配置管控端的管理远程主机ip

vim /etc/ansible/hosts 添加如下配置,中括号的内容为你自定义的名字。

[web]

192.168.40.72

192.168.40.73

至此配置完成,执行:

[root@localhost ~]# ansible web -m ping

192.168.40.73 | SUCCESS => {

"changed": false,

"ping": "pong"

}

192.168.40.72 | SUCCESS => {

"changed": false,

"ping": "pong"

}

ansible相关的命令:

  ansible  用来执行ansible管理命令

  ansible-playbook 当有众多任务时,可编写成playbook来运行

  ansible-doc 用来获取模块的帮助文档

ansible的简单使用格式:

  ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS

获取模块列表

  ansible-doc -l 里面有众多模块,掌握一些常用的即可满足日常工作

  ansible-doc -s modulename # 获取模块简要使用说明

示例:

[root@localhost ~]# ansible-doc -s ping

- name: Try to connect to host, verify a usable python and return `pong' on success

ping:

data:                  # Data to return for the `ping' return value. If this parameter is set to `crash', the module will cause an exception.

编写第一个playbook:

playbook基于YAML语法来编写,基本语法规则如下:

  1.大小写敏感

  2.使用缩进表示层级关系

  3.缩进时不允许使用Tab键,只允许使用空格

  4.缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  5. # 表示注释,从这个字符一直到行尾,都会被解析器忽略。

6. 用---表示开头

YAML 支持三种数据结构:

  对象:键值对的集合,用冒号:作为键值分隔

  数组:一组按次序排列的值,用减号-作为标识

  纯量:单个的、不可再分的值,如字符串,数值,日期等

例子:

---

- hosts: web

remote_user: root

tasks:

- name: ping test

ping: null

这个playbook表示去标识为web机的远程主机上,用root用户去执行名为ping test的任务,它使用ping模块。其中ping test为自己定义的任务名,会在稍后的执行输出中展示出来。

其对应的json结构为:

[

{

"hosts": "web",

"remote_user": "root",

"tasks": [

{

"name": "ping test",

"ping": null

}

]

}

]

运行:

root@localhost playbook]# ansible-playbook ping.yml

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************

ok: [192.168.40.72]

ok: [192.168.40.73]

TASK [ping test] **************************************************************************

ok: [192.168.40.73]

ok: [192.168.40.72]

PLAY RECAP ********************************************************************************

192.168.40.72              : ok=2    changed=0    unreachable=0    failed=0

192.168.40.73              : ok=2    changed=0    unreachable=0    failed=0

来写一个更实用的playbook:

[root@localhost playbook]# cat add_user.yml

---

- hosts: web

remote_user: root

gather_facts: true

tasks:

- name: Add users

user: name={{ item }} state=present groups=wheel

with_items:

- testuser1

- testuser2

它表示标识为web的远程主机执行名为:Add users的任务,它使用user模块,这里面还用到了变量的用法,{{ item }},它最后会被值testuser1 和 testuser2 替换,总共添加两个用户。这个对应json结构如下:

[

{

"hosts": "web",

"remote_user": "root",

"gather_facts": true,

"tasks": [

{

"name": "Add users",

"user": "name={{ item }} state=present groups=wheel",

"with_items": [

"testuser1",

"testuser2"

]

}

]

}

]

[root@localhost playbook]# ansible-playbook add_user.yml

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************

ok: [192.168.40.73]

ok: [192.168.40.72]

TASK [Add users] **************************************************************************

changed: [192.168.40.73] => (item=testuser1)

changed: [192.168.40.72] => (item=testuser1)

changed: [192.168.40.72] => (item=testuser2)

changed: [192.168.40.73] => (item=testuser2)

PLAY RECAP ********************************************************************************

192.168.40.72              : ok=2    changed=1    unreachable=0    failed=0

192.168.40.73              : ok=2    changed=1    unreachable=0    failed=0

再执行一遍,观察其输出与第一遍的差别:

[root@localhost playbook]# ansible-playbook add_user.yml

PLAY [web] ********************************************************************************

TASK [Gathering Facts] ********************************************************************

ok: [192.168.40.73]

ok: [192.168.40.72]

TASK [Add users] **************************************************************************

ok: [192.168.40.73] => (item=testuser1)

ok: [192.168.40.72] => (item=testuser1)

ok: [192.168.40.73] => (item=testuser2)

ok: [192.168.40.72] => (item=testuser2)

PLAY RECAP ********************************************************************************

192.168.40.72              : ok=2    changed=0    unreachable=0    failed=0

192.168.40.73              : ok=2    changed=0    unreachable=0    failed=0

其中第二次的changed=0。

ansible是很多模块的执行是具有幂等性的,即ansible检测到远程主机已经满足了最终执行完的条件就不再执行命令。

ansible基础及使用示例的更多相关文章

  1. ansible基础-安装与配置

    一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...

  2. ansible基础-优化

    简介 当管理集群达到一定规模时,ansible达到性能瓶颈是难以避免的,此时我们可以通过一定手段提高ansible的执行效率和性能. 笔者虽未管理过超大规模服务器,但也通过查找资料和咨询大神了解了一些 ...

  3. ansible基础-Jinja2模版 | 过滤器

    Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...

  4. ansible基础-playbooks

    1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...

  5. 003.Ansible基础使用

    一 Ansible命令用法 Ansible命令行执行方式有:Ad-Hoc.Ansible-playbook两种,Web方式其官方提供付费产品Tower.Ad-Hoc主要用于临时命令的执行,Ansibl ...

  6. 自动化运维工具-Ansible基础及Ansible Ad-Hoc

    第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...

  7. Ansible基础使用

    原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 Ansible命令用法 1.1 免密钥 1.2 Ad-Hoc基础命令 1.3 ...

  8. 一、Ansible基础之入门篇

    目录 1. Ansible基础 1.1 介绍 1.2 工作原理 1.3 如何安装 1.3.1 先决条件 1.3.2 安装Ansible 1.4 管理节点与被管理节点建立SSH信任关系 1.5 快速入门 ...

  9. 数据分析与展示——Matplotlib基础绘图函数示例

    Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...

随机推荐

  1. [51nod1614]刷题计划

    大赛将至,摆在你面前的是n道题目,第 i(1 ≤ i ≤ n) 道题目能提升 ai 点智力值,代码量为 bi KB,无聊值为 ci ,求至少提升m点智力值的情况下,所做题目代码量之和*无聊值之和最小为 ...

  2. BZOJ1008: [HNOI2008]越狱-快速幂+取模

    1008: [HNOI2008]越狱 Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 8689  Solved: 3748 Description 监狱有 ...

  3. 迷宫问题(bfs+记录路径)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105278#problem/K K - 迷宫问题 Time Limit:1000 ...

  4. c++(hash表)

    hash表,有时候也被称为散列表.个人认为,hash表是介于链表和二叉树之间的一种中间结构.链表使用十分方便,但是数据查找十分麻烦:二叉树中的数据严格有序,但是这是以多一个指针作为代价的结果.hash ...

  5. 从parcel.js打包出错,到拥抱nvm

    去年年底发布的parcel.js在年底可谓是火了一把,短短一个多月的时间在GitHub热门排行榜上名列前茅.因其几乎零配置的易用性,相比Webpack的复杂配置收获了大量关注及好评,甚至有人预言未来大 ...

  6. [国嵌攻略][153][I2C裸机驱动设计]

    eeprom简介 eeprom电可擦除可编程只读存储器,是一种类似于flash的固态存储器,但是与flash相比又存在一些区别: 1.eeprom可以按位擦写,而flash只能大片擦除. 2.eepr ...

  7. oracle存储过程的创建和使用

    创建存储过程: 格式:create or replace procedure procedure_name(参数 参数类型) Is/as 变量1 变量1的类型: begin ----------业务逻 ...

  8. HDU 2119 Matrix

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2119 解题思路: 处理数据,使用公式最小点覆盖数=最大匹配数,使用匈牙利算法求二分图最大匹配即可. ...

  9. Switch 语句

    如果您希望有选择地执行若干代码块之一,请使用 Switch 语句. 使用 Switch 语句可以避免冗长的 if..elseif..else 代码块. 语法 工作原理: 对表达式(通常是变量)进行一次 ...

  10. dedecms织梦首页如何调用文章列表?

    如果冯耀宗博客类似,首页调用文章列表,同时也有许多企业站需要调用文章列表,今天我与大家来分享一下dedecms织梦首页如何调用文章列表? {dede:arclist     row='16'  tit ...