Ansible中的Templates、tags和roles

@[toc]

一、Templates模块

templates是ansible的一个模块,其功能是根据模板文件动态生成配置文件,templates文件必须存放于templates目录下,且命名为".j2"结尾,yaml/yml文件需要和templateansible命令s目录平级,这样我们在yml文件中调用模板的时候,就不需要写模系统/运维板文件的路径,否则需要描述模板文件的路径,因为template模块会自动去找templates目录下的模板文件

示例:

yum -y install httpd

mkdir httpd
mv /etc/httpd/conf/httpd.conf /root/httpd/httpd.conf.j2
cd httpd/


                                            Ansible中的Templates、tags和roles

编写templates模板,放在管理端

//在管理端讲配置文件要修改的地方定义变量
vim httpd.conf.j2
Listen {{httpd_port}}
ServerName {{server_name}}
MaxClients {{access_num}}    //客户端最大连接数


                                            Ansible中的Templates、tags和roles

                                            Ansible中的Templates、tags和roles

vim /etc/ansible/hosts
[webserver]
192.168.163.150 httpd_port=192.168.163.150:80 server_name="www.test.com:80" access_num=100

vim apache.yaml
- hosts: webserver
  remote_user: root
  vars:
   - ap: httpd
  tasks:
   - name: install httpd
     yum: name={{ap}}
   - name: create configure file
     template: src=/root/httpd/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
     notify:
      - restart httpd
   - name: start httpd server
     service: name={{ap}} enabled=true state=started
  handlers:
   - name: restart httpd
     service: name={{ap}} state=restarted


                                            Ansible中的Templates、tags和roles

ansible-playbook apache.yaml --syntax-check
ansible-playbook apache.yaml    #执行脚本


                                            Ansible中的Templates、tags和roles

去两台远程主机上查看
ansible webserver -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep -i "listen"'
ansible webserver -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep -i "maxclient"'
ansible webserver -m shell -a 'cat /etc/httpd/conf/httpd.conf | grep -i "servername"'

二、tags模块

在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tagslinux删除文件命令标签功vimax能了。

格式如下

vim tags1.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
      - only
   - name: touch file
     file: path=/opt/touch1 state=touch

执行命令:ansible-playbook tags1.yaml --tags="only"
ansible-playbook hlinuxosts.yml


                                            Ansible中的Templates、tags和roles

                                            Ansible中的Templates、tags和roles


                                            Ansible中的Templates、tags和roles

事实上,不光可以为单个或mysql多个task指定同一个tags。playbook还提供了一个ansible安装部署特殊的tagphp是前端还是后端sansible菜鸟教程为always。作用就是当使用always当tlinux操作系统基础知识ags的task时,无论执行哪一个tags时,定义有always的tags都会linux操作系统基础知识执行。

//远程删除文件,虚拟机实验也可以直接切换虚拟机删除
ansible webserver -a 'rm /opt/hosts -f'
ansible webserver -a 'rm /opt/touch1 -f'
ansible webserver -a 'ls /opt'


                                            Ansible中的Templates、tags和roles

vim tags1.yaml
- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts file
     copy: src=/etc/hosts dest=/opt/hosts
     tags:
      - only
   - name: touch file
     file: path=/opt/touch1 state=touch
     tags:
      - always

==vimax执行命令:ansible-playbook tags1.yaml --tags="only"
查看/opt目录下的文件:ansible webserver -a 'ls /opt'==



                                            Ansible中的Templates、tags和roles

系统运维工作内容、rolesmysql安装

roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说,roles就是通过vim编辑器分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角mysql色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。

1、roles内各目录含义解释

目录名称 作用
files 用来存放由copy模块或script模块调用的文件。
templates 用来存放jinjia2模板,template模块会ansible创建和管理用户的模块是自动在此目录中寻找jinjia2模板文件。
tasks 此目录应当包含一个main.yml文件,用于定义此角色的任php是什么工作务列表,此文件可以使用include包含其它的位于此目录的task文件。
handlers 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动php7作。
vars 此目录应当包含一个main.yml文件,用于定义此角色用到的变量vim怎么退出
defauansible管理文件模块有哪些lts 此目录应当包含一个main.yml文件,用于为当linux删除文件命令前角色设定默认变量。
meta 此目录应当包含一个main.yml文件,用于定ansible管理文件模块有哪些义此角色的特殊设定及其依赖关系。

2、在一个playbook中使用roles的步骤

(1)创建以roles命令的目录

//yum装完默认就有
mkdir /etc/ansible/roles/ -p

(2)创建全局变量目录

mkdir /etc/ansible/group_vars/ -p
//文件名自己定义,引用的时候注意
touch /etc/ansible/group_vars/all

(3)在roles目录中分别创建以各角色名称命令vim保存退出命令的目录,如httmysql数据库命令大全pd

mkdir /etc/ansible/roles/common -p

(4)在每个角色命令的目录中分别创建files、handlers、tasks、templates、meta、defaulinux系统lts和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、defaultsphp是什么工作、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文件ansible管理文件模块有哪些中,调mysql密码忘记了怎么办用各角色

vim /etc/ansible/site.yml
- hosts: webserver
  remote_user: root
  roles:
   - httpd
   - mysql

3、实验:

安装httpd、mysql和php服务
创建相应的目录和目录中的main.yml文件vimiy

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


                                            Ansible中的Templates、tags和roles

编写htt系统运维工资一般多少pd模块
写一个简单的tasks/phpstudymain.yml

vim /etc/ansible/roles/httpd/tasks/main.yml
- name: install apache
  yum: pkg={{pkg}} state=latest


                                            Ansible中的Templates、tags和roles

定义变量:可以定义在全局变量中,也可php是什么工作以定义在roles角色变量中,一般定义在角色变量中

vim /etc/ansible/roles/httpd/vars/main.yml
pkg: httpd


                                            Ansible中的Templates、tags和roles
下面的mysql模块、php模块的mysql数据库配置和httpd模块的配置一样
编写mysql模块

vim /etc/ansible/roles/mysql/tasks/main.yml
- name: install mysql 
  yum: pkg={{pkg}} state=latest

vim /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*


                                            Ansible中的Templates、tags和roles

编写php模块

vim /etc/ansible/roles/php/tasks/main.yml
- name: install php
  yum: pkg={{pkg}}  state=latest


                                            Ansible中的Templates、tags和roles

vim /etc/ansible/roles/php/vars/main.yml
pkg: php

编写roles示例

vim /etc/ansible/site.yml
- hosts: webserver
  remote_user: root
  roles:
   - httpd
   - mysql
   - php


                                            Ansible中的Templates、tags和roles

//检查脚本的有没有语法问题
ansible-playbook site.yml --syntax-check
//执行脚本
ansible-playbook site.yml


                                            Ansible中的Templates、tags和roles

最后我们来验证一下

ansible mysql -a 'rpm -q httpd'
ansible mysql -a 'rpm -q mariadb'
ansible mysql -a 'rpm -q mariadb-server'
ansible mysql -a 'rpm -q php'


                                            Ansible中的Templates、tags和roles