Role入门使用

简介

Role 是 Ansible 中一种重要的组织和管理剧本的方式。它将相关的剧本、变量、任务等内容整合到一个目录结构中,以更加清晰的方式组织和管理 Ansible 剧本。
Role 的主要特点包括:

  1. 规范的目录结构:Role 的目录结构是固定的,包含特定的目录和文件,使得多个人共同协作时,更容易理解和维护。
  2. 可重用性:Role 可以被多个剧本调用和重复使用,可以提高代码的复用率,减少代码量。
  3. 易于维护:Role 可以独立进行测试和调试,减少了维护成本,可以让多个人协作维护。
  4. 依赖管理:Role 可以在剧本中声明依赖关系,自动安装依赖的 Role,以及在需要时更新依赖。

Role 的优点

  1. 简化维护:通过 Role,可以将各个模块化的任务整合到一个目录中,更加方便维护。
  2. 重用性:Role 可以在多个剧本中重复使用,减少代码的重复编写,提高代码复用率。
  3. 可拓展性:在一个 Role 中,可以定义多个任务,实现更多的功能,并且可以将 Role 作为依赖,实现更高级的功能。

Role 的缺点

  1. Role 本身的开发和维护成本较高,需要考虑各种情况,以满足不同场景下的需求。
  2. 规范的目录结构限制了 Role 的自由度,有时候需要在目录结构上做出一些妥协。
  3. 一些特殊的场景下,使用 Role 可能会带来不必要的复杂度和开销,需要根据具体情况做出选择。
my_role/
├── defaults/
│   └── main.yml
├── files/
│   ├── file1
│   └── file2
├── handlers/
│   └── main.yml
├── meta/
│   └── main.yml
├── tasks/
│   └── main.yml
├── templates/
│   ├── template1.j2
│   └── template2.j2
├── tests/
│   ├── inventory
│   └── test.yml
├── vars/
│   └── main.yml
└── README.md

:::tips
每个目录和文件的作用如下:

  • defaults/ 目录:存放 Role 的默认变量。Ansible 会自动加载这个目录下的 main.yml 文件作为默认变量,如果 Playbook 中没有定义该变量,则会使用该目录下的变量。
  • files/ 目录:存放一些需要传输到远程节点的文件。这些文件可以在 Playbook 中使用 copy 模块或者 template 模块传输到远程节点。
  • handlers/ 目录:存放处理任务的通知器(handler),它们会在任务执行成功后触发。通常用于重启服务或者重新加载配置文件等操作。
  • meta/ 目录:存放与 Role 相关的元数据,例如 Role 的作者,依赖的其他 Role 等。
  • tasks/ 目录:存放 Role 的主要任务。Ansible 会自动加载该目录下的 main.yml 文件,这个文件包含了需要执行的任务。
  • templates/ 目录:存放 Jinja2 模板文件,可以在 Playbook 中使用 template 模块将这些模板转换为文本文件。
  • tests/ 目录:存放测试 Playbook 和测试用例。可以使用 ansible-test 命令运行这些测试。
  • vars/ 目录:存放 Role 的变量。Ansible 会自动加载该目录下的 main.yml 文件作为变量定义。
    :::

使用案例

  1. 先创建一个playbooks目录,进入playbooks目录再创建playbooks的文件以及hosts主机列表文件
mkdir playbooks

cd playbooks

touch playbooks-role.yml hosts
  1. 在playbooks目录中创建相关的roles,有两种创建方法
    1. 第一个方法,使用ansible-galaxy 创建roles
cd playbooks
#创建名为nignx的roles
ansible-galaxy init nginx
  1. 编写nginx的roles下的tasks的main.yml
# vim nginx/tasks/main.yml
---
- name: Get hostname
  command: hostname
  register: result

- name: Display hostname
  debug:
    var: result.stdout

- name: Add Nginx YUM repository
  shell: |
    sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
    yum update -y
    yum makecache

- name: Install Nginx
  yum:
    name: nginx-{{ nginx_version }}
    state: present
  2. 编写nginx的roles下的defaults的main.yml
# vim nginx/defaults/main.yml 

---
# defaults file for nginx
nginx_version: "1.20.2"
  1. 第二个方法,手动创建roles
cd playbooks

#创建名为test的role的目录和tasks任务目录
mkdir -p test/tasks

#编写tasks任务
vim test/tasks/main.yml
---
- name: 测试
  shell: echo $HOSTNAME

- name: username
  user:
    name: test
    password: "{{ 'password' | password_hash('sha512') }}"
    shell: /bin/bash
    createhome: yes
  1. 编写playbooks-role.yml文件
---
- name: Install Nginx on web servers
  hosts: webservers
  become: true
#引用roles
  roles:
    - nginx
    - test
  1. 编写hosts主机列表文件
[webservers]
192.168.10.52
  1. 执行
#执行测试
ansible-playbook install_nginx.yml -i host -k --check

#确认没有问题去掉--check参数执行
ansible-playbook install_nginx.yml -i host -k
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值