ansible(七种武器)

ansible七种武器

第一种武器

Ansible命令,用于执行临时性的工作,也是我们之前主要学习的功能,必须掌握

第二种武器

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

第三种武器

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

第四种武器

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

第五种武器

Ansible-playbook是日常应用中使用频率最高的命令,其工作机制是:通过读取预先编写好的playbook文件实现批量管理。要实现的功能与命令 ansible 一样,

可以理解为按一定条件组成的 ansible 任务集,必须

掌握

 

第六种武器

– ansible-vault 主要用于配置文件加密,如编写的

Playbook 配置文件中包含敏感信息,不希望其他人随

意查看, ansible-vault 可加密/解密这个配置文件

Json简介

Json是Javascript对象表示法,它是一种基于文本独立于语言的轻量级数据交换格式

Json语法

数据在名称/值对

数据由逗号分隔

大括号保存对象

中括号保存数组

 

第七种武器

– ansible-pull

– Ansible 有两种工作模式 pull/push ,默认使用 push

模式工作,pull 模式和通常使用的 push 模式工作机

理刚好相反

– 适用场景:有数量巨大的机器需要配置,即使使用高

并发线程依旧要花费很多时间;

– 通常在配置大批量机器的场景下会使用,灵活性稍有

欠缺,但效率几乎可以无限提升,对运维人员的技术

水平和前瞻性规划有较高要求。

 

 

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

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值

Json语法规则之数组

{

“key”:

[“value”,”value”,”value”]

}

复合复杂类型

{

“key”:

 

[{“test”:”testvalue”,”test1”:”test1value”},

{},

{},

{}]

 

}

 

 

yaml简介

• yaml 是什么

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

– 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的结构通过空格来展示

– 数组使用"- "来表示

– 键值对使用": "来表示

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

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

– # 表示注释

• 注意:

– 不要使用tab,缩进是初学者容易出错的地方之一

– 同一层级缩进必须对齐

yaml简介

• yaml高级语法

– | 与 > 表示对应的值为多行字符, > 与 | 的区别是会

把 \n 转换为空格

 

– ! 可以设置类型,!! 可以强制类型转换

– 为了维持文件的简洁,并避免数据输入的错误,YAML

提供了结点参考(*)和散列合并(<<)参考到其他

结点标签的锚点标记(&)。参考会将树状结构加入锚

点标记的内容,并可以在所有数据结构中运作,合并

只有散列表可以使用,可以将键值自锚点标记复制到

指定的散列表中

jinja2模版简介

• jinja2 是什么

– Jinja2是基于python的模板引擎,包含 变量 和 表达

式两部分,这两者在模板求值的时候会被替换为值。

模板中还有标签,控制模板的逻辑。

• 为什么要学习 jinja2 模版

– 要使用 ansible 就要深入学习 playbook 配置及模板。

playbook 的模板使用 python 的 jinja2 模块来处理的jinja2模版简介

• jinja2 模版基本语法

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

}}" 内的;

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

– 另外,模板也支持注释,都是包含在分隔符 "{# #}"

内,支持块注释。

– 调用变量

{{varname}}

– 计算

{{2+3}}

– 判断

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

 

jinja2模版简介

• jinja2 过滤器

– 变量可以通过 过滤器 修改。过滤器与变量用管道符号

( | )分割,并且也 可以用圆括号传递可选参数。多

个过滤器可以链式调用,前一个过滤器的输出会被作

为 后一个过滤器的输入。

– 例如:

– 把一个列表用逗号连接起来: {{ list|join(', ') }}

– 过滤器这里不一一列举,需要的可以查询在线文档

http://docs.jinkan.org/docs/jinja2/templates.html

#builtin-filters

 

Playbook是什么

Playbook是ansible用于配置,部署,和管理托管主机剧本,通过playbook的详细

描述,执行其中的一系列的tasks,可以让远端主机达到预期的状态。

playbook语法基础

• playbook 语法格式

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

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

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

– playbook 由一个或多个 play 组成

– play 中 hosts,variables,roles,tasks 等对象的表示

方法都是键值中间以 ": " 分隔表示

– YAML 还有一个小的怪癖. 所有的 YAML 文件开始行都

