return False
-def named_checker(resource, ref, cloud_name):
+def named_checker(resource, ref, cloud_name, **kwargs):
resp_key = response_keys[resource]
resp = resource_lists[resource](
- name=ref, cloud_name=cloud_name)[resp_key]
+ name=ref, cloud_name=cloud_name, **kwargs)[resp_key]
if len(resp) == 0:
raise common.ResourceNotFound(resp_key, ref)
elif len(resp) > 1:
return resp[0]['id']
-def nameless_checker(resource, ref, cloud_name):
+def nameless_checker(resource, ref, cloud_name, **kwargs):
item_id = None
resp_key = response_keys[resource]
- resp = resource_lists[resource](cloud_name=cloud_name)[resp_key]
+ resp = resource_lists[resource](
+ cloud_name=cloud_name, **kwargs)[resp_key]
for item in resp:
if item["name"] == ref:
if item_id is not None:
def wrapped_f(*args, **kwargs):
results = []
args_start = 0
+ connection_params = kwargs.pop('connection_params', {}) or {}
for index, (resource, arg_name) in enumerate(
resource_arg_name_pairs):
if arg_name in kwargs:
results.append(ref)
else:
# Then we have name not uuid
- res = name_checkers[resource](resource, ref, cloud_name)
+ res = name_checkers[resource](resource, ref, cloud_name,
+ connection_params=connection_params)
results.append(res)
results.extend(args[args_start:])
return func(*results, **kwargs)
return wrapped_f
- return wrap
\ No newline at end of file
+ return wrap
try:
method_name = '{}_get_details'.format(resource)
exact_resource = _cinder_call(
- method_name, name, cloud_name=cloud_name
+ method_name, name, cloud_name=cloud_name, **kwargs
)[resource]
except Exception as e:
if 'ResourceNotFound' in repr(e):
return _succeeded('no_changes', name, resource)
-def _resource_absent(resource, name, cloud_name):
+def _resource_absent(resource, name, cloud_name, connection_params=None):
try:
method_name = '{}_get_details'.format(resource)
_cinder_call(
- method_name, name, cloud_name=cloud_name
+ method_name, name, cloud_name=cloud_name,
+ connection_params=connection_params
)[resource]
except Exception as e:
if 'ResourceNotFound' in repr(e):
try:
method_name = '{}_delete'.format(resource)
_cinder_call(
- method_name, name, cloud_name=cloud_name
+ method_name, name, cloud_name=cloud_name,
+ connection_params=connection_params
)
except Exception as e:
log.error('Cinder delete {0} failed with {1}'.format(resource, e))
return _succeeded('delete', name, resource)
-def service_enabled(name, binary, cloud_name):
+def service_enabled(name, binary, cloud_name, connection_params=None):
"""Ensures that the service is enabled on the host
- :param name: name of a host where service is running
- :param binary: name of the service have to be run
+ :param name: name of a host where service is running
+ :param binary: name of the service have to be run
+ :param connection_params: dictionary with salt internal connection params
"""
changes = {}
ret = []
- services = _cinder_call('service_list', host=name, binary=binary, cloud_name=cloud_name)['services']
+ services = _cinder_call('service_list', host=name, binary=binary, cloud_name=cloud_name,
+ connection_params=connection_params)['services']
disabled_service = [s for s in services if s['status'] == 'disabled']
if len(disabled_service):
for service in disabled_service:
- changes = _cinder_call('service_update', service['host'], binary, 'enable', cloud_name=cloud_name)
+ changes = _cinder_call('service_update', service['host'], binary, 'enable', cloud_name=cloud_name,
+ connection_params=connection_params)
ret.append(changes)
return _succeeded('update', name, binary, {'changes':ret})
return _succeeded('no_changes', name, binary)
-def service_disabled(name, binary, cloud_name, disabled_reason=None):
+def service_disabled(name, binary, cloud_name, disabled_reason=None, connection_params=None):
"""Ensures that the service is disabled on the host
:param name: name of a host where service is running
:param binary: name of the service have to be disabled
+ :param connection_params: dictionary with salt internal connection params
"""
kwargs = {}
ret = []
if disabled_reason:
kwargs['disabled_reason'] = disabled_reason
- services = _cinder_call('service_list', host=name, binary=binary, cloud_name=cloud_name)['services']
+ services = _cinder_call('service_list', host=name, binary=binary, cloud_name=cloud_name,
+ connection_params=connection_params)['services']
enabled_services = [s for s in services if s['status'] == 'enabled']
if len(enabled_services):
for service in enabled_services:
- changes = _cinder_call('service_update', service['host'], binary, 'disable', cloud_name=cloud_name, **kwargs)
+ changes = _cinder_call('service_update', service['host'], binary, 'disable',
+ cloud_name=cloud_name, connection_params=connection_params,
+ **kwargs)
ret.append(changes)
return _succeeded('update', name, binary, {'changes':ret})
return _succeeded('no_changes', name, binary)
return _resource_present('volume_type', name, cloud_name, **kwargs)
-def volume_type_absent(name, cloud_name):
- return _resource_absent('volume_type', name, cloud_name)
+def volume_type_absent(name, cloud_name, connection_params=None):
+ return _resource_absent('volume_type', name, cloud_name, connection_params)
def volume_present(name, cloud_name, size, **kwargs):
return _resource_present('volume', name, cloud_name, **kwargs)
-def volume_absent(name, cloud_name):
- return _resource_absent('volume', name, cloud_name)
+def volume_absent(name, cloud_name, connection_params=None):
+ return _resource_absent('volume', name, cloud_name, connection_params)
-def volume_type_key_present(name=None, key=None, value=None, cloud_name=None):
+def volume_type_key_present(name=None, key=None, value=None, cloud_name=None,
+ connection_params=None):
"""
Ensures that the extra specs are present on a volume type.
"""
keys = "{u'" + key + "': u'" + value + "'}"
keys = ast.literal_eval(keys)
signal_create = _cinder_call('keys_volume_type_set', name, keys=keys,
- cloud_name=cloud_name)
+ cloud_name=cloud_name,
+ connection_params=connection_params)
if signal_create["result"] is True:
ret = {
'name': name,
pkg.installed:
- names: {{ client.pkgs }}
-{% if client.identity is mapping %}
-{%- set identity = client.identity %}
-{%- else %}
-{%- set identity = salt['pillar.get']('keystone:client:server:'+client.identity) %}
-{%- endif %}
-
-{#- Keystone V3 is supported only from Ocata release (https://docs.openstack.org/releasenotes/python-cinderclient/ocata.html) #}
-{#- Therefore if api_version is not defined and OpenStack version is mitaka or newton use v2.0. #}
-{%- if 'api_version' in identity %}
-{%- set keystone_api_version = identity.get('api_version') %}
-{%- else %}
-{%- if 'version' in client and client.version in ['mitaka', 'newton'] %}
-{%- set keystone_api_version = 'v2.0' %}
-{%- else %}
-{%- set keystone_api_version = 'v3' %}
-{%- endif %}
-{%- endif %}
-
-{%- set credentials = {'host': identity.host,
- 'user': identity.user,
- 'password': identity.password,
- 'project_id': identity.project,
- 'port': identity.get('port', 35357),
- 'protocol': identity.get('protocol', 'http'),
- 'region_name': identity.get('region', 'RegionOne'),
- 'endpoint_type': identity.get('endpoint_type', 'internalURL'),
- 'certificate': identity.get('certificate', client.cacert_file),
- 'api_version': keystone_api_version} %}
-
{%- for backend_name, backend in client.get('backend', {}).items() %}
cinder_type_create_{{ backend_name }}:
cinderv3.volume_type_present:
- name: {{ backend.type_name }}
- cloud_name: admin_identity
+ {%- if client.connection_params is defined %}
+ - connection_params: {{ client.connection_params }}
+ {%- endif %}
- require:
- pkg: cinder_client_packages
- key: volume_backend_name
- value: {{ backend_name }}
- cloud_name: admin_identity
+ {%- if client.connection_params is defined %}
+ - connection_params: {{ client.connection_params }}
+ {%- endif %}
- require:
- cinderv3: cinder_type_create_{{ backend_name }}
- key: {{ key_name }}
- value: {{ key_value }}
- cloud_name: admin_identity
+ {%- if client.connection_params is defined %}
+ - connection_params: {{ client.connection_params }}
+ {%- endif %}
- require:
- cinderv3: cinder_type_create_{{ backend_name }}