首页 > 其他分享 >ansible剧本-roles(1)

ansible剧本-roles(1)

时间:2023-05-11 16:01:18浏览次数:44  
标签:haproxy httpd tasks roles ansible 剧本 yml

ansible剧本-roles(1)

原创 Cloud研习社 Cloud研习社 2023-05-09 07:32 发表于山东 收录于合集 #一站式教程233个 #ansible35个 #linux231个 #云计算220个 #自动化3个 图片图片

教程每周二、四、六更新

图片roles用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令引入即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制。roles一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。主要使用场景代码复用度较高的情况下。假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成haproxy服务器,第三个要配置成MySQL(mariadb)服务器。我们如何来定义playbook?第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建haproxy。这些个play定义在playbook中比较麻烦,将来也不利于模块化调用,不利于多次调用。比如说后来又加进来一个主机,这第3个主机既是httpd服务器,又是haproxy服务器,我们只能写第3个play,上面写上安装httpd和haproxy。这样playbook中的代码就重复了。为了避免代码重复,roles能够实现代码重复被调用。定义一个角色叫httpd,第二个角色叫haproxy。那么调用时如下来调用:
- hosts: web01
  role:
    - httpd
- hosts:web02
  role:
    - haproxy
- hosts:web03
  role:
    - httpd
    - haproxy

多个role的时候也可以写成如下的样式:

- hosts: web03
  roles:
    - { role: httpd }
    - { role: haproxy }

我们来看一个项目的目录结构:

common.yml
httpd-install.yml
haproxy-install.yml
roles/
    common/
        tasks/
        handlers/
        library/
        files/
        templates/
        vars/
        defaults/
        meta/
    httpd/
        tasks/
        defaults/
        meta/
    haproxy/
        tasks/
        defaults/
        meta/
默认情况下,Ansible会在roles中的每个目录中查找main.yml文件,以便找到相关内容:- tasks/main.yml角色执行的主要任务列表- handlers/main.yml 处理程序,可以在此角色内部或外部使用。- library/my_module.py模块,可以在此角色中使用- files/main.yml角色需要用到的文件- templates/main.yml角色需要用到的模板文件,即template模块需要用到的jinjia2文件。- vars/main.yml一般变量- defaults/main.yml角色的默认变量。这些变量具有所有可用变量中最低的优先级,并且可以很容易地被任何其他变量覆盖。所以生产中我们一般不在这里定义变量- meta/main.yml用于定义此角色的元数据信息及其依赖关系上面的目录结构和目录名字是固定格式,对于目录名字不能修改,但是我们可以在某些目录中添加其他YAML文件。例如,可以将特定于平台的任务放在单独的文件中,并在tasks/main.yml文件中引用它们:
# roles/httpd/tasks/main.yml
- name: Install the correct web server for RHEL
  import_tasks: redhat.yml
  when: ansible_facts['os_family']|lower == 'redhat'

- name: Install the correct web server for Debian
  import_tasks: debian.yml
  when: ansible_facts['os_family']|lower == 'debian'

# roles/httpd/tasks/redhat.yml
- name: Install web server
  ansible.builtin.yum:
    name: "httpd"
    state: present

# roles/httpd/tasks/debian.yml
- name: Install web server
  ansible.builtin.apt:
    name: "apache2"
    state: present
common.yml、httpd-install.yml、haproxy-install.yml是调用role的playbook文件,这些文件名是可以更改的,并且在目录结构上和roles文件夹是平级的,使用的时候ansible会从roles文件夹下查找(优先)或者从配置文件指定的roles中查找。下一节我们通过一个实验来实践role的用法。

 

雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!

图片

推荐阅读

 

《一站式教程之集群架构》:

 

ansible剧本-变量的定义(2)

ansible - 模板template

ansible剧本-when

ansible剧本-循环

ansible剧本-template中的for循环和if的使用(1)

ansible剧本-template中的for循环和if的使用(2)

 

 

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

Cloud研习社 为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等 188篇原创内容 公众号

图片


图片

 

Cloud研习社

赞赏二维码喜欢作者

收录于合集 #一站式教程  233个 上一篇ansible剧本-template中的for循环和if的使用(2)下一篇ansible剧本-roles(2) 阅读 67    

标签:haproxy,httpd,tasks,roles,ansible,剧本,yml
From: https://www.cnblogs.com/cherishthepresent/p/17391284.html

相关文章

  • ansible剧本-roles(2)
    ansible剧本-roles(2)原创 Cloud研习社 Cloud研习社 2023-05-1107:31 发表于山东收录于合集#一站式教程233个#ansible35个#linux231个#云计算220个#自动化3个教程每周二、四、六更新下面我们来实践一下:使用roles方式安装httpd服务:准备环境:先把前面练习用的......
  • Ansible-常用模块
    ping模块ping模块,这个很好理解,跟我们常用的ping命令是一样的,用来检测与目标主机的连通性[root@master~]#ansible192.168.142.45-mping192.168.142.45|SUCCESS=>{"ansible_facts":{"discovered_interpreter_python":"/usr/bin/python"},......
  • 使用Ansible实现自动化运维的一些技巧
     提示:本文要求读者有一定的Ansible使用经验   最近一年才有机会在生产环境上使用Ansible。用的过程中,想把一些小技巧记录下来,避免自己忘记。如果能帮助到其他同学就更好了。如果有同学指出有更好的方法,就更更好了。技巧1:校验你的模板文件是否正确通常我们会使用t......
  • 4.ansible常用模块03
    ansible常用模块user模块:user模块可以实现linux系统账户管理#创建用户[root@db04ansible]#ansibletest-muser-a"name=tuser1"#创建用户、用户id、用户组、家目录[root@db04ansible]#ansibletest-muser-a"name=tuser2uid=1010group=admgroups=daemon......
  • Ansible快速入门(下)
    6.Ansible常用模块ansible有着诸多的模块,虽然模块众多,但最为常用的模块也就20-30个左右;6.1command模块功能:在远程主机执行Shell命令;此为默认模块,可忽略-m选项;注意:不支持管道命令|参数选项含义chdirchdir/opt执行ansible时,切换到指定的目录creates......
  • 2.ansible常用的模块01
    1.模块?模块实际上就是脚本,是ansible调用的对象,主要是用来通过调用它去远程执行某些命令功能。2.常用的模块2.1shell模块ansible默认的模块是command,其中shell模块与command模块区别:1.command模块的命令不启动shell,直接通过ssh执行命令......
  • Ansible-受控主机配置并测试连通性
    1.Ansible配置文件[root@masterhome]#ansible--versionansible2.9.27configfile=/etc/ansible/ansible.cfgconfiguredmodulesearchpath=[u'/root/.ansible/plugins/modules',u'/usr/share/ansible/plugins/modules']ansiblepython......
  • Ansible-安装
    第一步:安装我们的epel扩展源yum-yinstallepel-release我这里会报/var/run/yum.pid已被锁定,如果没有直接进行下一步[root@masterhome]#yum-yinstallepel-release已加载插件:fastestmirror,langpacks/var/run/yum.pid已被锁定,PID为22410的另一个程序正在运行。......
  • ansible基础使用
    简述ansible是新出现的自动化运维工具,基于Python开发集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点实现了批量系统配置、批量程序部署、批量运行命令等功能,无客户端ansible是基于paramiko开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批量......
  • 自动化运维工具Ansible
    一、ansible是什么?ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于paramiko开发的,并且基于模块化工作,本身没有批量部署的能力。真正具有批......