Dalam artikel Cara menggunakan Ansible untuk mengonfigurasi Vim, saya mengembangkan playbook Ansible untuk mengonfigurasi lingkungan Vim awal menggunakan beberapa plugin Vim. Dalam artikel saat ini, saya melanjutkan membangun contoh sebelumnya dengan mengubah buku pedoman menjadi peran Ansible.
Peran yang memungkinkan memungkinkan Anda mengembangkan komponen otomatisasi yang dapat digunakan kembali dengan mengelompokkan dan merangkum artefak otomatisasi terkait, seperti file konfigurasi, templat, tugas, dan penangan. Karena peran mengisolasi komponen ini, lebih mudah untuk menggunakannya kembali dan membaginya dengan orang lain. Anda juga dapat membuat peran Anda dapat dikonfigurasi dengan memperlihatkan variabel yang dapat disetel pengguna saat memanggil peran, memungkinkan mereka untuk mengonfigurasi sistem mereka sesuai dengan persyaratan tertentu.
[ Anda mungkin juga menyukai: Empat hal yang harus dapat Anda lakukan di Vim ]
Dalam artikel ini, saya mengonversi buku pedoman asli vim-config.yaml
menjadi peran yang dapat digunakan kembali. Saat ini, saya tidak akan menambahkan fungsionalitas baru, tetapi saya akan memperluas contoh ini lebih lanjut di artikel berikutnya. Anda dapat menemukan buku pedoman asli dan vimrc
file konfigurasi di sini.
1. Memulai peran baru
Untuk membuat peran Ansible, cukup membuat direktori yang mengikuti struktur direktori standar yang didokumentasikan dalam dokumentasi resmi.
Untuk mempermudah dan mengikuti standar, gunakan ansible-galaxy role init role_name
perintah untuk membuat direktori ini untuk Anda. Perintah ini membuat struktur yang diperlukan, termasuk beberapa template untuk dokumentasi yang dapat Anda perbarui. Gunakan untuk menginisialisasi vim
peran di bawah roles
direktori. Pertama, buat roles
direktori dan beralih ke sana:
$ mkdir roles
$ cd roles
Kemudian, gunakan perintah ansible-galaxy
untuk menginisialisasi peran:
$ ansible-galaxy role init vim
- Role vim was created successfully
Sekarang, verifikasi struktur direktori peran:
$ tree vim
vim
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
8 directories, 8 files
Meskipun tidak diperlukan agar peran berfungsi, sangat disarankan untuk mendokumentasikan peran Anda dengan memperbarui file README.md
dan meta/main.yml
. Jika peran Anda bergantung pada peran lain untuk dijalankan, penting untuk mendokumentasikan dependensi ini di meta/main.yml
, memungkinkan Ansible untuk mengunduhnya secara otomatis jika diperlukan.
Beralih ke direktori yang baru dibuat:
$ cd vim
Peran Vim Anda tidak memerlukan ketergantungan apa pun. Berikut adalah contoh file konfigurasi meta yang berfungsi. Perbarui dengan nama Anda, nama perusahaan, dan lisensi yang sesuai, jika perlu:
$ vim meta/main.yml
galaxy_info:
author: <YOUR NAME>
description: Deploy and configure Vim with plugins
company: <YOUR COMPANY>
license: MIT
min_ansible_version: 2.8
platforms:
- name: Fedora
versions:
- 33
galaxy_tags: []
dependencies: []
File asli memiliki komentar tambahan, yang saya hapus untuk singkatnya.
Selanjutnya, tentukan tugas yang akan dijalankan.
2. Mendefinisikan tugas
Secara umum, peran Anda akan menjalankan satu atau beberapa tugas untuk mengonfigurasi sistem target sesuai dengan persyaratan peran. Dalam hal ini, Anda ingin menginstal dan mengonfigurasi Vim. Secara default, saat Anda menjalankan peran, peran itu akan mencari file bernama main.yml
di tasks
subdirektori dan jalankan semua tugas yang terdaftar di dalamnya. Anda dapat memecah tugas menjadi beberapa file untuk peran yang lebih kompleks dan memanggilnya dari main.yml
menggunakan include_tasks
atau import_tasks
modul.
Untuk peran ini, sertakan semua tugas yang diperlukan di tasks/main.yml
berkas:
$ vim tasks/main.yml
---
# tasks file for vim
- name: Install required packages
package:
name: "{{ install_packages }}"
state: present
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:
dest: "{{ vim_dir }}/autoload/pathogen.vim"
url: https://tpo.pe/pathogen.vim
- name: Deploy plugins
git:
dest: "{{ vim_dir }}/bundle/{{ item.name }}"
repo: "{{ item.url }}"
clone: yes
update: yes
recursive: no
loop: "{{ plugins }}"
- name: Ensure .vimrc config in place
copy:
src: vimrc
dest: "{{ vimrc }}"
backup: yes
mode: 0640
Perhatikan bahwa, tidak seperti buku pedoman asli, Anda tidak menyertakan daftar paket atau plugin untuk diinstal secara langsung dengan definisi tugas. Sebagai gantinya, Anda menggunakan variabel install_packages
dan plugins
.
Dengan mendefinisikan variabel alih-alih mengkodekan nilai secara keras, Anda membuat peran Anda lebih dapat digunakan kembali dan lebih mudah dipelihara. Sekarang, tentukan nilai untuk variabel ini dalam dua cara berbeda. Mulailah dengan plugins
variabel, dibahas selanjutnya.
3. Mendefinisikan variabel default
Saat mengembangkan peran Ansible, Anda mungkin ingin mengizinkan pengguna peran memberikan nilai untuk menyesuaikan cara peran menjalankan tugasnya. Variabel ini membuat peran Anda lebih dapat digunakan kembali, memungkinkan pengguna untuk mengubah hasil berdasarkan kebutuhan spesifik mereka.
Untuk contoh ini, plugins
variabel memungkinkan pengguna untuk menentukan plugin mana yang ingin mereka instal dengan Vim, membuat peran fleksibel untuk kebutuhan mereka. Direkomendasikan untuk menentukan nilai default untuknya di defaults/main.yml
file untuk memastikan bahwa peran berhasil dijalankan meskipun pengguna tidak memberikan nilai ke variabel ini.
File ini mendefinisikan variabel dengan prioritas yang sangat rendah yang berarti Ansible hanya akan menggunakannya jika nilainya tidak ditentukan di tempat lain.
Sekarang, tentukan nilai default untuk plugins
variabel seperti ini:
$ vim defaults/main.yml
---
# defaults file for vim
plugins:
- name: vim-airline
url: https://github.com/vim-airline/vim-airline
- name: nerdtree
url: https://github.com/preservim/nerdtree
- name: fzf-vim
url: https://github.com/junegunn/fzf.vim
- name: vim-gitgutter
url: https://github.com/airblade/vim-gitgutter
- name: vim-fugitive
url: https://github.com/tpope/vim-fugitive
- name: vim-floaterm
url: https://github.com/voldikss/vim-floaterm
Dalam hal ini, Anda mendefinisikan nilai default menggunakan nilai yang sama dari buku pedoman asli, yang berarti bahwa jika Anda memanggil peran tanpa memberikan nilai untuk variabel ini, itu akan berperilaku persis seperti buku pedoman asli, menginstal enam plugin ini.
Tentukan variabel internal.
4. Mendefinisikan variabel peran
Kelas variabel lainnya adalah variabel peran atau variabel internal. Dengan mendefinisikan variabel-variabel ini dalam file terpisah dari tugas, Anda membuat peran Anda lebih mudah dipertahankan. Anda dapat menggunakan kembali variabel ini di banyak tempat, dan lebih mudah untuk memperbaruinya di satu tempat pusat. Namun, Anda tidak ingin membuatnya terlalu mudah bagi pengguna untuk menimpanya dengan menyetelnya di lokasi umum seperti buku pedoman atau inventaris.
Variabel install_packages
, yang mendefinisikan daftar paket yang diperlukan untuk diinstal, dan vimrc
, yang menentukan lokasi file konfigurasi Vim, adalah contoh variabel internal yang baik. Definisikan di vars/main.yml
. File ini mendefinisikan variabel dengan prioritas lebih tinggi yang tidak mudah diganti. Pengguna masih dapat memberikan nilai jika perlu dengan menyetelnya secara eksplisit saat memanggil peran, tetapi dalam kasus ini, Anda dapat menganggap mereka tahu apa yang mereka lakukan.
$ vim vars/main.yml
---
# vars file for vim
vim_dir: "{{ ansible_env.HOME }}/.vim"
vimrc: "{{ ansible_env.HOME }}/.vimrc"
install_packages:
- vim-enhanced
- git
- powerline-fonts
- fzf
Untuk detail selengkapnya tentang cara kerja prioritas variabel Ansible, lihat Memahami prioritas variabel dalam dokumentasi.
5. Menyalin file
Langkah terakhir untuk membuat peran ini adalah menyalin file vimrc
ke files
direktori. Secara default, saat menggunakan copy
modul sebagai tugas peran, ia akan mencari file untuk disalin di files
subdirektori. Tentukan vimrc
file seperti ini:
$ vim 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 <F5> :NERDTreeToggle<CR>
" Configuration floaterm
let g:floaterm_keymap_toggle = '<F12>'
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 } }
Simpan dan tutup file untuk menyelesaikan peran Anda. Sekarang, saatnya untuk menentukan playbook untuk menggunakan peran tersebut.
6. Memanggil peran dari buku pedoman
Sekarang setelah peran Anda selesai, Anda dapat memanggilnya dari buku pedoman Anda. Secara default, Ansible mencari peran di roles
subdirektori relatif terhadap file playbook atau direktori sistem /etc/ansible/roles
. Anda juga dapat menggunakan konfigurasi Ansible roles_path
untuk menentukan lokasi peran alternatif.
Untuk contoh ini, buat buku pedoman di direktori yang sama tempat Anda membuat roles
direktori. Beralih ke sana:
$ cd ../..
$ ls
roles
Buat buku pedoman vim-config.yaml
, mirip dengan buku pedoman asli tetapi kali ini, alih-alih mendefinisikan tugas, gunakan modul import_role
untuk mengimpor vim
baru Anda peran ke dalam buku pedoman:
$ vim vim-config.yaml
- name: Config Vim with plugins
hosts: localhost
gather_facts: yes
become: no
tasks:
- name: Configure Vim using role
import_role:
name: vim
Anda juga dapat memasukkan peran dalam buku pedoman menggunakan modul include_role
. Perbedaan kedua modul ini akan saya bahas di artikel terpisah. Jika Anda tidak sabar, periksa dokumentasinya.
Terakhir, jalankan buku pedoman.
8. Jalankan buku pedoman
Jalankan playbook menggunakan ansible-playbook
perintah dengan -K
parameter dan ketik sudo
. Anda kata sandi untuk memungkinkan Ansible menginstal paket sistem.
Catatan :Cadangkan semua .vimrc
yang ada file konfigurasi sebelum menjalankan playbook ini.
$ ansible-playbook -K vim-config.yaml
BECOME password:
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
PLAY [Config Vim with plugins] ***********************************************
TASK [Gathering Facts] *******************************************************
ok: [localhost]
TASK [vim : Install required packages] ***************************************
changed: [localhost]
TASK [Ensure .vim/{autoload,bundle} directory exists] ************************
changed: [localhost] => (item=/home/ricardo/.vim)
changed: [localhost] => (item=/home/ricardo/.vim/autoload)
changed: [localhost] => (item=/home/ricardo/.vim/bundle)
TASK [vim : Ensure Pathogen is in place] *************************************
changed: [localhost]
TASK [vim : Deploy plugins] **************************************************
changed: [localhost] => (item={'name': 'vim-airline', 'url': 'https://github.com/vim-airline/vim-airline'})
changed: [localhost] => (item={'name': 'nerdtree', 'url': 'https://github.com/preservim/nerdtree'})
changed: [localhost] => (item={'name': 'fzf-vim', 'url': 'https://github.com/junegunn/fzf.vim'})
changed: [localhost] => (item={'name': 'vim-gitgutter', 'url': 'https://github.com/airblade/vim-gitgutter'})
changed: [localhost] => (item={'name': 'vim-fugitive', 'url': 'https://github.com/tpope/vim-fugitive'})
changed: [localhost] => (item={'name': 'vim-floaterm', 'url': 'https://github.com/voldikss/vim-floaterm'})
TASK [Ensure .vimrc config in place] *****************************************
changed: [localhost]
PLAY RECAP *******************************************************************
localhost : ok=6 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbook ini menjalankan dan menjalankan semua tugas di localhost. Jika Anda ingin mengonfigurasi sistem jarak jauh, buat file inventaris dengan sistem yang diinginkan dan perbarui buku pedoman hosts
daftar.
[ Mencari lebih banyak tentang otomatisasi sistem? Mulailah dengan The Automated Enterprise, buku gratis dari Red Hat. ]
Menutup
Sekarang Anda memiliki peran yang menginstal dan mengonfigurasi Vim yang dapat Anda gunakan kembali dan bagikan. Pada artikel berikutnya dalam seri ini, saya akan meningkatkan peran ini dengan menambahkan file template untuk membuat konfigurasi lebih fleksibel.
Anda juga dapat menggunakan Molekul untuk menguji peran Anda menggunakan wadah atau mesin virtual. Jika Anda ingin tahu lebih banyak tentang alat itu, baca artikel saya Mengembangkan dan Menguji Peran yang Mungkin dengan Molekul dan Podman - Bagian 1 di blog resmi Ansible.
Untuk informasi selengkapnya tentang Ansible, lihat dokumentasi resmi.