Roles小技巧:

1.创建roles目录结构,手动或使用ansible-galaxy init test roles

2.编写roles的功能,也就是tasks。 nginx rsyncd memcached

3.最后playbook引用roles编写好的tasks

1.创建标准roles目录结构
mkdir /root/roles/nginx/{tasks,templates,handlers} 2.编写tasks
[root@manager ~]# cat /root/roles/nginx/tasks/main.yml
- name: Install Nginx Server
yum:
name: nginx
state: present - name: Configure Nginx Server
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Restart Nginx Server - name: Systemd Nginx Server
systemd:
name: nginx
state: started
enabled: yes 3.template
[root@manager roles]# cat /root/roles/nginx/templates/nginx.conf.j2
user www;
worker_processes {{ ansible_processor_vcpus }}; error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid; events {
worker_connections {{ ansible_processor_vcpus * 1024 }};
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
} 4.handlers
[root@manager ~]# cat /root/roles/nginx/handlers/main.yml
- name: Restart Nginx Server
systemd:
name: nginx
state: restarted 5.调用playbook
[root@manager roles]# cat /root/roles/site.yml
- hosts: webservers
roles:
- nginx PS:hosts ansible.cfg 提前需准备好

实战一:roles部署memcached

#安装
#配置
#启动 1.创建roles的目录结构
[root@manager roles]# mkdir memcached/{tasks,templates,handlers} -p 2.编写对应的tasks (1.安装 2配置(templates) 3.启动 4.重启(handlers) )
[root@manager roles]# cat memcached/tasks/main.yml
- name: Installed Memecached Server
yum:
name: memcached
state: present - name: Configure Memcached Server
template:
src: memcached.j2
dest: /etc/sysconfig/memcached
notify: Restart Memcached Server - name: System Memcached Server
systemd:
name: memcached
state: started
enabled: yes 3.配置jinja2
[root@manager roles]# cat memcached/templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS="" 4.handlers
[root@manager roles]# cat memcached/handlers/main.yml
- name: Restart Memcached Server
systemd:
name: memcached
state: restarted 5.playbook调用roles
[root@manager roles]# cat site.yml
- hosts: webservers
roles:
- { role: nginx, tags: web }
- { role: memcached, tags: cache }

实战二:部署NFS存储服务

#1.创建项目目录结构   --->
[root@manager roles]# mkdir nfs/{tasks,templates,handlers} -p #2.编写task任务 #3.playbook调用roles项目 [root@ansible roles]# tree nfs/
nfs/
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
└── templates
└── exports.j2 1.tasks编写
[root@ansible nfs]# cat tasks/main.yml
- name: Installed NFS Server
yum:
name: nfs-utils
state: present - name: Configure NFS Server
template:
src: exports.j2
dest: /etc/exports
notify: Restart NFS Server - name: Create NFS Server Share Directory
file:
path: "{{ nfs_word }}"
state: directory
owner: "{{ nfs_user }}"
group: "{{ nfs_user }}"
mode: '0755'
recurse: yes - name: Started NFS Server
systemd:
name: nfs
state: started
enabled: yes 2.触发重启,配置handlers
[root@ansible nfs]# cat handlers/main.yml
- name: Restart NFS Server
systemd:
name: nfs
state: restarted 3.调用roles项目
[root@ansible roles]# cat site.yml
- hosts: nfsservers
roles:
- { role: nfs, tags: nfs }

实战三:roles部署LB

1.nginxProxy+keepalived 10.0.0.5 10.0.0.6 10.0.0.3

2.nginx静态网站 172.16.1.7 172.16.1.8

1.web编写tasks任务
[root@manager web]# cat tasks/main.yml
#1.安装nginx服务
- name: Install nginx Server
yum:
name: nginx
state: present #2.创建用户组
- name: Create group
group:
name: "{{ user }}"
gid: "{{ uid }}" #3.创建用户
- name: create user
user:
name: "{{ user }}"
uid: "{{ uid }}"
group: "{{ user }}"
create_home: no
shell: /sbin/nologin #4.创建站点目录
- name: Create code directory
file:
path: "{{ code }}"
owner: "{{ user }}"
group: "{{ user }}"
mode: 0755
recurse: yes #5.配置nginx
- name: Configure Nginx Server
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode }}"
with_items:
- { src: nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
- { src: index.html, dest: /code, mode: '0644' }
- { src: web.conf.j2, dest: /etc/nginx/conf.d/web.conf, mode: '0644' }
notify: Restart nginx Server #6.启动nginx服务
- name: Systemd Nginx Server
systemd:
name: nginx
state: started 2.handlers触发重启nginx
[root@manager web]# cat handlers/main.yml
- name: Restart nginx Server
systemd:
name: nginx
state: restarted 3.准备j2文件
[root@manager roles]# tree web/
web/
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
└── templates
├── index.html
├── nginx.conf.j2
└── web.conf.j2 4.LB编写tasks任务
[root@manager lb]# cat tasks/main.yml
- name: Intalled Nginx Server
yum:
name: "{{ packages }}"
state: present
vars:
packages:
- nginx
- keepalived - name: Create shell share directory
file:
path: "{{ script }}"
state: directory - name: Configure nginx server
template:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
mode: "{{ item.mode }}"
with_items:
- { src: nginx.conf.j2, dest: /etc/nginx/nginx.conf, mode: '0644' }
- { src: keepalived.conf.j2, dest: /etc/keepalived/keepalived.conf, mode: '0644' }
- { src: check_server.sh, dest: /server/scripts/check_server.sh, mode: '0777' }
- { src: proxy_web.conf, dest: /etc/nginx/conf.d/proxy_web.conf, mode: '0644' }
- { src: proxy_params, dest: /etc/nginx/proxy_params, mode: '0644' }
notify: Restart Nginx Server
- name: Systemd Nginx server
systemd:
name: "{{ item }}"
state: started
enabled: yes
with_items:
- nginx
- keepalived 5.handlers触发重启nginx服务
[root@manager lb]# cat handlers/main.yml
- name: Restart Nginx Server
systemd:
name: nginx
state: restarted 6.配置keepalived
[root@manager lb]# cat files/keepalived.conf.j2
global_defs {
router_id {{ ansible_fqdn }}
} vrrp_instance VI_1 {
{% if ansible_fqdn == 'lb01' %}
#lb01的配置如下:
state MASTER
priority 150
{% elif ansible_fqdn == 'lb02' %}
#lb02的配置如下:
state BACKUP
priority 100
{% endif %} interface eth0
virtual_router_id 50
advert_int 1 authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
10.0.0.3
}
} 7.准备对应的j2文件
[root@manager roles]# tree lb/
lb/
├── files
│ └── keepalived.conf.j2
├── handlers
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
│ ├── check_server.sh
│ ├── keepalived.conf.j2
│ ├── nginx.conf.j2
│ ├── proxy_params
│ └── proxy_web.conf

