基础知识

ansible七种武器

  • 第一种武器

—— ansible 命令,用于执行临时性的工作,必须掌握

  • 第二种武器

—— ansible-doc是ansible模块的文档说明,针对每个模块都有详细的说明及应用案例介绍,功能和Linux系统man命令类似,必须掌握

  • 第三种武器

—— ansible-console是ansible为用户提供的交互式工具,用户可以在ansible-console虚拟出来的终端上像Shell一样使用ansible内置的各种命令,这为习惯使用Shell交互方式的用户提供了良好的使用体验

  • 第四种武器

—— ansible-galaxy从github上下载管理Roles的一款工具,与python的pip类似

  • 第五种武器

—— ansible-plybook是日常应用中使用频率最高的命令,工作机制:通过读取先编写好的playbook文件实现批量管理,可以理解为按一定条件组成的ansible任务集,必须掌握

  • 第六种武器

—— ansible-vault主要用于配置文件加密,如编写的playbook文件中包含敏感信息,不想其他人随意查看,可用他加密/解密这个文件

  • 第七种武器

—— ansible-pull

—— ansible有两种工作模式pull/push,默认使用push模式工作,push是主动连接,pull是被动连接,pull和push工作模式机制刚好相反

—— 适用场景:有大批量机器需要配置,即便使用高并发线程依旧要花费很多时间

—— 通常在配置大批量机器的场景下使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求

##########################################################################

JSON简介

  • JSON是什么

—— JSON是JavaScript对象表示法,他是一种基于文本独立语言的轻量级数据交换格式

—— JSON中的分隔符限于单引号" ' "、小括号" () "、中括号" [] "、大括号" {} "、冒号" : "、和逗号" , "

  • JSON 特性

—— JSON是纯文本

—— JSON具有“自我描述性”(人类可读)

—— JSON具有层级结构(值中存在值)

—— JSON可通过JavaScript进行解析

  • JSON 语法规则

—— 数据在名称/值对中

—— 数据由逗号分隔

—— 大括号保存对象

—— 中括号保存数组

  • JSON 数据的书写格式是:名称/值对

—— 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,例如:"诗仙": "李白"

  • JSON语法规则之数组

{ "诗人":

["李白","杜甫","白居易","李贺"]

}

  • 复合复杂类型

{ "诗人":

[ {"李白":"诗仙","年代":"唐"},

{"杜甫":"诗圣","年代":"唐"},

{"白居易":"诗魔","年代":"唐"},

{"李贺":"诗鬼","年代":"唐"}

]

}

##########################################################################YAML简介

  • YAML是什么

—— 是一个可读性高,用来表达数据序列的格式

—— YAML(YAML Ain't Markup Language)

—— YAML参考了多种语言,如:C语言、Python、Perl等,并从XML、电子邮件的数据格式中获得灵感,Clark Evans在2001年首次发表了这种语言,目前已有数种变成语言或脚本语言支持这种语言

  • YAML基础语法

—— YAML的结构通过空格来展示

—— 数组使用"- "来表示(-空格)

—— 键值对是同": "来表示(:空格)

—— YAML使用一个固定的缩进风格表示数据层级结构关系

—— 一般每个缩进级别由两个以上空格组成

—— #表示注释

  • 注意:

—— 不要使用tab,可能会导致缩进出错

—— 同一层级缩进必须对齐

  • YAML的键值表示方法

—— 采用冒号分隔

—— : 后面必须有一个空格

—— YAML键值对例子

"诗仙": "李白"

—— 或

"李白":

"诗仙"

—— 复杂YAML的键值对嵌套

"诗人":

"李白": "诗仙"

"诗人":

"李白":

"诗仙"

数组

["李白","杜甫","白居易","李贺"]

  • YAML 数组表示方法

—— 使用一个短横杠加一个空格

—— YAML 数组例子

- "李白"

- "杜甫"

- "白居易"

- "李贺"

—— 哈希数组符合表达式

"诗人":

- "李白"

- "杜甫"

- "白居易"

- "李贺"

—— 高级符合表达式

"诗人":

-

"李白": "诗仙"

"年代": "唐"

-

"杜甫": "诗圣"

"年代": "唐"

-

"白居易": "诗魔"

"年代": "唐"

-

"李贺": "诗鬼"

"年代": "唐"

##########################################################################JJinja2模板简介

  • Jinja2是什么

—— Jinja2是基于Python的模板引擎,包含变量和表达式两部分,两者在模板求值时会被替换为值,模板中还有标签,控制模板的逻辑

  • 学习Jinja2模板的原因

—— 因为playbook的模板使用Python的Jinja2模板来处理

  • Jinja2模板基本语法

—— 模板的表达式都是包含在分隔符"{{ }}"内的

—— 控制语句都是包含在分隔符"{% %}"内的

—— 模板支持注释,都是包含在分隔符"{# #}"内,支持块注释

—— 调用变量

{{varname}}

—— 计算

{{2+3}}

—— 判断

{{1 in [1,2,3]}}

  • Jinja2模板控制语句

—— if判断

{% if name == '诗仙' %}

李白

{% elif name == '诗圣' %}

杜甫

{% elif name == '诗魔' %}

白居易

{% else %}

李贺

{% endif %}

—— for循环

{% if name == ... ... %}

... ...

{% elif name == '于谦' %}

{% for method in [抽烟,喝酒,烫头] %}

{{do method}}

{% endfor %}

... ...

{% endif %}

  • Jinja2过滤器

—— 变量可以通过过滤器修改。过滤器与变量用管道符号( | )分割,也可以用圆括号传递可选参数,多个过滤器可以链式调用,前一个过滤器的输出会被作为后一个过滤器的输入

  • 例如

—— 加密一个字符串 : {{'astr'|password_hash('sha512')}}

—— 过滤器可以查询在线文档

http://docs.jinkan.org/docs/jinja2/templates.html#builtin-filters

##########################################################################

playbook

  • playbook是什么

—— playbook是ansible用于配置,部署和管理托管主机的剧本,通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机到达预期状态

—— playbook字面意思即剧本,在ansible中由计算机进行安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情

  • 为什么要使用playbook

—— 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但有时一个设施过于复杂时,执行ad-hoc命令是不合适的,最好使用playbook

—— playbook可以反复使用编写的代码,可以放到不同的机器上面,像函数一样,最大化的利用代码,在使用ansible的过程中,处理的大部分操作都是在编写playbook

##########################################################################playbook语法基础

  • playbook语法格式

—— playbook由YAML语言编写,遵循YAML标准

—— 在同一行内,#之后的内容表示注释

—— 在同一个列表中的元素应该保持相同的缩进

—— playbook由一个或多个play组成

—— play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以": "分隔表示

—— YAML文件的开始行都应该是---,这是YAML格式的一部分,表示一个文件的开始

  • playbook构成

—— hosts:定义将要执行playbook的远程主机组(主机的集合)

—— vars:定义playbook运行时需要使用的变量

—— tasks:定义将要在远程主机上执行的任务列表(命令的集合)

—— handlers:定义task执行完成以后需要调用的任务

  • playbook执行结果

  • 使用ansible-playbook运行playbook文件,输出内容为JSON格式,由不同颜色组成便于识别

—— 绿色代表执行成功

—— 其他颜色代表系统状态发生改变

—— 红色代表执行失败

  • 第一个playbook

[root@ansible ~]# vim ping.yml

[root@ansible ~]# ansible-playbook ping.yml

//等同于命令 ansible all -m ping

—— -f并发进程数量,默认是5(线程的数量控制在cpu的8倍以内)

[root@ansible ~]# ansible-playbook ping.yml -f 5

—— hosts行内容是一个(多个)组或主机的patterns,以逗号为分隔符

—— remote_user 账户名

  • tasks

—— 命令的集合

—— 每一个play包含一个task列表(任务列表)

—— 一个task在对其所对应的所有主机上(通过 host pattern 匹配到的所有主机)执行完毕后,下一个task才会执行

—— tasks下的一级name(直属name)都是注释和说明

  • hosts

—— 主机的集合

—— 定义要执行任务的主机

  • playbook执行命令

—— 给web主机添加用户z3

—— 设置默认密码为123,并把 z3 用户添加到users组

[root@ansible ~]# vim user.yml

[root@ansible ~]# ansible-playbook user.yml

练习:playbook练习

1、所有web主机安装Apache

2、修改配置文件的监听端口为8080

3、设置默认主页hello world

4、启动服务

5、设置开机自启

[root@ansible ~]# vim http.yml

---

- hosts: web

remote_user: root

tasks:

- name: yum install httpd

yum:

name: httpd

state: latest

- name: vim /etc/httpd/conf/httpd.conf

lineinfile:

path: /etc/httpd/conf/httpd.conf

regexp: '^Listen '

insertafter: '#^Listen '

line: 'Listen 8080'

- name: vim /var/www/html/index.html

copy:

src: index.html

dest: /var/www/html/index.html

owner: apache

group: apache

mode: 0644

- name: systemctl start httpd

service:

name: httpd

state: started

enabled: yes

[root@ansible ~]# vim index.html

hello world

[root@ansible ~]# ansible-playbook http.yml

[root@ansible ~]# curl web1:8080

curl: (7) Failed connect to web1:8080; No route to host

[root@ansible ~]# curl web2:8080

curl: (7) Failed connect to web2:8080; No route to host

//报错原因:web1、web2的防火墙没关闭

[root@ansible ~]# ssh web1

[root@web1 ~]# systemctl stop firewalld

[root@web1 ~]# exit

[root@ansible ~]# ssh web2

[root@web2 ~]# systemctl stop firewalld

[root@web2 ~]# exit

[root@ansible ~]# curl web1:8080

hello world

[root@ansible ~]# curl web2:8080

hello world

playbook基础相关推荐

  1. 3.playbook基础

    2019独角兽企业重金招聘Python工程师标准>>> Playbooks 是 Ansible的配置,部署,编排语言.他们可以被描述为一个需要希望远程主机执行命令的方案,或者一组IT ...

  2. playbook基础 、 playbook进阶 、 总结和答疑

    基础知识 ansible的七种武器 第一种武器 -ansible命令,用于执行临时性的工作,必须掌握 第二种武器 -ansible-doc时ansible模块的文档说明,针对每个模块都有详细的说明及应 ...

  3. Ansible playbook 详解

    一.playbook流程介绍 playbook是由一个或者多个"play"组成的列表 play的主要功能在于将事先归并为一组的主机装扮成事先通过ansible中的task定义好的角 ...

  4. Ansible自动部署(基础篇)

    Ansible自动部署(基础篇) 一.ansible简介 1.ansible介 Ansible这个名字来源于科幻小说,是一种超光速通讯设备.在Linux中,ansible是新出现的自动化运维工具,基于 ...

  5. Ansible之Playbook使用

    一.Playbook是什么 playbook-剧本(也称编排) 介绍 playbooks是 一个不同于使用Ansible命令行执行方式的模式,其功能更强大灵活.简单来说,playbook是一个非常简单 ...

  6. Ansible 入门指南 - ansible-playbook 命令

    上篇文章Ansible 入门指南 - 安装及 Ad-Hoc 命令使用介绍的额是 Ad-Hoc 命令方式,本文将介绍 Playbook 方式. Playbook 译为「剧本」,觉得还挺恰当的. play ...

  7. ansible及ansible-palybook使用(持续更新)

    一.简介 Ansible is a radically simple configuration-management, application deployment, task-execution, ...

  8. 看完这篇学会Ansible

    安装Ansible # yum -y install epel-release # yum list all *ansible* # yum info ansible # yum -y install ...

  9. ansible使用教程(4W字长文,保姆级别教程,建议收藏)

    目录 一.介绍 1.Ansible发展史 2.特性 3.架构 4.ansible的作用以及工作结构 5.ansible主要组成部分 二.安装 1.rpm包安装: EPEL源 2.编译安装: 3.Git ...

最新文章

  1. Facebook开源内存数据库Beringei,追求极致压缩率
  2. C++二进制文件读写操作
  3. 45.Keepalived高可用群集
  4. HDU1584 蜘蛛牌 DFS回溯
  5. SQL Server 的 Statistics 簡介
  6. 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
  7. LeetCode 1008. 先序遍历构造二叉树(已知先序,求二叉搜索树)
  8. 在redhat enterprise 5 下安装ORACLE 10g
  9. mysql 创建表字段Double类型长度
  10. 分享可用的谷歌学术(google scholar) hosts
  11. 负载均衡器部署方式和工作原理
  12. 记录自己的鬼压床——长发
  13. 日记侠:微信传说的功能升级了,你用了没有?
  14. 将负数转换为整数(绝对值函数)
  15. 【量化选基】每年初买入近5年 收益率最高的10支基金会暴富吗?
  16. 修改审查元素怎么保存_[图解]微信公众号链接里的音频保存方法
  17. 码率控制(一):理解码率控制模式(x264,x264,vpx)
  18. 使用dfs求解修道士和野人问题
  19. 解决ora-01861文字与格式字符串不匹配(转)
  20. Chrome浏览器提示adobe flash player不是最新版本!

热门文章

  1. C#输出日志文件——log4net组件
  2. asp.net+C#基于web的失物招领系统ccA1A9程序
  3. QT触摸屏上TouchEvent 和 MouseEvent触发的顺序
  4. [转载]《狼》-bressanon布列瑟农 一次触动每个人心灵的感受
  5. CSS的四种基本选择器和四种高级选择器
  6. 数据分析和构建大数据分析基础设施的关键环节 Building a BigData Analytics Infrastructure
  7. 关于ShareSDK在Xcode14上面发生错误的相关解决办法
  8. js--获取上个月的年月 和 上个月月底日期
  9. 安装远程连接软件TeamViewer的详细教程
  10. UBUNTU 12.04 安装SOCKS5代理服务器DANTE-SERVER