GNU/Linux >> Tutoriales Linux >  >> Linux

8 pasos para desarrollar un rol de Ansible en Linux

En el artículo Cómo usar Ansible para configurar Vim, desarrollé un libro de jugadas de Ansible para configurar un entorno Vim inicial usando algunos complementos de Vim. En este artículo actual, sigo construyendo sobre el ejemplo anterior convirtiendo el libro de jugadas en un rol de Ansible.

Los roles de Ansible le permiten desarrollar componentes de automatización reutilizables al agrupar y encapsular artefactos de automatización relacionados, como archivos de configuración, plantillas, tareas y controladores. Debido a que los roles aíslan estos componentes, es más fácil reutilizarlos y compartirlos con otras personas. También puede hacer que sus funciones sean configurables al exponer las variables que los usuarios pueden configurar al llamar a la función, lo que les permite configurar su sistema de acuerdo con requisitos específicos.

[ También te puede interesar: Las cuatro cosas que debes poder hacer en Vim ]

En este artículo, convierto el libro de jugadas original vim-config.yaml en un papel reutilizable. En este momento, no agregaré ninguna funcionalidad nueva, pero ampliaré aún más este ejemplo en el próximo artículo. Puede encontrar el libro de jugadas original y vimrc archivo de configuración aquí.

1. Comenzando un nuevo rol

Para crear un rol de Ansible, es suficiente crear un directorio siguiendo la estructura de directorios estándar documentada en la documentación oficial.

Para hacerlo más fácil y seguir el estándar, use el ansible-galaxy role init role_name  comando para crear este directorio para usted. Este comando crea la estructura requerida, incluidas algunas plantillas para la documentación que puede actualizar. Úselo para inicializar el vim rol bajo roles directorio. Primero, crea los roles directorio y cambie a él:

$ mkdir roles
$ cd roles

Luego, usa el comando ansible-galaxy para inicializar el rol:

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

Ahora, verifique la estructura del directorio de roles:

$ 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

Si bien no es necesario para que la función funcione, se recomienda documentar su función actualizando los archivos README.md y meta/main.yml . Si su función depende de la ejecución de otras funciones, es importante documentar estas dependencias en meta/main.yml , lo que permite que Ansible los descargue automáticamente si es necesario.

Cambie al directorio recién creado:

$ cd vim

Su rol de Vim no requiere ninguna dependencia. Este es un ejemplo de un archivo de metaconfiguración en funcionamiento. Actualícelo con su nombre, el nombre de la empresa y una licencia adecuada, si es necesario:

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

El archivo original tiene comentarios adicionales, que eliminé por brevedad.

A continuación, defina las tareas a ejecutar.

2. Definición de tareas

En términos generales, su función ejecutará una o más tareas para configurar el sistema de destino de acuerdo con los requisitos de la función. En este caso, querrá instalar y configurar Vim. De forma predeterminada, cuando ejecuta un rol, busca un archivo llamado main.yml en las tasks subdirectorio y ejecutar todas las tareas enumeradas en él. Puede dividir las tareas en varios archivos para roles más complejos y llamarlos desde main.yml usando include_tasks o import_tasks módulos.

Para este rol, incluya todas las tareas requeridas en tasks/main.yml archivo:

$ 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

Tenga en cuenta que, a diferencia del libro de jugadas original, no incluye la lista de paquetes o complementos para instalar directamente con la definición de la tarea. En su lugar, está utilizando las variables install_packages y plugins .

Al definir variables en lugar de codificar los valores, hace que sus roles sean más reutilizables y más fáciles de mantener. Ahora, defina valores para estas variables de dos maneras diferentes. Comience con los plugins variable, cubierta a continuación.

3. Definición de variables predeterminadas

Cuando esté desarrollando un rol de Ansible, es posible que desee permitir que los usuarios del rol proporcionen valores para personalizar la forma en que el rol realiza sus tareas. Estas variables hacen que su función sea más reutilizable, lo que permite a los usuarios modificar el resultado en función de sus requisitos específicos.

Para este ejemplo, los plugins La variable permite a los usuarios especificar qué complementos desean instalar con Vim, lo que hace que el rol sea flexible para sus necesidades. Se recomienda definir un valor predeterminado para ello en defaults/main.yml archivo para garantizar que los roles se ejecuten correctamente incluso si el usuario no proporciona un valor a esta variable.

Este archivo define variables con una precedencia muy baja, lo que significa que Ansible solo las usará en caso de que el valor no se haya definido en ningún otro lugar.

Ahora, defina el valor predeterminado para los plugins variable como esta:

