Ansible 包含与导入的用法,角色的架构,系统角色的使用

1.包含和导入文件


1.1管理大型playbook


如果playbook很长或很复杂,我们可以将其分成较小的文件以便于管理。可采用模块化方式将多个playbook组合为一个主要playbook,或者将文件中的任务列表插入play。这样可以更轻松地在不同项目中重用play或任务序列。

1.2包含或导入文件


Ansible可以使用两种操作将内容带入playbook。可以包含内容,也可以导入内容。

包含内容是一个动态操作。在playbook运行期间,Ansible会在内容到达时处理所包含的内容。

导入内容是一个静态操作。在运行开始之前,Ansible在最初解析playbook时预处理导入的内容。

1.2导入playbook


import_playbook指令允许将包含play列表的外部文件导入playbook。换句话说,可以把一个或多个额外playbook导入到主playbook中。

由于导入的内容是一个完整的playbook,因此import_playbook功能只能在playbook的顶层使用,不能在play内使用。如果导入多个playbook,则将按顺序导入并运行它们。

导入两个额外playbook的主playbook的简单示例如下所示:

- name: Prepare the web server
  import_playbook: web.yml
  
- name: Prepare the database server
  import_playbook: db.yml

还可以使用导入的playbook在主playbook中交替play。

- name: Play 1
  hosts: localhost
  tasks:
    - debug:
      msg: Play 1
      
- name: Import Playbook
  import_playbook: play2.yml

1.4导入和包含任务

可以将任务文件中的任务列表导入或包含在play中。任务文件是包含一个任务平面列表的文件:

[root@localhost ~]# cat webserver_tasks.yml
 - name: Installs the httpd package
  yum:
    name: httpd
    state: latest
    
 - name: Starts the httpd service
  service:
    name: httpd
    state: started

1.4.1导入任务文件

可以使用import_tasks功能将任务文件静态导入playbook内的play中。导入任务文件时,在解析该playbook时将直接插入该文件中的任务。Playbook中的import_tasks的位置控制插入任务的位置以及运行多个导入的顺序。

---
 - name: Install web server
  hosts: webservers
  tasks:
 - import_tasks: webserver_tasks.yml

导入任务文件时,在解析该playbook时将直接插入该文件中的任务。由于import_tasks在解析playbook时静态导入任务,因此对其工作方式有一些影响。

使用import_tasks功能时,导入时设置的when等条件语句将应用于导入的每个任务
无法将循环用于import_tasks功能
如果使用变量来指定要导入的文件的名称,则将无法使用主机或组清单变量
1.4.2包含任务文件
可以使用include_tasks功能将任务文件动态导入playbook内的play中。
 

---
 - name: Install web server
  hosts: webservers
  tasks:
 - include_tasks: webserver_tasks.yml

2.利用角色简化playbook
2.1描述角色(roles)的结构
2.1.1角色定义
Ansible的roles提供了一种方法,让用户能以通用的方式更加轻松地重复利用Ansible代码。我们可以在标准化目录结构中打包所有任务、变量、文件、模板,以及调配基础架构或部署应用所需的其他资源。只需通过复制相关的目录,将角色从一个项目复制到另一个项目。然后,只需从一个play调用该角色就能执行它。
简单来说roles是指一段写好的通用的playbook代码
编写完毕后,可以从playbook中向角色传递调整其行为的变量,设置所有站点相关的主机名、IP地址、用户名,或其他在本地需要的具体详细信息。roles的作者也可以确保在选择不在play中设置变量值时,为这些变量设定合理的默认值。
2.1.2ansible角色具有下列优点:
角色可以分组内容,从而与他人轻松共享代码
可以编写角色来定义系统类型的基本要素:web服务器、数据库服务器、Git存储库,或满足其他用途
角色使得较大型项目更容易管理
角色可以由不同的管理员并行开发
2.1.3获取角色的方法
通过https://galaxy.ansible.com/网站获取由社区提供支持的许多角色
安装rhel-system-roles软件包,这个安装包里面包含了一些系统默认自带的roles
 

[root@master bianliang]# yum -y install rhel-system-roles
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
警告:加载 '/etc/yum.repos.d/CentOS-Base.repo' 失败,跳过。
警告:加载 '/etc/yum.repos.d/CentOS8-Base-163.repo' 失败,跳过。
CentOS-8 - Base - mirrors.aliyun.com                                                                     16 kB/s | 3.9 kB     00:00    
CentOS-8 - Base - mirrors.aliyun.com                                                                    1.9 MB/s | 4.5 MB     00:02    
CentOS-8 - Extras - mirrors.aliyun.com                                                                  5.4 kB/s | 1.5 kB     00:00    
CentOS-8 - AppStream - mirrors.aliyun.com                                                                23 kB/s | 4.3 kB     00:00    
CentOS-8 - AppStream - mirrors.aliyun.com                                                               1.8 MB/s | 8.3 MB     00:04    
Extra Packages for Enterprise Linux Modular 8 - x86_64                                                  7.6 kB/s | 9.8 kB     00:01    
Extra Packages for Enterprise Linux Modular 8 - x86_64                                                  425 kB/s | 927 kB     00:02    
Extra Packages for Enterprise Linux 8 - x86_64                 

