ansible角色管理

Templstes模块

其实就是模板设置好变量,赋值就好

yum install httpd -y

在这里插入图片描述

[root@server ~]# mkdir httpd
[root@server ~]# ls
anaconda-ks.cfg  httpd  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@server ~]# cp /etc/httpd/conf/httpd.conf /root/httpd/httpd.conf.j2
[root@server ~]# vim /root/httpd/httpd.conf.j2 
#设置变量

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

#给变量赋值
vim /etc/ansible/hosts

[webserver]
192.168.109.77 http_port=192.168.109.77:80 access_num=100 server_name="www.zzz.com:80"

[root@server ~]# mkdir demo
[root@server ~]# ls
anaconda-ks.cfg  demo  httpd  initial-setup-ks.cfg  公共  模板  视频  图片  文档  下载  音乐  桌面
[root@server ~]# cd demo/
[root@server demo]# vim apache.yaml


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

[root@server demo]# ansible-playbook apache.yaml --syntax-check

playbook: apache.yaml
[root@server demo]# ansible-playbook apache.yaml

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.109.77]

TASK [install httpd] *******************************************************************************************
ok: [192.168.109.77]

TASK [install configure file] **********************************************************************************
changed: [192.168.109.77]

TASK [start httpd] *********************************************************************************************
fatal: [192.168.109.77]: FAILED! => {"changed": false, "msg": "Unable to start service httpd: Job for httpd.service failed because the control process exited with error code. See \"systemctl status httpd.service\" and \"journalctl -xe\" for details.\n"}

RUNNING HANDLER [restart httpd] ********************************************************************************

PLAY RECAP *****************************************************************************************************
192.168.109.77             : ok=3    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

#远程主机查看是否是前面的赋值
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模块

在一个playbook中定义多个task,如果想只执行其中某个task,这是就用到tags标签功能。

[root@server demo]# vim hosts.yaml

- hosts: webserver
  remote_user: root
  tasks:
   - name: copy hosts
     copy: src=/etc/ansible/hosts dest=/opt/hosts
     tags:
      - abc
   - name: touch file
     file: path=/opt/hosts01 state=touch

[root@server demo]# ansible-playbook hosts.yaml --tags="abc"

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.109.77]

TASK [copy hosts] **********************************************************************************************
changed: [192.168.109.77]

PLAY RECAP *****************************************************************************************************
192.168.109.77             : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在这里插入图片描述

但是事无绝对,就有那么一个tags很特殊。当tags是always时不管什么情况都要执行。

[root@server demo]# vim hosts.yaml

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


[root@server demo]# ansible-playbook hosts.yaml --tags="abc"

PLAY [webserver] ***********************************************************************************************

TASK [Gathering Facts] *****************************************************************************************
ok: [192.168.109.77]

TASK [copy hosts] **********************************************************************************************
ok: [192.168.109.77]

TASK [touch file] **********************************************************************************************
changed: [192.168.109.77]

PLAY RECAP *****************************************************************************************************
192.168.109.77             : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

在这里插入图片描述

roles模块

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

roles/
	common/
		files/
		templates/
		tasks/
		handlers/
		vars/
		defaults/
		meta/
	web/
		files/
		templates/
		tasks/
		handlers/
		vars/ 
		defaults/
		meta/

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

在一个playbook中使用roles的步骤

1、创建roles命令的目录
2、创建全局变量目录
3、在roles目录中分别创建以各角色名称命令的目录,如httpd
4、在每个角色命令的目录中分别创建file、handlers、tasks、templates、meta、defaults和vars目录,用不到的目录可以创建为空
5、在每个角色都handlers、tasks、meta、defaults、vars、目录下创建main.yml文件,千万不能自定义。
6、在playbook文件中调用各角色。

安装搭建LAMP架构

创建文件

#分别在httpd,mysql,php下创建files,templates,tasks,handlers,vars,defaults,meta文件夹,以便在其下面创建main.yml文件进行编写
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

#也可三条并一条写:
mkdir /etc/ansible/roles/{httpd,mysql,php}/{files,templates,tasks,handlers,vars,defaults,meta} -p
#分别在httpd,mysql,php的defaults,vars,tasks,meta,handlers下创建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

#也可三条并一条写:
touch /etc/ansible/roles/{httpd,mysql,php}/{tasks,handlers,vars,defaults,meta}/main.yml
yum install tree -y

#树状图递归查看文件内容
tree /etc/ansible/roles/{httpd,mysql,php}/

/etc/ansible/roles/httpd/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
/etc/ansible/roles/mysql/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml
/etc/ansible/roles/php/
├── defaults
│   └── main.yml
├── files
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
└── vars
    └── main.yml

编写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		#定义变量为pkg。这里是想用httpd的,但是变量赋值要在vars目录下的main.yml文件内编写

#赋值变量
vim /etc/ansible/roles/httpd/vars/main.yml 
pkg: httpd				#此变量定义在httpd中,下面MySQL模块中使用同一字符串进行不同定义也是可以的,不相干

编写MySQL模块

#定义变量
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*

编写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

编写roles总脚本

#编写roles总脚本,使各个模块可以联合起来执行
vim /etc/ansible/web.yml

- hosts: webservers
  remote_user: root
  roles:
  - httpd
  - mysql
  - php


#执行
ansible-playbook  /etc/ansible/web.yml
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值