Skip to content
This repository has been archived by the owner on Mar 24, 2022. It is now read-only.

Commit

Permalink
Merge pull request #898 from techhat/backport
Browse files Browse the repository at this point in the history
Backporting various fixes from salt.cloud into salt-cloud
  • Loading branch information
techhat committed Nov 21, 2013
2 parents 70352cd + 1c06c36 commit 5a2b2c8
Show file tree
Hide file tree
Showing 19 changed files with 697 additions and 204 deletions.
21 changes: 21 additions & 0 deletions salt_cloud/saltcloud/_compat.py
@@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
'''
Salt Cloud compatibility code
'''
try:
# Python >2.5
import xml.etree.cElementTree as ElementTree
except ImportError:
try:
# Python >2.5
import xml.etree.ElementTree as ElementTree
except ImportError:
try:
# normal cElementTree install
import elementtree.cElementTree as ElementTree
except ImportError:
try:
# normal ElementTree install
import elementtree.ElementTree as ElementTree
except ImportError:
raise
4 changes: 3 additions & 1 deletion salt_cloud/saltcloud/clouds/botocore_aws.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
'''
The AWS Cloud Module
====================
Expand Down Expand Up @@ -41,6 +42,7 @@
provider: aws
'''
# pylint: disable=E0102

# Import python libs
import os
Expand Down Expand Up @@ -213,7 +215,7 @@ def _toggle_term_protect(name, enabled):

# init botocore
vm_ = get_configured_provider()
session = botocore.session.get_session()
session = botocore.session.get_session() # pylint: disable=E0602
session.set_credentials(
access_key=config.get_config_value(
'id', vm_, __opts__, search_global=False
Expand Down
39 changes: 34 additions & 5 deletions salt_cloud/saltcloud/clouds/cloudstack.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
'''
CloudStack Cloud Module
=======================
Expand All @@ -18,8 +19,10 @@
provider: cloudstack
'''
# pylint: disable=E0102

# Import python libs
import copy
import pprint
import logging

Expand Down Expand Up @@ -50,6 +53,7 @@
list_nodes = namespaced_function(list_nodes, globals())
list_nodes_full = namespaced_function(list_nodes_full, globals())
list_nodes_select = namespaced_function(list_nodes_select, globals())
show_instance = namespaced_function(show_instance, globals())


# Only load in this module if the CLOUDSTACK configurations are in place
Expand Down Expand Up @@ -178,7 +182,7 @@ def get_ip(data):
'''
try:
ip = data.public_ips[0]
except:
except Exception:
ip = data.private_ips[0]
return ip

Expand Down Expand Up @@ -248,17 +252,27 @@ def create(vm_):
)
return False

ssh_username = config.get_config_value(
'ssh_username', vm_, __opts__, default='root'
)

ret = {}
if config.get_config_value('deploy', vm_, __opts__) is True:
deploy_script = script(vm_)
deploy_kwargs = {
'host': get_ip(data),
'username': 'root',
'username': ssh_username,
#'password': data.extra['password'],
'key_filename': get_key(),
'script': deploy_script.script,
'name': vm_['name'],
'deploy_command': '/tmp/deploy.sh',
'tmp_dir': config.get_config_value(
'tmp_dir', vm_, __opts__, default='/tmp/.saltcloud'
),
'deploy_command': config.get_config_value(
'deploy_command', vm_, __opts__,
default='/tmp/.saltcloud/deploy.sh',
),
'start_action': __opts__['start_action'],
'parallel': __opts__['parallel'],
'sock_dir': __opts__['sock_dir'],
Expand All @@ -267,6 +281,15 @@ def create(vm_):
'minion_pub': vm_['pub_key'],
'keep_tmp': __opts__['keep_tmp'],
'preseed_minion_keys': vm_.get('preseed_minion_keys', None),
'sudo': config.get_config_value(
'sudo', vm_, __opts__, default=(ssh_username != 'root')
),
'sudo_password': config.get_config_value(
'sudo_password', vm_, __opts__, default=None
),
'tty': config.get_config_value(
'tty', vm_, __opts__, default=False
),
'display_ssh_output': config.get_config_value(
'display_ssh_output', vm_, __opts__, default=True
),
Expand Down Expand Up @@ -306,13 +329,19 @@ def create(vm_):
)

# Store what was used to the deploy the VM
ret['deploy_kwargs'] = deploy_kwargs
event_kwargs = copy.deepcopy(deploy_kwargs)
del(event_kwargs['minion_pem'])
del(event_kwargs['minion_pub'])
del(event_kwargs['sudo_password'])
if 'password' in event_kwargs:
del(event_kwargs['password'])
ret['deploy_kwargs'] = event_kwargs

saltcloud.utils.fire_event(
'event',
'executing deploy script',
'salt/cloud/{0}/deploying'.format(vm_['name']),
{'kwargs': deploy_kwargs},
{'kwargs': event_kwargs},
)

deployed = False
Expand Down
35 changes: 31 additions & 4 deletions salt_cloud/saltcloud/clouds/digital_ocean.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
'''
Digital Ocean Cloud Module
==========================
Expand Down Expand Up @@ -32,6 +33,7 @@

# Import python libs
import os
import copy
import time
import json
import pprint
Expand Down Expand Up @@ -325,15 +327,25 @@ def __query_node_data(vm_name):
finally:
raise SaltCloudSystemExit(exc.message)

ssh_username = config.get_config_value(
'ssh_username', vm_, __opts__, default='root'
)

if config.get_config_value('deploy', vm_, __opts__) is True:
deploy_script = script(vm_)
deploy_kwargs = {
'host': data['ip_address'],
'username': 'root',
'username': ssh_username,
'key_filename': key_filename,
'script': deploy_script,
'name': vm_['name'],
'deploy_command': '/tmp/deploy.sh',
'tmp_dir': config.get_config_value(
'tmp_dir', vm_, __opts__, default='/tmp/.saltcloud'
),
'deploy_command': config.get_config_value(
'deploy_command', vm_, __opts__,
default='/tmp/.saltcloud/deploy.sh',
),
'start_action': __opts__['start_action'],
'parallel': __opts__['parallel'],
'sock_dir': __opts__['sock_dir'],
Expand All @@ -345,6 +357,15 @@ def __query_node_data(vm_name):
'display_ssh_output': config.get_config_value(
'display_ssh_output', vm_, __opts__, default=True
),
'sudo': config.get_config_value(
'sudo', vm_, __opts__, default=(ssh_username != 'root')
),
'sudo_password': config.get_config_value(
'sudo_password', vm_, __opts__, default=None
),
'tty': config.get_config_value(
'tty', vm_, __opts__, default=False
),
'script_args': config.get_config_value(
'script_args', vm_, __opts__
),
Expand Down Expand Up @@ -381,13 +402,19 @@ def __query_node_data(vm_name):
)

# Store what was used to the deploy the VM
ret['deploy_kwargs'] = deploy_kwargs
event_kwargs = copy.deepcopy(deploy_kwargs)
del(event_kwargs['minion_pem'])
del(event_kwargs['minion_pub'])
del(event_kwargs['sudo_password'])
if 'password' in event_kwargs:
del(event_kwargs['password'])
ret['deploy_kwargs'] = event_kwargs

saltcloud.utils.fire_event(
'event',
'executing deploy script',
'salt/cloud/{0}/deploying'.format(vm_['name']),
{'kwargs': deploy_kwargs},
{'kwargs': event_kwargs},
)

deployed = False
Expand Down
48 changes: 36 additions & 12 deletions salt_cloud/saltcloud/clouds/ec2.py
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
'''
The EC2 Cloud Module
====================
Expand Down Expand Up @@ -60,9 +61,11 @@
provider: ec2
'''
# pylint: disable=E0102

# Import python libs
import os
import copy
import sys
import stat
import time
Expand All @@ -80,7 +83,7 @@
import urllib2

# Import salt libs
from salt._compat import ElementTree as ET
from saltcloud._compat import ElementTree as ET

# Import saltcloud libs
import saltcloud.utils
Expand Down Expand Up @@ -725,6 +728,7 @@ def securitygroupid(vm_):
'securitygroupid', vm_, __opts__, search_global=False
)


def get_spot_config(vm_):
'''
Returns the spot instance configuration for the provided vm
Expand Down Expand Up @@ -753,14 +757,16 @@ def list_availability_zones():

def block_device_mappings(vm_):
'''
Return the block device mapping
e.g. [{'DeviceName': '/dev/sdb', 'VirtualName': 'ephemeral0'},
Return the block device mapping::
[{'DeviceName': '/dev/sdb', 'VirtualName': 'ephemeral0'},
{'DeviceName': '/dev/sdc', 'VirtualName': 'ephemeral1'}]
'''
return config.get_config_value(
'block_device_mappings', vm_, __opts__, search_global=True
)


def _param_from_config(key, data):
'''
Return EC2 API parameters based on the given config data.
Expand Down Expand Up @@ -793,12 +799,12 @@ def _param_from_config(key, data):

if isinstance(data, dict):
for k, v in data.items():
param.update( _param_from_config('%s.%s' % (key, k), v) )
param.update(_param_from_config('{0}.{1}'.format(key, k), v))

elif isinstance(data, list) or isinstance(data, tuple):
for idx, conf_item in enumerate(data):
prefix = '%s.%d' % (key, idx)
param.update( _param_from_config(prefix, conf_item) )
prefix = '{0}.{1}'.format(key, idx)
param.update(_param_from_config(prefix, conf_item))

else:
if isinstance(data, bool):
Expand All @@ -809,6 +815,7 @@ def _param_from_config(key, data):

return param


def create(vm_=None, call=None):
'''
Create a single VM from a data dict
Expand Down Expand Up @@ -905,7 +912,6 @@ def create(vm_=None, call=None):
raise SaltCloudConfigError(
'\'iam_profile\' should be a string value.'
)
pass

az_ = get_availability_zone(vm_)
if az_ is not None:
Expand Down Expand Up @@ -989,7 +995,7 @@ def create(vm_=None, call=None):

if rd_name is not None:
if ex_blockdevicemappings:
dev_list = [ dev['DeviceName'] for dev in ex_blockdevicemappings ]
dev_list = [dev['DeviceName'] for dev in ex_blockdevicemappings]
else:
dev_list = []

Expand Down Expand Up @@ -1274,13 +1280,24 @@ def __query_ip_address(params, url):
'host': ip_address,
'username': username,
'key_filename': key_filename,
'deploy_command': '/tmp/deploy.sh',
'tty': True,
'tmp_dir': config.get_config_value(
'tmp_dir', vm_, __opts__, default='/tmp/.saltcloud'
),
'deploy_command': config.get_config_value(
'deploy_command', vm_, __opts__,
default='/tmp/.saltcloud/deploy.sh',
),
'tty': config.get_config_value(
'tty', vm_, __opts__, default=True
),
'script': deploy_script,
'name': vm_['name'],
'sudo': config.get_config_value(
'sudo', vm_, __opts__, default=(username != 'root')
),
'sudo_password': config.get_config_value(
'sudo_password', vm_, __opts__, default=None
),
'start_action': __opts__['start_action'],
'parallel': __opts__['parallel'],
'conf_file': __opts__['conf_file'],
Expand Down Expand Up @@ -1327,13 +1344,20 @@ def __query_ip_address(params, url):
'win_password', vm_, __opts__, default=''
)

ret['deploy_kwargs'] = deploy_kwargs
# Store what was used to the deploy the VM
event_kwargs = copy.deepcopy(deploy_kwargs)
del(event_kwargs['minion_pem'])
del(event_kwargs['minion_pub'])
del(event_kwargs['sudo_password'])
if 'password' in event_kwargs:
del(event_kwargs['password'])
ret['deploy_kwargs'] = event_kwargs

saltcloud.utils.fire_event(
'event',
'executing deploy script',
'salt/cloud/{0}/deploying'.format(vm_['name']),
{'kwargs': deploy_kwargs},
{'kwargs': event_kwargs},
)

deployed = False
Expand Down

0 comments on commit 5a2b2c8

Please sign in to comment.