Назад | Перейти на главную страницу

Конфигурация LXC и Saltstack minion_id в Ubuntu

Я использую LXC в качестве лабораторной платформы для тестирования скриптов SaltStack. Лаборатория состоит из +5 контейнеров Ubuntu 12.04 LTS, которые я создаю путем клонирования контейнера шаблона с помощью salt-minion предустановлен.

После создания контейнера шаблона и установки salt-minion, шаблон получает свою соль minion_id на основе hostname (test-template). Если я lxc-clone этого шаблона, все клоны будут иметь minion_id, но я бы хотел, чтобы клоны имели minion_id соответствие их hostname (test-machine-{1,2,3,4,5}).

Есть ли способ сделать это с помощью сценария bash или я должен пойти другим путем, чтобы добиться того же эффекта?

ОБНОВИТЬ:

Я заглянул в некоторые из lxc скрипты и выяснил, что lxc скрипты используют /usr/share/lxc/lxc.functions файл, который определяет get_default_lxcpath функция, поэтому мой текущий сценарий выглядит примерно так:

. /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"                

Мне не нравится это решение, так как оно сильно зависит от внутренних компонентов lxc и saltstack, но выполняет свою работу.

ОБНОВЛЕНИЕ 2:

После предложения в комментариях о том, как salt-minion создаст новые minion_id когда существующий удален, я сократил это до двух команд:

. /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"

Я по-прежнему хотел бы видеть более общий / надежный подход, не зависящий от внутреннего устройства SaltStack и LXC.

Использовать docker с dockerfile. Вы можете легко найти в Интернете примеры для обоих salt-minion и salt-master.

Возьмите файлы и приступайте к созданию изображений (это всегда хорошая идея пометить их). Учитывая такую ​​структуру каталогов (внимательно следуя приведенным выше примерам):

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

тебе надо cd docker/salt-master и выдаем:

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

эквивалент для salt-minion:

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

Этот процесс создает повторно используемые изображения:

# 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

которые вы можете начать на переднем плане (и прикрепить к ним) или в фоновом режиме по мере необходимости. Вы также можете ссылка на сайт их:

# 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

Результат очень легко реализовать в сценариях:

# 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