Temlates模块
jinja模板架构,通过模板可以实现向模板文件传参(python转义)把占位符参数传到配置文件中去,生产一个目标文本文件,传递变量到需要的配置文件当中 (web开发)
nginx.conf.j2 早文件当中配置的是占位符(声明的变量)
/etc/ansible/hosts配置了主机的占位符名称和j2文件的占位符一致(定义参数:占位符的参数声明好)
playbook当中,用template模块来把参数传给目标主机的配置文件
nginx
到nginx.conf里
mv nginx.conf /opt/nginx.conf.j2
vim /etc/ansible/hosts
vim nginx.yml
- hosts: all
remote_user: root
vars:
- package: nginx
- service: nginx
tasks:
- name: install nginx
yum: name={{package}}
- name: install configure file
template: src=/opt/nginx.conf.j2 dest=/etc/nginx/nginx.conf
notify:
- restart nginx
- name: create root_dir
file:
path: /opt/nginx/html
state: directory
- name: start nginx
service: name={{service}} enabled=true state=started
handlers:
- name: restart nginx
service: name={{service}} state=restarted
tags模块
标签模块,可以在playbook当中为任务设定标签(tags)我们在运行playbook可以通过指定任务标签,来实现只允许设定的标签任务
任务标签的种类:
always:不管你是否指定了运行标签,任务都会执行
never:是否运行了指定标签该任务也不会执行
debug:调试任务
setup:收集主机信息
自定义标签
per_tasks:指定标签之前的任务
post_tasks:运行指定标签之后的任务
#在目标主机上复制文件/opt/guoqi.txt
#在20.0.0.14 touch guoqu,txt always
#在目标20.0.0.14复制文件/opy/yy.txt
#自定义标签
#第一次运行playbook 不指定标签查看文件生成情况 指定标签为自定义,查看文件生成情况
Roles模块
角色
ansible层次化,结构化的组织playbook ,使用了rolse(角色)
可以根据层次结构,自动装在变量文件,task,以及handiers等等
rolse:分别把变量文件 任务模块以及处理器 放在单独的目录当中,使用relse模块来一键调用这些文件
rolses:
-----web--总目录,角色
files 存放copy和script模块调用的文件
templaes 存放j2的模板文件
tasks包含任务的目录
------main.yml 校色运行的任务
handlers包含处理器的目录
------main.yml
vars:存放变量目录
------main.yml
defaults:包含默认变量的目录
------main.yml
meta:包含元信息的目录
------main.yml
site.yml用来调用所有的配置文件
三个服务分别是三个角色
http
mysql
php
现在/etc/ansible/roles下面创建好php http mysql的目录
分别在php http和mysql目录下建创建
在http php 和mysql目录里先进入tasks
mysql的
- name: install mysql
yum: name={{pkg}}
- name: start mysql
service: enabled=true name={{svc}} state=started
php的
- name: install php
yum: name={{pkg}}
- name: start php-fpm
service: enabled=true name={{svc}} state=started
http的
- name: install httpd
yum: name={{pkg}}
- name: start httpd
service: enabled=true name={{svc}} state=started
在http php 和mysql目录里先进入vars
mysql的
pkg:
- mariadb
- mariadb-server
svc: mariadb
httpd的
pkg: httpd
svc: httpd
php的
pkg:
- php
- php-fpm
svc: php-fpm
在/etc/ansible/roles/site.yml
- hosts: 20.0.0.14
remote_user: root
roles:
- httpd
- mysql
- php
ansible-playbook site.yml