Templates模块
准备三台机器
192.168.162.20
192.168.162.30
192.168.162.5
[root@localhost ~/demo] # ansible all -a 'date'
[root@localhost ~/demo] # ssh-agent bash
[root@localhost demo]# ssh-add
[root@localhost demo]# rpm -qc httpd
[root@localhost demo]# cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
[root@localhost demo]# cd /opt/
[root@localhost opt]# vim httpd.conf.j2
[root@localhost opt]# ls
containerd httpd.conf.j2 rh
[root@localhost opt]# vim /etc/ansible/hosts
[root@localhost ~]# cd demo/
[root@localhost demo]# ls
a.yml b.yml c.yml d.yml
[root@localhost demo]# ansible-playbook d.yml
tags
在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了
vi hosts.yml
- hosts: webserver
remote_user: root
tasks:
- name: Copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- only
- name: touch file
file: path=/opt/hosts01 state=touch
执行命令: ansible-playbook hosts.yml --tags= "only"
ansible- playbook hosts.yml
事实上,不光可以为单个或多个task指定同-个tags. playbook还提供了一个特殊的tags为always. 作用就是使用always就是在一直执行
vi hosts.yml
- hosts: webserver
remote_user: root
tasks:
- name: Copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- only
- name: touch file
file: path=/opt/hosts01 state=touch
tags:
- always
执行命令: ansible-playbook hosts.yml --tags= "only"
roles
roles能够根据层次型结构自动装载变量文件、task以及handlers等。 简单来讲,roles就是通过分别将变量、 文件、任务、模块及处理器
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
web/
files/
templates/
tasks/
handlers/
defaults/
meta/
roles: | 内各目录含义解释 |
files: | 用来存放由copy模块或script模块调用的文件 |
templates: | 用来存放jinjia2模板,template模块会自动在此目录中寻找injia2模板文件 |
tasks: | 此目录应当包含一个main.yml文件, 用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件 |
handlers: | 此目录应当包含一个main.ymI文件, 用于定义此角色中触发条件时执行的动作 |
vars: | 此目录应当包含-个main.ym |
defaults: | 此目录应当包含一个main.ym |
meta: | 此目录应当包含-个main.yml文件, 用于定义此角色的特殊设定及其依赖关系 |
在一个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: webserver
remote_ user: root
roles:
- httpd
- mysql
实验:安装搭建LAMP架构
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
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
编写httpd模块
写一个简单的tasks/main.yml
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
yum: pkg={{ pkg }} state=latest
定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
编写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*
编写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
编写roles示例
vim /etc/ansible/site.yml
- hosts: webserver
remote_user: root
roles:
- httpd
- mysql
- php