ansible--Templates、tags、role

一、Templates模板

1、准备文件

scp root@192.168.221.20:/etc/httpd/conf/httpd.conf ./
vi templates/httpd.conf      #放在管理端
Listen {{http_port}}		 #监听端口换成变量
ServerName {{server_name}}
MaxClients {{access_num}}	 #自己在servername下添加
mv httpd.conf httpd.conf.j2
vi /etc/ansible/hosts
[webserver]
192.168.221.20 http_port=192.168.221.20:80 access_num=100 server_name="www.yun.com:80"

2、编辑剧本

ps:注意格式对齐

vi apache.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模块

1、 tags 为only

在一个playbook中,我们一般会定义很多个task,如果我们只想执行其中的某一个task或多个task时就可以使用tags标签功能了,格式如下:

vi hosts.yml
- 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/hosts01 state=touch

执行命令:ansible-playbook hosts.yml --tags=“only”
        ansible-playbook hosts.yml

在这里插入图片描述
在webserver查看是否成功
在这里插入图片描述

2、tags为always

事实上,不光可以为单个或多个task指定同一个tags。

playbook还提供了一个特殊的tags为always。

作用就是当使用always当tags的task时,无论执行哪一个tags时,定义有always的tags的task都会执行。

vi hosts.yml

- hosts: webserver
  remote_user: root
  tasks:
    - name: Copy hosts file
      copy: src=/etc/hosts dest=/etc/hosts
      tags:
      - only
    - name: touch file
      file: path=/opt/hosts state=touch
      tags:
      - always

执行命令:ansible-playbook hosts.yml --tags=“only”
分别去两台被管理服务器上去查看文件创建情况

在这里插入图片描述
在这里插入图片描述

三、roles角色管理

roles能够根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

roles/
   web/			#服务名
     files/
     templates/
     tasks/
     handlers/
     vars/
     defaults/
     meta/

1、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文件,用于定义此角色的特殊设定及其依赖关系。

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

①、创建以roles命名的目录

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

②、创建全局变量目录。

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

③、在roles目录中分别创建以各角色名称命令的目录,如httpd

mkdir /etc/ansible/roles/common -p

④、在每个角色命令的目录中分别创建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

⑤、在每个角色的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

⑥、在playbook文件中,调用各角色。

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

四、安装搭建LAMP架构

1、创建各个服务下面的各个空目录

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

2、创建各个模块下的yml文件

除了files和template目录模块下不创建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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、编写httpd服务模块

vi /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version 
  yum: pkg={{ pkg }} state=latest

在这里插入图片描述

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

4、编写mysql模块

vi /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version 
  yum: pkg={{ pkg }} state=latest
vi /etc/ansible/roles/mysql/vars/main.yml
pkg: mariadb*

5、 编写php模块

vi /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
  yum: pkg={{ pkg }} state=latest
vi /etc/ansible/roles/php/vars/main.yml
pkg: php

6、编写roles示例

vi /etc/ansible/site.yml

- hosts: webserver	#指定主机
  remote_user: root	#指定演员
  roles:		#指定角色
   - httpd
   - mysql
   - php

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值