首页 > 其他分享 >ansible-role角色

ansible-role角色

时间:2024-01-03 21:31:45浏览次数:20  
标签:rsync roles 角色 sshd etc ansible role name

一.role的官网介绍,与解释

ansible-role角色_启动文件

ansible-role的实际理念

ansible-role角色_目录结构_02

为什么用role

ansible-role角色_配置文件_03

把单个的大剧本,拆分为小剧本,便于维护,修改、使用
完成解耦、结构更清晰、调试更方便
如果是小部署, 还是剧本更方便
大型项目,必须通过role管理

在实际的工作当中,一个完整的项目实际上是很多功能体的组合,如果将所有的功能写在一个playbook中会存在如代码耦合程度高、playbook长而维护成本大、灵活性低等一系列的问题。
使用roles能巧妙的解决这一系列的问题。
roles是ansible1.2版本后加入的新功能,适合于大项目playbook的编排架构。

二.具体role的用法

先明确,创建好role的规范目录

1.定义好role存放路径
[root@master-61 /etc/ansible]#grep '^role' /etc/ansible/ansible.cfg 
roles_path    = /etc/ansible/roles

2. 创建role的固定目录
# yuchaoit.cn  ansible-role
site.yml                    # role入口
nfs_servers.yml             # role
rsync_servers.yml           # role
roles/                      # role规范目录结构
    nfs_servers/            # role具体名字
        tasks/              # 剧本任务
        handlers/           # 剧本里存放的handlers
        files/              # 如压缩文件,如需要拷贝的文件
        templates/          # 存放配置文件
        vars/               # 存放变量文件
    rsync_servers/
        tasks/
        handlers/
        files/
        templates/
        vars/
        
3. 创建如上的目录结构
mkdir -p /etc/ansible/roles
# 这里定义的文件名,必须和roles目录下的每一个任务目录同名
touch  /etc/ansible/{site.yml,nfs_servers.yml,rsync_servers.yml}

4. 创建关于rsync_servers的目录
mkdir -p /etc/ansible/roles/rsync_servers/{tasks,handlers,files,templates,vars}

5.检查创建好的目录结构
[root@master-61 /etc/ansible]#tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
├── nfs_servers.yml
├── roles
│   └── rsync_servers
│       ├── files  # 指的是目录中,存放剧本运行需要用到的文件
│       ├── handlers
│       ├── tasks
│       ├── templates
│       └── vars
├── rsync_servers.yml
└── site.yml

部署rsyncd服务的role角色

1.准备写装rsync服务的role

2.创建好对应的目录结构

  1. 写好playbook模式
  2. 拆开即可

先写好纯playbook形式

ansible-role角色_启动文件_04

什么时候定义变量,在你的剧本,写好ad-hoc临时命令模式
看你临时命令,使用这个属性,重复了2次以上,就可以抽象为变量

部署rsync的剧本
让大家理解,通过ad-hoc去思考,抽象变量
然后转为yaml,的变量提取形式

ansible bakcup  -m group  -a "name={{rsyncd_name}}  gid={{rsyncd_id}}"
ansible bakcup  -m user  -a  "name={{rsyncd_name}}  group={{rsyncd_id}}    "

创建备份目录了
ansible bakcup  -m file   -a "path=/data  state=direcotry owner={{rsyncd_name}} group={{rsyncd_id}}  "

你会发现,这个用户信息,是重复使用

vars:
  rsyncd_name: "www"
  rsyncd_id: 666

ansible-role角色_启动文件_05

ansible-role角色_启动文件_06

