首页 > 其他分享 >ansible roles 示例

ansible roles 示例

时间:2024-08-21 11:19:29浏览次数:13  
标签:git roles 示例 tasks yaml ansible role playbook dir

目录

role

Ad-Hoc适用于临时命令的执行,Playbook合适中小项目,Roles适合大项目

构建role

Roles主要依赖于目录的命名和摆放,默认tasks/main.yaml是所有任务的入口,所以使用Roles的过程可以理解为目录规范化命名的过程

role_name/
  meta/
  tasks/

每个目录下均由main.yaml定义该功能的任务集

tasks/main.yaml默认执行所有指定的任务

roles的调用文件playbook_role.yaml内容如下

---
  - hosts: all
    roles:
     - role_name

这样,目录名为 role_name 下的tasks/main.yaml下的所有任务都会被执行

ansible-playbook playbook_role.yaml

role 目录可以在/etc/ansible/ansible.cfg中通过role_path定义,也可以在playbook_role.yaml所在同级目录下

fab2ansible
├── group_vars│ 
│             └── all
├── roles│ 
         ├── git│ 
         │ ├── files│ 
         │ │ └── main.yaml│ 
         │ ├── tasks│ 
         │ │ ├── create_dir.yaml│ 
         │ │ ├── git_checkout.yaml│ 
         │ │ ├── main.yaml│ 
         │ │ └── static_git_pull.yaml│ 
         │ └── vars│ 
         │ └── main.yaml│ 
         └── user│ 
         ├── tasks│ 
         │ ├── main.yaml│ 
         │ └── user-config.yaml│ 
         └── vars│ 
         └── main.yaml
└── playbook_role.yaml

Roles模块调用结构

编辑roles目录

变量文件

group_vars/all 文件

---
# 以下列出的变量对所有主机和组有效,即全局有效
---
repository_static: "https://github.com/ansible/ansible.git"
package_dir: "/opt/"
project: "ansible"
git_commit: "devel"
flag: "2.17.3"
username: "test"
service_name: "memcached"

group_vars目录下的文件定义Roles中调用的变量,Roles对应调用该目录同名文件中定义的变量,文件名为all的文件定义的变量针对所有Roles生效

调用role

playbook_role.yaml

---
  - hosts: ubuntu
    roles:
    - role: git

reoles 是关键字
role: git 表示调用git角色
如果也想调用多个其他角色只需要添加列表元素

---
...
    roles:
    - role: git
    - role: user
    - role: config

tasks main 文件

roles/git/tasks/main.yaml

---
   #设置调用git模块实现的功能
   - import_tasks: create_dir.yaml
   - import_tasks: static_git_pull.yaml
   - import_tasks: git_checkout.yaml

import_tasks: 用于静态引用任务

include_tasks: 用于动态引用任务

import_playbook: 可以在主playbook文件中静态引入子剧本
如果要在任务中引入playbook,可以通过command模块指定ansible-playbook 执行,不推荐这样做

playbook文件只建议在主playbook中引入,如果有其他引入方式,说明规划没做好,是编写者的问题

tasks create_dir.yaml,git_checkout.yaml,static_git_pull.yaml 文件

roles/git/tasks/create_dir.yaml

---
# 这些任务负责检出git变量
#
- name: create dir
  file: 
    path: "{{ package_dir }}{{ project }}-release-{{ git_commit}}/{{ flag}}-{{ project }}" 
    owner: "{{ username }}" 
    group: "{{ username }}"  
    mode: 0755 
    recurse: yes 
    state: directory

roles/git/tasks/git_checkout.yaml

---
# 这些任务负责检出git变量
- name: Git init before git pull
  command: /usr/bin/git fetch
  args:
       chdir: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
- name: Git reset
  command: /usr/bin/git reset --hard
  args:
       chdir: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
- name: Git checkout
  command: /usr/bin/git checkout {{ git_commit }}
  args:
       chdir: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"

roles/git/tasks/static_git_pull.yaml

---
    - name: Git pull
      git: 
        repo: "{{ repository_static }}"
        dest: "{{ package_dir }}{{ project }}-release-{{ git_commit }}/{{ flag }}-{{ project }}"
        version: "{{ git_commit }}" 
        force: yes # git模块,结合Ansible后用于自动化版本管理

