使用ansible来管理dotfiles,现在停止使用了

前言

写一篇关于如何使用Ansible管理dotfiles的故事。

得出结论

    • ローカルPCだけならAnsible使わなくてよかった

 

    • 普通のシェルスクリプトか、スクリプト言語で良い

 

    最終的にAnsible使わないようにした

背景

最初使用Shell脚本来管理dotfiles。
正如其他文章所述,这只是一个创建普通符号链接的脚本。

但是,由于工作上可能很快要开始写Ansible脚本,所以我决定兼顾学习,将之前用Shell脚本编写的内容改用Ansible重写。
从这里开始,我开始使用Ansible来管理dotfiles。

最后,我发现管理变得困难,因此决定回到使用脚本编写。
之前使用Ansible进行管理的内容已经保存在另一个分支中。
以下是该内容。

dotfiles的组成

目前的dotfiles配置如下。

.
|-- ansible
|   |-- roles
|-- ConEmu.xml
|-- README.adoc
|-- bash
|   |-- bashrc
|   |-- conf.plugins.d
|   `-- plugins.sh
|-- bin
|-- code
|   |-- README.md
|   |-- dump_extentions.sh
|   |-- extensions.txt
|   `-- user
|-- config.nims
|-- docker-compose.yml
|-- git
|   `-- commit.template
|-- i3
|   `-- config
|-- krita.shortcuts
|-- lib
|   `-- sh
|-- note.md
|-- setup.sh
|-- spacemacs
|-- termite
|   `-- config
|-- tmux.conf
|-- user-dirs.dirs
|-- vim
|   |-- README.adoc
|   |-- after
|   |-- colors
|   |-- conf.d
|   |-- conf.plugins.d
|   |-- dict
|   |-- gvimrc
|   |-- init.vim
|   |-- plugins.vim
|   |-- template
|   |-- vimperatorrc
|   |-- vimrc
|   |-- vimrc.min
|   `-- vrapperrc
`-- zsh
    |-- README.md
    |-- conf.d
    |-- img
    |-- plugins.zsh
    `-- zshrc

21 directories, 45 files

为了管理方便,我将vimrc和bashrc分割成多个文件,并在目录中进行管理。此外,我还将bash和zsh的设置分开,并将它们共享的内容放置在lib/sh中,这导致了复杂的依赖关系。

角色和剧本的结构

我的 dotfiles 文件夹里面存放着 Ansible 相关的配置文件。
角色的划分大致如下。

clojure/tasks
common_deploy
common_setup/tasks
docker/tasks
font
git/tasks
go
i3
nim
nodejs/tasks
python/tasks
shell
terminal
vim
vscode

将安装工具和配置文件放置在一个角色中。

由于Ansible可以编写以集中控制为目标的脚本,所以我认为这种总结方式很好,于是我做了这个总结。有时候可能只想更新nim,只想更新Go等等。

所以,playbook大致是这个样子的。

- hosts: localhost
  connection: local
  vars_files:
    - "vars/env.yml"
  roles:
    - role: common_deploy
    - role: nodejs
      tags: [update]
    - role: python
      tags: [update]
    - role: git
    - role: go
    - role: docker
    - role: vim
      tags: [update]
    - role: shell
    - role: i3
    - role: terminal
    - role: font
    - role: vscode
    - role: nim

有什么不好的地方吗?

最终决定将以 Ansible 编写的 playbook 转回为 shell 脚本。原因何在?

写得不流畅

从个人的观点来看,使用脚本更容易编写和阅读。
使用YAML编写部署的好处是,即使多人合作,也不会有太大的编写方式差异,并且即使是无法理解或编写脚本的人也能进行维护。
在多人维护时,使用Ansible的YAML是减少对技术理解差异的一种方法之一。

如果只有我自己写和维护dotfiles,我认为只需要我写得最容易的方式就可以了。
在Ansible的YAML中表达条件分支很麻烦,写起来也不方便。

角色分配几乎没有意义

Ansible是一种用于为多个远程环境进行配置管理的工具,它在这个过程中发挥了作用。
当需要设置相同的中间件但服务器角色不同时,可以通过将角色按中间件单元划分来重复使用角色,从而避免重复管理配置。
这使得Ansible非常强大。

尽管如此,由于只有一台本地电脑,即使进行角色分配也无法在其他设置中进行重复使用,因此并不是很开心。
相反,文件分散,不知道哪里有什么设置,反而增加了维护的复杂度。

回想一下,或许将所有任务都以横向方式写在一个文件中也是一种方法。

思考

嗯,我试着用Ansible来管理dotfiles,作为学习的一部分。
由于通过Ansible完成了dotfiles的管理,我学习了Ansible的使用方法、编写方式、最佳实践以及查阅文档的技巧。

无论是工作还是私人使用的服务器,我都使用Ansible,并且我觉得把它作为学习的工具非常有意义。

但是,如果只是管理自己本地的个人电脑,使用命令行或脚本语言会更方便。

正如最强的 dotfiles 驱动开发和在 GitHub 上进行管理的操作方式所述,我认为Shell非常好用。

我最终使用NimScript重写了dotfiles的链接。我将所有内容都写在一个文件中。

这篇文章不是关于dotfiles的,而是关于ansible的文章吗?

以上是全部内容。

广告
将在 10 秒后关闭
bannerAds