ansible七种武器和json
ansible七种武器和json
• 第一种武器
– ansible 命令,用于执行临时性的工作,也是我们之前主要学习的功能,必须掌握
• 第二种武器
– ansible-doc 是 Ansible模块文档说明,针对每个模块都有详细的用法说明及应用案例介绍,功能和Linux系统man命令类似,必须掌握ansible七种武器
• 第三种武器
– ansible-console 是 Ansible 为用户提供的一款交互式工具,用户可以在 ansible-console 虚拟出来的终端上像 Shell 一样使用 Ansible 内置的各种命令,这为习惯于使用 Shell 交互方式的用户提供了良好的使用体验。
• 第四种武器
– ansible-galaxy 从 github 上下载管理 Roles 的一款工具,与 python 的 pip 类似。ansible七种武器
• 第五种武器
– ansible-playbook 是日常应用中使用频率最高的命令,其工作机制是:通过读取预先编写好的 playbook 文件实现批量管理。要实现的功能与命令 ansible 一样,可以理解为按一定条件组成的 ansible 任务集,必须掌握
• 第六种武器
– ansible-vault 主要用于配置文件加密,如编写的Playbook 配置文件中包含敏感信息,不希望其他人随意查看, ansible-vault 可加密/解密这个配置文件ansible七种武器
• 第七种武器
– ansible-pull
– Ansible 有两种工作模式 pull/push ,默认使用 push模式工作,pull 模式和通常使用的 push 模式工作机理刚好相反
– 适用场景:有数量巨大的机器需要配置,即使使用高并发线程依旧要花费很多时间;
– 通常在配置大批量机器的场景下会使用,灵活性稍有欠缺,但效率几乎可以无限提升,对运维人员的技术水平和前瞻性规划有较高要求。
json简介
json 是什么?
– json 是 JavaScript 对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式。
– JSON中的分隔符限于单引号 ' 、小括号 ()、中括号[ ]、大括号 { } 、冒号 : 和逗号 ,
• json 特性
– JSON 是纯文本
– JSON 具有"自我描述性"(人类可读)
– JSON 具有层级结构(值中存在值)
– JSON 可通过 JavaScript 进行解析json简介
• json 语法规则
– 数据在名称/值对中
– 数据由逗号分隔
– 大括号保存对象
– 中括号保存数组
• json 数据的书写格式是:名称/值对。
– 名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值,例如:"漂亮姐" : "庞丽静"
• json 语法规则之数组
{ "讲师":
["牛犇", "丁丁", "静静","李欣"]
}
• 复合复杂类型
{ "讲师":
[ {"牛犇":"小逗逼", "负责阶段":"1"},
{"丁丁":"老逗逼", "负责阶段":"2"},
{"静静":"漂亮姐", "负责阶段":"3"},
{"李欣":"老司机", "负责阶段":"4"}
]
}
yaml简介
• yaml 是什么 -- //不可table键
– 是一个可读性高,用来表达数据序列的格式。
– YAML:YAML Ain't Markup Language
– YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans在2001年首次发表了这种语言[1],另外Ingy döt Net与Oren Ben-Kiki也是这语言的共同设计者[2]。目前已经有数种编程语言或脚本
语言支持(或者说解析)这种语言。
• yaml 基础语法
– YAML的结构通过空格来展示
– 数组使用"- "来表示
– 键值对使用": "来表示
– YAML使用一个固定的缩进风格表示数据层级结构关系
– 一般每个缩进级别由两个以上空格组成
– # 表示注释
• 注意:***************************************
– 不要使用tab,缩进是初学者容易出错的地方之一
– 同一层级缩进必须对齐
YAML的键值表示方法
– 采用冒号分隔
– : 后面必须有一个空格
– YAML键值对例子
"庞丽静": "漂亮姐"
– 或
"庞丽静":
"漂亮姐"
– 复杂YAML的键值对嵌套
"讲师":
"庞丽静": "漂亮姐"
– 或
"讲师":
"庞丽静":
"漂亮姐"
– 数组
["牛犇", "丁丁", "静静", "李欣"]
• YAML 数组表示方法
– 使用一个短横杠加一个空格
– YAML 数组例子
- "牛犇"
- "丁丁"
- "静静"
- "李欣"
– 哈希数组复合表达式
"讲师":
- "牛犇"
- "丁丁"
- "静静"
- "李欣"yaml简介
– 高级复合表达式
"讲师":
-
"牛犇": "小逗比"
"阶段": 1
-
"丁丁": "老逗比"
"阶段": 2
-
"静静": "漂亮姐"
"阶段": 3
-
"李欣": "老司机"
"阶段": 4
• yaml高级语法
– | 与 > 表示对应的值为多行字符, > 与 | 的区别是会把 \n 转换为空格
– ! 可以设置类型,!! 可以强制类型转换
– 为了维持文件的简洁,并避免数据输入的错误,YAML提供了结点参考(*)和散列合并(<<)参考到其他结点标签的锚点标记(&)。参考会将树状结构加入锚点标记的内容,并可以在所有数据结构中运作,合并只有散列表可以使用,可以将键值自锚点标记复制到指定的散列表中
jinja2模版简介
• jinja2 是什么
– Jinja2是基于python的模板引擎,包含 变量 和 表达式两部分,这两者在模板求值的时候会被替换为值。模板中还有标签,控制模板的逻辑。
• 为什么要学习 jinja2 模版
– 要使用 ansible 就要深入学习 playbook 配置及模板。playbook 的模板使用 python 的 jinja2 模块来处理的jinja2模版简介
• jinja2 模版基本语法
– 模板的表达式都是包含在分隔符 "{{ }}" 内的;
– 控制语句都是包含在分隔符 "{% %}" 内的;
– 另外,模板也支持注释,都是包含在分隔符 "{# #}"内,支持块注释。
– 调用变量
{{varname}}
– 计算
{{2+3}}
– 判断
{{1 in [1,2,3]}}
• jinja2 模版控制语句
{% if name == '小逗逼' %}
讲故事,吹牛B
{% elif name == '老逗逼' %}
黑丝(82年的)
{% elif name == '漂亮姐' %}
约会
{% else %}
沉迷学习,无法自拔
{% endif %}
• jinja2 模版控制语句
{% if name == ... ... %}
... ...
{% elif name == '漂亮姐' %}
{% for method in [约会, 逛街, 吃饭, 看电影, 去宾馆] %}
{{do method}}
{% endfor %}
... ...
{% endif %}
• jinja2 过滤器
– 变量可以通过 过滤器 修改。过滤器与变量用管道符号( | )分割,并且也 可以用圆括号传递可选参数。多个过滤器可以链式调用,前一个过滤器的输出会被作为 后一个过滤器的输入。
– 例如:
– 把一个列表用逗号连接起来: {{ list|join(', ') }}
– 过滤器这里不一一列举,需要的可以查询在线文档
http://docs.jinkan.org/docs/jinja2/templates.html
#builtin-filters
playbook是什么
• playbook 是什么?
– playbook 是 ansible 用于配置,部署,和管理托管主机剧本。通过 playbook 的详细描述,执行其中的一系列 tasks,可以让远端主机达到预期的状态。
– 也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在 Ansible 中由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情playbook是什么
• 为什么要使用playbook
– 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的 ad-hoc 命令是不适合的,这时最好使用playbook,就像执行 shell 命令与写 shell 脚本一样,也可以理解为批处理任务
– 使用 playbook 你可以方便的重用编写的代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码在使用 Ansible 的过程中,你也会发现,你所处理的大部分操作都是编写 playbookplaybook语法基础
• playbook 语法格式
– playbook由 YAML 语言编写,遵循 YAML 标准
– 在同一行中,#之后的内容表示注释
– 同一个列表中的元素应该保持相同的缩进
– playbook 由一个或多个 play 组成
– play 中 hosts,variables,roles,tasks 等对象的表示方法都是键值中间以 ": " 分隔表示
– YAML 还有一个小的怪癖. 所有的 YAML 文件开始行都应该是 ---. 这是 YAML 格式的一部分, 表明一个文件的开始
• playbook语法基础
• playbook 构成
– Target: 定义将要执行 playbook 的远程主机组
– Variable: 定义 playbook 运行时需要使用的变量
– Tasks: 定义将要在远程主机上执行的任务列表
– Handler: 定义 task 执行完成以后需要调用的任务playbook语法基础
• Playbook执行结果
• 使用 ansible-playbook 运行playbook文件,得到输出内容为 JSON 格式。并且由不同颜色组成,便于识别。
一般而言
• 绿色代表执行成功
• ***代表系统代表系统状态发生改变
• 红色代表执行失败playbook语法基础
• 第一个playbook
---
- hosts: all
remote_user: root
tasks:
- ping:
# 第一行,表示开始
ansible-playbook myping.yml -f 5
– -f 并发进程数量,默认是 5
– hosts 行的内容是一个或多个组或主机的 patterns,以逗号为分隔符
– remote_user 就是账户名
• playbook语法基础续 ... ...
– tasks
– 每一个 play 包含了一个 task 列表(任务列表).
– 一个 task 在其所对应的所有主机上(通过 hostpattern 匹配的所有主机)执行完毕之后,下一个 task才会执行.
– 有一点需要明白的是(很重要),在一个 play 之中,所有 hosts 会获取相同的任务指令,这是 play 的一个目的所在,也就是将一组选出的 hosts 映射到 task,执行相同的操作playbook语法基础
• playbook 执行命令
– 给所有主机添加用户 plj,设置默认密码 123456
– 要求第一次登录修改密码
---
- hosts: all
remote_user: root
tasks:
- name: create user plj
user: group=wheel uid=1000 name=plj
- shell: echo 123456 | passwd --stdin plj
- shell: chage -d 0 plj
[root@localhost 07.03]# ansible-playbook uesr2.yml
案例2
---
- hosts: web1
remote_user: root
vars:
uname: li4
tasks:
- shell: userdel -r zhang3
ignore_errors: True
- user:
name: "{{uname}}"
password: "{{ '123456' | password_hash('sha512') }}"
groups: users
[root@localhost ansible]# ansible-playbook uesr1.yml
案例3
---
- hosts: web
remote_user: root
tasks:
- name: install the latest version of Apache
yum:
name: httpd
state: installed
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '^Listen '
line: 'Listen 8080'
- lineinfile:
path: /etc/httpd/conf/httpd.conf
regexp: '#ServerName '
line: 'ServerName localhost'
- shell: echo "hello world" >index.html
args:
chdir: /var/www/html
notify:
- restart httpd
handlers:
- name: restart httpd
service: name=httpd state=restarted
[root@localhost 07.03]# ansible-playbook httpd.yml
ansible七种武器和json的更多相关文章
- 面试官的七种武器:Java篇
起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...
- Linux就这个范儿 第15章 七种武器 linux 同步IO: sync、fsync与fdatasync Linux中的内存大页面huge page/large page David Cutler Linux读写内存数据的三种方式
Linux就这个范儿 第15章 七种武器 linux 同步IO: sync.fsync与fdatasync Linux中的内存大页面huge page/large page David Cut ...
- 百度云世界里的“七种武器”:PCS、BAE、Site App、ScreenX等
如果说去年百度世界的关键词是“百度新首页”的话,那么今年在研发者人群中,对百度世界最深的印象就是“七种武器”,即在云的世界里,百度为开发者所提供的包括个人云存储.LBS.移动云测试中心等在内的七种工具 ...
- UNIX/Linux C 程序员需要掌握的七种武器
我是一名普通的软件工程师,不是什么技术大牛.这篇文章所提到的"七种武器"只是我这些年工作经验的一点体会和感悟,如果有错误的地方,还请大家指正. (一)C语言 作为一名C程序员,熟练 ...
- 快速开发平台分享-UCML快速开发七种武器
传统的快速开发平台强调的是组件重用.构件重用,主要解决功能重用层面,一般提供了软件开发最常用的功能:表单设计.BPM(业务流程管理).报表.组织机构及权限等功能.但只有功能重用,没有过程重用,要么只能 ...
- 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)
让 Python 代码更易维护的七种武器 2018/09/29 · 基础知识 · 武器 原文出处: Jeff Triplett 译文出处:linux中国-Hank Chow 检查你的代码的质 ...
- PHP程序猿必备的七种武器
作为一个程序猿(又或者是程序媛),出来闯荡江湖,没有几种必杀技在手,那是肯定无法赢得江湖名声的,除了必杀技之外,武器也是很重要的,但是一把青钢剑,肯定是无法赢得万千少男少女的欢心的.就连小李飞刀,人家 ...
- [转] 前端开发利器--Brackets 的七种武器和旁门左道
转自:http://www.jianshu.com/p/ff7798aa4548 Brackets是Adobe开发的web编辑器,是一款免费开源.多平台支持的软件,并在于GitHub上维护.Brack ...
- 成为 Linux 终端高手的七种武器 之七 条件执行&&
7.条件执行 Bash 也可以连续执行两条命令。 第二条命令仅在第一条命令成功执行后才会开始执行。如要如此,你可以通过键入“&&”,也就是两个“&”字符进行分隔,在同一行输入两 ...
随机推荐
- Elasticsearch构建全文搜索系统
目录 前言 一.安装 1.安装elasticsearch 2.启动集群cluster 3.安装管理界面elasticsearch-head 4.安装分词插件elasticsearch-analysis ...
- CSS核心概念之盒子模型
盒子模型(Box Model) 关于更多CSS核心概念的文章请关注GitHub--CSS核心概念. 当对一个文档进行布局的时候,浏览器的渲染引擎会根据标准之一的 CSS 基础框盒模型(CSS basi ...
- Ubuntu下实现歌词解析
我们要明确目的,实现歌曲歌词同步. 1.将歌词文件一次性去取到内存中.(以周董的“简单爱”为例) a.用fopen打开歌词文件 FILE *fp = fopen(“简单爱.lrc”,"r& ...
- iview admin template 基础模板架子
https://github.com/iview/iview-admin/tree/template
- React笔记1
目录 1.react基础:类组件.函数式组件.ES5/ES6继承 2.生命周期钩子函数 3.什么是JSX 4.props和state有什么区别 5.路由配置 6.自定义封住组件 7.React 状态管 ...
- macOS开发:调整NSImage尺寸大小
原文链接 extension NSImage { func resize(_ to: CGSize, isPixels: Bool = false) -> NSImage { var toSiz ...
- Spring Boot(十三):整合Redis哨兵,集群模式实践
前面的两篇文章(Redis的持久化方案, 一文掌握Redis的三种集群方案)分别介绍了Redis的持久化与集群方案 -- 包括主从复制模式.哨兵模式.Cluster模式,其中主从复制模式由于不能自动做 ...
- 解决2020-3-27 github无法访问
早上的github无法访问了 查找资料后,发现可以修改 hosts 文件 右键 属性 将只读去掉 进行修改 其中的ip去如下地址拿 试一下,大功告成
- web----HTML(WEB概述)
## web概述: *JavaWeb: 什么是web,即JavaWeb(使用Java语言开发基于互联网的项目). *软件架构: 1.C/S:Client/Server 客户端/服务器端 *在用户本地有 ...
- 接口自动化框架pyface详细介绍
版权说明 本框架系本人结合一些实践经验和开源框架设计思想,在家基于兴趣爱好独立完成的代码开发. 源码只保存在私人电脑,办公电脑上无.github开源与公司无关,先把关系撇清,不涉及侵权. 嘘. 框架定 ...