配置管理 ansible
配置管理是服务器管理和DevOps的一个非常重要的方面。 “基础架构即代码”方法使您可以轻松地以各种配置部署服务器,并动态扩展组织的资源来满足用户需求。 但是,对于希望自动设置自己的笔记本电脑和台式机(工作站)的个人管理员,他们的关注较少。
Ansible ,如果您需要或需要重新加载计算机,可以轻松还原整个配置。 另外,如果您有多个工作站,则可以使用相同的方法来使每个工作站上的配置相同。 在第一篇文章中,我们将为个人或工作计算机设置基本的配置管理,并为本系列的其余部分奠定基础。 到本文结束时,您将可以立即使用一个可行的设置。 每篇文章将使更多的事情自动化并增加复杂性。
[阅读本系列的第二部分 。]
为什么Ansible?
提供了许多配置管理解决方案,包括Salt Stack,Chef和Puppet。 我更喜欢Ansible,因为它在资源利用率方面较轻,它的语法更易于阅读,并且如果正确利用,它可以彻底改变您的配置管理。 Ansible的轻量级性质与手头主题特别相关,因为我们可能不希望仅运行整个服务器来自动完成笔记本电脑和台式机的设置。 理想情况下,我们需要快速的东西。 需要恢复工作站或在多台计算机之间同步配置时,我们可以使用它来快速启动和运行。 我针对Ansible的特定方法(将在本文中进行演示)非常适合此方法-无需维护服务器。 您只需下载配置并运行它。
我的方法
通常,Ansible是从中央服务器运行的。 它利用清单文件,这是一个文本文件,其中包含我们希望Ansible管理的所有主机及其IP地址或域名的列表。 这对于静态环境非常有用,但对于工作站而言并不理想。 原因是我们真的不知道任何时刻工作站的状态。 也许我关闭了台式机的电源,或者我的笔记本电脑可能被挂起并收藏在书包中。 无论哪种情况,Ansible服务器都会抱怨,因为如果它们处于脱机状态,则无法访问我的计算机。 我们需要的更多是按需方法,而实现这一目标的方法是利用
ansible-pull
。 作为Ansible的一部分的ansible
ansible-pull
命令允许您从Git存储库下载配置并立即应用它。 您无需维护服务器或清单。 您只需运行
ansible-pull
命令,为它提供一个Git存储库URL,其余的工作将为您完成。
入门
首先,在您要管理的计算机上安装Ansible。 一个问题是许多发行版附带较旧的版本。 我可以根据经验告诉您,您肯定会想要最新版本。 新功能经常会被引入Ansible,如果您运行的是旧版本,则在网上找到的示例语法可能无法正常工作,因为它使用的是未安装的版本中未实现的功能。 甚至点发行版也具有许多新功能。
dconf
模块就是一个例子,它是从2.4开始的Ansible新功能。 如果您尝试利用利用此模块的语法,除非您使用的是2.4或更高版本,否则它将失败。 在Ubuntu及其衍生版本中,我们可以使用官方的个人软件包存档( PPA )轻松安装最新版本的Ansible。 以下命令可以解决问题:
sudo apt-get install software-properties-common
sudo apt-add-repository ppa:ansible/ansible
sudo apt-get update
sudo apt-get install ansible
如果您不使用Ubuntu, 请查阅Ansible文档以获取如何在您的平台上获取它。
接下来,我们将需要一个Git存储库来保存我们的配置。 满足此要求的最简单方法是创建一个空的存储库,或者如果有的话,可以使用自己的Git服务器 。 为简单起见,我假设您使用的是GitHub,因此,如果您使用的是其他内容,请调整命令。 在GitHub中创建一个存储库; 您将得到一个类似于以下内容的存储库URL:
将该存储库克隆到本地工作目录(忽略任何抱怨该存储库为空的消息):
现在我们有了一个可以使用的空存储库。 将工作目录更改为位于存储库中(例如
cd ./ansible
),
local.yml
在您喜欢的文本编辑器中创建一个名为
local.yml
的文件。 将以下配置放在该文件中:
- hosts: localhost
become: true
tasks:
- name: Install htop
apt: name=htop
您刚刚创建的文件称为playbook ,而安装
htop
(我随意选择用作示例的软件包)的指令称为play 。 剧本本身是YAML格式的文件,这是一种易于阅读的标记语言。 完整的YAML演练不在本文的讨论范围之内,但是您无需具有熟练的知识就可以熟练使用Ansible。 该配置易于阅读; 通过简单地查看此文件,您可以轻松了解我们正在安装
htop
软件包。 请特别注意最后一行的
apt
模块,该模块仅适用于基于Debian的系统。 如果使用的是Red Hat平台,则可以将其更改为
yum
而不是
apt
如果使用的是Fedora,则可以将其更改为
dnf
。
name
行仅提供有关我们任务的信息,并将显示在输出中。 因此,您需要确保名称具有描述性,以便轻松查找是否需要对多个播放进行故障排除。
接下来,让我们将新文件提交到存储库:
git add local.yml
git commit -m "initial commit"
git push origin master
现在,我们的新剧本应该出现在GitHub上的存储库中。 我们可以使用以下命令应用创建的剧本:
如果正确执行,则应该在系统上安装
htop
软件包。 您可能会在开始时看到一些警告,抱怨缺少库存文件。 很好,因为我们没有使用清单文件(也不需要为此使用)。 在输出的最后,它将为您提供概述。 如果正确安装了
htop
,您应该在输出的最后一行看到
changed=1
。
这项工作如何进行?
ansible-pull
命令使用
-U
选项,该选项需要存储库URL。 为了安全起见,我给它提供了存储库URL的
https
版本,因为我不希望任何主机对存储库进行写访问(默认情况下,
https
是只读的)。 假定使用
local.yml
剧本名称,因此我们不需要为剧本提供文件名-如果它在存储库的根目录中找到它,它将自动运行名为
local.yml
的剧本。 接下来,由于我们正在修改系统,因此在命令前面使用了
sudo
。
让我们继续并将其他程序包添加到我们的剧本中。 我将添加两个其他软件包,使其看起来像这样:
- hosts: localhost
become: true
tasks:
- name: Install htop
apt: name=htop
- name: Install mc
apt: name=mc
- name: Install tmux
apt: name=tmux
我添加了其他播放(任务)来安装另外两个软件包
mc
和
tmux
。 选择安装该剧本的软件包都没有关系; 我只是随意挑选了这些。 您应该安装所有系统都想要的软件包。 唯一需要注意的是,您必须提前知道软件包存在于存储库中以便分发。
在提交并应用此更新的剧本之前,我们应该清理它。 它可以正常工作,但是(老实说)它看起来有点混乱。 让我们尝试一次安装所有三个软件包。 将此内容替换为
local.yml
的内容:
- hosts: localhost
become: true
tasks:
- name: Install packages
apt: name={{item}}
with_items:
- htop
- mc
- tmux
现在看起来更清洁,更高效。 我们使用
with_items
将我们的包裹清单整合到了一起。 如果要添加其他软件包,我们只需添加另一行并带有连字符和软件包名称即可。 考虑
with_items
与
for
循环类似。 我们列出的每个软件包都将被安装。
将我们的新更改提交回存储库:
git add local.yml
git commit -m "added additional packages, cleaned up formatting"
git push origin master
现在,我们可以运行我们的剧本以从新配置中受益:
诚然,这个例子并没有做太多; 它所做的就是安装一些软件包。 您可以仅使用软件包管理器来更快地安装这些软件包。 但是,随着本系列文章的继续,这些示例将变得更加复杂,我们将使更多的事情自动化。 最终,您将创建的Ansible配置将使越来越多的任务自动化。 例如,我使用的那个自动化安装了数百个软件包,设置了
cron
工作 ,处理桌面配置等。
从到目前为止的成就来看,您可能已经看到了大局。 我们要做的就是创建一个存储库,在该存储库中放置一本剧本,然后利用
ansible-pull
命令下拉该存储库并将其应用于我们的计算机。 我们不需要设置服务器。 将来,如果我们想更改配置,我们可以拉下存储库,更新它,然后将其推回到我们的存储库并应用它。 如果我们要设置一台新计算机,则只需安装Ansible并应用配置。
在下一篇文章中,我们将通过
cron
和一些其他项进一步实现此自动化。 同时,我已将本文的代码复制到我的GitLab存储库中,以便您可以根据我的语法进行检查。 我将继续更新代码。
想要更多有关Ansible的信息吗? 在此免费的白皮书中, 了解如何使用Ansible自动化CI / CD管道。
翻译自: https://opensource.com/article/18/3/manage-workstation-ansible
配置管理 ansible