GNU/Linux >> Belajar Linux >  >> Linux

8 langkah untuk mengembangkan peran Ansible di Linux

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.


Linux
  1. Bagaimana saya mengonfigurasi Vim sebagai editor default saya di Linux

  2. 7 langkah untuk mengamankan server Linux Anda

  3. 4 langkah untuk membuat pengguna Linux dari file csv dengan Ansible

  1. Cara Menginstal dan Menguji Ansible di Linux

  2. Cara Menginstal Ansible di Oracle Linux 8

  3. Langkah-langkah keamanan lanjutan untuk Linux

  1. Demystifying Memungkinkan untuk sysadmin Linux

  2. Cara membuat Pengguna Linux Menggunakan Ansible

  3. Seri Ansible RHCE #9:Peran yang Mungkin