Eu provavelmente usaria Ansible . É um mecanismo muito simples de gerenciamento / orquestração de configuração que é muito mais simples de se começar do que o Puppet (o Puppet costumava ser a escolha certa para isso, mas nem sempre agora, depois de ter descoberto o Ansible).
O benefício do Ansible aqui é que ele se comunica diretamente pelo SSH, para que você possa começar a usar apenas suas credenciais e fluxo de trabalho SSH existentes.
Se você está atualmente configurando seu BMC com ipmitool, você seria capaz de fazer algo como:
Defina um arquivo Hosts - Isso informa ao Ansible quais hosts estão no grupo bmc (neste caso), e para quais executar as coisas.
[bmc]
192.168.1.100
192.168.1.101
192.168.1.102
E assim por diante ... Você também pode usar nomes de host nesse arquivo, contanto que sejam resolvíveis.
Em seguida, crie um "playbook", que é o conjunto de comandos para executar em cada host em um grupo de hosts. Você deseja ter esse tipo de layout de diretório de cima para baixo:
ansible/
playbooks/
bmc.yml
roles/
bmcconfig/
files/
handlers/
main.yml
tasks/
main.yml
templates/
group_vars/
all
Um manual tem Funções , que são pequenas seções de configuração que você pode dividir e reutilizar.
Então eu criei um arquivo chamado bmc.yml
(a configuração All Ansible está em arquivos YAML)
---
- name: Configure BMC on the hosts
hosts: bmc
user: root
roles:
- bmcconfig
Em seguida, dentro de roles/bmcconfig/tasks/main.yml
você pode começar listando os comandos que devem ser executados em cada host, para se comunicar com o ipmi.
---
- name: Install ipmitool
apt: pkg=ipmitool state=installed
- name: Run ipmitool config
shell: ipmitool -your -options -go -here
Quando você executar o manual, com ansible-playbook -i hosts bmc.yml
os comandos listados em tasks/main.yml
para cada função serão executados na ordem de cima para baixo em cada host encontrado no bmc
hostgroup em hosts
group_vars/all
é um arquivo interessante, ele permite que você defina pares de valor-chave de variáveis e valores que podem ser usados em seus manuais.
para que você possa definir algo como
ipmitool_password: $512315Adb
no seu group_vars/all
e, como resultado, você poderia ter algo como:
shell: ipmitool -your -options -go -here --password=${ipmitool_password}
no playbook.
Você pode encontrar mais informações sobre como usar os "módulos" - os componentes do Ansible que permitem que você faça coisas, como escrever o seu próprio: D, e assim por diante no Páginas de documentação personalizáveis .