如何使用 Ansible 配置 Vim並安裝外掛

大雄45發表於2022-01-03
導讀 本文將使用 8系統透過編寫 Ansible playbook 來擴充套件使用vim編輯器。透過介紹每一步的操作說明,最後將彙總起來。

在執行本實驗錢,需要將 .vimrc備份一下。本文編寫的playbook會覆蓋現有的  .vimrc 配置檔案。

安裝ansible
[ansible@Master ~]$ yum -y install ansible
建立playbook

建立 Ansible playbook檔案  vim-config.yaml

[ansible@Master ~]$ vim vim-config.yaml

現在,透過提供名稱和目標主機列表來開始playbook的定義。本文,我們僅安裝在本機,所以 hosts:部分的值寫的是 localhost。如果需要將vim部署到其他主機中,可以再次寫入清單裡面的主機、主機組。

---
- name: Config Vim with Plugins
  hosts: localhost

接下來,設定 gather_facts: yes選項以收集有關係統資訊。我們需要它來訪問下一步中的環境變數:

  gather_facts: yes
定義變數

配置 Vim 和 Vim 外掛需要向  $HOME/.vim 目錄和  $HOME/.vimrc 配置檔案新增內容。讓我們定義兩個變數來儲存它們的值:

  vars:
    vim_dir: "{{ ansible_env.HOME }}/.vim"
    vimrc: "{{ ansible_env.HOME }}/.vimrc"

我們使用  ansible_env.HOME 變數來獲取  $HOME環境變數的值。

安裝所需的包

現在開始定義playbook將執行的任務。首先提供 tasks:

  tasks:

由於第一個任務是安裝一些我們稍後將安裝的 Vim 外掛所需的系統包。使用  package 模組安裝它們:

  - name: Install required packages
    package:
      name:
        - vim-enhanced
        - git
        - powerline-fonts
        - fzf
      state: installed
    become: yes
    tags: install_packages

package模組適用於不同的發行版。可以設定 become: yes自動提升許可權。 tags為安裝部分新增一個標籤,方便後面單獨安裝。

建立目錄

使用帶有引數  state: directory 的 file模組來建立目錄。由於有三個目錄,因此使用 loop模組來儲存所需的條目:

  - name: Ensure .vim/{autoload,bundle} directory exists
    file:
      path: "{{ item }}"
      state: directory
      recurse: no
      mode: 0750
    loop:
      - "{{ vim_dir }}"
      - "{{ vim_dir }}/autoload"
      - "{{ vim_dir }}/bundle"
下載vim外掛管理器

本文使用  Vim-Pathogen 作為 Vim 外掛管理器。若要使用 Ansible 安裝它,可以使用 get_url 模組將外掛下載到其目標目錄:

  - name: Ensure Pathogen is in place
    get_url:
      url: 
      dest: "{{ vim_dir }}/autoload/pathogen.vim"
從github克隆外掛

安裝 Pathogen 後,從 GitHub 克隆到目標目錄來部署所需的外掛。與建立目錄類似,使用 loop模組克隆所需的倉庫:

  - name: Deploy Plugins
    git:
      repo: "{{ item.url }}"
      dest: "{{ vim_dir }}/bundle/{{ item.name }}"
      clone: yes
      update: yes
      recursive: no
    loop:
      - name: vim-airline
        url: 
      - name: nerdtree
        url: 
      - name: fzf-vim
        url: 
      - name: vim-gitgutter
        url: 
      - name: vim-fugitive
        url: 
      - name: vim-floaterm
        url:

我們使用字典列表作為 loop的輸入,呼叫他們的語法是  {{ item.KEY }} 

建立vim配置檔案

作為最後的任務,使用  copy 模組複製 Vim 的配置檔案。首先,在子目錄 files下建立配置檔案:

[ansible@Master ~]$ mkdir files
[ansible@Master ~]$ vim files/vimrc

將如下內容複製到files/vimrc中:

execute pathogen#infect()
syntax on
filetype plugin indent on
colo darkblue
" Configuration vim Airline
set laststatus=2
let g:airline#extensions#tabline#enabled=1
let g:airline_powerline_fonts=1
" Configuration NERDTree
map:NERDTreeToggle" Configuration floaterm
let g:floaterm_keymap_toggle = ''
let g:floaterm_width = 0.9
let g:floaterm_height = 0.9
" Configuration Vim.FZF
let g:fzf_preview_window = 'right:50%'
let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6  }  }

如何使用 Ansible 配置 Vim並安裝外掛如何使用 Ansible 配置 Vim並安裝外掛
然後,使用 copy模組將檔案複製到目的地:

  - name: Ensure vimrc config in place
    copy;
      src: vimrc
      dest: "{{ vimrc }}"
      backup: yes
      mode: 0640

注意,不需要在  src 路徑中指定 files目錄。預設情況下,Ansible 在此子目錄 files中查詢要複製的檔案。

playbook劇本內容整合到一起

這裡是完整的劇本:

---
- name: Config Vim with Plugins
  hosts: localhost
  gather_facts: yes
  vars:
    vim_dir: "{{ ansible_env.HOME }}/.vim"
    vimrc: "{{ ansible_env.HOME }}/.vimrc"
  tasks:
  - name: Install required packages
    package:
      name:
        - vim-enhanced
        - git
        - powerline-fonts
      state: installed
    become: yes
    tags: install_packages
  - name: Ensure .vim/{autoload,bundle} directory exists
    file:
      path: "{{ item }}"
      state: directory
      recurse: no
      mode: 0750
    loop:
      - "{{ vim_dir }}"
      - "{{ vim_dir }}/autoload"
      - "{{ vim_dir }}/bundle"
  - name: Ensure Pathogen is in place
    get_url:
      url: 
      dest: "{{ vim_dir }}/autoload/pathogen.vim"
  - name: Deploy Plugins
    git:
      repo: "{{ item.url }}"
      dest: "{{ vim_dir }}/bundle/{{ item.name }}"
      clone: yes
      update: yes
      recursive: no
    loop:
      - name: vim-airline
        url: 
      - name: nerdtree
        url: 
      - name: fzf-vim
        url: 
      - name: vim-gitgutter
        url: 
      - name: vim-fugitive
        url: 
      - name: vim-floaterm
        url: 
  - name: Ensure vimrc config in place
    copy:
      src: vimrc
      dest: "{{ vimrc }}"
      backup: yes
      mode: 0640

如何使用 Ansible 配置 Vim並安裝外掛如何使用 Ansible 配置 Vim並安裝外掛
使用  ansible-playbook  執行改劇本。由於此劇本僅針對本地主機,因此並不嚴格要求清單。首先新增 -C選項,用來試執行一下,檢查錯誤。然後再執行。

[ansible@Master ~]$ ansible-playbook -C vim-config.yaml 
[ansible@Master ~]$ ansible-playbook vim-config.yaml
總結

透過本劇本,可以深入瞭解ansible playbook的許多模組使用方法。

本文原創地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2850207/,如需轉載,請註明出處,否則將追究法律責任。

相關文章