GNU/Linux >> Linux Esercitazione >  >> Linux

8 passaggi per sviluppare un ruolo Ansible in Linux

Nell'articolo Come utilizzare Ansible per configurare Vim, ho sviluppato un playbook Ansible per configurare un ambiente Vim iniziale utilizzando alcuni plug-in Vim. In questo articolo, continuo a basarmi sull'esempio precedente convertendo il playbook in un ruolo Ansible.

I ruoli Ansible consentono di sviluppare componenti di automazione riutilizzabili raggruppando e incapsulando gli artefatti di automazione correlati, come file di configurazione, modelli, attività e gestori. Poiché i ruoli isolano questi componenti, è più facile riutilizzarli e condividerli con altre persone. Puoi anche rendere configurabili i tuoi ruoli esponendo le variabili che gli utenti possono impostare quando chiamano il ruolo, consentendo loro di configurare il proprio sistema in base a requisiti specifici.

[ Potrebbe piacerti anche: Le quattro cose che devi essere in grado di fare in Vim ]

In questo articolo, converto il playbook originale vim-config.yaml in un ruolo riutilizzabile. Al momento, non aggiungerò alcuna nuova funzionalità, ma amplierò ulteriormente questo esempio nel prossimo articolo. Puoi trovare il playbook originale e vimrc file di configurazione qui.

1. Iniziare un nuovo ruolo

Per creare un ruolo Ansible è sufficiente creare una directory seguendo la struttura di directory standard documentata nella documentazione ufficiale.

Per semplificare e seguire lo standard, usa il ansible-galaxy role init role_name  comando per creare questa directory per te. Questo comando crea la struttura richiesta, inclusi alcuni modelli per la documentazione che puoi aggiornare. Usalo per inizializzare il vim ruolo sotto i roles directory. Innanzitutto, crea i roles directory e passare ad essa:

$ mkdir roles
$ cd roles

Quindi, usa il comando ansible-galaxy per inizializzare il ruolo:

$ ansible-galaxy role init vim
- Role vim was created successfully

Ora verifica la struttura della directory dei ruoli:

$ 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

Sebbene non sia necessario per il funzionamento del ruolo, si consiglia vivamente di documentare il proprio ruolo aggiornando i file README.md e meta/main.yml . Se il tuo ruolo dipende da altri ruoli da eseguire, è importante documentare queste dipendenze in meta/main.yml , consentendo ad Ansible di scaricarli automaticamente se necessario.

Passa alla directory appena creata:

$ cd vim

Il tuo ruolo Vim non richiede alcuna dipendenza. Ecco un esempio di un file di meta configurazione funzionante. Aggiornalo con il tuo nome, ragione sociale e una licenza adeguata, se necessario:

$ 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: []

Il file originale ha commenti aggiuntivi, che ho rimosso per brevità.

Quindi, definisci le attività da eseguire.

2. Definizione delle attività

In generale, il tuo ruolo eseguirà una o più attività per configurare il sistema di destinazione in base ai requisiti del ruolo. In questo caso, ti consigliamo di installare e configurare Vim. Per impostazione predefinita, quando esegui un ruolo, cerca un file denominato main.yml nelle tasks sottodirectory ed eseguire tutte le attività elencate al suo interno. Puoi suddividere le attività in più file per ruoli più complessi e chiamarli da main.yml utilizzando include_tasks o import_tasks moduli.

Per questo ruolo, includi tutte le attività richieste in tasks/main.yml file:

$ 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

Nota che, a differenza del playbook originale, non includi l'elenco di pacchetti o plug-in da installare direttamente con la definizione dell'attività. Invece, stai usando le variabili install_packages e plugins .

Definendo le variabili invece di codificare i valori, rendi i tuoi ruoli più riutilizzabili e più facili da mantenere. Ora, definisci i valori per queste variabili in due modi diversi. Inizia con i plugins variabile, trattato di seguito.

3. Definizione delle variabili predefinite

Quando sviluppi un ruolo Ansible, potresti voler consentire agli utenti del ruolo di fornire valori per personalizzare il modo in cui il ruolo svolge le proprie attività. Queste variabili rendono il tuo ruolo più riutilizzabile, consentendo agli utenti di modificare il risultato in base alle loro esigenze specifiche.

Per questo esempio, i plugins La variabile consente agli utenti di specificare quali plugin vogliono installare con Vim, rendendo il ruolo flessibile per le loro esigenze. Si consiglia di definire un valore predefinito per esso in defaults/main.yml per garantire che i ruoli vengano eseguiti correttamente anche se l'utente non fornisce un valore a questa variabile.

Questo file definisce le variabili con una precedenza molto bassa, il che significa che Ansible le utilizzerà solo nel caso in cui il valore non sia stato definito da nessun'altra parte.

