ansible templates+roles
一、Templates模块
(这里我们以apache为示例,这里192.168.177.33安装了ansible、epel源、以及apache,然后配置主机清单,并推送密钥给另一台(192.168.177.8))
yum install httpd -y
rpm -qc httpd
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
cd /opt
vim httpd.conf.j2
Listen {{http_port}} #监听端口
ServerName {{server_name}} #注释去掉 域名
MaxClients {{access_num}} #最大连接数
vim /etc/ansible/hosts
[webserver]
192.168.177.8 http_port=192.168.177.8:80 access_num=30 server_name=www.tefuir.com:80
编辑yaml文件
vim b.yaml
- hosts: webserver
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: enable httpd
service: name={{names}} enabled=true state=started
handlers:
- name: restart httpd
service: name={{names}} state=restarted
ansible-playbook b.yaml --syntax-check
ansible-playbook b.yaml
进入172.168.177.8进行查看
vim /etc/httpd/conf/httpd.conf
去远程主机查看
grep -i listen /etc/httpd/conf/httpd.conf
grep -i maxclient /etc/httpd/conf/httpd.conf
grep -i servername /etc/httpd/conf/httpd.conf
二、tags模块
在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了。
vim c.yaml
- hosts: webserver
remote_user: root
tasks:
- name: copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- yoyo
- name: touch file
file: path=/opt/hosts01 state=touch
执行命令:ansible-playbook c.yaml --tags="yoyo"
这里我们发现后面touch的命令没有执行,所以就需要以下的操作
vim c.yaml
- hosts: webserver
remote_user: root
tasks:
- name: copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- yoyo
- name: touch file
file: path=/opt/hosts01 state=touch
tags:
- always
三、roles
roles能够根据层次型结构自动装载变量文件、task以及handlers等。
roles内各目录含义解释
目录 | 解释 |
---|---|
files | 用来存放由copy模块或script模块调用的文件 |
templates | 用来存放j2模块,template模块会自动在此目录中寻找j2模块文件 |
tasks | 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用incelde包含其他的位于此目录的task文件 |
handlers | 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作 |
vars | 此目录应当包含一个main.yml文件,用于定义此角色用到的变量 |
defaults | 此目录应当包含一个main.yml文件,用于当前角色设定默认变量 |
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,tasjs,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
准备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
编写httpd模块
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
yum: pkg= {{servername}} state=latest
vim /etc/ansible/roles/httpd/vars/main.yml
servername: httpd
编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
yum: pkg= {{servername}} state=latest
vim /etc/ansible/roles/mysql/vars/main.yml
servername: mariadb*
编写PHP模块
vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
yum: pkg= {{servername}} state=latest
vim /etc/ansible/roles/php/vars/main.yml
servername: php
创建剧本
vim /etc/ansible/lamp.yml
- hosts: test01
remote_user: root
roles:
- httpd
- mysql
- php
ansible-playbook lamp.yml