codecamp

Ansible 的开发工具

在开始撰写 Ansible Playbooks 前,让冻仁先来介绍平日会用到的开发工具和相关技巧。

automate_with_ansible_practice-14.jpg

冻仁在「Ansible 如何操作」一文时早有提到 Playbooks 其实是使用 YAML 的语法在撰写,虽说我们只要有纯文字编辑器就可以进行开发,但冻仁还是会借由些自动补齐 (Auto-complete)缩排提示语法 (Syntax) 高亮 (Highlighting) 和检查 (Check) 等扩充套件工具来补助。

纯文字编辑器 (Text Editor)

Vim

Vim 是冻仁多年来主要使用的文字编辑器,不管是编写程式、文件还是设定档都是一套打天下,而现在也用它来开发 Playbooks。冻仁自己除了会在 Terminal 使用 Vim 之外,还会额外安装 GVim (GNU/Linux, Windows) 和 MacVim (macOS) 来使用 Vim。

2016-12-10-vim-ansible-autocomplete.gif▲ 以上为使用 MacVim 撰写 Playbooks 的 demo,其 colorscheme 为 Tomorrow Night Eighties

Syntastic

要让 Syntastic 可以完整支持 Ansible,我们还需安装 ansible-vim 和 ansible-lint 才行。

  1. 使用 pip 安装 ansible-lint。

    $ sudo pip install ansible-lint
    
  2. 使用 NeoBundle 安装 Syntastic 和 ansible-vim,并调整设定。

    $ vi ~/.vimrc
    ...
    " ansible-vim
    NeoBundle 'pearofducks/ansible-vim'
    
    " Syntastic
    NeoBundle 'scrooloose/syntastic'
    let g:syntastic_enable_highlighting = 1
    let g:syntastic_always_populate_loc_list = 1
    let g:syntastic_auto_loc_list = 1
    let g:syntastic_check_on_open = 1
    let g:syntastic_check_on_wq = 0
    
    set statusline+=%#warningmsg#
    set statusline+=%{SyntasticStatuslineFlag()}
    set statusline+=%*
    
    " ignore files of Ansible Roles.
    let g:syntastic_ignore_files = ['\m^roles/']
    
  3. Syntastic 的细部设定可从 GitHub 上找到,特别要提一下的是上面多了停止检查 roles/ 目录的设定,在冻仁的习惯里 Roles 大多会另外维护,这部份在再往后的章节才会多加说明。

  4. 如只想用 Syntastic 来检查语法错误 (syntax error) 而不想检查 style 的话,可把 style 的部份关掉。

    let g:syntastic_quiet_messages = { "type": "style" }
    

MacDown

MacDown 是 macOS 上 open source 的 Markdown 文字编辑器,冻仁会在撰写 README.md 时会用到,但近来发现 Livedown 这个工具后,就比较常用 Vim 在写 Markdown 文件了。

题外话,冻仁连现在这篇文章都是用 Vim + Livedown 在写的呢!

2016-12-10-macdown.png

Atom

Atom 是 GitHub 释出的 open source 文字编辑器,业界也有不少使用者,冻仁虽不常使用,但它的自动补齐功能非常之强大,若本身没有在使用 Vim,不妨可以用它来开发 Playbooks。

2016-12-10-atom.gif

▲ 以上为使用 Atom 撰写 Playbooks 的 demo,其 UI Theme 为 One Dark,而 Syntax Theme 为 Tomorrow Night Eighties

Terminal (終端機)

在 GNU/Linux 和 macOS 上都已內建 terminal,但冻仁较惯用以下三个 terminal emulator。

  • iTerm2:macOS 上的 Terminal 不二选择,为了要相容 Terminator 的习惯,冻仁还下了不少功夫调整。
  • Terminator:GNU/Linux 上支持画面分割的 Terminator,是个比 Gnome Terminal 顺手的工具。
  • rxvt-unicode:GNU/Linux 上极轻量的 Terminal。

虚拟环境 (Virtual Environment)

API 文件浏览器 (API Documentation Browser)

Ansible 是 2012 才开始的专案,可 Module 的总数已经高达 836 之多,虽说各个 Module 的使用文件在官网上都查的到,但冻仁还是习惯在本机存一份离线版以备不时之需。

  • Dash:macOS 上查询、自动更新 API 文件的工具,其 license 为 US$ 24.99。

    2016-12-11-dash-ansible.gif

  • Zeal:open source 版的 Dash,支持 GNU/Linux 和 Windows。

  • DevDocs:网页版的 Zeal。
  • LovelyDocs:Android 上类似 Dash 的离线 API 文件浏览器。 1

其它

  • Alfred 3:macOS 上的快捷搜神兵,在此冻仁拿它整合 Dash 以快速搜寻 Ansible 文件。

    2016-12-11-alfred-ansible.gif

  • Git:版本控制系統 (Version Control System),用来纪录、追踪 playbooks 版本的工具,这对 Infrastructure as Code 而言是必不可缺的。

相关连结

1LovelyDocs 是冻仁 2016/12/24 在 Galaxy Note 3 上逛 Google Play 时找到的 Dash like Apps,其 release 日期为 2016/11/23。 ↩


Ansible 用 Docker Compose 练习 Ansible
Ansible 查看 Ansible Modules 文件
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }