Linux架构31 ansible roles角色, ansible galaxy

Ansible Roles角色

1.Ansible Roles基本概述

Roles基于一个已知的文件结构,去自动地加载某些 var_files, tasks 以及 handlers。

Ansible注意事项: 在编写roles的时候,最好能将一个task拆分为一个文件,方便后续复用。(彻底的打散)

 

2.Ansible Roles目录结构

roles官方目录结构,必须按如下定义。在每个目录中必须有main.yml文件,这些属于强制要求。

[root@m01 ~]# cd /etc/ansible/roles
[root@m01 roles]# 
[root@m01 roles]# tree
.
|—— nfs
|   |—— files        #存放文件,copy调用
|   |—— handers        #触发文件
|   |—— tasks        #具体任务
|   |—— templates    #模板文件,template调用
|   |—— vars        #定义变量
|   |—— meta        #依赖关系

 

3.Ansible Roles案例实战

Roles小技巧:

1.创建roles目录结构,手动或使用ansible-galaxy init 角色名称

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

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

#1.先创建一个项目目录
[root@m01 ~]# mkdir project2
[root@m01 ~]# cd project2/

#初始化一个test的role
# [root@m01 project2]# ansible-galaxy init test    #初始化比较乱,不推荐这种方法。直接自己创
# [root@m01 project2]# rm -rf test

#手动初始化一个memcached的role,文件夹名就是role名
[root@m01 project2]# mkdir memcached/{tasks,handlers,templates,vars,files} -pv
mkdir: created directory ‘memcached’
mkdir: created directory ‘memcached/tasks’
mkdir: created directory ‘memcached/handlers’
mkdir: created directory ‘memcached/templates’
mkdir: created directory ‘memcached/vars’
mkdir: created directory ‘memcached/files’

#2.编写roles的功能
[root@m01 project2]# vim memcached/tasks/main.yml
- name: Install Memcached Server
  yum:
    name: memcached
    state: present

- name: Configure Memcached Server
  template:
    src: memcached.j2    # 自动在templates中找该文件
    dest: /etc/sysconfig/memcached
    notify: Restart Memcached Server    #handlers不能写在这个yml下

- name: Started Memcached Server
  service:
    name: memcached
    state: started
    enabled: yes

[root@m01 project2]# vim /root/project2/memcached/templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb // 2 }}"
OPTIONS=""

[root@m01 project2]# vim memcached/handlers/main.yml
- name: Restart Memcached Server
  service:
    name: memcached
    state: restarted
    
#3.编写playbook引用roles编写好的tasks
[root@m01 project2]# vim site.yml    #这个名字随意
- hosts: web01
  roles:
    - memcached    #这个就是role的名字
    
#4.执行
[root@m01 project2]# ansible-playbook site.yml
#也可以把hosts文件放在该目录下,指定hosts执行
[root@m01 project2]# ansible-playbook -i hosts site.yml

------------------------------------------------
###第二种写法,打散
[root@m01 tasks]# vim install.yml
- name: Install Memcached Server
  yum:
    name: memcached
    state: present
    
[root@m01 tasks]# vim config.yml
- name: Configure Memcached Server
  template:
    src: memcached.j2    # 自动在templates中找该文件
    dest: /etc/sysconfig/memcached
    notify: Restart Memcached Server    #handlers不能写在这个yml下
    
[root@m01 tasks]# vim start.yml
- name: Started Memcached Server
  service:
    name: memcached
    state: started
    enabled: yes
    
[root@m01 tasks]# vim main.yml
- include_tasks: install.yml
- include_tasks: config.yml
- include_tasks: start.yml

[root@m01 project2]# tree memcached/
memcached/
├── files
├── handlers
│   └── main.yml
├── tasks
│   ├── config.yml
│   ├── install.yml
│   ├── main.yml
│   └── start.yml
├── templates
│   └── memcached.j2
└── vars

###执行
[root@m01 project2]# ansible-playbook site.yml
------------------------------------------------------

#1.再创建nginx和php的role
[root@m01 project2]# mkdir {nginx,php-fpm}/{tasks,handlers,templates} -pv

#2.写功能
[root@m01 project2]# vim nginx/tasks/main.yml
- name: Installed 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: Started Nginx Server
  service: name=nginx state=started enabled=yes
  
[root@m01 project2]# vim nginx/handlers/main.yml
- name: Restart Nginx Server
  service: name=nginx state=restarted
  
[root@m01 project2]# vim nginx/templates/nginx.conf.j2
...

#3.编写playbook引用roles编写好的tasks
[root@m01 project2]# vim site.yml    #这个名字随意
- hosts: web01
  roles:
    - memcached
    - nginx        #对应role的名字
    
#可以通过设定tag,来指定执行哪个role
[root@m01 project2]# vim site.yml
- hosts: web01
  roles:
    - role: memcached
      tages: memcached
    - role: nginx
      tags: nginx
[root@m01 project2]# ansible-playbook site.yml -t nginx     #只跑nginx的role

#4.写php的task
[root@m01 project2]# vim php-fpm/tasks/main.yml
- name: Installed PHP-FPM Server
  yum: name={{ packages }} state=present
  vars:
    packages:    #下面只写部分,实际使用还需要其他的
      - php
      - php-cli
      - php-fpm
      - php-pdo
      - php-gd
      - php-mbstring

- name: Configure PHP-FPM Server
  template: src={{ item.src }} dest={{ item.dest }}
  with_items:
    - { src: 'php.ini.j2' ,dest: '/etc/php.ini' }
    - { src: 'php_www.conf.j2' ,dest: '/etc/php-fpm.d/www.conf' }
  notify: Restart PHP-FPM Server
    
- name: Started PHP-FPM Server
  service: name=php-fpm state=started enabled=yes
  
[root@m01 project2]# vim php-fpm/handlers/main.yml
- name: Restart PHP-FPM Server
  service: name=php-fpm state=restarted
  
#5.编写playbook引用
[root@m01 project2]# vim site.yml    #这个名字随意
- hosts: web01
  roles:
    - role: memcached
    - role: nginx
    - role: php-fpm

 

Ansible Galaxy

Galaxy是一个免费网站,类似github网站,网站上基本都是共享的roles角色。从Galaxy下载roles角色是快速启动自动化项目方式之一。

Galaxy 官网:https://galaxy.ansible.com

 搜需要的role

 点击复制,执行命令进行下载role

# galaxy下载到默认路径: /root/.ansible/roles
[root@m01 project2]# ansible-galaxy install geerlingguy.nginx

#写一个site.yml调用执行
- hosts: web01
  roles:
    - role: nginx

 

posted @ 2024-04-19 14:12  战斗小人  阅读(4)  评论(0编辑  收藏  举报