【ansible】ansible roles

2024-08-26 13:20
文章标签 ansible roles

本文主要是介绍【ansible】ansible roles,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ansible roles 简介

Ansible Roles是一种组织和管理Ansible Playbooks的方法。它们允许将相关的配置和任务分组到一个可重用的单元中,使得代码更加模块化和可维护。

一个Ansible Role包含了一组预定义的变量、任务和文件结构。它可以被其他Playbooks调用和使用,从而实现代码的重用。Roles可以用于定义各种不同的配置,从简单的软件安装和配置到复杂的系统部署。

Roles通常包含以下几个重要的目录和文件:

  • tasks:包含了要执行的任务列表,可以是Ansible模块的调用或者是其他角色的引用。
  • handlers:包含了用于响应特定事件的任务,比如重新启动服务或者重新加载配置文件。
  • vars:包含了角色的变量定义,这些变量可以在角色的其他部分中引用。
  • defaults:包含了角色的默认变量值。
  • templates:包含了配置文件的模板,可以使用Jinja2模板引擎来渲染这些文件。
  • files:包含了需要复制到被管理节点的文件。

使用Roles可以极大地简化Ansible代码的编写和维护工作,提高代码的可读性和可重用性。同时,Roles还使得团队协作更加容易,可以方便地共享和复用角色。

ansible roles 语法

Ansible roles 是一种组织和结构化Ansible playbook的方法。它允许您将任务、变量和模板组织到可重复使用的模块中,以便在多个playbook中重复使用。

下面是一个典型的Ansible role的目录结构:

roles/myrole/tasks/main.ymlvars/main.ymlfiles/myfile.txttemplates/mytemplate.j2handlers/main.ymlmeta/main.yml

在此目录结构中,各个目录的作用如下:

  • tasks/:包含执行任务的YAML文件。
  • vars/:包含变量定义的YAML文件。
  • files/:包含要传输到目标主机的文件。
  • templates/:包含要在目标主机上生成的模板。
  • handlers/:包含处理器定义的YAML文件。
  • meta/:包含角色元数据的YAML文件。

main.yml文件中,您可以定义要在角色中执行的任务、变量和文件。

通过使用role,您可以在playbooks中使用include_roleroles关键字来导入并使用role。

以下是一个使用role的示例:

- name: Example playbookhosts: webroles:- myrole

上面的示例将导入名为myrole的role,并在web组的主机上运行。

1、使用ansible playbook部署httpd,要求httpd.conf由模板生成,对应的servername改为受控端IP

cd /etc/ansible/roles
ansible-galaxy init httpd

主yaml rolets.yml

---
- hosts: h1remote_user: rootroles:- httpd
---
# tasks file for httpd
- name: install httpd packageyum: name={{package}} state=latest
- name: install configure file#使用template模板template: src=/etc/ansible/httpd.conf.j2 dest=/etc/httpd/conf/httpd.confnotify:- restart httpd
- name: create root dirfile: path=/etc/httpd/htdocs state=directory
- name: start httpd serverservice: name={{service}} enabled=true state=started
---
# handlers file for httpd
- name: restart httpdservice: name={{service}} state=restarted
---
# vars file for httpd
package: httpd
service: httpd
......
#/etc/ansible/roles/httpd/templates/httpd.conf.j2 95行
ServerName {{ansible_ens33.ipv4.address}}:80
......

2、编写一个playbook,当模板任务执行完成时触发一个debug任务

 ansible-galaxy init debug823
---
# tasks file for debug823
- name: copy filecopy: content: |#!/bin/bashecho "Hello World"dest: /tmp/hello.shmode: '0755'- name: run scriptcommand: /tmp/hello.shnotify: success
---
# handlers file for debug823
- name: successdebug:msg: "This is a success message"

/etc/ansible/debugtestplaybook.yml

---
- hosts: h1remote_user: rootroles:- debug823

3、编写一个复制一文件到被控端的playbook

echo 123 > /etc/ansible/roles/debug823/files/testcopy.txt
---
# tasks file for debug823
- name: copy filecopy: src: testcopy.txtdest: /tmp/testcopy.txtmode: '0644'owner: rootgroup: root- name: debug taskdebug:msg: "This is a debug message"

4、编写一个playbook,部署前后端分离项目

192.168.99.132 nginx
192.168.99.144 java
192.168.99.177 mysql

主playbook yaml

- name: nginx installhosts: nginxroles:- nginx- name: java installhosts: javaroles:- java- name: mysql installhosts: mysqlroles:- mysql

nginx role

---
# tasks file for nginx
- name: Install epel-releaseyum:name: epel-releasestate: present- name: Install nginxyum:name: nginxstate: present- name: Start nginx serviceservice:name: nginxstate: started- name: Enable nginx serviceservice:name: nginxenabled: yes- name: copy project bmcopy:src: bmdest: /usr/share/nginx/html/mode: 0644owner: nginxgroup: nginx- name: Configure nginxtemplate:src: nginx.conf.j2dest: /etc/nginx/nginx.confnotify:- restart nginx

