mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #43567 from assafShapira/develop
Fix xen server cloud driver
This commit is contained in:
commit
760e391f03
1 changed files with 51 additions and 18 deletions
|
@ -7,6 +7,7 @@ XenServer Cloud Driver
|
|||
The XenServer driver is designed to work with a Citrix XenServer.
|
||||
|
||||
Requires XenServer SDK
|
||||
(can be downloaded from https://www.citrix.com/downloads/xenserver/product-software/ )
|
||||
|
||||
Place a copy of the XenAPI.py in the Python site-packages folder.
|
||||
|
||||
|
@ -157,13 +158,27 @@ def _get_session():
|
|||
default=False,
|
||||
search_global=False
|
||||
)
|
||||
session = XenAPI.Session(url, ignore_ssl=ignore_ssl)
|
||||
log.debug('url: {} user: {} password: {}, originator: {}'.format(
|
||||
url,
|
||||
user,
|
||||
'XXX-pw-redacted-XXX',
|
||||
originator))
|
||||
session.xenapi.login_with_password(user, password, api_version, originator)
|
||||
try:
|
||||
session = XenAPI.Session(url, ignore_ssl=ignore_ssl)
|
||||
log.debug('url: {} user: {} password: {}, originator: {}'.format(
|
||||
url,
|
||||
user,
|
||||
'XXX-pw-redacted-XXX',
|
||||
originator))
|
||||
session.xenapi.login_with_password(
|
||||
user, password, api_version, originator)
|
||||
except XenAPI.Failure as ex:
|
||||
pool_master_addr = str(ex.__dict__['details'][1])
|
||||
slash_parts = url.split('/')
|
||||
new_url = '/'.join(slash_parts[:2]) + '/' + pool_master_addr
|
||||
session = XenAPI.Session(new_url)
|
||||
log.debug('session is -> url: {} user: {} password: {}, originator:{}'.format(
|
||||
new_url,
|
||||
user,
|
||||
'XXX-pw-redacted-XXX',
|
||||
originator))
|
||||
session.xenapi.login_with_password(
|
||||
user, password, api_version, originator)
|
||||
return session
|
||||
|
||||
|
||||
|
@ -182,14 +197,19 @@ def list_nodes():
|
|||
for vm in vms:
|
||||
record = session.xenapi.VM.get_record(vm)
|
||||
if not record['is_a_template'] and not record['is_control_domain']:
|
||||
ret[record['name_label']] = {
|
||||
'id': record['uuid'],
|
||||
'image': record['other_config']['base_template_name'],
|
||||
'name': record['name_label'],
|
||||
'size': record['memory_dynamic_max'],
|
||||
'state': record['power_state'],
|
||||
'private_ips': get_vm_ip(record['name_label'], session),
|
||||
'public_ips': None}
|
||||
try:
|
||||
base_template_name = record['other_config']['base_template_name']
|
||||
except Exception:
|
||||
base_template_name = None
|
||||
log.debug('VM {}, doesnt have base_template_name attribute'.format(
|
||||
record['name_label']))
|
||||
ret[record['name_label']] = {'id': record['uuid'],
|
||||
'image': base_template_name,
|
||||
'name': record['name_label'],
|
||||
'size': record['memory_dynamic_max'],
|
||||
'state': record['power_state'],
|
||||
'private_ips': get_vm_ip(record['name_label'], session),
|
||||
'public_ips': None}
|
||||
return ret
|
||||
|
||||
|
||||
|
@ -296,10 +316,17 @@ def list_nodes_full(session=None):
|
|||
for vm in vms:
|
||||
record = session.xenapi.VM.get_record(vm)
|
||||
if not record['is_a_template'] and not record['is_control_domain']:
|
||||
# deal with cases where the VM doesn't have 'base_template_name' attribute
|
||||
try:
|
||||
base_template_name = record['other_config']['base_template_name']
|
||||
except Exception:
|
||||
base_template_name = None
|
||||
log.debug('VM {}, doesnt have base_template_name attribute'.format(
|
||||
record['name_label']))
|
||||
vm_cfg = session.xenapi.VM.get_record(vm)
|
||||
vm_cfg['id'] = record['uuid']
|
||||
vm_cfg['name'] = record['name_label']
|
||||
vm_cfg['image'] = record['other_config']['base_template_name']
|
||||
vm_cfg['image'] = base_template_name
|
||||
vm_cfg['size'] = None
|
||||
vm_cfg['state'] = record['power_state']
|
||||
vm_cfg['private_ips'] = get_vm_ip(record['name_label'], session)
|
||||
|
@ -455,8 +482,14 @@ def show_instance(name, session=None, call=None):
|
|||
vm = _get_vm(name, session=session)
|
||||
record = session.xenapi.VM.get_record(vm)
|
||||
if not record['is_a_template'] and not record['is_control_domain']:
|
||||
try:
|
||||
base_template_name = record['other_config']['base_template_name']
|
||||
except Exception:
|
||||
base_template_name = None
|
||||
log.debug('VM {}, doesnt have base_template_name attribute'.format(
|
||||
record['name_label']))
|
||||
ret = {'id': record['uuid'],
|
||||
'image': record['other_config']['base_template_name'],
|
||||
'image': base_template_name,
|
||||
'name': record['name_label'],
|
||||
'size': record['memory_dynamic_max'],
|
||||
'state': record['power_state'],
|
||||
|
@ -716,7 +749,7 @@ def _copy_vm(template=None, name=None, session=None, sr=None):
|
|||
'''
|
||||
Create VM by copy
|
||||
|
||||
This is faster and should be used if source and target are
|
||||
This is slower and should be used if source and target are
|
||||
NOT in the same storage repository
|
||||
|
||||
template = object reference
|
||||
|
|
Loading…
Add table
Reference in a new issue