- hosts: backup
  vars:
    user_id: '666'
    rsync_user: 'www'
  tasks:
  # 1.创建www用户和组
  - name: 01_create_group
    group:
      name: "{{ rsync_user }}"
      gid: "{{ user_id }}"

  # 2.创建www用户
  - name: 02_create_user
    user:
      name: "{{ rsync_user }}"
      gid: "{{ user_id }}"
      group: "{{ rsync_user}}"
      create_home: no
      shell: /sbin/nologin

  # 3.创建数据目录且授权
  - name: 03_createUdata
    file:
      path: "{{ item }}"
      state: direcotry
      owner: "{{ rsync_user }}"
      group: "{{ rsync_user}}"
      mode: "755"
    loop:
      - /data
      - /backup
  # 4.安装rsync软件
  - name: 04_install_rsync
    yum:
      name: rsync
      state: latest
  # 5.复制配置文件与密码文件
  - name: 05_copy_config
    copy:
      src: "{{ item.src }}"
      dest: /etc/
      mode: "{{ item.mode }}"
    notify:
      - restart_rsyncd
    loop:
      - { src:/script/rsyncd.conf,mode:'644'}
      - { src:/script/rsync.passwd,mode:'600'}

  # 6.启动服务
  - name: 06_start_rsync
    systemd:
      name: rsyncd
      state: started
      enabled: yes
  # 7.重启服务
  handlers:
    - name: restart_rsyncd
      systemd:
        name: rsyncd
        state: restarted

下一步,思考,如何把这个剧本拆开,拆为role的形式

1.如何拆,先看你的剧本中,有多少个部分,是符合role的目录规范的(有多少部分需要拆)
2.对配置文件,解析完毕后,可以去逐步的拆了

拆最多的tasks任务

ansible-role角色_目录结构_07

1.创建tasks/main.yml
[root@master-61 /script]#touch /etc/ansible/roles/rsync_servers/tasks/main.yml

2.往tasks的主体文件中,写入拆分出来的任务列表
只需要复制原本的剧本中的 tasks任务列表,无须携带tasks这个key了,复制粘贴如下的任务列表即可,写入到该 tasks/main.yml

剧本中,依然会调用 变量信息,但是不写在这个tasks/main.yml中了
而是,role角色会自动的去 vars/main.yml 寻找这个变量 {{rsync_user}}

3.再次理解,咱们在拆分 这个大剧本

# 剧本如下
# 1.创建www组
- name: 01_create_group
  group:
    name: "{{rsync_user}}"
    gid: "{{user_id}}"

# 2.创建www用户
- name: 02_create_user
  user:
    name: "{{rsync_user}}"
    uid: "{{user_id}}"
    group: "{{rsync_user}}"
    create_home: no
    shell: /sbin/nologin

# 3.创建数据目录并更改授权
- name: 03_create_data
  file:
    path: "{{item}}"
    state: directory
    owner: "{{rsync_user}}"
    group: "{{rsync_user}}"
    mode: '755'
  loop:
    - /data
    - /backup/


# 4.安装rsync软件
- name: 04_install_rsync
  yum:
    name: rsync
    state: latest

# 5.复制文件
- name: 05-copy config
  copy:
    src: "{{item.src}}"
    dest: /etc
    mode: "{{item.mode}}"

  notify:
    - restart_rsyncd
  loop:
    - {src: rsyncd.conf,mode: '644'}
    - {src: rsync.passwd,mode: '600'}

# 6. 启动服务
- name: start service
  systemd:
    name: rsyncd
    state: started
    enabled: yes

拆 vars/main.yml

1.写入剧本需要用到的变量即可,也是一样,不需要添加 vars: 这个脑袋了
roles判断,只要在 vars/main.yml 就识别这是一个变量yml文件

2.创建  vars/main.yml
touch  vars/main.yml
写入如下信息,无须缩进
user_id: '666'
rsync_user: 'www'

拆配置文件

1. 找到你原本的配置文件所在地儿,复制到 roles的 files目录下即可

2.创建文件如下
[root@master-61 /etc/ansible/roles/rsync_servers]#cp /script/rsync*   /etc/ansible/roles/rsync_servers/files/
[root@master-61 /etc/ansible/roles/rsync_servers]#ls files/
rsyncd.conf  rsync.passwd

拆handlers

