blob: c45e9704d566ca7d603c21a0c6333ea262848f80 [file] [log] [blame]
"""
Management of Cinder resources
"""
import ast
import logging
LOG = logging.getLogger(__name__)
def __virtual__():
return 'cinderv3'
def _cinder_call(fname, *args, **kwargs):
return __salt__['cinderv3.{}'.format(fname)](*args, **kwargs)
def volume_type_present(name=None, cloud_name=None):
"""
Ensures that the specified volume type is present.
"""
ret = {
'name': name,
'changes': {},
'result': True,
'comment': 'Volume type "{0}" already exists'.format(name)
}
type_req = _cinder_call('volume_type_get', name=name, cloud_name=cloud_name)
if type_req.get("result"):
return ret
else:
create_req = _cinder_call('volume_type_create', name=name,
cloud_name=cloud_name)
if create_req.get("result") is False:
ret = {
'name': name,
'changes': {},
'result': False,
'comment': 'Volume type "{0}" failed to create'.format(name)
}
else:
ret['comment'] = 'Volume type {0} has been created'.format(name)
ret['changes']['Volume type'] = 'Created'
return ret
def volume_type_absent(name=None, cloud_name=None):
"""
Ensures that the specified volume type is absent.
"""
ret = {
'name': name,
'changes': {},
'result': True,
'comment': 'Volume type "{0}" not found'.format(name)
}
type_req = _cinder_call('volume_type_get', name=name, cloud_name=cloud_name)
if not type_req.get("result"):
return ret
else:
delete_req = _cinder_call('volume_type_delete', name=name,
cloud_name=cloud_name)
if delete_req.get("result") is False:
ret = {
'name': name,
'changes': {},
'result': False,
'comment': 'Volume type "{0}" failed to delete'.format(name)
}
else:
ret['comment'] = 'Volume type {0} has been deleted'.format(name)
ret['changes']['Volume type'] = 'Deleted'
return ret
def volume_type_key_present(name=None, key=None, value=None, cloud_name=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=name, keys=keys, cloud_name=cloud_name)
if signal_create["result"] is True:
ret = {
'name': name,
'changes': keys,
'result': True,
'comment': 'Volume type "{0}" was updated'.format(name)
}
else:
ret = {
'name': name,
'changes': {},
'result': False,
'comment': signal_create.get("comment")
}
return ret