Template模块
Jinja模板架构,通过模板可以实现向模板文件传参(python转义)把占位符参数传到配置文件中去
生成一个目标文本文件,传递变量到需要配置文件当中。(web开发)
我们可以用Template模块,远程安装部署httpd,nginx
通过Template模块远程部署HTTP和NGINX
首先在本地yum安装一个httpd
对本机httpd的配置文件进行复制后修改
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
j2为Temlpate可识别的后缀
httpd.conf.j2 在文件中配置的是占位符(声明的变量)
接下来就是对httpd.conf.j2配置文件进行修改
line? 42
line 95
line 119
/etc/ansible/hosts 配置了主机的占位符名称和j2文件中的占位符一致(定义参数:占位符的参数的参数声明好)playbook当中,template模块来吧模块参数传给的目标的配置文件
[webservers]
20.0.0.20 port=20.0.0.20:80 server_name=www.zzr.com:80 root_dir=/etc/httpd/htdocs
其中 port,server_name,root_dir都是httpd.conf.j2里面指定的内容
!!!注意,名称要一一对应!!!
[dbservers]
20.0.0.30 port=20.0.0.20:80 server_name=www.zzr.com:80 root_dir=/etc/httpd/htdocs
在目标主机上部署httpd
- hosts: all
remote_user: root
vars:
- package: httpd
- service: httpd
tasks:
- name: install httpd
yum: name={{package}}
- name: install configure file
template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
使用template模板
notify:
- restart httpd
- name: create root_dir
file:
path: /etc/httpd/htdocs
state: directory
- name: start httpd
service: name={{service}} enabled=true state=started
handlers:
- name: restart httpd
service: name={{service}} state=restarted
httpd.conf.j2 在文件中配置的是占位符(声明的变量)
/etc/ansible/hosts 配置了主机的占位符名称和j2文件中的占位符一致(定义参数:占位符的参数的参数声明好)
playbook当中,template模块来吧模块参数传给的目标的配置文件
该脚本运行之后,成功之后就可以去目标主机去查看
vim /etc/httpd/conf/httpd.conf
首先在本机yum安装一个nginx
对本机的nginx进行修改
cp /etc/nginx/nginx.conf /opt/nginx.conf.j2
然后对/etc/ansible/hosts修改
配置yml文件
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
wq
ansible-playbook nginx.yml
tags标签模块
标签模块,可以在playbook当中为任务设定标签(tags),我们在运行playbook时,可以通过指定任务标签,来实现只运行的标签任务。
和 --start-at 相似但又不完全相同
--start-at:是指定位置之后全部运行
--tags:是运行指定部分
- hosts: all
remote_user: root
tasks:
- name: tag debug
debug:
msg: "this is test1"
tags:
- debug
- name: tag setup
setup:
tags:
- setup
- name: tag always
debug:
msg: "run"
tags:
- always
- name: tag never
debug:
msg: "never run"
tags:
- never
在目标主机 touch guoqi.txt 标签always
在目标主机复制文件 /opt/abc.txt 标签never
第一次运行playbook不指定标签,查看文件生成情况。指定标签为never,再查看文件生成情况
ansible-playbook tag.yml --tag="never"
ansible-playbook tag.yml --tag="always"
never标签,选中也不执行。
我们修改标签
因为有always(不管你是否指定了运行标签,任务都会执行 )的原因,他还是会执行前面内容
运行完之后,他只会运行你已经选择的标签
Roles模块
又叫角色
ansible层次化,结构化的组织playbook,使用了rolse(角色)
可以根据层次的结构,自动装载变量文件,task,以及handlers等等
rolse:分别把变量 文件 任务 模块 以及处理器,防止单独的目录当中,使用rolse模块来一键调用这些文件。(类似于docker-compose)
-----------web------总目录,角色
files 存放copy和script模块调用的文件
templates 存放j2的模板文件
tasks 包含任务的目录
------main.yml 角色运行的任务
handlers 包含处理器的目录
----------main.yml
vars:存放变量的目录
---------main.yml
defaults 包含默认变量的目录
----------main.yml
meta #包含元信息的目录
---------------main.yml
site.yml用来调用所有的配置文件。
相当于每一层都有一个main.yml
通过roles来同时部署httpd,mysql,php
- name: install httpd
yum: name={{pkg}}
- name: start httpd
service: enabled=true name={{svc}} state=started
pkg: httpd
svc: httpd
- name: install mysql
yum: name={{pkg}}
- name: start mysql
service: enabled=true name={{svc}} state=started
pkg:
- mariadb
- mariadb-server
svc: mariadb
- name: install php
yum: name={{pkg}}
- name: start php-fpm
service: enabled=true name={{svc}} state=started
pkg:
- php
- php-fpm
svc: php-fpm
- hosts: 20.0.0.50
remote_user: root
roles:
- httpd
- mysql
- php
即可。
roles这个模块。site.yml相当于电影的总导演,他来选择哪个软件上场表演(安装/操作),而httpd,mysql,php相当于电影中的演员,只有被导演选中才能上场,就算没被选中,该软件的配置内容也不能少。