GNU/Linux >> Znalost Linux >  >> Linux

8 kroků k vývoji role Ansible v Linuxu

V článku Jak používat Ansible ke konfiguraci Vimu jsem vyvinul příručku Ansible pro konfiguraci počátečního prostředí Vim pomocí několika pluginů Vim. V tomto aktuálním článku pokračuji v návaznosti na předchozí příklad převedením příručky do role Ansible.

Ansible role vám umožňují vyvíjet opakovaně použitelné automatizační komponenty seskupováním a zapouzdřením souvisejících automatizačních artefaktů, jako jsou konfigurační soubory, šablony, úlohy a handlery. Vzhledem k tomu, že role tyto komponenty izolují, je snazší je znovu použít a sdílet s ostatními lidmi. Své role můžete také nastavit tak, aby byly konfigurovatelné tím, že odhalíte proměnné, které mohou uživatelé nastavit při volání role, což jim umožní nakonfigurovat svůj systém podle konkrétních požadavků.

[ Také by se vám mohlo líbit: Čtyři věci, které musíte ve Vimu umět ]

V tomto článku jsem převedl původní playbook vim-config.yaml do znovu použitelné role. V tuto chvíli nebudu přidávat žádnou novou funkcionalitu, ale tento příklad dále rozvedu v dalším článku. Můžete najít původní playbook a vimrc konfigurační soubor zde.

1. Zahájení nové role

K vytvoření role Ansible stačí vytvořit adresář podle standardní adresářové struktury zdokumentované v oficiální dokumentaci.

Chcete-li to usnadnit a dodržovat standard, použijte ansible-galaxy role init role_name  příkaz k vytvoření tohoto adresáře pro vás. Tento příkaz vytvoří požadovanou strukturu, včetně několika šablon pro dokumentaci, kterou můžete aktualizovat. Použijte jej k inicializaci vim role pod roles adresář. Nejprve vytvořte roles adresář a přepněte se do něj:

$ mkdir roles
$ cd roles

Poté použijte příkaz ansible-galaxy pro inicializaci role:

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

Nyní ověřte strukturu adresáře role:

$ 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

I když to pro fungování role není nutné, důrazně se doporučuje zdokumentovat svou roli aktualizací souborů README.md a meta/main.yml . Pokud vaše role závisí na jiných rolích, které chcete provést, je důležité zdokumentovat tyto závislosti v meta/main.yml , což umožňuje Ansible si je v případě potřeby automaticky stáhnout.

Přepněte se do nově vytvořeného adresáře:

$ cd vim

Vaše role Vim nevyžaduje žádné závislosti. Zde je příklad funkčního meta konfiguračního souboru. Aktualizujte jej svým jménem, ​​názvem společnosti a vhodnou licencí, je-li to nutné:

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

Původní soubor obsahuje další komentáře, které jsem pro stručnost odstranil.

Dále definujte úkoly, které se mají provést.

2. Definování úkolů

Obecně řečeno, vaše role bude provádět jednu nebo více úloh pro konfiguraci cílového systému podle požadavků role. V tomto případě budete chtít nainstalovat a nakonfigurovat Vim. Ve výchozím nastavení, když spustíte roli, hledá soubor s názvem main.yml v tasks podadresář a provádět všechny úkoly v něm uvedené. Úlohy můžete rozdělit do více souborů pro složitější role a volat je z main.yml pomocí include_tasks nebo import_tasks moduly.

Pro tuto roli zahrňte všechny požadované úlohy do tasks/main.yml soubor:

$ 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

Všimněte si, že na rozdíl od původní příručky nezahrnujete seznam balíčků nebo zásuvných modulů k instalaci přímo s definicí úlohy. Místo toho používáte proměnné install_packages a plugins .

Definováním proměnných namísto pevného kódování hodnot zajistíte, že vaše role budou znovupoužitelnější a snáze se udržují. Nyní definujte hodnoty pro tyto proměnné dvěma různými způsoby. Začněte s plugins proměnná, pokrytá dále.

3. Definování výchozích proměnných

Když vyvíjíte roli Ansible, možná budete chtít umožnit uživatelům role poskytovat hodnoty, které jim umožní přizpůsobit, jak role plní své úkoly. Díky těmto proměnným je vaše role více znovu použitelná, což uživatelům umožňuje upravit výsledek na základě jejich specifických požadavků.

V tomto příkladu plugins proměnná umožňuje uživatelům určit, které zásuvné moduly chtějí nainstalovat s Vim, díky čemuž je role flexibilní pro jejich potřeby. Doporučuje se pro něj definovat výchozí hodnotu v defaults/main.yml soubor, aby bylo zajištěno, že se role úspěšně spustí, i když uživatel nezadá hodnotu této proměnné.

Tento soubor definuje proměnné s velmi nízkou prioritou, což znamená, že je Ansible použije pouze v případě, že hodnota nebyla definována nikde jinde.

Nyní definujte výchozí hodnotu pro plugins proměnná takto:

$ 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

V tomto případě definujete výchozí hodnotu pomocí stejných hodnot z původního playbooku, což znamená, že pokud zavoláte roli bez zadání hodnoty této proměnné, bude se chovat přesně jako původní playbook a nainstaluje těchto šest pluginů.

Definujte vnitřní proměnné.

4. Definování proměnných rolí

Další třídou proměnných jsou proměnné role nebo interní proměnné. Definováním těchto proměnných v samostatném souboru od úkolů usnadníte údržbu své role. Tyto proměnné můžete znovu použít na mnoha místech a je jednodušší je aktualizovat na centrálním místě. Nechcete však uživatelům příliš usnadnit jejich přepsání tím, že je nastavíte na obecná umístění, jako je herní kniha nebo inventář.

Proměnné install_packages , který definuje seznam požadovaných balíčků k instalaci, a vimrc , který určuje umístění konfiguračního souboru Vim, jsou dobrými příklady interních proměnných. Definujte je v vars/main.yml . Tento soubor definuje proměnné s vyšší prioritou, které nelze snadno přepsat. Uživatelé mohou v případě potřeby stále poskytovat hodnoty tak, že je explicitně nastaví při volání role, ale v tomto případě můžete předpokládat, že vědí, co dělají.

$ 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

Další podrobnosti o tom, jak funguje priorita proměnných Ansible, najdete v dokumentaci k tématu Principy priority proměnných.

5. Kopírování souborů

Posledním krokem k vytvoření této role je zkopírování souboru vimrc do files adresář. Ve výchozím nastavení při použití copy modul jako úlohu role, vyhledá soubory ke zkopírování v files podadresář. Definujte vimrc soubor takto:

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

Uložte a zavřete soubor, abyste dokončili svou roli. Nyní je čas definovat příručku pro použití role.

6. Volání role z příručky

Nyní, když je vaše role dokončena, můžete ji zavolat ze svých příruček. Ve výchozím nastavení Ansible hledá role v roles podadresář vzhledem k souboru playbook nebo systémovému adresáři /etc/ansible/roles . Můžete také použít konfiguraci Ansible roles_path definovat alternativní umístění rolí.

V tomto příkladu vytvořte playbook ve stejném adresáři, kde jste vytvořili roles adresář. Přepněte na něj:

$ cd ../..
$ ls
roles

Vytvořte příručku vim-config.yaml , podobně jako původní playbook, ale tentokrát místo definování úkolů použijte modul import_role pro import vašeho nového vim role do příručky:

$ 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

Roli můžete také zahrnout do příručky pomocí modulu include_role . Rozdílům mezi těmito dvěma moduly se budu věnovat v samostatném článku. Pokud se nemůžete dočkat, podívejte se do dokumentace.

Nakonec spusťte playbook.

8. Spusťte playbook

Spusťte playbook pomocí ansible-playbook pomocí -K parametr a zadejte sudo heslo, které umožní Ansible instalovat systémové balíčky.

Poznámka :Zálohujte všechny existující .vimrc konfiguračního souboru před spuštěním této příručky.

$ 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   

Tato příručka spouští a provádí všechny úlohy v localhost. Pokud chcete nakonfigurovat vzdálený systém, vytvořte soubor inventáře s požadovanými systémy a aktualizujte playbook hosts seznam.

[ Hledáte více o automatizaci systému? Začněte s The Automated Enterprise, bezplatnou knihou od Red Hat. ] 

Sbalit

Nyní máte roli, která instaluje a konfiguruje Vim, kterou můžete znovu používat a sdílet. V dalším článku této série tuto roli vylepším přidáním souboru šablony, aby byla konfigurace ještě flexibilnější.

Molecule můžete také použít k testování svých rolí pomocí kontejnerů nebo virtuálních strojů. Pokud se chcete o tomto nástroji dozvědět více, přečtěte si můj článek Vývoj a testování rolí Ansible s Molecule a Podman – část 1 na oficiálním blogu Ansible.

Další informace o Ansible najdete v oficiální dokumentaci.


Linux
  1. Jak vytvořit uživatele Linuxu pomocí Ansible

  2. RHCE Ansible Series #9:Ansible Role

  3. Textové editory příkazového řádku v Linuxu

  1. Jak nakonfiguruji Vim jako svůj výchozí editor v Linuxu

  2. 7 kroků k zabezpečení serveru Linux

  3. Vývoj C# na Linuxu

  1. Jak nainstalovat a otestovat Ansible na Linuxu

  2. Demystifikování Ansible pro systémové správce Linuxu

  3. 4 kroky k vytvoření uživatelů Linuxu ze souboru csv pomocí Ansible