Ora definisci il valore predefinito per i plugins variabile come questa:

$ 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

In questo caso, stai definendo il valore predefinito utilizzando gli stessi valori del playbook originale, il che significa che se chiami il ruolo senza fornire un valore per questa variabile, si comporterà esattamente come il playbook originale, installando questi sei plugin.

Definire le variabili interne.

4. Definizione delle variabili di ruolo

Un'altra classe di variabili sono le variabili ruolo o le variabili interne. Definendo queste variabili in un file separato dalle attività, semplifichi la gestione del tuo ruolo. Puoi riutilizzare queste variabili in molte posizioni ed è più facile aggiornarle in una posizione centrale. Tuttavia, non vuoi rendere troppo facile per gli utenti sovrascriverli impostandoli in posizioni generali come il playbook o l'inventario.

Le variabili install_packages , che definisce un elenco di pacchetti richiesti da installare, e vimrc , che specifica la posizione del file di configurazione di Vim, sono buoni esempi di variabili interne. Definiscili in vars/main.yml . Questo file definisce le variabili con precedenza più alta che non possono essere facilmente sovrascritte. Gli utenti possono comunque fornire valori, se necessario, impostandoli esplicitamente quando chiamano il ruolo, ma in questo caso puoi presumere che sappiano cosa stanno facendo.

$ 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

Per maggiori dettagli su come funziona la precedenza delle variabili Ansible, consulta Comprendere la precedenza delle variabili nella documentazione.

5. Copiare file

L'ultimo passaggio per creare questo ruolo è copiare il file vimrc ai files directory. Per impostazione predefinita, quando si utilizza copy modulo come attività di ruolo, cercherà i file da copiare nei files sottodirectory. Definisci il vimrc file come questo:

$ 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  }  }

Salva e chiudi il file per completare il tuo ruolo. Ora è il momento di definire il playbook per utilizzare il ruolo.

6. Richiamare il ruolo da un playbook

Ora che il tuo ruolo è completo, puoi richiamarlo dai tuoi playbook. Per impostazione predefinita, Ansible cerca i ruoli nei roles sottodirectory relativa al file del playbook o alla directory di sistema /etc/ansible/roles . Puoi anche utilizzare la configurazione Ansible roles_path per definire posizioni di ruolo alternative.

Per questo esempio, crea un playbook nella stessa directory in cui hai creato i roles directory. Passa ad esso:

$ cd ../..
$ ls
roles

Crea il playbook vim-config.yaml , simile al playbook originale ma questa volta, invece di definire le attività, usa il modulo import_role per importare il tuo nuovo vim ruolo nel playbook:

$ 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

Puoi anche includere il ruolo nel playbook usando il modulo include_role . Discuterò le differenze tra questi due moduli in un articolo separato. Se non puoi aspettare, controlla la documentazione.

Infine, esegui il playbook.

8. Esegui il playbook

Esegui il playbook utilizzando ansible-playbook comando con il -K parametro e digita il tuo sudo password per consentire ad Ansible di installare i pacchetti di sistema.

Nota :Effettua il backup di qualsiasi .vimrc esistente file di configurazione prima di eseguire questo playbook.

$ 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   

Questo playbook esegue ed esegue tutte le attività nel localhost. Se desideri configurare un sistema remoto, crea un file di inventario con i sistemi desiderati e aggiorna il playbook hosts elenco.

[ Cerchi ulteriori informazioni sull'automazione dei sistemi? Inizia con The Automated Enterprise, un libro gratuito di Red Hat. ] 

Concludi

Ora hai un ruolo che installa e configura Vim che puoi riutilizzare e condividere. Nel prossimo articolo di questa serie migliorerò questo ruolo aggiungendo un file modello per rendere la configurazione ancora più flessibile.

Puoi anche utilizzare Molecule per testare i tuoi ruoli utilizzando container o macchine virtuali. Se vuoi saperne di più su questo strumento, leggi il mio articolo Developing and Testing Ansible Roles with Molecule and Podman - Part 1 nel blog ufficiale di Ansible.

Per ulteriori informazioni su Ansible, consulta la documentazione ufficiale.


Linux
  1. Come configuro Vim come editor predefinito su Linux

  2. 7 passaggi per proteggere il tuo server Linux

  3. Come installare e testare Ansible su Linux

  4. Demistificare Ansible per gli amministratori di sistema Linux

  5. Editor di testo della riga di comando in Linux

Installa e configura Ansible in Linux

Come usare Ansible per configurare Vim

Come installare l'ultimo Vim Editor in Linux

Come installare Ansible su Linux Mint 20

Come installare l'editor vim su Rocky Linux 8

Passaggi di installazione di jEdit su Ubuntu Linux