ansible基础及使用示例
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基础及使用示例的更多相关文章
- ansible基础-安装与配置
一 安装 1.1 ansible架构 ansible是一个非常简单的自动化部署项目,由python编写并且开源.用于提供自动化云配置.配置文件管理.应用部署.服务编排和很多其他的IT自动化需求. an ...
- ansible基础-优化
简介 当管理集群达到一定规模时,ansible达到性能瓶颈是难以避免的,此时我们可以通过一定手段提高ansible的执行效率和性能. 笔者虽未管理过超大规模服务器,但也通过查找资料和咨询大神了解了一些 ...
- ansible基础-Jinja2模版 | 过滤器
Jinja2模版介绍 注:本文demo使用ansible2.7稳定版 在ansible基础-变量的「8.2 模版使用变量」章节中关于模版与变量也有所提及,有兴趣的同学可以去回顾一下. ansible通 ...
- ansible基础-playbooks
1. playbooks介绍 如果说ansible的modules是工具,inventory配置文件是原材料,那么playbook就是一封说明书,这里会记录任务是如何如何执行的,当然如果你愿意,这里也 ...
- 003.Ansible基础使用
一 Ansible命令用法 Ansible命令行执行方式有:Ad-Hoc.Ansible-playbook两种,Web方式其官方提供付费产品Tower.Ad-Hoc主要用于临时命令的执行,Ansibl ...
- 自动化运维工具-Ansible基础及Ansible Ad-Hoc
第58章 Ansible 目录 第58章 Ansible 一.Ansible基础概述 1.1)什么是Ansible 1.2)Ansible可以完成哪些功能呢?1.3)Ansible特点 1.4)Ans ...
- Ansible基础使用
原文转自:https://www.cnblogs.com/itzgr/p/10233932.html作者:木二 目录 一 Ansible命令用法 1.1 免密钥 1.2 Ad-Hoc基础命令 1.3 ...
- 一、Ansible基础之入门篇
目录 1. Ansible基础 1.1 介绍 1.2 工作原理 1.3 如何安装 1.3.1 先决条件 1.3.2 安装Ansible 1.4 管理节点与被管理节点建立SSH信任关系 1.5 快速入门 ...
- 数据分析与展示——Matplotlib基础绘图函数示例
Matplotlib库入门 Matplotlib基础绘图函数示例 pyplot基础图表函数概述 函数 说明 plt.plot(x,y,fmt, ...) 绘制一个坐标图 plt.boxplot(dat ...
随机推荐
- 【C#学习笔记之一】C#中的关键字
C#中的关键字 关键字是对编译器具有特殊意义的预定义保留标识符.它们不能在程序中用作标识符,除非它们有一个 @ 前缀.例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字. 下面是列出的 ...
- 【经验总结】Java在ACM算法竞赛编程中易错点
一.Java之ACM易错点 1. 类名称必须采用public class Main方式命名 2. 在有些OJ系统上,即便是输出的末尾多了一个“ ”,程序可能会输出错误,所以在我看来好多OJ系统做的是非 ...
- 【Java学习笔记之一】java关键字及作用
Java关键字及其作用 一. 总览: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements ...
- [bzoj1369] [Baltic2003]Gem
结论题...一棵树里用到的颜色数不超过logn.. f[i][j]表示以i为根的子树里,i的颜色是j的方案数. g[i][j]表示max{f[i][k]},(k!=j #include<cstd ...
- HDU2009
求数列的和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- 解决JSONObject.fromObject数字为null时被转换为0
在使用JSONObject.fromObject的时候会遇到一种情况就是当对象的某一个Double型或Integer型的属性为空的时候,转JSON的时候会变成0.当一个布尔型的属性为空的时候,转JSO ...
- 《TensorFlow深度学习应用实践》
http://product.dangdang.com/25207334.html 内容 简 介 本书总的指导思想是在掌握深度学习的基本知识和特性的基础上,培养使用TensorFlow进行实际编程以解 ...
- centos7 hue安装
p.MsoNormal { margin: 0pt; margin-bottom: .0001pt; text-align: justify; font-family: Calibri; font-s ...
- 我的第一个python web开发框架(20)——产品发布(部署到服务器)
首先按上一章节所讲述的,将服务器环境安装好以后,接下来就是按步骤将网站部署到服务器上了. 我们的站点是前后端分离的,所以需要部署两个站点.首先来发布前端站点. 部署前端站点 输入命令进入svn管理文件 ...
- 从零开始学习前端JAVASCRIPT — 1、JavaScript基础
1:定义:javascript是一种弱类型.动态类型.解释型的脚本语言. 弱类型:类型检查不严格,偏向于容忍隐式类型转换. 强类型:类型检查严格,偏向于不容忍隐式类型转换. 动态类型:运行的时候执行类 ...