Existe um software de gerenciamento de configuração não agnóstico?

7

Não quero me rotular para módulos específicos do gerenciador de configuração, como o aptmódulo ou o módulo da Ansible yum.

Existe um software de gerenciamento de configuração não agnóstico ou pelo menos um com código não agnóstico para instalar os seguintes pacotes também para o Arch Linux ?

Eu pergunto isso porque não encontrei uma função de galáxia Ansible adequada para instalar o LAMP no Arch Linux e o seguinte script Bash para Debian não é adequado para o Arch:

#!/bin/bash

apt update -y
apt upgrade ufw sshguard unattended-upgrades wget curl git zip unzip tree -y

ufw --force enable
ufw allow 22,25,80,443

apt upgrade lamp-server^ ssmtp  -y
apt upgrade python-certbot-apache  -y
apt upgrade php-{cli,curl,mbstring,mcrypt,gd} phpmyadmin  -y

fonte

Respostas:

11

Tecnicamente, Ansible é isso; porque é sem agente; Eu o usei para gerenciar roteadores, switches, servidores, etc.

O que parece que você está pedindo é se o packagemódulo suporta o Arch Linux? Estou com preguiça de testar se isso suporta o Arch; mas se não existir, sempre existe o pacmanmódulo ... E se isso não funcionar ... Sempre há o seu próprio módulo.

O que você está falando é um problema maior com a execução de várias distribuições diferentes em um ambiente de produção . Torna-se doloroso para gerenciar a longo prazo. É por isso que é uma boa prática não executar várias distribuições na produção, pois, da perspectiva do gerenciamento (puramente do código), é muito trabalhoso. A maneira mais óbvia de contornar isso é com o Ansible usando whenem combinação com os_family:

    apt:
      name: apache2
    when: ansible_facts['os_family'] == "Debian"

    pacman:
      name: nginx
    when: ansible_facts['os_family'] == "Archlinux"

Eu já estive em uma situação em que tive que gerenciar servidores Debian e servidores CentOS em produção; eventualmente, eu escolhi o Debian puro porque:

  • A base de código para CM foi cortada ao meio (toda a lógica para peculiaridades específicas da distribuição foi removida).
  • O teste ficou menos doloroso (se você não estiver testando seu código CM, estará fazendo errado).

Você também encontrará grandes diferenças de qualquer maneira; por exemplo:

  • Alguns pacotes têm nomes diferentes; httpd(RHEL) vs apache2(Debian).
  • Diretórios de configuração "padrão" diferentes; /etc/default(Debian) vs /etc/sysconfig(RHEL).
  • Diferentes sistemas init; embora systemdtenha assumido em grande parte.
  • Sem SSH; por exemplo, WinRM para Windows.

Os sistemas de gerenciamento de configuração são uma maneira de abstrair o ambiente em código; e eles fornecem lógica / condicionais para você fazer isso sozinho .

Jeff Schaller
fonte
1
O packagemódulo apenas chama o módulo definido no ansible_pkg_mgrfato para esse sistema. Portanto, qualquer sistema de empacotamento suportado pela Ansible funcionará.
Michael Hampton
6

Manter um gerenciador de meta-pacotes parece-me uma tarefa sísifa, já que alguém teria que manter algum tipo de "apache2" em curtidas no Debian é "httpd" em curtidas no RHEL (etc) Rosetta Stone.

No entanto, existe um módulo pacman para o Ansible, desenvolvido especificamente para o uso do Ansible (a ferramenta de gerenciamento não agnóstico que você está procurando) para gerenciar pacotes em sistemas do tipo Arch. Na seção Exemplos da documentação do módulo vinculado:

- name: Install package foo
  pacman:
    name: foo
    state: present

- name: Upgrade package foo
  pacman:
    name: foo
    state: latest
    update_cache: yes

- name: Remove packages foo and bar
  pacman:
    name: foo,bar
    state: absent

- name: Recursively remove package baz
  pacman:
    name: baz
    state: absent
    recurse: yes
DopeGhoti
fonte
2

O pacote é Ansible "Generic OS package manager".

Uma opção seria incluir list_of_packages específico do SO

- include_vars: "{{ item }}"
   with_first_found:
     - files:
         - "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml"
         - "{{ ansible_distribution }}.yml"
         - "{{ ansible_os_family }}.yml"
         - "default.yml"
       paths: "{{ role_path }}/vars"

e instale os pacotes

- package:
    state: present
    name: "{{ item }}"
  loop: "{{ list_of_packages }}"
Vladimir Botka
fonte
2

O Nix é um gerenciador de pacotes independente que não se liga firmemente a nenhum sistema operacional. Eu o uso no MacOS e também no Ubuntu https://nixos.org/nix/

O Saltstack (compatível com Ansible) tem uma abstração melhor com o pkg.installed e você não precisa se preocupar com o sistema subjacente é apt ou rpm ou arch ... (ainda é necessário definir o nome do diff pkg se eles diferirem em sistemas, por exemplo, httpd ou apache2)

HVNSweeting
fonte