应该是 ---. 这是 YAML 格式的一部分, 表明一个文件的

开始

 

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 就是账户名

 

[root@ansible ~]# cat  ping.yml 

---

-  hosts: all

   remote_user: root

   tasks:

     - ping:

 

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

 

续 ... ...

– tasks

– 每一个 play 包含了一个 task 列表(任务列表).

– 一个 task 在其所对应的所有主机上(通过 host

pattern 匹配的所有主机)执行完毕之后,下一个 task

才会执行.

– 有一点需要明白的是(很重要),在一个 play 之中,

所有 hosts 会获取相同的任务指令,这是 play 的一个

目的所在,也就是将一组选出的 hosts 映射到 task,执

行相同的操作

[root@ansible ~]# cat  /etc/ansible/hosts

# This is the default ansible 'hosts' file.

#

# It should live in /etc/ansible/hosts

#

#   - Comments begin with the '#' character

#   - Blank lines are ignored

#   - Groups of hosts are delimited by [header] elements

#   - You can enter hostnames or ip addresses

#   - A hostname/ip can be a member of multiple groups

 

# Ex 1: Ungrouped hosts, specify before any group headers.

 

## green.example.com

## blue.example.com

## 192.168.100.1

## 192.168.100.10

 

# Ex 2: A collection of hosts belonging to the 'webservers' group

 

## [webservers]

## alpha.example.org

## beta.example.org

## 192.168.1.100

## 192.168.1.110

 

# If you have multiple hosts following a pattern you can specify

# them like this:

 

## www[001:006].example.com

 

# Ex 3: A collection of database servers in the 'dbservers' group

 

## [dbservers]

## 

## db01.intranet.mydomain.net

## db02.intranet.mydomain.net

## 10.25.1.56

## 10.25.1.57

 

# Here's another example of host ranges, this time there are no

# leading 0s:

 

## db-[99:101]-node.example.com

[web]

web1

web2

[web:vars]

ansible_ssh_user="root"

ansible_ssh_pass="123456"

[db]

db1

db2

[other]

192.168.6.33  ansible_ssh_user="root"  ansible_ssh_pass="123456"

[app:children]

web

db

 

[root@ansible ~]# cat user01.yml 

---

-  hosts: web

   remote_user: root

   tasks:

     - user: name=plj group=wheel uid=2000

     - shell: echo 123456 | passwd --stdin plj

     - name: ooxx

       shell: chage -d 0 plj

 

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

 

[root@ansible ~]# ansible-doc user

 

# Add the user 'johnd' with a specific uid and a primary group of 'admin'

- user:

    name: johnd

    comment: "John Doe"

    uid: 1040

group: admin

 

Playbook练习

编写playbook实现以下效果

安装apache   yum 

修改apache监听的端口为8080  lineinfile

为apache增加NameServer配置  

设置默认主页hello world   copy

启动服务

设置开机自启动    service

 

 

- name: install the latest version of Apache

  yum:

    name: httpd

    state: latest

- lineinfile:

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

    regexp: '^Listen '

    insertafter: '^#Listen '

line: 'Listen 8080'

 

- copy:

    src: /mine/ntp.conf

    dest: /etc/ntp.conf

    owner: root

    group: root

    mode: 0644

backup: yes

 

- service:

    name: httpd

    enabled: yes

 

 

[root@ansible ~]# curl http://web1:8080

hello 

[root@ansible ~]# 

[root@ansible ~]# cat apache.yml 

---

-  hosts: web

   remote_user: root

   tasks:

     - yum:

         name: httpd

         state: installed

     - lineinfile:

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

         regexp: '^Listen'

         insertafter: '^#Listen'

         line: 'Listen 8080'

     - lineinfile:

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

         regexp: '^ServerName'

         line: 'ServerName localhost'

     - copy:

         src: /root/index.html

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

         owner: apache

         group: apache

         mode: 0644

     - service:

         name: httpd

         state: started

         enabled: yes

[root@ansible ~]# ls

anaconda-ks.cfg  apache.retry  apache.yml  ifcfg-eth0  index.html  ping.yml  RPM-GPG-KEY-CentOS-7  user01.retry  user01.yml

 

猜你喜欢

转载自blog.csdn.net/weixin_40018205/article/details/81234708