使用Ansible在Mac上自动安装软件(附代码)

852 阅读3分钟

在这个演示中,我使用Ansible在macOS上安装了我必备的写作工具之一Asciidoctor。

Getting started with Perlbrew

在大多数系统中,有几种安装软件的方法。你使用哪一种取决于你要安装的应用程序的来源。一些软件以可下载的向导形式出现,引导你完成安装过程,而另一些则是你直接下载并立即运行的文件。

在macOS上,整个开源应用程序库可以从Unix命令中获得,如HomebrewMacPorts。使用命令进行软件安装的好处是,你可以将它们自动化,我最喜欢的自动化工具是Ansible。将Ansible与Homebrew结合起来是一种高效且可重复的方式来安装你喜欢的开源应用程序。

本文演示了如何使用Ansible在macOS上安装我的必备写作工具之一Asciidoctor。Asciidoctor是一个开源的文本处理器,这意味着它可以接收以特定格式(在这里是Asciidoc)编写的文本,并将其转换为其他流行的格式(如HTML,PDF等)进行发布。Ansible是一个开源的、无代理的、易于理解的自动化工具。通过使用Ansible,你可以简化和自动化你的日常工作。

注意:虽然这个例子使用的是macOS,但这些信息适用于与Ansible兼容的所有平台上的各种开源软件(包括Linux、Windows、Mac和BSD)。

安装Ansible

你可以使用pip ,即Python软件包管理器来安装Ansible。首先,安装pip

$ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
$ python ./get-pip.py

接下来,使用pip 安装Ansible。

$ sudo python -m pip install --user ansible

使用Homebrew安装Ansible

另外,你也可以使用Homebrew软件包管理器来安装Ansible。如果你已经用pip 安装了Ansible,请跳过这一步,因为你已经达到了同样的效果。

$ brew install ansible

配置Ansible

要设置Ansible,首先必须创建一个清单文件,指定希望Ansible脚本(称为playbook)在哪台或哪几台计算机上操作。

在终端或使用你喜欢的文本编辑器创建一个库存文件。在终端中,键入以下内容,将your-host-name 替换为你的计算机名称。

$ cat << EOF >> inventory
[localhost\]
your-host-name
EOF

如果你不知道你的计算机的主机名,你可以使用hostname 命令得到它。或者,进入苹果菜单,打开系统偏好设置,然后点击共享。你的电脑主机名就在 "共享"偏好窗格顶部的电脑名称下面。

使用Ansible安装Asciidoctor

在这个例子中,我只在我正在工作的电脑上安装应用程序,也就是所谓的localhost。首先,创建一个playbook.yml 文件并复制以下内容。

- name: Install software
  hosts: localhost 
  become: false 
  vars:
    Brew_packages: 
      - asciidoctor 
    install_homebrew_if_missing: false

在第一个YAML序列中,你给playbook命名(Install software ),提供目标(localhost ),并确认不需要管理权限。你还创建了两个变量,你可以在后面的游戏手册中使用:Brew_packagesinstall_homebrew_if_missing

接下来,创建一个YAML映射,名为pre_tasks ,其中包含确保Homebrew本身安装在你运行游戏手册的电脑上的逻辑。通常情况下,Ansible可以验证一个应用程序是否已安装,但当该应用程序是帮助Ansible首先做出判断的软件包管理器时,你必须手动完成它。

pre_tasks:
      - name: Ensuring Homebrew Is Installed
        stat:
          path: /usr/local/bin/brew
        register: homebrew_check

      - name: Fail If Homebrew Is Not Installed and install_homebrew_if_missing Is False
        fail:
          msg: Homebrew is missing, install from http://brew.sh
        when:
          - not homebrew_check.stat.exists
          - not install_homebrew_if_missing

      - name: Installing Homebrew
        shell: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
        when:
          - not homebrew_check.stat.exists
          - install_homebrew_if_missing

最后,创建一个名为tasks 的YAML映射,其中包含对Homebrew模块的调用(这是Ansible的一个内置模块),以便在Asciidoctor尚未存在的情况下安装它。

  tasks:
    - name: Install Asciidoctor
      homebrew: 
        name: asciidoctor
        state: present

运行Ansible playbook

你可以使用ansible-playbook 命令来运行Ansible playbook。

$ ansible-playbook -i inventory playbook.yml

-i 选项指定了你在设置Ansible时创建的inventory 文件。你可以选择添加-vvvv ,以指导Ansible在运行playbook时变得更加粗略,这在排除故障时很有用。

在游戏手册运行后,验证Ansible已经成功地在主机上安装了Asciidoctor。

$ asciidoctor -v
Asciidoctor X.Y.Z https://asciidoctor.org
 Runtime Environment (ruby 2.6.8p205 (2021-07-07 revision 67951)...

适应自动化

你可以在本文示例的playbook中向Brew_packages 变量添加更多软件。只要有一个Homebrew软件包可用,Ansible就会安装它。Ansible只在需要的时候采取行动,所以你可以把你安装的所有软件包留在playbook中,有效地建立一个你在电脑上期待的所有软件包的清单。

如果你发现自己在另一台电脑上,也许是因为你在工作或你已经购买了一个新的电脑,你可以快速地一次性安装所有相同的应用程序。更好的是,如果你换成了Linux,Ansible游戏手册仍然有效,你可以使用Homebrew for Linux或者做一些简单的更新,切换到不同的软件包管理器。