mirror of
https://github.com/valitydev/salt.git
synced 2024-11-08 01:18:58 +00:00
hpcs.py has been merged into openstack.py
This commit is contained in:
parent
a518fa5e29
commit
9a2b0d9dd7
@ -1,163 +0,0 @@
|
|||||||
'''
|
|
||||||
HP Cloud Module
|
|
||||||
======================
|
|
||||||
|
|
||||||
The HP cloud module. This module uses the preferred means to set up a
|
|
||||||
libcloud based cloud module and should be used as the general template for
|
|
||||||
setting up additional libcloud based modules.
|
|
||||||
|
|
||||||
The HP cloud module interfaces with the HP public cloud service
|
|
||||||
and requires that two configuration paramaters be set for use:
|
|
||||||
|
|
||||||
.. code-block:: yaml
|
|
||||||
|
|
||||||
# The login user
|
|
||||||
HPCLOUD.user: fred
|
|
||||||
# The user's password
|
|
||||||
HPCLOUD.password: mylittlesecret
|
|
||||||
# The auth endpoint url
|
|
||||||
HPCLOUD.auth_endpoint: https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/
|
|
||||||
# The compute region
|
|
||||||
HPCLOUD.region: az-1.region-a.geo-1
|
|
||||||
# The keypair name
|
|
||||||
HPCLOUD.keyname: cloudKey
|
|
||||||
# The tenant name (not tenant ID)
|
|
||||||
HPCLOUD.tenant_name: fred-tenant1
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
# The import section is mostly libcloud boilerplate
|
|
||||||
|
|
||||||
# Import python libs
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import types
|
|
||||||
import paramiko
|
|
||||||
import tempfile
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
# Import libcloud
|
|
||||||
from libcloud.compute.types import Provider
|
|
||||||
from libcloud.compute.providers import get_driver
|
|
||||||
from libcloud.compute.deployment import MultiStepDeployment, ScriptDeployment, SSHKeyDeployment
|
|
||||||
|
|
||||||
# Import generic libcloud functions
|
|
||||||
from saltcloud.libcloudfuncs import *
|
|
||||||
|
|
||||||
# Some of the libcloud functions need to be in the same namespace as the
|
|
||||||
# functions defined in the module, so we create new function objects inside
|
|
||||||
# this module namespace
|
|
||||||
avail_images = types.FunctionType(avail_images.__code__, globals())
|
|
||||||
avail_sizes = types.FunctionType(avail_sizes.__code__, globals())
|
|
||||||
script = types.FunctionType(script.__code__, globals())
|
|
||||||
destroy = types.FunctionType(destroy.__code__, globals())
|
|
||||||
list_nodes = types.FunctionType(list_nodes.__code__, globals())
|
|
||||||
list_nodes_full = types.FunctionType(list_nodes_full.__code__, globals())
|
|
||||||
|
|
||||||
|
|
||||||
# Only load in this module is the HPCLOUD configurations are in place
|
|
||||||
def __virtual__():
|
|
||||||
'''
|
|
||||||
Set up the libcloud functions and check for HPCLOUD configs
|
|
||||||
'''
|
|
||||||
key_values = [ 'HPCLOUD.user'
|
|
||||||
, 'HPCLOUD.password'
|
|
||||||
, 'HPCLOUD.auth_endpoint'
|
|
||||||
, 'HPCLOUD.region'
|
|
||||||
, 'HPCLOUD.keyname'
|
|
||||||
, 'HPCLOUD.tenant_name'
|
|
||||||
]
|
|
||||||
have_values = 0
|
|
||||||
for value in key_values:
|
|
||||||
if value in __opts__:
|
|
||||||
have_values += 1
|
|
||||||
print have_values, len(key_values), value
|
|
||||||
if have_values == len(key_values):
|
|
||||||
return 'hpcs'
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def get_conn():
|
|
||||||
'''
|
|
||||||
Return a conn object for the passed vm data
|
|
||||||
'''
|
|
||||||
driver = get_driver(Provider.OPENSTACK)
|
|
||||||
return driver(
|
|
||||||
__opts__['HPCLOUD.user'],
|
|
||||||
__opts__['HPCLOUD.password'],
|
|
||||||
ex_force_auth_url = __opts__['HPCLOUD.auth_endpoint'],
|
|
||||||
ex_force_auth_version = '2.0_password',
|
|
||||||
ex_force_service_name = 'Compute',
|
|
||||||
ex_force_service_region = __opts__['HPCLOUD.region'],
|
|
||||||
ex_tenant_name = __opts__['HPCLOUD.tenant_name']
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def create(vm_):
|
|
||||||
'''
|
|
||||||
Create a single vm from a data dict
|
|
||||||
'''
|
|
||||||
print('Creating Cloud VM {0}'.format(vm_['name']))
|
|
||||||
conn = get_conn()
|
|
||||||
deploy_script = script(vm_)
|
|
||||||
kwargs = {}
|
|
||||||
kwargs['name'] = vm_['name']
|
|
||||||
kwargs['image'] = get_image(conn, vm_)
|
|
||||||
if not kwargs['image']:
|
|
||||||
err = ('Error creating {0} on HPCLOUD\n\n'
|
|
||||||
'Could not find image {1}\n').format(
|
|
||||||
vm_['name'], vm_['image']
|
|
||||||
)
|
|
||||||
sys.stderr.write(err)
|
|
||||||
return False
|
|
||||||
kwargs['size'] = get_size(conn, vm_)
|
|
||||||
if not kwargs['size']:
|
|
||||||
err = ('Error creating {0} on HPCLOUD\n\n'
|
|
||||||
'Could not find size {1}\n').format(
|
|
||||||
vm_['name'], vm_['size']
|
|
||||||
)
|
|
||||||
sys.stderr.write(err)
|
|
||||||
return False
|
|
||||||
kwargs['ex_keyname'] = __opts__['HPCLOUD.keyname']
|
|
||||||
try:
|
|
||||||
data = conn.create_node(**kwargs)
|
|
||||||
except Exception as exc:
|
|
||||||
err = ('Error creating {0} on HPCLOUD\n\n'
|
|
||||||
'The following exception was thrown by libcloud when trying to '
|
|
||||||
'run the initial deployment: \n{1}\n').format(
|
|
||||||
vm_['name'], exc
|
|
||||||
)
|
|
||||||
sys.stderr.write(err)
|
|
||||||
print traceback.format_exc()
|
|
||||||
return False
|
|
||||||
# NOTE
|
|
||||||
# We need to insert a wait / poll into libcloud until we have
|
|
||||||
# public ips for our node. Otherwise, we cannot complete the
|
|
||||||
# next step of deploying a script to the new server :(
|
|
||||||
if data.public_ips:
|
|
||||||
host_addr = data.public_ips[0]
|
|
||||||
else:
|
|
||||||
host_addr = None
|
|
||||||
|
|
||||||
if 'ssh_username' in vm_:
|
|
||||||
ssh_user = vm_['ssh_username']
|
|
||||||
else:
|
|
||||||
ssh_user = 'root'
|
|
||||||
|
|
||||||
deployed = saltcloud.utils.deploy_script(
|
|
||||||
host=host_addr,
|
|
||||||
username=ssh_user,
|
|
||||||
password=data.extra['password'],
|
|
||||||
script=deploy_script.script,
|
|
||||||
name=vm_['name'],
|
|
||||||
sock_dir=__opts__['sock_dir'])
|
|
||||||
if deployed:
|
|
||||||
print('Salt installed on {0}'.format(vm_['name']))
|
|
||||||
else:
|
|
||||||
print('Failed to start Salt on Cloud VM {0}'.format(vm_['name']))
|
|
||||||
|
|
||||||
print('Created Cloud VM {0} with the following values:'.format(
|
|
||||||
vm_['name']
|
|
||||||
))
|
|
||||||
for key, val in data.__dict__.items():
|
|
||||||
print(' {0}: {1}'.format(key, val))
|
|
Loading…
Reference in New Issue
Block a user