Skip to content

Instantly share code, notes, and snippets.

@kojiwell
Last active November 6, 2023 02:08
Show Gist options
  • Save kojiwell/7935747 to your computer and use it in GitHub Desktop.
Save kojiwell/7935747 to your computer and use it in GitHub Desktop.
OpenStack Heat template example: Deploy Salt Cluster with HOT

Deploy SaltStack with OpenStack Heat.

This is an example of HOT(Heat Orchestration Template), which deploy SaltStack cluster, with 1 master node and 5 minion nodes.

You can build it with one command.

heat stack-create saltstack \
  -u https://gist.github.com/kjtanaka/7935747/raw/6fcfce4d28b9d5dd7a5b824b678151cc64f522b7/deploy_salt.yml \
  -P "keyname=<key_name>;imagename=<image_name>"

For example, if the key and the image look like below,

nova keypair-list
+---------------+-------------------------------------------------+
| Name          | Fingerprint                                     |
+---------------+-------------------------------------------------+
| mykey         | xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx |
+---------------+-------------------------------------------------+
nova image-list
+--------------------------------------+--------------------------------+--------+--------------------------------------+
| ID                                   | Name                           | Status | Server                               |
+--------------------------------------+--------------------------------+--------+--------------------------------------+
| 68b33e91-4aec-4126-8bb2-770ec27ab1fe | F19-cfntools                   | ACTIVE |                                      |
+--------------------------------------+--------------------------------+--------+--------------------------------------+

Then, the command will be like this.

heat stack-create saltstack \
  -u https://gist.github.com/kjtanaka/7935747/raw/6fcfce4d28b9d5dd7a5b824b678151cc64f522b7/deploy_salt.yml \
  -P "keyname=mykey;imagename=F19-cfntools"
heat_template_version: 2013-05-23
description: Deploy Salt Cluster
parameters:
keyname:
type: string
description: Key name for loggin in to instances
imagename:
type: string
description: Image name
resources:
master:
type: OS::Nova::Server
properties:
key_name: { get_param: keyname }
image: { get_param: imagename }
flavor: m1.small
name: master
user_data:
str_replace:
template: |
#!/bin/bash
echo "Install Salt Master"
curl -L http://bootstrap.saltstack.org | sudo sh -s -- -M -N git develop
mkdir /srv/salt
echo -e 'file_roots:\n base:\n - /srv/salt' >> /etc/salt/master
pkill salt-master
service iptables stop
salt-master -d
minion01:
type: OS::Nova::Server
properties:
key_name: { get_param: keyname }
image: { get_param: imagename }
flavor: m1.small
name: minion01
user_data:
str_replace:
template: |
#!/bin/bash
echo "Install Salt Minion"
curl -L http://bootstrap.saltstack.org | sudo sh -s -- git develop
echo master: $master >> /etc/salt/minion
pkill salt-minion
service iptables stop
salt-minion -d
params:
$master: { get_attr: [ master, first_address ] }
minion02:
type: OS::Nova::Server
properties:
key_name: { get_param: keyname }
image: { get_param: imagename }
flavor: m1.small
name: minion02
user_data:
str_replace:
template: |
#!/bin/bash
echo "Install Salt Minion"
curl -L http://bootstrap.saltstack.org | sudo sh -s -- git develop
echo master: $master >> /etc/salt/minion
pkill salt-minion
service iptables stop
salt-minion -d
params:
$master: { get_attr: [ master, first_address ] }
minion03:
type: OS::Nova::Server
properties:
key_name: { get_param: keyname }
image: { get_param: imagename }
flavor: m1.small
name: minion03
user_data:
str_replace:
template: |
#!/bin/bash
echo "Install Salt Minion"
curl -L http://bootstrap.saltstack.org | sudo sh -s -- git develop
echo master: $master >> /etc/salt/minion
pkill salt-minion
service iptables stop
salt-minion -d
params:
$master: { get_attr: [ master, first_address ] }
minion04:
type: OS::Nova::Server
properties:
key_name: { get_param: keyname }
image: { get_param: imagename }
flavor: m1.small
name: minion04
user_data:
str_replace:
template: |
#!/bin/bash
echo "Install Salt Minion"
curl -L http://bootstrap.saltstack.org | sudo sh -s -- git develop
echo master: $master >> /etc/salt/minion
pkill salt-minion
service iptables stop
salt-minion -d
params:
$master: { get_attr: [ master, first_address ] }
minion05:
type: OS::Nova::Server
properties:
key_name: { get_param: keyname }
image: { get_param: imagename }
flavor: m1.small
name: minion05
user_data:
str_replace:
template: |
#!/bin/bash
echo "Install Salt Minion"
curl -L http://bootstrap.saltstack.org | sudo sh -s -- git develop
echo master: $master >> /etc/salt/minion
pkill salt-minion
service iptables stop
salt-minion -d
params:
$master: { get_attr: [ master, first_address ] }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment