Skip to content

Instantly share code, notes, and snippets.

@masato
Last active November 29, 2016 07:22
Show Gist options
  • Save masato/bfdb341e0954d5eb9892 to your computer and use it in GitHub Desktop.
Save masato/bfdb341e0954d5eb9892 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
from libcloud.compute.deployment import ScriptDeployment
from libcloud.compute.deployment import MultiStepDeployment
import os
import time
ACCESS_KEY=os.environ.get('IDCF_COMPUTE_API_KEY')
SECRET_KEY=os.environ.get('IDCF_COMPUTE_SECRET_KEY')
HOST=os.environ.get('IDCF_COMPUTE_HOST')
PATH='/client/api'
SSH_KEY='/root/.ssh/{0}'.format(os.environ.get('IDCF_SSH_KEY_NAME'))
SSH_IF='private_ips'
class Salt(object):
def __init__(self):
self.cls = get_driver(Provider.CLOUDSTACK)
self.driver = self.cls(key=ACCESS_KEY,
secret=SECRET_KEY,
host=HOST,
path=PATH)
self.default_offering()
def default_offering(self):
self.image = [i for i in self.driver.list_images()
if i.name == 'Ubuntu Server 14.04 LTS 64-bit'][0]
self.size = [s for s in self.driver.list_sizes()
if s.name == 'light.S1'][0]
self.keyname = [k for k in self.driver.list_key_pairs()
if k.name == os.environ.get('IDCF_SSH_KEY_NAME')][0].name
def deploy(self,name,bootstrap):
start = time.time()
print('start {0}'.format(name))
script = ScriptDeployment(bootstrap)
msd = MultiStepDeployment([script])
node = self.driver.deploy_node(name=name,
image=self.image,
size=self.size,
ssh_key=SSH_KEY,
ex_keyname=self.keyname,
ssh_interface=SSH_IF,
deploy=msd)
end = time.time()
elapsed = end - start
print('end {0}, eplapsed: {1}'.format(name,elapsed))
def main():
master_bootstrap = '''#!/bin/bash
curl -L http://bootstrap.saltstack.com | sh -s -- -M
'''
minion_bootstrap = '''#!/bin/bash
curl -L http://bootstrap.saltstack.com | sh
'''
salt = Salt()
salt.deploy('salt',master_bootstrap)
for i in range(1, 3):
name = 'minion{0}'.format(i)
salt.deploy(name,minion_bootstrap)
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment