LXC e Saltstack configuração minion_id no Ubuntu

3

Estou usando o LXC como uma plataforma de laboratório para testar scripts SaltStack. O laboratório consiste em +5 contêineres Ubuntu 12.04 LTS, que eu crio clonando um contêiner de modelo com salt-minion pré-instalado.

Depois que eu criar o contêiner de modelo e instalar salt-minion , o modelo receberá seu Sal minion_id com base em hostname ( test-template ). Se eu lxc-clone este modelo, todos os clones terão o minion_id desse modelo, mas eu gostaria que os clones tivessem minion_id correspondendo ao hostname ( test-machine-{1,2,3,4,5} ).

Existe uma maneira de fazer este script com bash ou devo tomar outro caminho para o mesmo efeito?

UPDATE :

Eu examinei alguns dos scripts lxc e descobri que lxc scripts usam /usr/share/lxc/lxc.functions file que define get_default_lxcpath function, então meu script atual é parecido com isto:

. /usr/share/lxc/lxc.functions

# clone template
lxc-clone -o $template -n "$container"

# create saltstack minion config dir if does not exist    
minion_id_path="$(get_default_lxcpath)/$container/rootfs/etc/salt"
mkdir -p "$minion_id_path"

# set minion-id directly from container name
echo "$container" > "$minion_id_path/minion_id"                

Eu não gosto dessa solução, já que ela depende muito dos internos do lxc e do saltstack, mas faz o trabalho.

UPDATE 2 :

Após a sugestão em comentários sobre como salt-minion gerará novo minion_id quando um existente for excluído, reduzi isso para dois comandos:

. /usr/share/lxc/lxc.functions

# clone template
lxc-clone -o $template -n "$container"

# delete minion_id to allow salt-minion to generate a new one
rm "$(get_default_lxcpath)/$container/rootfs/etc/salt/minion_id"

Eu ainda gostaria de ver uma abordagem mais genérica / robusta não dependendo dos componentes internos do SaltStack e do LXC.

    
por LavaScornedOven 07.04.2014 / 16:39

1 resposta

3

Use docker com um dockerfile . Você pode encontrar facilmente exemplos online para salt-minion e salt-master .

Agarre os arquivos e continue a criar as imagens (é sempre uma boa ideia para marcá-las ). Dada uma estrutura de diretórios como esta (seguindo de perto os exemplos apontados acima):

docker/
├── salt-master
│   ├── Dockerfile
│   └── supervisor-salt.conf
└── salt-minion
    ├── Dockerfile
    └── supervisor-salt.conf

você precisa cd docker/salt-master e problema:

# docker build -t kstaken/ubuntu-salt-master .

o equivalente para o salt-minion :

# cd docker/salt-minion
# docker build -t kstaken/ubuntu-salt-minion .

Este processo cria imagens reutilizáveis:

# docker images | grep kstaken
kstaken/ubuntu-salt-minion   latest              557c052f5b14        19 seconds ago      253.5 MB
kstaken/ubuntu-salt-master   latest              1f41866d05e1        5 minutes ago       262.7 MB

que você pode começar em primeiro plano (e anexar a eles) ou em segundo plano, conforme necessário. Você também pode link deles:

# docker run --detach=true --hostname=salt-master --networking=true kstaken/ubuntu-salt-maste
# docker run --detach=true --hostname=minion1 --networking=true --link bersek_morse:linked-server kstaken/ubuntu-salt-minion
# docker run --detach=true --hostname=minion2 --networking=true --link berserk_morse:linked-server kstaken/ubuntu-salt-minion

O resultado é muito fácil de escrever:

# docker ps
CONTAINER ID        IMAGE                               COMMAND                CREATED             STATUS              PORTS                NAMES
4fae47241a73        kstaken/ubuntu-salt-minion:latest   /usr/bin/supervisord   4 seconds ago       Up 2 seconds                             goofy_fermi
6030e7f882ba        kstaken/ubuntu-salt-minion:latest   /usr/bin/supervisord   25 seconds ago      Up 23 seconds                            desperate_hawking
22b18a387e21        kstaken/ubuntu-salt-master:latest   /usr/bin/supervisord   3 minutes ago       Up 3 minutes        4505/tcp, 4506/tcp   berserk_morse,desperate_hawking/linked-server,goofy_fermi/linked-server
    
por 09.04.2014 / 20:31