6.Ansible Roles角色实战的更多相关文章

  1. Ansible Roles角色

    Roles小技巧: 1.创建roles目录结构,手动或使用ansible-galaxy init test roles 2.编写roles的功能,也就是tasks. nginx rsyncd memc ...

  2. Ansible--06 ansible roles

    Ansible roles roles不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个'剧本'文件当中,我们肯定需要把不同的工作模块,拆分开来,解耦 ...

  3. ansible roles实践——安装nginx

    1.创建roles 在/etc/ansible/roles目录下 1.1 手动创建需要的目录 1.2 使用命令创建,用不到的目录可以创建为空目录,但不可以不创建. 创建目录[root@master] ...

  4. ansible roles 目录规范

    我的ansible roles项目的目录结构: (ansible_venv) [root@localhost ansible_home]# tree ansible_playbooks/ ansibl ...

  5. ansible roles 自动化安装

    例:  ansible roles 自动化安装memcached 文件目录结构如下: cat memcached_role.yml - hosts: memcached remote_user: ro ...

  6. Ansible之roles角色

    一.roles简介 ansible自1.2版本引入的新特性,用于层次性.结构化地组织playbook.roles能够根据层次型结构自动装载变量文件.tasks以及handlers等.要使用roles只 ...

  7. ansible roles 介绍和使用

    目录 roles roles 介绍 创建role的步骤 role内个目录中可用的文件 案例 roles roles 介绍 ansible 自1.2版本引入的新特性,用于层次性.结构化地组织playbo ...

  8. ansible roles实践 zookeeper集群部署

    1.下载解压 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11. ...

  9. ansible roles实践——安装java

    [root@master] /etc/ansible$ cat roles/java/tasks/main.yml ---- name: unzip jdk unarchive: src=jdk-8u ...

随机推荐

  1. 重磅!普惠AI--华为云语音语义万次调用1元购,有奖问答@评论区等你来!【华为云技术分享】

    活动快速入口:https://activity.huaweicloud.com/language_speech_promotion0.html 语音交互与自然语言处理 语音交互是一种人机交互方式,以开 ...

  2. 区块链学习笔记:D03 区块链在各行业领域的应用(一)

    今天主要是学习了区块链在金融和供应链领域的应用,重点体现了区块链多方参与.透明可信.防篡改防抵赖的技术优势 区块链的应用场景最早是在金融行业应用较多,后续逐步扩展到传统行业,如:供应链.政务服务.物联 ...

  3. SpringBoot使用注解(@value)读取properties(yml)文件中 配置信息

    为了简化读取properties文件中的配置值,spring支持@value注解的方式来获取,这种方式大大简化了项目配置,提高业务中的灵活性. 1. 两种使用方法1)@Value("#{co ...

  4. 如何在Android手机上进行自动化测试(上)

    版权声明:允许转载,但转载必须保留原链接:请勿用作商业或者非法用途 前言 通过阅读本节教程,你将了解到以下内容: 如何在脚本代码中.运行脚本时指定手机 如何填写--device Android:/// ...

  5. luogu P2640 神秘磁石

    题目描述 1.若给他一个一维坐标系,那么他的磁力一定要在素数坐标的位置上才能发挥的最大(不管位置坐标的大小,只要是素数那么磁力就一样大) 2.若两个磁石相距为k,那么磁石间的破坏力将会达到当前磁力的峰 ...

  6. Rancher1-简单介绍-认识rancher

    认识rancher 一.简介 1.什么rancher Rancher是一个开源软件平台,使组织能够在生产中运行和管理Docker和Kubernetes.使用Rancher,组织不再需要使用一套独特的开 ...

  7. 笔记||Python3之文件的读写

    [文件的读模式]            文件的对象:文件的读写通过文件操作对象进行. Python2  -----  File Python3  -----  TextIOWrapper       ...

  8. Python递归函数如何写?正确的Python递归函数用法

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归 ...

  9. forEach()和for/in循环的缺点与for-of循环

    以数组为例,JavaScript 提供多种遍历语法.最原始的写法就是for循环. for (var index = 0; index < myArray.length; index++) { c ...

  10. 页面导入样式时,使用link和@import有什么区别

    link和@import两种导入样式表的方法比较 link属于HTML标签,而@import是CSS提供的 页面被加载的时候,link会同时被加载,而@import引用的CSS会等到页面被加载完再加载 ...