• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

ansible——playbook多样化编写:Templates、Tags、Roles

互联网 diligentman 6天前 3次浏览

Templates、Tags、Roles

  • 一、Templates模块
  • 二、tags模板
    • 2.1 tags脚本
    • 2.2 tags执行
      • 2.2.1 直接执行
      • 2.2.2 tags执行
      • 2.2.3 always执行
  • 三、Roles
    • 3.1 roles内各目录含义解释
    • 3.2 在一个playbook中使用roles的步骤
    • 3.3 实验:安装搭建LAMP架构
      • 3.3.1 创建文件
      • 3.3.2 编写httpd模块
      • 3.3.3 编写MySQL模块
      • 3.3.4 编写PHP模块
      • 3.3.5 编写roles总脚本

一、Templates模块

ansible的template模块,可以将带有参数的配置文件传递到目标地址,可以对文件进行属组属主的修改以及备份。优先类似于docker的consul。

templates功能:根据模板文件动态生成对应的配置文件,命名必须以 .j2 结尾

#修改httpd配置文件
[root@localhost conf]# vim /etc/httpd/conf/httpd.conf 		
42 Listen {{http_port}}				#给监听端口定义变量
43 MaxClients {{client_num}}		#最大并发量定义变量
95 ServerName {{server_name}}		#给域名定义变量
#在主机清单中定义变量
[root@localhost ~]# vim /etc/ansible/hosts 
[webservers]
192.168.238.20 http_port=192.168.238.20:80 server_name=www.xyw.com client_num=30
[mysql]
192.168.238.30
#修改名称为.j2
[root@localhost conf]# cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
[root@localhost conf]# cd /opt/
[root@localhost opt]# ls
httpd.conf.j2  rh  test.sh

ansible------playbook多样化编写:Templates、Tags、Roles

#编写yml脚本
#注意格式对齐
[root@localhost opt]# vim apache.yaml

- hosts: webservers
  remote_user: root
  vars:
  - names: httpd
  tasks:
  - name: install httpd
    yum: name={{names}} state=latest
  - name: config file
    template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf			#传送到被管理端,动态生成文件内容
    notify:
     - restart httpd
  - name: start httpd server
    service: name={{names}} enabled=true state=started
  handlers:
    - name: restart httpd
      service: name ={{names}} state=restarted

ansible------playbook多样化编写:Templates、Tags、Roles

#检查脚本是否有错误
ansible-playbook apache.yaml --syntax-check

#执行脚本
ansible-playbook apache.yaml

ansible------playbook多样化编写:Templates、Tags、Roles

ansible------playbook多样化编写:Templates、Tags、Roles

#去被管理端远程主机上查看
grep -i listen /etc/httpd/conf/httpd.conf			#-i 不区分大小写
grep -i maxClient /etc/httpd/conf/httpd.conf
grep -i servername /etc/httpd/conf/httpd.conf

ansible------playbook多样化编写:Templates、Tags、Roles

二、tags模板

在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了

2.1 tags脚本

vim b.yml

- hosts: webservers
  remote_user: root
  tasks:
  - name: copy hosts
    copy: src=/etc/hosts dest=/opt/hosts
    tags:
    - abc
  - name: touch hosts
    file: path=/opt/hosts01 state=touch

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

2.2 tags执行

2.2.1 直接执行

ansible-playbook b.yml

ansible------playbook多样化编写:Templates、Tags、Roles

ansible------playbook多样化编写:Templates、Tags、Roles

2.2.2 tags执行

ansible-playbook b.yml --tags="abc"

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

2.2.3 always执行

always当tags的标签使用时,表示总会执行,即使tags未指定其执行。

vim b.yml

- hosts: webservers
  remote_user: root
  tasks:
  - name: copy hosts
    copy: src=/etc/hosts dest=/opt/hosts
    tags:
    - abc
  - name: touch hosts
    file: path=/opt/hosts01 state=touch
    tags:
    - always		#tags使用always时,不管有没有被指定,都会执行

ansible-playbook b.yml --tags="abc"

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

三、Roles

roles能够根据层次型结构自动装载变量文件、task以及handlers等。 简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。

roles/
	common/
		files/
		templates/
		tasks/
		handlers/
		vars/
		defaults/
		meta/
	web/
		files/
		templates/
		tasks/
		handlers/
		vars/ 
		defaults/
		meta/

3.1 roles内各目录含义解释

