最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 服务器 > 系统运维 >
Ansible角色(Roles)自动化部署配置如何实现?
linuxe发表于 2020-10-14 14:26 次浏览
Roles简介:
 
Ansible为了层次化、结构化地组织Playbook,使用了角色(roles)。Roles能够根据层次型结构自动装载变量文件、task以及handlers等。简单来讲,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。

通过ansible-galaxy快速了解roles

1、该命令可以连接galaxy.ansible.com下载已经编排好的roles

1 ansible-galaxy list  #列出已经安装的galaxy
2 ansible-galaxy install geerlingguy.redis  #安装一个galaxy角色
3 ansible-galaxy remove geerlingguy.redis  #删除一个galaxy角色
2、安装好一个roles后可以看到在相应的目录中会生成一个以角色名命名的目录,并且还有许多子目录和yml文件,这些都是构成roles的成员。复制一份角色目录就会被Ansible自动识别成一个新的角色。

 

 

手动创建Ansible roles

1、创建roles目录,保持和playbook同级,然后在roles目录中创建以角色命名的目录,如nginx、mysql

1 mkdir roles/{nginx,mysql}

 

2、在每个角色目录中分别创建files、handlers、tasks(必须)、templates、vars等目录(记不住就参考galaxy所创建的目录)

1 mkdir roles/nginx/{handlers,tasks,template,vars,files}

 

3、roles各子目录作用

roles/$project/:project是真实项目名称,如nginx或mysql

files/:存放由copy或script等模块调用的文件,如网页文件。使用copy模块时会自动从该目录找文件

 

template/:template模块会自动在此目录中寻找jinja2模板文件,使用template模块就会自动从该目录找文件

tasks/:该目录必须存在,定义task基本元素,该目录中需要包含一个main.yml文件,其它文件需要在此main.yml中通过include进行包含

handlers/:应包含一个main.yml文件用于定义此角色用到的各handlers,没有handlers的话不用创建

vars/:应包含一个main.yml文件用于定义此角色用到的变量,没有变量的话不用创建

 

 

Ansible roles创建httpd服务示例

1、为roles创建目录

1 cd /etc/ansible/roles/
2 mkdir -p httpd/{handlers,tasks,templates,vars}
3 cd httpd/
4 tree .
5 .
6 ├── handlers
7 ├── tasks
8 ├── templates
9 └── vars

 

2、创建变量文件

1 vim vars/main.yml
2 PORT: 80      #指定httpd监听的端口

 

3、为httpd创建配置文件的template

1 # copy一个本地的配置文件,方便修改
2 cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2
3  
4 vim templates/httpd.conf.j2
5 Listen {{ PORT }}  #引用变量

 

4、建立tasks文件,写明需要执行的任务

01 # 创建组的task
02 vim tasks/group.yml
03 - name: Create a Startup Group  #name会在执行过程中显示
04   group: name=www gid=60 system=yes
05  
06 # 创建用户的task
07 vim tasks/user.yml
08 - name: Create Startup Users
09   user: name=www uid=60 system=yes shell=/sbin/nologin
10  
11 # 安装软件的task
12  vim tasks/install.yml
13 - name: Install Package Httpd
14   yum: name=httpd state=installed
15  
16 # 配置软件的task
17 vim tasks/config.yml
18 - name: Copy Httpd Template File
19   template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf
20   notify: Restart Httpd
21  
22 # 启动软件的task
23 vim tasks/start.yml
24 - name: Start Httpd Service
25   service: name=httpd state=started enabled=yes
26  
27 # 编写main.yml引用所有task
28 vim tasks/main.yml
29 - include: group.yml
30 - include: user.yml
31 - include: install.yml
32 - include: config.yml
33 - include: start.ym

 

5、建立handlers文件
1 vim handlers/main.yml
2 - name: Restart Httpd
3   service: name=httpd state=restarted  #名字需要和task中的notify保持一致

6、建立playbook用于调用角色,这个playbook文件需要和roles目录平级

1 vim httpd_roles.yml
2 ---
3 - hosts: all
4   remote_user: root
5   roles:
6     - role: httpd  #指定角色名称
7  
8 ansible-playbook -C httpd_roles.yml #正式运行前可以先-C测试一次

 

7、Roles最终目录结构


标签:ansible模块
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