如何写一个可行的剧本

Ansible 是什么?

Ansible 是一种开源工具,可以自动配置和管理系统。任务范围从简单到高度复杂。该工具精通模块化,并要求最低的系统需求。

为什么使用 Ansible ?

简单的: Ansible 使用 YAML 中编写的简单语法 playbooks。YAML 是一种人类可读的数据序列化语言。这是非常简单的。因此,不需要特殊的编码技能,即使是您的 IT 组织中不知道什么是可能的人也可以阅读剧本并理解正在发生的事情。

无代理:

最后,Ansible 是完全无代理的。您不需要在希望自动化的客户端系统或主机上安装代理/软件或其他防火墙端口。您不必单独设置管理基础设施,其中包括管理整个系统、网络和存储。

强大和灵活的:

Ansible 有强大的功能,可以让你建模甚至是最复杂的 IT 工作流。在这方面,Ansible batteries 包括 approach (这意味着哲学是自给自足,开箱即用的准备使用,一切都需要)可以管理基础设施,网络,操作系统,和服务,你已经使用 Ansible 提供了数以百计的模块来管理他们

高效率: 服务器上没有额外的软件意味着应用程序有更多的资源。另外,由于 Ansible 模块通过 JSON 工作,Ansible 可以通过你已经知道的编程语言编写的模块进行扩展.

Ansible模块

Ansible 引入模块作为软件的基本构建模块。模块是能够工作的小程序。它主要被推到目标机器上。在目标机器中完成这些工作后,将删除该模块。 在编写模块时,您应该记住的一件事是,它们是非常细粒度和特定的。 每个都包含简单的特定任务,如复制文件,启动 Nginx 服务器。默认情况下,Ansible 提供了各种各样的模块。你可以在官方网站上找到它。

Ansible 剧本

可执行剧本是按一定顺序分组的多个模块。下面给出的是一个具有单个模块的可运行剧本示例

- hosts: databases
  remote_user: root
   tasks:
  - name: rename table foo to bar			
   	postgresql_table:		
	table: foo			
	rename: bar			

  - name: set owner to someuser			
	postgresql_table:		
	name: foo		
	owner: someuser			

  - name: Trunate table foo		
	postgresql_tables:		
	name: foo			
	truncate: yes			

上面的剧本将完成以下任务

1. 重命名一个 PostgreSQL 表

2. 设置表的所有者

3. 截断表

postgresql_table : 模块名称

- name :对任务进行描述

hosts: 应该在其中执行任务的组

remote user: 目标计算机中的用户名

tasks: 模块按任务分组

下面的例子在一个剧本中有多个模块

- hosts: webserver
  remote_user: root
   tasks:
  - name: create directory for nginx			
   	file:				
	path: /path/to/nginx/dir			
	state: bar		

  - name: Install nginx latest version
	yum:				
	name: nginx		
	state: latest			

  - name: start nginx
	service:			
	name: nginx			
	state: started			

在这里,我们为每个任务定义了三个模块

file : 模块,用于创建目录

yum: 用于安装 Nginx 的模块

service: 模块,用于启动服务

上面的剧本将完成以下任务

1. 创建一个 Nginx 目录

2. 使用 yum 安装 Nginx

3. 启动 Nginx 服务

playbook 中的另一个重要术语是变量,我们可以为循环值传递变量。只需在双花括号内调用变量。

下面是剧本中变量的一个例子.

- hosts: databases
  remote_user: root
  vars:
    tablename: foo
    tableowner: someuser
   tasks:
  - name: rename {{tablename}} foo to bar			
   	postgresql_table:		
	table: {{tablename}}			
	rename: bar			

  - name: set owner to someuser			
	postgresql_table:		
	name: {{tablename}}		
	owner: someuser			

  - name: Trunate table 	
	postgresql_tables:		
	name: {{ tablename}}			
	truncate: yes			

整个块定义了哪个任务应该从哪个主机执行,哪个用户被称为一个 play .我们可以在一个剧本里有多个剧本。

- hosts: databases
  remote_user: root
   tasks:
  - name: rename table foo to bar			
   	postgresql_table:		
	table: foo			
	rename: bar			

  - name: set owner to someuser			
	postgresql_table:		
	name: foo		
	owner: someuser			

  - name: Trunate table foo		
	postgresql_tables:		
	name: foo			
	truncate: yes

- hosts: webserver
  remote_user: root
   tasks:
  - name: create directory for nginx			
   	file:				
	path: /path/to/nginx/dir			
	state: bar		

  - name: Install nginx latest version
	yum:				
	name: nginx		
	state: latest			

  - name: start nginx
	service:			
	name: nginx			
	state: started

在上面的例子中,我们有一个关于 webserver 的剧本和一个关于数据库的剧本。它们完全独立。您可以使 name 参数为每个 play 命名。

Ansible 库存列表

Ansible Inventory 列表是我们定义目标机器和组的地方。Ansible 有主机文件,用作库存列表。

下面给出的是一个主机文件的示例。

10.100.100.100

[webservers]
10.25.0.1
102.26.13.1

[databases]
example.com
example3.com

您可以在 hosts 文件中使用目标计算机的 IP 或主机名。

结论

希望这篇文章能帮助你对 [ansible playbooks](https://thestack.net/2020/04/how to configure-ansible-on centos-7) 以及 playbooks 如何工作有一个基本的理解。 你在寻找便宜的虚拟主机服务提供商吗?那这就是你结束搜寻的最后一个目的地了。我们在堆栈提供优质的 wordpress 托管,混合智能服务器托管,SEO 专用服务器托管和 托管虚拟私有服务器 在最佳的价格。那么,你还在等什么?与我们联系,了解更多。

关联文章