1. 创建handlers文件
[root@master-61 /etc/ansible/roles/rsync_servers]#cat handlers/main.yml 
- name: restart_rsyncd
  systemd:
    name: rsyncd
    state: restarted

最后,安装rsync的role创建好了

创建启动文件即可

ansible-role角色_配置文件_08

注意点,该启动文件,入口在 和 roles这个目录,平级的地方

写入需要操作的主机组,以及定义角色的名字(和角色文件夹对应即可)
# 注意,这里是错的,解决办法如下,让你更清晰,角色的启动文件写法
[root@master-61 /etc/ansible]#cat /etc/ansible/rsync_server.yml 
- hosts: backup
  roles:
    - rsync_servers
    
调试该启动剧本是否可以运行,语法是否正确
ansible-playbook -C rsync_servers.yml

正式运行该rsync角色

1.准备好心机器,rsync-41机器测试

2. 运行角色程序
[root@master-61 /etc/ansible]#ansible-playbook  rsync_servers.yml

PLAY [backup] **************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 01_create_group] *************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 02_create_user] **************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 03_create_data] **************************************************************************************
ok: [172.16.1.41] => (item=/data)
ok: [172.16.1.41] => (item=/backup/)

TASK [rsync_servers : 04_install_rsync] ************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 05-copy config] **************************************************************************************
ok: [172.16.1.41] => (item={u'src': u'rsyncd.conf', u'mode': u'644'})
ok: [172.16.1.41] => (item={u'src': u'rsync.passwd', u'mode': u'600'})

TASK [rsync_servers : start service] ***************************************************************************************
changed: [172.16.1.41]

PLAY RECAP *****************************************************************************************************************
172.16.1.41                : ok=7    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ansible-role角色_启动文件_09

测试让handlers执行

1.需要修改配置文件,触发notify,然后handlers才会执行
需要修改 roles目录下的 files目录,里面的配置文件

[root@master-61 /etc/ansible]#
[root@master-61 /etc/ansible]#ansible-playbook rsync_servers.yml 

PLAY [backup] **************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 01_create_group] *************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 02_create_user] **************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 03_create_data] **************************************************************************************
ok: [172.16.1.41] => (item=/data)
ok: [172.16.1.41] => (item=/backup/)

TASK [rsync_servers : 04_install_rsync] ************************************************************************************
ok: [172.16.1.41]

TASK [rsync_servers : 05-copy config] **************************************************************************************
changed: [172.16.1.41] => (item={u'src': u'rsyncd.conf', u'mode': u'644'})
ok: [172.16.1.41] => (item={u'src': u'rsync.passwd', u'mode': u'600'})

TASK [rsync_servers : start service] ***************************************************************************************
ok: [172.16.1.41]

RUNNING HANDLER [rsync_servers : restart_rsyncd] ***************************************************************************
changed: [172.16.1.41]

PLAY RECAP *****************************************************************************************************************
172.16.1.41                : ok=8    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

ansible-role角色_目录结构_10

还剩下一个关于template模板模块的学习

