Improve service validation during upgrade Manila
* Added modules which allows to check and manage services statuses.
* Added states which allows enable/disable one/all services by host name.
Change-Id: I078d089b221180ff2355087bc0601f904f8dbd94
Related-PROD: PROD-25158
diff --git a/_states/example.sls b/_states/example.sls
index 55afcba..66da3a0 100644
--- a/_states/example.sls
+++ b/_states/example.sls
@@ -11,3 +11,17 @@
manilang.share_type_absent:
- microversion: '2.4'
- cloud_name: admin
+
+manilang_service_disabled:
+ manilang.service_disabled:
+ - binary: manila-share
+ - cloud_name: admin_identity
+ - microversion: '2.40'
+ - name: cmp2
+
+manilang_service_enabled:
+ manilang.service_enabled:
+ - binary: manila-share
+ - cloud_name: admin_identity
+ - microversion: '2.40'
+ - name: cmp2
diff --git a/_states/manilang.py b/_states/manilang.py
index 964518a..97609c1 100644
--- a/_states/manilang.py
+++ b/_states/manilang.py
@@ -30,6 +30,8 @@
'set_type_specs': 'manilang.set_share_type_extra_specs',
'unset_type_specs': 'manilang.unset_share_type_extra_specs',
'delete_type': 'manilang.delete_share_type',
+ 'service_list': 'manilang.service_list',
+ 'service_update': 'manilang.service_update',
}
@@ -151,6 +153,64 @@
return _find_failed(name, 'share_type')
+def service_enabled(name, binary, cloud_name, microversion=None):
+ """
+ Method allows enable service by binary and name.
+
+ :param name: name of a host where service is running
+ :param binary: name of the service have to be run
+ """
+
+ ret = {}
+
+ services = __salt__[manilang_func['service_list']](binary=binary, cloud_name=cloud_name)['services']
+
+ # You are able to either enable certain manila-share instance by name@driver
+ # or all existed instances on a node by name
+ if '@' in name:
+ disabled_services = [s for s in services if name == s['host'] and s['status'] == 'disabled']
+ else:
+ disabled_services = [s for s in services if name == s['host'].split('@')[0] and s['status'] == 'disabled']
+
+ if len(disabled_services):
+ for service in disabled_services:
+
+ changes = __salt__[manilang_func['service_update']](service['host'], binary, 'enable', cloud_name=cloud_name, microversion=microversion)
+ ret[service['host']] = {'disabled': changes['disabled']}
+
+ return _updated(name, binary, ret)
+ return _no_changes(name, binary)
+
+
+def service_disabled(name, binary, cloud_name, microversion=None):
+ """
+ Method allows disable service by binary and name.
+
+ :param name: name of a host where service is running
+ :param binary: name of the service have to be disabled
+ """
+
+ ret = {}
+
+ services = __salt__[manilang_func['service_list']](binary=binary, cloud_name=cloud_name)['services']
+
+ # You are able to either disable certain manila-share instance by name@driver
+ # or all existed instances on a node by name
+ if '@' in name:
+ enabled_services = [s for s in services if name == s['host'] and s['status'] == 'enabled']
+ else:
+ enabled_services = [s for s in services if name == s['host'].split('@')[0] and s['status'] == 'enabled']
+
+ if len(enabled_services):
+ for service in enabled_services:
+
+ changes = __salt__[manilang_func['service_update']](service['host'], binary, 'disable', cloud_name=cloud_name, microversion=microversion)
+ ret[service['host']] = {'disabled': changes['disabled']}
+
+ return _updated(name, binary, ret)
+ return _no_changes(name, binary)
+
+
def _created(name, resource, resource_definition):
changes_dict = {
'name': name,