一、Templates模块
主:192.168.100.110
远程主机:192.168.100.120
vim /etc/ansible/hosts
[webserver]
192.168.100.120 http_port=192.168.100.120:80 access_num=100 server_name=www.wei.com:80
yum install -y httpd
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
vim /opt/httpd.conf.j2
#修改
Listen {{http_port}}
ServerName {{server——name}}
MaxClients {{access_num}}
#创建yml文件
- hosts: webserver
remote_user: root
vars:
- package: httpd
- service: httpd
tasks:
- name: install httpd package
yum: name={{package}} state=latest
- name: install configure file
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
notify:
- restart httpd
- name: start httpd server
service: name={{service}} enabled=true state=started
handlers:
- name: restart httpd
service: name={{service}} state=restarted
#运行
ansible-playbook apache.yml
#远程主机上查看
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 hosts.yml
- hosts: webserver
remote_user: root
tasks:
- name: Copy
copy: src=/etc/hosts dest=/opt/hosts
tags:
- only
- name: touch
file: path=/opt/hosts01 state=touch
事实上,不光可以为单个或多个task指定同一个tags。playbook还提供了一个特殊的tags为always。作用就是当使用always当tags为标签时task就能一直被执行。
- hosts: webserver
remote_user: root
tasks:
- name: Copy
copy: src=/etc/hosts dest=/opt/hosts
tags:
- only
- name: touch
file: path=/opt/hosts01 state=touch
tags:
- always
三、roles模块
roles能够根据层次型结构自动装载变量文件、task以及handlers等
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文件,用于定义此角色的特殊设定及其依赖关系 |
1、创建以roles命令的目录
mkdir -p /etc/ansible/roles # yum装完默认就有
2、创建全局变量目录
mkdir -p /etc/ansible/group_vars
touch /etc/ansible/group_vars/all # 文件名称可以自定义,但是在引用的时候需要注意下
3、在roles目录中分别创建以各角色名称命令的目录;例如httpd
mkdir -p /etc/ansible/roles/command
4、在每个角色命令的目录中分别创建files,templates,tasks,handlers,vars,defaults,meta,用不到的目录可以为空
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、在每个角色的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
6、在playbook文件中,调用各角色
vim /etc/ansible/test.yml
- hosts: test01
remote_user: root
roles:
- httpd
- mysql
7、搭建lanp架构
#准备需要目录
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