$ 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

En este caso, está definiendo el valor predeterminado usando los mismos valores del libro de jugadas original, lo que significa que si llama al rol sin proporcionar un valor para esta variable, se comportará exactamente como el libro de jugadas original, instalando estos seis complementos.

Defina las variables internas.

4. Definición de variables de rol

Otra clase de variables son las variables de rol o variables internas. Al definir estas variables en un archivo separado de las tareas, hace que su rol sea más fácil de mantener. Puede reutilizar estas variables en muchos lugares y es más fácil actualizarlas en un lugar central. Sin embargo, no desea que sea demasiado fácil para los usuarios anularlos configurándolos en ubicaciones generales, como el libro de jugadas o el inventario.

Las variables install_packages , que define una lista de paquetes necesarios para instalar, y vimrc , que especifica la ubicación del archivo de configuración de Vim, son buenos ejemplos de variables internas. Defínelos en vars/main.yml . Este archivo define variables con mayor prioridad que no se anulan fácilmente. Los usuarios aún pueden proporcionar valores si es necesario configurándolos explícitamente al llamar al rol, pero en este caso, puede asumir que saben lo que están haciendo.

$ 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

Para obtener más detalles sobre cómo funciona la precedencia de variables de Ansible, consulte Comprensión de la precedencia de variables en la documentación.

5. Copiando archivos

El último paso para crear este rol es copiar el archivo vimrc a los files directorio. De forma predeterminada, al usar la copy módulo como una tarea de rol, buscará archivos para copiar en los files subdirectorio. Definir el vimrc archivo como este:

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

Guarde y cierre el archivo para completar su función. Ahora es el momento de definir el libro de jugadas para usar el rol.

6. Llamar al rol desde un libro de jugadas

Ahora que su rol está completo, puede llamarlo desde sus libros de jugadas. De forma predeterminada, Ansible busca roles en los roles subdirectorio relativo al archivo del libro de jugadas o al directorio del sistema /etc/ansible/roles . También puede usar la configuración de Ansible roles_path para definir ubicaciones de funciones alternativas.

Para este ejemplo, cree un libro de jugadas en el mismo directorio donde creó los roles directorio. Cambiar a él:

$ cd ../..
$ ls
roles

Crea el libro de jugadas vim-config.yaml , similar al playbook original pero esta vez, en lugar de definir las tareas, usa el módulo import_role para importar tu nuevo vim rol en el libro de jugadas:

$ 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

También puede incluir el rol en el libro de jugadas usando el módulo include_role . Discutiré las diferencias entre estos dos módulos en un artículo separado. Si no puede esperar, consulte la documentación.

Finalmente, ejecute el libro de jugadas.

8. Ejecutar el libro de jugadas

Ejecute el libro de jugadas usando el ansible-playbook comando con -K parámetro y escriba su sudo contraseña para permitir que Ansible instale paquetes del sistema.

Nota :Haga una copia de seguridad de cualquier .vimrc existente archivo de configuración antes de ejecutar este manual.

$ 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   

Este libro de jugadas ejecuta y ejecuta todas las tareas en el host local. Si desea configurar un sistema remoto, cree un archivo de inventario con los sistemas deseados y actualice el libro de jugadas hosts lista.

[ ¿Busca más información sobre la automatización de sistemas? Comience con The Automated Enterprise, un libro gratuito de Red Hat. ] 

Resumir

Ahora tiene un rol que instala y configura Vim que puede reutilizar y compartir. En el próximo artículo de esta serie, mejoraré esta función agregando un archivo de plantilla para que la configuración sea aún más flexible.

También puede usar Molecule para probar sus roles usando contenedores o máquinas virtuales. Si desea obtener más información sobre esa herramienta, lea mi artículo Desarrollo y prueba de roles de Ansible con Molecule y Podman - Parte 1 en el blog oficial de Ansible.

Para obtener más información sobre Ansible, consulte la documentación oficial.


Linux
  1. Cómo configuro Vim como mi editor predeterminado en Linux

  2. Desmitificando Ansible para administradores de sistemas Linux

  3. Cómo instalar Ansible en Oracle Linux 8

  4. Editores de texto de línea de comandos en Linux

  5. Desarrollando C# en Linux

Instalar y configurar Ansible en Linux

Cómo usar Ansible para configurar Vim

Cómo instalar el último editor de Vim en Linux

Cómo instalar Ansible en Linux Mint 20

Cómo instalar el editor vim en Rocky Linux 8

Pasos de instalación de jEdit en Ubuntu Linux