ansible-playbook中的 template模块使用
专门用于动态替换配置文件中的值,需要学习jinja2这个模板语言(内容太多,支持循环语句,条件判断,以后有机会再学
这里学习它的 创建,使用规则;以及变量替换功能;实现配置文件的变量替换;

三.模板配置文件与sshd服务

改为变量形式的配置文件

一个纯普通的文本文件,是没法识别这样的变量的

rsyncd.conf

uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_bakcup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
[data]
comment = yuchaoit.cn rsync!
path = /data

使用template模板替换配置文件的思路

因此ansible提供了一个jinja2模板语言,要求如下

第一件事,改造配置文件为 j2类型

1.创建配置文件,但是后缀必须是 j2格式的
rsyncd.j2
该j2文件写入配置
uid = www 
gid = www 
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = {{ rsync_auth_user }}
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
[backup]
comment = chaoge rsync backup!
path = /backup
[data]
comment = yuchaoit.cn rsync!
path = /data

第二件事,修改vars变量文件,去替换j2文件中的变量值

只需要在vars/main.yml中写入变量即可

rsync_auth_user: "rsync_backup"

第三件事,修改tasks任务yaml文件

还得修改tasks任务yaml文件,指定配置文件路径,为j2模板形式

以部署sshd服务为演示(role角色)

1.创建sshd_server角色目录

[root@master-61 /etc/ansible]#mkdir -p /etc/ansible/roles/sshd_server/{files,handlers,tasks,vars,templates}

检查
[root@master-61 /etc/ansible]#tree /etc/ansible/roles/sshd_server/
/etc/ansible/roles/sshd_server/
├── files
├── handlers
├── tasks
├── templates
└── vars

5 directories, 0 files

2.需要创建role目录下的每一个目录资料

1.你在写的时候,思路依然是

- 想好ad-hoc命令模式,想清楚,每一步要如何使用模块
- 转为playbook 剧本形式
- 思考如何拆为role要求的 files,template,tasks,vars目录

直接写roles剧本了

  • tasks
  • vars
  • templates

先创建部署sshd的tasks任务文件

ansible-role角色_配置文件_11

ansible-role角色_配置文件_12

1. 创建tasks/main.yml
vim tasks/main.yml

# 2. 写入剧本语法
[root@master-61 /etc/ansible/roles/sshd_server]#cat tasks/main.yaml 
# 1.复制文件
- name: 01_copy_sshd
  template:
    src: sshd_config.j2
    dest: /etc/ssh/sshd_config
    mode: '600'
    backup: yes
  notify:
    - restart sshd

# 2.启动服务
- name: start sshd service
  systemd:
    name: sshd
    state: started
    enabled: yes

3.创建template信息

创建模板配置文件,设置变量用于替换配置文件的值

1.你要准备好 sshd_config的配置文件
[root@master-61 /etc/ansible/roles/sshd_server]#cp /etc/ssh/sshd_config 
[root@master-61 /etc/ansible/roles/sshd_server]#ls templates/
sshd_config.j2

2.修改这个sshd_config.j2文件,修改需要用变量替换的参数
修改端口
禁止公钥登录

Port {{ sshd_port  }}
PubkeyAuthentication {{ pubkey_yes_no  }}

3.创建变量文件,写入这个对应的变量 值

4.检查
[root@master-61 /etc/ansible/roles/sshd_server]#tree
.
├── files
├── handlers
├── tasks
│   └── main.yml
├── templates
│   └── sshd_config.j2
└── vars

4.创建变量文件

1.创建文件
[root@master-61 /etc/ansible/roles/sshd_server]#cat vars/main.yml 
sshd_port: "2999"
pubkey_yes_no:  "no"

5.创建handlers文件,用于重启sshd

[root@master-61 /etc/ansible/roles/sshd_server]#cat  handlers/main.yml
- name: restart sshd
  systemd: 
    name: sshd
    state: restarted

6.检查当前服务的roles目录信息

[root@master-61 /etc/ansible/roles/sshd_server]#tree
.
├── files
├── handlers
│   └── main.yml
├── tasks
│   └── main.yml
├── templates
│   └── sshd_config.j2
└── vars
    └── main.yml

5 directories, 4 files

7.创建启动文件就完事

1.必须和roles同级
2.roles角色定义的工作目录名,必须和roles/文件夹名字对应的上

# 先进入/etc/ansible目录,创建启动文件
[root@master-61 /etc/ansible]#cat start_sshd.yml 
- hosts: backup
  roles:
    - sshd_server


3.测试剧本运行
[root@master-61 /etc/ansible/roles/sshd_server]#ansible-playbook /etc/ansible/start_sshd.yml 

PLAY [backup] *************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************
ok: [172.16.1.41]

TASK [sshd_server : 01_copy_sshd] *****************************************************************************************
changed: [172.16.1.41]

TASK [sshd_server : start sshd service] ***********************************************************************************
ok: [172.16.1.41]

RUNNING HANDLER [sshd_server : restart sshd] ******************************************************************************
changed: [172.16.1.41]

PLAY RECAP ****************************************************************************************************************
172.16.1.41                : ok=4    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   


至此,基于template,vars替换配置文件,重启进程就ok了


标签:rsync,roles,角色,sshd,etc,ansible,role,name
From: https://blog.51cto.com/yiyuan/9089388

相关文章

  • ansible剧本进阶
    一.剧本的高级特性剧本高级特性是完全遵循python的循环结构来的编程语言特有的逻辑控制语句变量循环等等你的剧本,可以考虑用高级特性,也可以不用高级特性是为了简化剧本比如,创建10个系统的用户不用循环手写ansiblebakcup-muser-a"name=cc01"ansiblebakcup-muser-a"na......
  • 3D游戏角色建模纹理贴图处理
    在线工具推荐:3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.jsAI自动纹理开发包 - YOLO虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎在本文中,我们将介绍3D纹理的基础知识,并讨论为什么它是游戏美术的关键部分。期......
  • 后端技术:基于角色的访问控制(RBAC)系统的快速理解
    参考文章:RBAC权限系统分析、设计与实现:https://cloud.tencent.com/developer/article/1802329基于角色的访问控制(RBAC)系统的快速理解rbac系统的基本理解:在RBAC系统中,通常涉及角色(Role)、用户(User)和权限(Access)等概念。下面是对每个模型的解释:在RBAC模型里面,有3个基础组成部......
  • 涅槃重生—奇迹mu四转角色全解析
    一、前言奇迹mu作为一款经典的在线游戏,至今仍受到广泛的喜爱。作为一个老玩家,我非常热爱这款游戏的各种玩法和挑战。而四转,作为游戏中最高级别的职业进阶,更是具有重要意义。因此,本文将为大家详细介绍奇迹mu四转角色的各种玩法和技巧,帮助广大玩家更好地享受游戏。二、四转角色介......
  • ansible设置用户密码
    用ansible设置用户的密码时,由于需要对传输的密码进行加密,#!/usr/bin/python3importcryptimportsys#接收要加密的密码password=sys.argv[1]#生成saltsalt=crypt.mksalt(crypt.METHOD_SHA512)#加密密码crypt_password=crypt.crypt(password,salt)#打印加密后......
  • 使用ansible脚本用pt-archiver归档数据
    【背景说明】需要使用ansible来管理删除数据任务,数据量较大,使用pt-archiver工具【环境说明】MySQL主从架构+pt-archiver3.5.5【剧本说明】treeroles/archive_mysql/roles/archive_mysql/├──files│└──percona-toolkit-3.5.5-1.el7.x86_64.rpmpt工具├......
  • ansible设置用户密码
    用ansible设置用户的密码时,由于需要对传输的密码进行加密,所以要在主机安装python的passlib库。利用pip安装passlib:pipinstallpasslib生成的经过加密的密码(sha512加密算法),说明:在Password后输入我们的密码"xxxxx",然后再按enter键 pipinstallpasslibpyth......
  • 测试开发 | AI在人工和服务领域的崭新角色
    随着科技的飞速发展,人工智能(AI)正逐渐成为技术领域的一匹黑马,其在人工和服务领域发挥的作用日益凸显。作为一名技术人员,我们不得不深刻认识到AI在这两个领域中的崭新角色,以及它所带来的深刻变革。1.人工领域中的AI应用1.1智能制造和自动化在工业制造领域,AI技术的引入使得智能制造......
  • 不同角色登录
    index.jsp<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>LoginTest</title></head><body><formaction="LoginServlet"method="post&q......
  • 【电子公文系统】权限和角色定义
    管理员(Administrator):全局设置和配置系统管理用户帐户和权限监控系统日志和用户活动执行数据备份和恢复操作更新系统和管理系统升级审批者(Approver):审核和签发文档对文档进行审批或拒绝查看待审批的文档队列提供反馈和修订建议作者(Author):创建和编辑文档保存......