当前位置: 首页 > 科技观察

如何使用Ansible管理工作站配置

时间:2023-03-15 22:50:27 科技观察

在本系列的第一部分中,学习管理笔记本电脑和台式机配置的基础知识。配置管理是服务器管理和DevOps的一个非常重要的方面。“基础架构即代码”方法可以轻松地以各种配置部署服务器,并动态扩展组织的资源以满足用户需求。但是,很少有人关注希望自动设置自己的膝上型电脑和台式机(工作站)的个别管理员。在本系列中,我将向您展示如何使用Ansible自动化您的工作站设置,它允许您在想要或需要重新安装机器时轻松恢复整个配置。另外,如果您有多个工作站,您可以使用相同的方法在每个工作站上进行相同的配置。在第一篇文章中,我们将为个人或工作计算机设置基本的配置管理,并为本系列的其余部分奠定基础。到本文结束时,您将拥有一个工作环境。本系列中的每篇后续文章都实现了更多自动化并增加了复杂性。为什么要使用Ansible?配置管理解决方案有很多,包括SaltStack、Chef和Puppet。我更喜欢Ansible,因为它在资源利用方面更轻量级,它的语法更易于阅读,如果使用得当,它可以彻底改变你的配置管理。Ansible的轻量级特性与这个主题特别相关,因为我们可能不想运行整个服务器只是为了自动化我们的笔记本电脑和台式机的设置。一般来说,我们总是想要快;我们可以使用一些东西来快速启动和运行,在我们需要恢复的工作站之间或在多台机器之间同步我们的配置。我使用Ansible的具体方法(我将在本文中演示)非常适合此目的,而无需维护服务器。您只需下载配置并运行它。我的方法通常,Ansible在中央服务器上运行。它使用清单文件,这是一个文本文件,其中包含我们希望Ansible管理的所有主机及其IP地址或域名的列表。这非常适合静态环境,但不适合工作站。原因是我们并不真正了解我们工作站在任何给定时刻的状态。也许我关闭了台式机,或者笔记本电脑被挂起来放在了我的包里。在任何一种情况下,Ansible服务器都会抱怨,因为如果它们处于离线状态,Ansible无法联系我的机器。我们更需要的是一种按需方法,我们通过利用ansible-pull来实现这一点。ansible-pull命令是一个Ansible命令,它允许您从Git存储库下载配置并立即应用它。您不需要维护服务器或库存;您只需运行ansible-pull命令,给它一个Git存储库URL,它会为您完成剩下的工作。入门首先,在您要管理的机器上安装Ansible。一个问题是许多发行版都附带了旧版本的Ansible。根据经验,您肯定希望获得最新版本。Ansible中经常引入新功能,如果您运行的是旧版本,您在网上找到的示例语法可能无法工作,因为它使用了您安装的版本中未实现的功能。即使是次要版本也有很多新功能。其中一个例子是dconf模块,它是Ansible2.4中的新模块。如果您尝试使用使用此模块的语法,它将失败,除非您使用的是2.4或更新版本。在Ubuntu及其衍生版本中,我们可以使用官方的PersonalPackageArchive(PPA)轻松安装最新版本的Ansible。以下命令将解决此问题:sudoapt-getinstallsoftware-properties-commonsudoapt-add-repositoryppa:ansible/ansiblesudoapt-getupdatesudoapt-getinstallansible如果您不使用Ubuntu,请参阅Ansible的文档了解如何你的平台得到它。接下来,我们需要一个Git存储库来保存我们的配置。满足此要求的最简单方法是在GitHub上创建一个空存储库,或者如果您有Git服务器,则使用您自己的Git服务器。为简单起见,我假设您使用的是GitHub,因此如果您使用的是另一个存储库,请相应地调整命令。在GitHub中创建一个仓库;你最终会得到一个像这样的存储库URL:git@github.com:/ansible.git将该存储库克隆到你的本地工作目录中(忽略存储库为空的任何抱怨消息):gitclonegit@github.com:/ansible.git现在我们有一个可以使用的空存储库。将您的工作目录更改为存储库(例如cd./ansible)并在您喜欢的文本编辑器中创建一个名为local.yml的文件。在这个文件中加入以下配置:-hosts:localhostbecome:truetasks:-name:Installhtopapt:name=htop你刚刚创建的文件叫做playbook,安装htop的说明(我任意选择的一个包作为一个例子)被称为动作游戏。剧本本身是一个YAML格式的文件,这是一种易于阅读的标记语言。对YAML的全面讨论超出了本文的范围,但您不需要专业的理解就能流利地使用Ansible。配置易于阅读;只看这个文件,你就可以很容易地理解我们正在安装的htop包。请注意apt模块的最后一行,它仅在基于Debian的系统上可用。如果您使用的是RedHat平台,则可以将其更改为yum而不是apt,如果您使用的是Fedora,则可以将其更改为dnf。名称行仅提供有关我们任务的信息,并将显示在输出中。因此,您需要确保名称具有描述性,以便在您需要对多个操作进行故障排除时很容易找到。接下来,让我们将新文件提交到我们的存储库:gitaddlocal.ymlgitcommit-m"initialcommit"gitpushoriginmaster现在我们的新剧本应该出现在我们在GitHub上的存储库中。我们可以应用我们使用以下命令创建的剧本:sudoansible-pull-Uhttps://github.com//ansible.git如果操作正确,htop包应该安装在您的系统上。您可能会在开始时看到一些警告,抱怨缺少库存文件。这很好,因为我们没有使用清单文件(我们也不需要)。在输出的末尾,它将概述它做了什么。如果htop安装正确,您应该会在输出的最后一行看到changed=1。它是如何工作的?ansible-pull命令使用-U选项,它需要一个存储库URL。出于安全原因,我为它提供了存储库URL的https版本,因为我不希望任何主机对存储库具有写入权限(默认情况下,https是只读的)。local.yml是默认的playbook名称,所以我们不需要为playbook提供文件名:如果它在存储库的根目录中找到名为local.yml的playbook,它会自动运行它。接下来,由于我们正在修改系统,因此我们在命令前面使用了sudo。让我们继续往我们的剧本中添加更多的包。我将添加两个包,使其看起来像这样:-hosts:localhostbecome:truetasks:-name:Installhtopapt:name=htop-name:Installmcapt:name=mc-name:Installtmuxapt:name=tmux我添加了更多操作(任务)来安装另外两个包,mc和tmux。您选择在此剧本中安装哪些软件包并不重要;我只是随机挑选它们。您应该安装您希望所有系统都拥有的软件包。唯一需要注意的是,您必须先知道存储库中存在该包,然后才能分发它。在我们提交和应用这个更新的剧本之前,我们应该整理一下。它工作得很好,但(老实说)它看起来有点乱。让我们尝试一次安装所有三个包。将local.yml的内容替换为:-hosts:localhostbecome:truetasks:-name:Installpackagesapt:name={{item}}with_items:-htop-mc-tmux现在看起来更干净、更高效。我们使用with_items将我们的包列表组合成一个动作。如果我们想添加其他包,我们只需添加另一行带有连字符和包名称的行。将with_items视为类似于for循环。我们列出的每个包都将被安装。将我们的新更改提交回存储库:gitaddlocal.ymlgitcommit-m"addedadditionalpackages,cleanedupformatting"gitpushoriginmaster现在我们可以运行我们的剧本来接受新的配置:sudoansible-pull-Uhttps://github.com//ansible.git不可否认,这个例子还没有做太多;它所做的只是安装一些软件包。您可以使用包管理器更快地安装这些包。然而,随着本系列的继续,示例将变得更加复杂,我们将自动化更多的事情。最后,您创建的Ansible配置将自动执行越来越多的任务。例如,我自己使用的那个可以自动安装数百个软件包、设置cron作业、处理桌面配置等等。从我们目前所取得的成就来看,您可能已经有了一个想法。我们所要做的就是创建一个存储库,将playbook放入该存储库,然后使用ansible-pull命令拉取该存储库并将其应用到我们的机器上。我们不需要设置服务器。将来,如果我们想更改配置,我们可以拉取那个repo,更新它,然后将它推回我们的repo并应用它。如果我们要设置一台新机器,我们只需要安装Ansible并应用配置。在下一篇文章中,我们将使用cron和其他一些项目进一步自动化它。同时,我已将本文的代码复制到我的GitHub存储库中,以便您可以将我的代码与您的语法进行比较。随着我们的进步,我会不断更新代码。