前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

11-Role

原创
作者头像
小朋友呢
修改2020-01-14 17:51:25
7080
修改2020-01-14 17:51:25
举报

Role角色

介绍

把完成目标功能需要的所有元素组合到一起,构成一个角色

角色的配置在ansible.cfg中的roles_path选项,多个目录用':'隔开

代码语言:txt
复制
[student@workstation ansible]$ grep roles /etc/ansible/ansible.cfg 
roles_path  = /home/ansible/playbooks/roles:/tmp/roles

角色集合

代码语言:txt
复制
tree roles/
roles/
├── httpd
├── memcached
├── mysql
└── nginx

组织结构

每个角色,以特定的目录结构进行组织

代码语言:txt
复制
[student@workstation ansible]$ tree nginx/
nginx/
├── default				    设定默认变量时使用此目录中的main.yml文件
├── files					存放由copy或script模块等调用的文件
├── handlers				此目录的任务由notify调用,文件名为main.yml,其它文件需要通过include包含
├── meta  					定义当前角色的特殊设定及其依赖关系
├── tasks					至少要有一个tasks目录,执行任务的目录下的文件名都是mian.yml
├── templates 			    template模块查找所需要模板文件的目录
└── vars 					此目录用来存储playbook变量,文件名为main.yml,其它文件需要通过include包含

实例-部署Nginx

目录结构

代码语言:txt
复制
[root@ansible roles]# pwd
/etc/ansible/roles
[root@ansible roles]# tree nginx/
nginx/
├── default
├── files
│   ├── CentOS-Base.repo
│   └── index.html
├── handlers
│   └── main.yml
├── meta
├── tasks
│   └── main.yml
├── templates
│   └── vhost1.conf.j2
└── vars
    └── main.yml

Vars

代码语言:txt
复制
[root@ansible nginx]# cat vars/main.yml 
yum_dir: /etc/yum.repos.d/
web_root: /web_data/
http_port: 6666
nginx_source: http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
nginx_pkg_name: nginx-release-centos-7-0.el7.ngx.noarch

Templates

代码语言:txt
复制
[root@ansible nginx]# cat templates/vhost1.conf.j2 
server{
	listen {{ http_port }};
	server_name {{ ansible_fqdn }};
	location / {
		root {{ web_root }};
		index index.html;
	}
}

Tasks

代码语言:txt
复制
[root@ansible nginx]# cat tasks/main.yml 
- name: 0.clean ayum
  shell: rm -f {{ yum_dir }}*
  when: ansible_os_family == "RedHat"

- name: 1.remove old nginx source
  shell: rpm -e {{ nginx_pkg_name }}
  ignore_errors: yes

- name: 2.install nginx source
  get_url: url={{ nginx_source }} dest={{ yum_dir }}

- name: 3.copy yum base
  copy: src=CentOS-Base.repo dest={{ yum_dir }}

- name: 4.clean cache and make cache
  shell: yum clean all && yum makecache

- name: 5.install nginx
  yum: name=nginx state=latest
	
- name: 6.make web root directory
  file: path={{ web_root }} state=directory

- name: 7.copy index.html to vhost1
  copy: src=index.html dest={{ web_root }}

- name: 8.copy template config file
  template: src=vhost1.conf.j2 dest=/etc/nginx/conf.d/vhost.conf

  tags: init_host_config_file
  notify: restart nginx

- name: 9.start nginx
  service: name=nginx state=started

nginx.yml

代码语言:txt
复制
[root@ansible playbook]# pwd
/opt/playbook
[root@ansible playbook]# cat nginx.yml 
- hosts: all
  roles:
  - nginx

开始部署

代码语言:txt
复制
[root@ansible playbook]# ansible-playbook nginx.yml

调用角色的方法

方法1

代码语言:txt
复制
- hosts: all
  roles:
  - mysqls
  - memcached
  - nginx

方法2

代码语言:txt
复制
- hosts: websrvs
  roles:
  #键role用于指定角色名称;后续的k/v用于传递变量给角色;
  - { role: nginx, username: nginx }

  #还可以基于条件测试实现角色调用
  - { role: nginx,  when: "ansible_distribution_major_version == '7'" }

方法3

代码语言:txt
复制
- hosts: websrvs
  roles:
  #可以指定tags来执行对应的角色
  - { role: httpd,tags: ['web', 'httpd'] }
  - { role: nginx,tags: ['web', 'nginx'] }