nginx.conf.j2

  ……server {listen 80; server_name {{ansible_ens33.ipv4.address}};location / {root /usr/share/nginx/html/bm;index index.html index.htm;}   location /bm {proxy_pass http://java:8090;}           ……

java role

---
# tasks file for java
- name: copy jdkcopy:src: jdk-8u371-linux-x64.rpmdest: /tmp/jdk-8u371-linux-x64.rpm- name: install jdkyum:name: /tmp/jdk-8u371-linux-x64.rpmstate: present- name: copy carton.jarcopy:src: carbon.jardest: /opt/carbon.jarmode: 0755- name: copy hostscopy:src: /etc/hostsdest: /etc/hosts- name: start carbon.jarcommand: nohup java -jar /opt/carbon.jar &register: resultasync: 3600poll: 0

mysql role

---
# tasks file for mysql- name: install mariadbyum:name: mariadb-serverstate: present- name: start mariadbservice:name: mariadbstate: started- name: copy carbon.sql to /tmpcopy: src=carbon.sql dest=/tmp/carbon.sql- name: run init.expscript: init.exp- name: execute SQLshell: mysql -uroot -p{{mysql_password}} < /tmp/carbon.sql

init.exp

#!/usr/bin/expect
set timeout 30
spawn mysql -uroot -p
expect {"*password*" {send "\r"}
}
expect ">*"
send "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('root');\r"
expect ">*"
send "create user 'root'@'%' identified by 'root';\r"
expect ">*"
send "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';\r"
expect ">*"
send "flush privileges;\r"
expect ">*"
send "quit\r"
expect eof

这篇关于【ansible】ansible roles的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108680

相关文章

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

ansible资料

ansible系列教程-强烈推荐看完ansible官方编写的例子ansible_uiJenkins配置ansiblegalaxy官方文档中文教程1中文教程2playbook进阶YAML语法fabric编写的自动化部署

使用Ansible进行多云环境的自动化部署与管理

使用Ansible进行多云环境的自动化部署与管理 引言 随着云计算技术的飞速发展,多云环境已经成为现代企业IT架构的主流选择。多云环境不仅提供了更高的灵活性和可用性,还能有效降低供应商锁定的风险。然而,多云环境的管理和部署复杂性也随之增加,传统的手动操作已经无法满足需求。Ansible作为一种简单而强大的自动化工具,可以帮助企业在多云环境中实现自动化部署和管理,显著提高效率并减少人为错误。

企业级Ansible自动化运维项目案例:实战与技巧

在企业级的IT运维中,自动化已成为提高效率、减少人为错误和保证服务一致性的关键手段。Ansible作为一种简单但功能强大的自动化工具,广泛应用于配置管理、应用程序部署、任务自动化和IT编排。本文将通过一个企业级的Ansible自动化运维项目案例,详细介绍如何从零开始设计、实施和优化自动化解决方案,并探讨其中的实战技巧。 一、项目背景 某大型企业拥有多个数据中心和数百台服务器,涉及不同的操作系统

Ansible与Docker集成:实现容器化运维自动化

Ansible与Docker集成:实现容器化运维自动化 在现代 DevOps 和云原生环境中,Ansible 和 Docker 是两种非常受欢迎的工具。Ansible 专注于配置管理和任务自动化,而 Docker 则通过容器化技术实现应用的轻量级隔离和部署。将 Ansible 和 Docker 结合使用,可以大幅度提高运维的效率,实现更灵活的容器化运维自动化。本指南将详细探讨如何将 Ansibl

Ansible剧本编写指南:从简单任务到复杂自动化的实现

Ansible剧本编写指南:从简单任务到复杂自动化的实现 Ansible 是一个流行的开源自动化工具,被广泛用于配置管理、应用部署、任务自动化以及 IT 基础设施的编排。它的核心是简单且易于学习的 YAML 格式,使用户能够编写可重用、可维护的剧本(Playbooks)来实现各种自动化任务。本指南将深入探讨 Ansible 剧本编写,从简单任务开始,逐步过渡到复杂的自动化实现。 目录 Ans

09-03 周二 ansible部署和节点管理过程

09-03 周二 ansible部署和节点管理过程 时间版本修改人描述2024年9月3日10:08:58V0.1宋全恒新建文档, 简介  首先要找一个跳板机,来确保所有的机器都可以访问。然后我们围绕ansible来搭建环境,方便一键执行所有的命令,主要的任务是将这10个节点均挂载NAS服务器,添加我们的harbor服务器, ansible介绍  ansible/ansible at

Ansible自动化运维入门:从基础到实践的全面指南

Ansible自动化运维入门:从基础到实践的全面指南 随着IT基础设施的日益复杂,自动化运维已经成为提升效率、减少人为错误、优化资源的重要手段。在众多自动化工具中,Ansible因其简洁、易用、无代理(Agentless)等特性,备受运维工程师的青睐。本指南将详细介绍Ansible的基础知识和实践应用,帮助你从零开始掌握Ansible自动化运维的精髓。 目录 什么是Ansible?Ansib

使用Ansible实现高效服务器配置管理的最佳实践

使用Ansible实现高效服务器配置管理的最佳实践 在现代IT运维中,服务器的配置管理是一个关键环节。传统的手动配置方法不仅耗时耗力,而且容易出错,特别是在规模庞大的服务器集群中,配置的一致性难以保证。Ansible作为一款无代理的自动化运维工具,通过其易用性和灵活性,提供了一种高效的服务器配置管理解决方案。本指南将从基础到高级应用,详细介绍使用Ansible实现高效服务器配置管理的最佳实践。