ansible-playbook playbook_role.yml

PLAY [ubuntu] *****

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

TASK [git : create dir] *****
changed: [107.151.199.209]

TASK [git : Git pull] *****
changed: [107.151.199.209]

TASK [git : Git pull] *****
ok: [107.151.199.209]

TASK [git : Git init before git pull] *****
changed: [107.151.199.209]

TASK [git : Git reset] *****
changed: [107.151.199.209]

TASK [git : Git checkout] *****
changed: [107.151.199.209]

PLAY RECAP *****
107.151.199.209            : ok=7    changed=5    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

标签:git,roles,示例,tasks,yaml,ansible,role,playbook,dir
From: https://www.cnblogs.com/anyux/p/18371207

相关文章

  • 在 PowerShell 脚本中调用 msiexec 进行静默安装,可以通过设置 msiexec 的参数来实现。
    在PowerShell脚本中调用msiexec进行静默安装,可以通过设置msiexec的参数来实现。静默安装意味着在安装过程中不会弹出用户界面,也不会进行用户交互。下面是一个示例,演示如何使用PowerShell脚本执行静默安装。示例PowerShell脚本powershellCopyCode#MSI文件的路径$m......
  • MySQL存储过程示例代码
    CREATEDEFINER=`root`@`%`PROCEDURE`getReportWeavingProductionDay`(instartTimedatetime,inendTimedatetime,infactoryIdsvarchar(100),inmachineIdsvarchar(5000),inPageSizeint,inDataFromIndexint)BEGIN--参数说明--startTime:开始时间,endTime:结束时间,f......
  • 2024.8.20(playbook剧本安装nginx、roles)
    一、playbook 剧本安装nginx[root@m0~]#mkdir/etc/ansible/playbook[root@m0~]#vim/etc/ansible/playbook/nginx.yml----hosts:group02remote_user:roottasks:-name:卸载httpdyum:......
  • ansible include_tasks示例
    目录include_tasks导入任务include_tasks拉取ansible代码示例include_tasks导入任务任务文件只包含任务,作用主机范围由playbook.yaml决定include_tasks.yaml----name:restartmemcachedservice:name:memcachedstate:restartedplaybook.yaml----h......
  • C10-02-HTML示例
    HTML:02-1.html基本功能实现:<a>和<img>标签联合使用及<imgsrc="#">图片资源绝对路径引用JS使用:行内式、内嵌式、引入外部JS<input>标签:输入标签文本框<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8">......
  • 数据结构之 红黑树入门教程、红黑树代码示例
    红黑树(Red-BlackTree)是一种自平衡的二叉查找树(BST),它在插入、删除和查找操作后通过一些特定的规则来维护树的平衡,从而确保这些操作的时间复杂度始终为O(logn)。红黑树主要应用在需要高效动态集合操作的场景中,如操作系统中的进程调度器、数据库中的索引等。红黑树的基本性......
  • TopoJSON格式详解,写入读取TopoJSON示例
    还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。No.内容链接1Openlayers【入门教程】-......
  • 多重示例详细说明Eureka原理实践
    Eureka原理(EurekaPrinciple)是指在长时间的思考和积累之后,通过偶然的瞬间获得灵感或发现解决问题的方法的一种认知现象。这个过程通常包括三个主要阶段:准备阶段、潜伏期以及突然的灵感爆发。下面详细说明Eureka原理的实践步骤:1.准备阶段广泛阅读与研究:在这个阶段,研究者需......
  • ansible自动化之playbook剧本【nginx安装为例】
    一、简介roles则是ansible中,playbooks的目录组织结构。将代码或者文件进行模块化,成为roles的文件目录组织结构,易管理,易理解,代码可重用,层次清晰。二、准备目录结构创建所需目录:mkdir-proles/nginx/{files,handlers,tasks,templates,vars}创建所需文件:touchroles/......
  • AES常用的代码示例
    AESAES是对称加密。对称加密是指加密和解密使用相同的密钥的加密算法。非对称加密是指加密和解密使用不同的密钥的加密算法。AES加密解密加密模式,有ECB模式和CBC模式等等,ECB不需要iv偏移量,而CBC需要。密钥,可以自定义。填充方式,有PKCS5、PKCS7、NoPadding。......