Ansible 教程
【注】本文译自:https://www.edureka.co/blog/ansible-tutorial/
在阅读本文之前,你应该已经知道,Ansible 构成了 DevOps 认证的关键部分,它是用于配置管理、部署和编排的工具。
本教程的主要内容包括:
- 学习如何编写 Ansible 剧本
- 学习 Ansible 不同模块间的差别
- 学习编写 Ansible Adhoc 命令
- Ansible 动手实践
编写 Ansible 剧本
Ansible 中的剧本以 YAML 格式编写。它是一种人类可读的数据序列化语言。它通常用于配置文件。它也可以用于存储数据的许多应用程序中。
对于Ansible,几乎每个 YAML 文件都以列表开头。列表中的每个项目都是键/值对的列表,通常称为“哈希”或“字典”。因此,我们需要知道如何在 YAML 中编写列表和字典。
列表的所有成员都是以“-”(破折号和空格)开头的相同缩进级别的行。也可能有更复杂的数据结构,例如字典列表或混合字典,其值是列表或两者的混合。
例如,有关edureka的部门列表:
departments:
- marketing
- sales
- solutions
- content writing
- support
- product
下面是一个字典的例子:
-USA
-continent: North America
-capital: Washington DC
-population: 319 million
主机和用户:
对于剧本中的每一项,您都可以选择基础设施中的哪个计算机作为目标,以及由哪个远程用户来完成任务。要将主机包含在 Ansible 清单中,我们将使用主机的 IP 地址。
通常,主机是由冒号分隔的一个或多个组或主机模式的列表。远程用户只是用户帐户的名称。
变量:
Ansible 使用预先定义的变量来使剧本和角色具有更大的灵活性。它们可用于遍历一组给定的值,访问各种信息(例如系统的主机名),并用特定值替换模板中的某些字符串。
Ansible 已经为每个系统定义了丰富的变量集。当 Ansible 在系统上运行时,就会收集有关该系统的所有 facts 和信息并将其设置为变量。
但是有一个命名变量的规则。变量名称应为字母,数字和下划线。变量应始终以字母开头。例如。wamp_21,port5是有效的变量名,而01_port, _server无效。
任务:
任务允许您将配置策略分解为更小的文件。任务包括从其他文件提取。Ansible 的任务和它的英文意思差不多。
例如: Install <package_name>, update <software_name> 等等。
处理程序:
处理程序就像 Ansible 剧本中的常规任务一样,但是仅在 Task 包含 notify 指令并且还指示它已更改某些内容时才运行。例如,如果更改了配置文件,则引用该配置文件的任务可能会通知服务重新启动处理程序。
下面是一个剧本示例,它将启动 Apache httpd 服务器程序:
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
remote_user: root
tasks:
- name: ensure apache is at the latest version
yum: name=httpd state=latest
- name: write the apache config file
template: src=/srv/httpd.j2 dest=/etc/httpd.conf
notify:
- restart apache
- name: ensure apache is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
- name: restart apache
service: name=httpd state=restarted
我希望该示例将使您与我上面提到的剧本组件的描述关联根活佛。如果您仍然不清楚,请不要担心,这些疑问都会在本文后面的部分得到澄清。
这都是剧本。你也将编写这样的剧本。但是 Ansible 也为您提供了各种各样的模块,您可以使用它们。
模块
Ansible 中的模块是幂等的。从 RESTful 服务的角度来看,要使操作(或服务调用)具有幂等性,客户端可以重复进行相同的调用,同时产生相同的结果。 换句话说,发出多个相同的请求与发出单个请求具有相同的效果。
Ansible 中有不同类型的模块:
- 核心模块
- 附加模块
核心模块
这些是 Ansible 核心团队维护的模块,并将始终随 Ansible 一起提供。与“额外”回购中的请求相比,它们还将对所有请求获得更高的优先级。
这些模块的源代码由 Ansible 托管在 GitHub 上的 Ansible-modules-core 中。
附加模块
这些模块当前随 Ansible 一起提供,但将来可能会单独提供。它们也主要由Ansible社区维护。 非核心模块仍然可以完全使用,但是对于问题和请求请求的响应率可能会略低。
随着时间的流逝,流行的“附加”模块可能会升级为核心模块。
这些模块的源代码由 Ansible 在 GitHub 上的 Ansible-modules-extras 中托管。
例如:远程管理模块中的一个附加模块是 ipmi_power 模块,它是远程计算机的电源管理器。它需要 python 2.6 或更高版本以及 pyghmi 才能运行。
您可以通过编写一个 adhoc 命令来使用此模块,就像我在下面编写的一样:
ipmi_power : name ="test.domain.com" user="localhost" password="xyz" state="on"
返回值
Ansible 模块通常返回一个数据结构,该数据结构可以注册到变量中,或者在 Ansible 程序输出时直接看到。每个模块可以记录其自己唯一的返回值。
返回值的一些例子有:
- changed::每当任务进行任何更改时,都将返回一个布尔值。
- failed:如果任务失败,返回一个布尔值。
- msg:返回一个字符串,给用户一个能用消息。
Adhoc 命令
Adhoc 命令是执行某些操作的简单一行命令。 使用 Ansible 命令运行的模块是 adhoc 命令。
如:
ansible host -m netscaler -a "nsc_host=nsc.example.com user=apiuser password=apipass"
上面的 adhoc 命令使用 netscaler 模块来禁用服务器。Ansible 中提供了数百个模块,您可以在其中引用和编写 adhoc 命令。
好了,所有的理论解释都讲过了,让我们通过动手实践来学习 Ansible。
动手实践
我打算写一个剧本,在我的节点/主机上安装 Nginx。
让我们开始吧
第 1 步: 使用 SSH 连接到主机。为此,您需要生成一个公共 SSH 密钥。
使用以下命令:
ssh-keygen
如您在上面的快照中看到的,命令 ssh-keygen 生成了一个 SSH 公钥。
**第 2 步:您的下一个任务是在主机上复制 SSH 公钥。为此,请使用以下命令:
ssh-copy-id -i root@<IP address of your host>
上面的快照显示了将 SSH 公钥复制到主机。
第 3 步:列出清单中主机/节点的 IP 地址。
使用以下命令:
vi /etc/ansible/hosts
这将打开一个 vi 编辑器,您可以在其中列出主机的IP地址。这是您现在的清单。
第 4 步:让我们 ping 一下以确保已建立连接。
上面的快照确认您的控制计算机和主机之间已建立连接。
第 5 步:现在让我们编写一个在主机上安装 Nginx 的剧本。您可以在 vi 编辑器中编写剧本。为此,只需使用以下命令创建您的剧本:
vi <name of your file>.yml
下面的快照显示了我的剧本,以 YAML 格式编写的用于安装 Nginx 的剧本。
剧本的任务在 YAML 中定义为字典列表,并自上而下执行。 如果我们有多个主机,则在继续进行下一个任务之前,将针对每个主机尝试每个任务。每个任务都定义为字典,可以具有多个键,例如“ name”或“ sudo”,它们表示任务的名称以及它是否需要 sudo 特权。
设置一个变量 server_port 用于侦听 TCP 端口 8080 传入的用户请求。
在这里,第一个任务是获取用于安装 Nginx 的必要软件包,然后进行安装。在内部,Ansible 将检查目录是否存在,如果不存在则创建该目录,否则将不执行任何操作。
下一个任务是配置 Nginx。在 Nginx 中,上下文包含配置细节。
在这里,模板是一个可以部署在主机上的文件。但是,模板文件还包含一些参考变量,这些参考变量是从定义为 Ansible 剧本的一部分的变量或从主机收集的 facts 中提取的。包含配置详细信息的 facts 将从源目录中提取,并复制到目标目录中。
这里的处理程序定义了仅在通知任务或状态更改时才执行的动作。在这个剧本中,我们定义了以下通知:重启 Nginx 处理程序,一旦将文件和模板复制到主机,它将重新启动 Nginx。
现在,保存文件并退出。
第 6 步:现在,使用以下命令运行此剧本:
ansible-playbook <name of your file>.yml
我们可以在上面的屏幕截图中看到我们的任务正在执行;正在安装 Nginx。
第 7 步:让我们检查一下我的主机上是否安装了 Nginx。使用以下命令:
ps waux | grep nginx
您可以在上面的屏幕截图中看到不同的进程 ID 3555 和 103316 正在运行,这确保 Nginx 在您的主机上运行。
恭喜!您已经使用 Ansible 剧本在主机上成功部署了 Nginx。
Ansible 教程的更多相关文章
- ansible教程
相关教程: 权威指南:http://www.ansible.com.cn/ 博客教程:https://www.w3cschool.cn/automate_with_ansible/ 视频教程: htt ...
- 马俊龙ansible教程分享
ansible详细介绍和教程链接:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#ansible
- Jenkins 集成Ansible教程
前提条件: 1. 部署Jenkins Server 2. 部署 Ansible Server 一.在Jenkins安装SSH插件 系统管理 -> 插件管理 二.在Jenkins 凭证中添加Ans ...
- Ansible 入门指南 - 学习总结
概述 这周在工作中需要去修改 nginx 的配置,发现了同事在使用 ansible 管理者系统几乎所有的配置,从数据库的安装.nginx 的安装及配置.于是这周研究起了 ansible 的基础用法.回 ...
- it入门之:学会使用Git 分布式版本控制工具
环境:window 工具:git & TortoiseGit 下载安装以及配置环境变量 :略略略 创建Github账户:登录https://github.com/用自己的常用邮箱创建账户,用来 ...
- python自动化运维篇
1-1 Python运维-课程简介及基础 1-2 Python运维-自动化运维脚本编写 2-1 Python自动化运维-Ansible教程-Ansible介绍 2-2 Python自动化运维-Ansi ...
- ansible基本使用教程
转载请注明出处http://www.cnblogs.com/chenxianpao/p/7360349.html 一. 介绍 1. 简介 ansible是新出现的自动化运维工具,基于Pytho ...
- ansible自动化运维详细教程及playbook详解
前言 当下有许多的运维自动化工具( 配置管理 ),例如:Ansible.SaltStack.Puppet.Fabric 等. Ansible 一种集成 IT 系统的配置管理.应用部署.执行特定任务的开 ...
- Ansible安装 入门教程
learn一门新技术咯: ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置 ...
随机推荐
- c++ winapi 在当前程序(local)调用目标程序(target)的函数
GameCheat stackoverflow 如果你的目标程序是x86/x64, 那么当前程序也需要编译为x84/x64 #include <iostream> #include < ...
- nodejs 在windows10中设置动态(视频)壁纸
github 项目地址 node版本 λ node -v v12.16.2 main.js const ffi = require("@saleae/ffi"); const ch ...
- Hive底层原理:explain执行计划详解
不懂hive中的explain,说明hive还没入门,学会explain,能够给我们工作中使用hive带来极大的便利! 理论 本节将介绍 explain 的用法及参数介绍 HIVE提供了EXPLAIN ...
- 模拟web服务器 (小项目) 搭建+部署
模拟web服务器:可以从浏览器中访问到自己编写的服务器中的资源,将其资源显示在浏览器中. 技术选型: corejava 线程池 同任务并发执行 IO流 传递数据 客户端也会像服务端发送数据, 服务器像 ...
- KMP算法,你想知道的都在这里!
简洁 我相信很多人都听说过KMP算法(PS:在上数据结构的时候,这个算法自始至终都没想明白) 大家也知道KMP算法是用来寻找目标子串的算法,但是都没有真正搞懂KMP.之前,我也是如此,我疑惑的有: N ...
- Guava-RateLimiter实现令牌桶控制接口限流方案
一.前言 对于一个应用系统来说,我们有时会遇到极限并发的情况,即有一个TPS/QPS阀值,如果超了阀值可能会导致服务器崩溃宕机,因此我们最好进行过载保护,防止大量请求涌入击垮系统.对服务接口进行限流可 ...
- Python数据读取函数
1.读取mat数据 import scipy.io as sio data_mat = sio.loadmat(data.mat) 官方文档 获取的数据为字典型,其中"data"为 ...
- 将VMware工作站最小化到托盘栏
目录 前言 将VMware最小化到托盘栏的方法 1.下载 Trayconizer 2.解压 trayconizerw.zip 3.创建 VMware 快捷方式 4.修改 VMware 快捷方式 5.运 ...
- QT实现输入框与下拉框提示并可模糊匹配
功能:支持下拉框选择.手动输入更改和模糊匹配 组件:QLineEdit.QComboBox.QCompleter.QStringListModel 一.组件介绍 1.1 QLineEdit QLine ...
- go map嵌套 map的value可以是任意类型
在日常编程中,除了使用内置的数据类型,还会使用一些复杂的自定义数据类型,比如map K为string,V为数组.先了解一下go对map的基本设定: map的key可以是任意内置的数据类型(如int), ...