文章目录
- 一、Templates模块
-
- 二、tags 模块
- 1、编写tags标签剧本
- 2、编写always标签剧本
- 三、role模块
- (一)、roles内各目录含义解释:
- (二)、在一个playbook中使用roles的步骤
- 1、创建以roles命令的目录。
- 2、创建全局变量目录。
- 3、在roles目录中分别创建以各角色名称命令的目录,如httpd.
- 4、在每个角色命令的目录中分别创建files. handlers. tasks. templates. meta、 defaults和vars目录, 用不到的目录可以创建为空
- 5、在每个角色的handlers. tasks、 meta、 defaults, vars目录下创建main.yml文件, 千万不能自定义。
- 6、在playbook文件中,调用各角色。
- (三)、实验:安装搭建LAMP架构
- 1、编写httpd模块
- 2、编写mysq|模块
- 3、编写php模块
- 4、编写roles示例
- 5、执行剧本
一、Templates模块
在控制端进行以下操作:
1、获取模板
yum install -y httpd #获取httpd.conf模板
cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2
2、定义变量
#定义httpd.conf.j2文件中的变量
[root@localhost conf]# cd /opt/
[root@localhost opt]# ls
httpd.conf.j2 rh test.sh
[root@localhost opt]# vim httpd.conf.j2
Listen {{http_port}} #修改(监听端口)
ServerName {{server_name}} #取消注释后修改(域名)
MaxClients {{access_num}} #添加改行(最大连接数)
3、传入变量
[root@localhost opt]# vim /etc/ansible/hosts
[webservers]
192.168.200.30 http_port=192.168.200.30:80 access_num=30 server_name="www.gcc.com:80"
[mysql]
192.168.200.40
4、编写剧本
[root@localhost demo]# vim i.yaml
- hosts: webservers
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
#执行剧本
[root@localhost demo]# ansible-playbook i.yaml
#去远程主机[webservers]上查看配置文件是否更改成功
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 模块
1、编写tags标签剧本
如果剧本中有tags标签,那么在执行剧本的时候备注上tags标签的话,只会执行到tags标签处就会停止,不会再往后执行。
[root@localhost demo]# vim j.yaml
- hosts: webservers
remote_user: root
tasks:
- name: copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- abc
- name: touch file
file: path=/opt/hosts01 state=touch
[root@localhost demo]# ansible-playbook j.yaml --syntax-check #检查yaml语法是否有错
playbook: j.yaml
[root@localhost demo]# ansible-playbook j.yaml --tags="abc" #使用tags命令,让yaml文件执行到tags标签处停止,后面的内容不再执行
发现只执行到copy模块处
2、编写always标签剧本
当打上always标签后,无论前面是否与其他tags标签,整个剧本均会被执行。
[root@localhost demo]# vim j.yaml
- hosts: webservers
remote_user: root
tasks:
- name: copy hosts file
copy: src=/etc/hosts dest=/opt/hosts
tags:
- abc
- name: touch file
file: path=/opt/hosts01 state=touch
tags:
- always
[root@localhost demo]# ansible-playbook j.yaml --tags="abc"
发现执行到了touch模块处
三、role模块
roles能够根据层次型结构自动装载变量文件、task以及handlers等。
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
web/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
(一)、roles内各目录含义解释:
files:用来存放由copy模块或script模块调用的文件。
templates:用来存放jnja2(j2)模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks:此目录应当包含一个 main.yml 文件, 用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的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,tasks,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
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
1、编写httpd模块
写一个简单的 tasks/main.yml
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
yum: pkg={{pkg}} state=latest
定义变量:可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中
vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd
2、编写mysq|模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
yum: pkg={{pkg}} state=latest
vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*
3、编写php模块
vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
yum: pkg={{pkg}} state=latest
vim /etc/ansible/roles/php/vars/main.yml
pkg: php
4、编写roles示例
vim /etc/ansible/site.yml
- hosts: webservers
remote_user: root
roles:
- httpd
- mysql
- php
5、执行剧本
[root@localhost mysql]# ansible-playbook /etc/ansible/site.yml
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)