files:用来存放由 copy 模块或 script 模块调用的文件。
templates:用来存放jinjia2模板,template 模块会 自动在此目录中寻找 jinjia2 模板文件。
tasks:此目录应当包含一个 main.yml 文件, 用于定义此角色的任务列表,此文件可以使用 include 包含其它的位于此目录的 task 文件。
handlers:此目录应当包含一个 main.yml 文件, 用于定义此角色中触发条件时执行的动作。
vars:此目录应当包含一个 main.yml 文件,用于定义此角色用到的变量。
defaults:此目录应当包含一个 main.yml 文件, 用于为当前角色设定默认变量。
meta:此目录应当包含一个 main.yml 文件, 用于定义此角色的特殊设定及其依赖关系。

3.2 在一个playbook中使用roles的步骤

1、创建以roles命令的目录。

mkdir /etc/ansible/roles/ -p 	#yum装完默认就有

2、创建全局变量目录。

mkdir /etc/ansible/group_vars/ -p
touch /etc/ansible/group_vars/all 	#文件名自己定义,引用的时候注意

3、在roles目录中分别创建以各角色名称命令的目录,如httpd。

mkdir /etc/ansible/roles/common -p

4、在每个角色命令的目录中分别创建 files、handlers、tasks、templates、meta、defaults和vars 目录, 用不到的目录可以创建为空

mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p

5、在每个角色的handlers、tasks、meta、defaults、vars 目录下创建 main.yml 文件,千万不能自定义。

touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml

6、在playbook文件中,调用各角色。

vi /etc/ansible/site.yml

- hosts: webservers
  remote_user: root
  roles:
  - httpd
  - mysql

3.3 实验:安装搭建LAMP架构

3.3.1 创建文件

#分别在httpd,mysql,php下创建files,templates,tasks,handlers,vars,defaults,meta文件夹,以便在其下面创建main.yml文件进行编写
mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta} -p
mkdir /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta} -p

#也可三条并一条写:
mkdir /etc/ansible/roles/{httpd,mysql,php}/{files,templates,tasks,handlers,vars,defaults,meta} -p

#分别在httpd,mysql,php的defaults,vars,tasks,meta,handlers下创建main.yml文件,便于编译内容,名称千万不能自定义。
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml

#也可三条并一条写:
touch /etc/ansible/roles/{httpd,mysql,php}/{tasks,handlers,vars,defaults,meta}/main.yml
#树状图递归查看文件内容
tree /etc/ansible/roles/{httpd,mysql,php}/

/etc/ansible/roles/httpd/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
/etc/ansible/roles/mysql/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
/etc/ansible/roles/php/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml

3.3.2 编写httpd模块

定义变量可以定义在全局变量中,也可以定义在ansible的roles角色变量中,一般定义在角色变量中

#编写一个简单的tasks/main.yml文件

#定义变量
vim /etc/ansible/roles/httpd/tasks/main.yml 
- name: ensure apache is at the latest version
  yum: pkg={{pkg}} state=latest		#定义变量为pkg。这里是想用httpd的,但是变量赋值要在vars目录下的main.yml文件内编写

#赋值变量
vim /etc/ansible/roles/httpd/vars/main.yml 
pkg: httpd				#此变量定义在httpd中,下面MySQL模块中使用同一字符串进行不同定义也是可以的,不相干

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

3.3.3 编写MySQL模块

#定义变量
vim /etc/ansible/roles/mysql/tasks/main.yml 
- name: ensure mysql is at the latest version
  yum: pkg={{pkg}} state=latest

#变量赋值
vim /etc/ansible/roles/mysql/vars/main.yml 
pkg: mariadb*

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

3.3.4 编写PHP模块

#定义变量
vim /etc/ansible/roles/php/tasks/main.yml 
- name: ensure php is at the latest version
  yum: pkg={{pkg}} state=latest

#变量赋值
vim /etc/ansible/roles/php/vars/main.yml 
pkg: php

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

3.3.5 编写roles总脚本

#编写roles总脚本,使各个模块可以联合起来执行
vim /etc/ansible/web.yml

- hosts: webservers
  remote_user: root
  roles:
  - httpd
  - mysql
  - php

ansible------playbook多样化编写:Templates、Tags、Roles
ansible------playbook多样化编写:Templates、Tags、Roles

#执行
ansible-playbook  /etc/ansible/web.yml

ansible------playbook多样化编写:Templates、Tags、Roles


程序员灯塔
转载请注明原文链接:ansible——playbook多样化编写:Templates、Tags、Roles
喜欢 (0)