Galaxy

上面在使用角色的时候,是我们自己手工创建目录和文件的,现在有一种工具可以帮我完成这个过程,它就是Galaxy

初始化

默认模板

需求:创建一个apache角色

语法:ansible-galaxy init 角色名 -p 目录名

代码语言:txt
复制
cd /home/ansible/playbooks
ansible-galaxy init apache -p roles/
tree roles/
roles/
└── apache
    ├── defaults
    │   └── main.yml
    ├── handlers
    │   └── main.yml
    ├── meta
    │   └── main.yml
    ├── README.md
    ├── tasks
    │   └── main.yml
    ├── tests
    │   ├── inventory
    │   └── test.yml
    └── vars
        └── main.yml

自定义模板

上面在创建角色的时候没有生成templates目录,如果角色多了自己手工建立会影响效率,自定义模板可以解决这个问题

--role-skeleton 自定义模板目录

--force 强制创建,覆盖之前的 (由于上面已经创建了apache角色再创建就会报错,所以使用这个参数强制创建)

代码语言:txt
复制
[student@workstation ansible]$ tree skele/
skele/
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

指定模板的目录来创建角色

代码语言:txt
复制
[student@workstation ansible]$ ansible-galaxy init --role-skeleton=skele/ apache -p roles/ --force
[student@workstation ansible]$ tree roles/apache/
roles/apache/
├── defaults
│   └── main.yml
├── handlers
│   └── main.yml
├── meta
│   └── main.yml
├── README.md
├── tasks
│   └── main.yml
├── templates
├── tests
│   ├── inventory
│   └── test.yml
└── vars
    └── main.yml

安装

可以安装,来自本地,或者来自网络中的role

网络源

从网络中安装多个角色,可以用version描述软件的版本

代码语言:txt
复制
[student@workstation ansible]$ cat roles.yml 
- src: http://materials/haproxy.tar.gz
  name: balancer
  version: v1.2

- src: http://materials/phpinfo.tar.gz
  name: phpinfo
  version: v1.2

-r 安装源配置文件

install 安装

代码语言:txt
复制
[student@workstation ansible]$ ansible-galaxy install -r roles.yml -p roles/
- downloading role from http://materials/haproxy.tar.gz
- extracting balancer to roles/balancer
- balancer was installed successfully

- downloading role from http://materials/phpinfo.tar.gz
- extracting phpinfo to roles/phpinfo
- phpinfo was installed successfully

本地源

文件当前目录下

代码语言:txt
复制
[student@workstation ansible]$ cat get_timesync.yml 
- src: ./timesync-1.0.1.tar.gz
  name: timesync

安装本地源

代码语言:txt
复制
[student@workstation ansible]$ ansible-galaxy install -r get_timesync.yml -p roles/
- extracting timesync to roles/timesync
- timesync was installed successfully

查看

默认查看的是 ansible.cfg 里的roles_path 配置路径

代码语言:txt
复制
[student@workstation ansible]$ ansible-galaxy list
- apache, (unknown version)
- balancer, v1.2
- phpinfo, v1.2
- timesync, (unknown version)

删除

代码语言:txt
复制
[student@workstation ansible]$ ansible-galaxy remove apache
[student@workstation ansible]$ ansible-galaxy list
- balancer, (unknown version)
- phpinfo, (unknown version)
- timesync, (unknown version)

搜索

在互联网中搜索redis角色,并查看详细信息

代码语言:txt
复制
ansible-galaxy search redis –vvv

安装网络中下载的redis角色,并查看详细信息

代码语言:txt
复制
ansible-galaxy install redis –p roles/ -vvv

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Role角色
    • 介绍
      • 角色集合
        • 组织结构
        • 实例-部署Nginx
          • 目录结构
            • Vars
              • Templates
                • Tasks
                  • nginx.yml
                    • 开始部署
                    • 调用角色的方法
                      • 方法1
                        • 方法2
                          • 方法3
                          • Galaxy
                            • 初始化
                              • 默认模板
                              • 自定义模板
                            • 安装
                              • 网络源
                              • 本地源
                            • 查看
                              • 删除
                                • 搜索
                                相关产品与服务
                                云数据库 Redis
                                腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档