2.1.4 查看系统中有哪些角色可以使用

[root@master bianliang]# ansible-galaxy list
# /usr/share/ansible/roles
- linux-system-roles.certificate, (unknown version)
- linux-system-roles.crypto_policies, (unknown version)
- linux-system-roles.ha_cluster, (unknown version)
- linux-system-roles.kdump, (unknown version)
- linux-system-roles.kernel_settings, (unknown version)
- linux-system-roles.logging, (unknown version)
- linux-system-roles.metrics, (unknown version)
- linux-system-roles.nbde_client, (unknown version)
- linux-system-roles.nbde_server, (unknown version)
- linux-system-roles.network, (unknown version)
- linux-system-roles.postfix, (unknown version)
- linux-system-roles.selinux, (unknown version)
- linux-system-roles.ssh, (unknown version)
- linux-system-roles.sshd, (unknown version)
- linux-system-roles.storage, (unknown version)
- linux-system-roles.timesync, (unknown version)
- linux-system-roles.tlog, (unknown version)
- rhel-system-roles.certificate, (unknown version)
- rhel-system-roles.crypto_policies, (unknown version)
- rhel-system-roles.ha_cluster, (unknown version)
- rhel-system-roles.kdump, (unknown version)
- rhel-system-roles.kernel_settings, (unknown version)
- rhel-system-roles.logging, (unknown version)
- rhel-system-roles.metrics, (unknown version)
- rhel-system-roles.nbde_client, (unknown version)
- rhel-system-roles.nbde_server, (unknown version)
- rhel-system-roles.network, (unknown version)
- rhel-system-roles.postfix, (unknown version)
- rhel-system-roles.selinux, (unknown version)
- rhel-system-roles.ssh, (unknown version)
- rhel-system-roles.sshd, (unknown version)
- rhel-system-roles.storage, (unknown version)
- rhel-system-roles.timesync, (unknown version)
- rhel-system-roles.tlog, (unknown version)
# /etc/ansible/roles

2.1.5查看帮助

[root@master bianliang]# cat /usr/share/doc/rhel-system-roles/timesync/README.md 
timesync
========
[![Travis Build Status](https://travis-ci.org/linux-system-roles/timesync.svg?branch=master)](https://travis-ci.org/linux-system-roles/timesync)

This role installs and configures an NTP and/or PTP implementation to operate
as an NTP client and/or PTP slave in order to synchronize the system clock with
NTP servers and/or grandmasters in PTP domains. Supported NTP/PTP
implementations are chrony, ntp (the reference implementation) and linuxptp.

Warning
-------

.........

2.2检查ansible角色结构


Ansible角色由子目录和文件的标准化结构定义。顶级目录定义角色本身的名称。文件整理到子目录中,子目录按照各个文件在角色中的用途进行命名,如tasks和handlers。files和templates子目录中包含由其他YAML文件中的任务引用的文件。

my_role/		:具体的角色项目名称,比如 nginx、tomcat、php(自由设置)
├── defaults		:用于为当前角色设定默认变量,此目录应当包含一个 main.yml 文件
│   └── main.yml	:main.yml,类似代码中的主函数,进行统一管理
├── files		:用来存放由 copy 模块或 script 模块等模块调用的文件
├── handlers		:用于定义此角色中触发条件时执行的动作,此目录应当包含一个
main.yml 文件		
│   └── main.yml
├── meta		:用于定义此角色的特殊设定及其依赖关系,此目录应当包含一个
main.yml 文件
│   └── main.yml
├── README.md		:说明文件
├── tasks		:用于定义当前角色的任务列表,此目录应当包含一个 main.yml 文件
│   └── main.yml
├── templates		:用来存放 jinjia2 模板,template 模块会自动在此目录中寻找jinjia2 模板文件
├── tests		:用于存放测试 role 本身功能的 playbook 和主机定义文件,在开发测试阶段比较常用,此目录应当包含一个 main.yml 文件和自身资源设定 invetory
│   ├── inventory
│   └── test.yml
└── vars		:用于定义此角色用到的变量,此目录应当包含一个 main.yml 文件

注意:除tests子目录外,其他的所有子目录下的YAML文件必须以main命名。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值