一、template模块介绍
ansible的template模块,可以将带有参数的配置文件传递到目标地址,可以对文件进行属组属主的修改以及备份。
templates功能:根据模板文件动态生成对应的配置文件,命名必须以.j2结尾
yum -y install httpd
rpm -qc httpd
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
==42行==
Listen {{port}}
==95行==
ServerName {{domain}}
vim /etc/ansible/hosts
[mysql]
192.168.184.30 port=80 domain=www.lic.com
cd /opt
vim a.yaml
- hosts: mysql
remote_user: root
vars:
- package: httpd
- service: httpd
tasks:
- name: install service
yum: name={{package}} state=latest
- name: httpd.conf
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify: restart service
- name: start service
service: name={{service}} state=started enabled=true
handlers:
- name: restart service
service: name={{service}} state=restarted
ansible-playbook a.yaml
ansible mysql -a 'rpm -q httpd'
ansible mysql -a 'systemctl status httpd'
ansible mysql -a 'systemctl is-enabled httpd'
二、tags模块
roles能够根据层次型结构自动装载变量文件
1、roles内各目录的含义解释
files:用来存放由copy模块或者script模块调用的文件
template:用来存放j2模板的,template模块会自动在此目录中寻址j2模板文件
tasks:此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件
handlers:此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作
vars:此目录应当包含一个main.yml文件,用于定义此角色用到的变量
defaults:此目录应当包含一个main.yml文件,用于为当前角色设定默认变量
meta:此目录应当包含一个main.yml文件,用于为当前角色的特殊设定及其依赖关系
vim b.yaml
- hosts: mysql
remote_user: root
tasks:
- name: touch file one
file: path=/opt/1.txt state=touch
tags:
- file one
- name: touch file two
file: path=/opt/2.txt state=touch
tags:
- file two
- name: touch file three
file: path=/opt/3.txt state=touch
tags:
- file three
ansible-playbook b.yaml --tags="file two"
ansible-playbook b.yaml --skip-tags="file one"
还有一个特殊的tags为always,作用就是使用always的task会在不指定不执行的时候执行
三、playbook使用roles
简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
在playbook中使用roles的步骤
#创建服务组件工作目录
mkdir -p /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir -p /etc/ansible/roles/mysql/{files,templates,tasks,handlers,vars,defaults,meta}
mkdir -p /etc/ansible/roles/php/{files,templates,tasks,handlers,vars,defaults,meta}
#创建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
#编写httpd模块
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install httpd
yum: pkg={{pkg}} state=latest
#定义变量pkg软件包
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
#编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql
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: install php
yum: pkg={{pkg}} state=latest
vim /etc/ansible/roles/php/vars/main.yml
pkg: php
#编写roles示例
vim /etc/ansible/site.yml
remote_user: root
roles:
- httpd
- mysql
- php