 23aa30f025
			
		
	
	23aa30f025
	
	
	
		
			
			Cluster related functions only support 3.11 microversion or higher. So it should be wrapped like like one[1], otherwise these fuctions may be exposed to lib users with old microversion. [1]: https://github.com/openstack/python-cinderclient/blob/master/cinderclient/v3/services.py#L82 Change-Id: I20d508c2694cf7e052d709548b9709df0561e2c3
		
			
				
	
	
		
			88 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Copyright (c) 2016 Red Hat, Inc.
 | |
| # All Rights Reserved.
 | |
| #
 | |
| #    Licensed under the Apache License, Version 2.0 (the "License"); you may
 | |
| #    not use this file except in compliance with the License. You may obtain
 | |
| #    a copy of the License at
 | |
| #
 | |
| #         http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| #    Unless required by applicable law or agreed to in writing, software
 | |
| #    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | |
| #    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | |
| #    License for the specific language governing permissions and limitations
 | |
| #    under the License.
 | |
| 
 | |
| """
 | |
| Interface to clusters API
 | |
| """
 | |
| from cinderclient import api_versions
 | |
| from cinderclient import base
 | |
| 
 | |
| 
 | |
| class Cluster(base.Resource):
 | |
|     def __repr__(self):
 | |
|         return "<Cluster: %s (id: %s)>" % (self.name, self.id)
 | |
| 
 | |
| 
 | |
| class ClusterManager(base.ManagerWithFind):
 | |
|     resource_class = Cluster
 | |
|     base_url = '/clusters'
 | |
| 
 | |
|     def _build_url(self, url_path=None, **kwargs):
 | |
|         url = self.base_url + ('/' + url_path if url_path else '')
 | |
|         filters = {'%s=%s' % (k, v) for k, v in kwargs.items() if v}
 | |
|         if filters:
 | |
|             url = "%s?%s" % (url, "&".join(filters))
 | |
|         return url
 | |
| 
 | |
|     @api_versions.wraps("3.7")
 | |
|     def list(self, name=None, binary=None, is_up=None, disabled=None,
 | |
|              num_hosts=None, num_down_hosts=None, detailed=False):
 | |
|         """Clustered Service list.
 | |
| 
 | |
|         :param name: filter by cluster name.
 | |
|         :param binary: filter by cluster binary.
 | |
|         :param is_up: filtering by up/down status.
 | |
|         :param disabled: filtering by disabled status.
 | |
|         :param num_hosts: filtering by number of hosts.
 | |
|         :param num_down_hosts: filtering by number of hosts that are down.
 | |
|         :param detailed: retrieve simple or detailed list.
 | |
|         """
 | |
|         url_path = 'detail' if detailed else None
 | |
|         url = self._build_url(url_path, name=name, binary=binary, is_up=is_up,
 | |
|                               disabled=disabled, num_hosts=num_hosts,
 | |
|                               num_down_hosts=num_down_hosts)
 | |
|         return self._list(url, 'clusters')
 | |
| 
 | |
|     @api_versions.wraps("3.7")
 | |
|     def show(self, name, binary=None):
 | |
|         """Clustered Service show.
 | |
| 
 | |
|         :param name: Cluster name.
 | |
|         :param binary: Clustered service binary.
 | |
|         """
 | |
|         url = self._build_url(name, binary=binary)
 | |
|         resp, body = self.api.client.get(url)
 | |
|         return self.resource_class(self, body['cluster'], loaded=True,
 | |
|                                    resp=resp)
 | |
| 
 | |
|     @api_versions.wraps("3.7")
 | |
|     def update(self, name, binary, disabled, disabled_reason=None):
 | |
|         """Enable or disable a clustered service.
 | |
| 
 | |
|         :param name: Cluster name.
 | |
|         :param binary: Clustered service binary.
 | |
|         :param disabled: Boolean determining desired disabled status.
 | |
|         :param disabled_reason: Value to pass as disabled reason.
 | |
|         """
 | |
|         url_path = 'disable' if disabled else 'enable'
 | |
|         url = self._build_url(url_path)
 | |
| 
 | |
|         body = {'name': name, 'binary': binary}
 | |
|         if disabled and disabled_reason:
 | |
|             body['disabled_reason'] = disabled_reason
 | |
|         result = self._update(url, body)
 | |
|         return self.resource_class(self, result['cluster'], loaded=True,
 | |
|                                    resp=result.request_ids)
 |