1# coding: utf-8 2 3""" 4 API Specification 5 6 # Introduction Welcome to gridscales API documentation. A REST API is a programming interface that allows you to access and send data directly to our systems using HTTPS requests, without the need to use a web GUI. All the functionality you are already familiar with in your control panel is accessible through the API, including expert methods that are only available through the API. Allowing you to script any actions you require, regardless of their complexity. First we will start with a general overview about how the API works, followed by an extensive list of each endpoint, describing them in great detail. ## Requests For security, gridscale requires all API requests are made through the HTTPS protocol so that traffic is encrypted. The following table displays the different type of requests that the interface responds to, depending on the action you require. | Method | Description | | --- | --- | | GET | A simple search of information. The response is a JSON object. Requests using GET are always read-only. | | POST | Adds new objects and object relations. The POST request must contain all the required parameters in the form of a JSON object. | | PATCH | Changes an object or an object relation. The parameters in PATCH requests are usually optional, so only the changed parameters must be specified in a JSON object. | | DELETE | Deletes an object or object relation. The object is deleted if it exists. | | OPTIONS | Get an extensive list of the servers support methods and characteristics. We will not give example OPTION requests on each endpoint, as they are extensive and self-descriptive. | <aside class=\"notice\"> The methods PATCH and DELETE are idempotent - that is, a request with identical parameters can be sent several times, and it doesn't change the result. </aside> ## Status Codes | HTTP Status | `Message` | Description | | --- | --- | --- | | 200 | `OK` | The request has been successfully processed and the result of the request is transmitted in the response. | | 202 | `Accepted` | The request has been accepted, but will run at a later date. Meaning we can not guarantee the success of the request. You should poll the request to be notified once the resource has been provisioned - see the requests endpoint on how to poll. | | 204 | `No Content` | The request was successful, but the answer deliberately contains no data. | | 400 | `Bad Request` | The request message was built incorrectly. | | 401 | `Unauthorised` | The request can not be performed without a valid authentication. X-Auth UserId or X-Auth token HTTP header is not set or the userID / token is invalid. | | 402 | `Payment Required` | Action can not be executed - not provided any or invalid payment methods. | | 403 | `Forbidden` | The request was not carried out due to lack of authorization of the user or because an impossible action was requested. | | 404 | `Not Found` | The requested resource was not found. Will also be used if you do a resource exists, but the user does not have permission for it. | | 405 | `Method Not Allowed` | The request may be made only with other HTTP methods (eg GET rather than POST). | | 409 | `Conflict` | The request was made under false assumptions. For example, a user can not be created twice with the same email. | | 415 | `Unsupported Media Type` | The contents of the request have been submitted with an invalid media type. All POST or PATCH requests must have \"Content-Type : application / json\" as a header, and send a JSON object as a payload. | | 416 | `Requested Range Not Satisfiable` | The request could not be fulfilled. It is possible that a resource limit was reached or an IPv4 address pool is exhausted. | | 424 | `Failed Dependency` | The request could not be performed because the object is in the wrong status. | | 429 | `Too Many Requests` | The request has been rejected because rate limits have been exceeded. | <aside class=\"success\"> Status 200-204 indicates that the request has been accepted and is processed. </aside> <aside class=\"notice\"> Status 400-429 indicates that there was a problem with the request that originated on the client. You will find more information about the problem in the body of 4xx response. </aside> <aside class=\"warning\"> A status 500 means that there was a server-side problem and your request can not be processed now. </aside> ## Request Headers | Header | Description | | --- | --- | | Content-Type | Always \"application/json\". | | X-Auth-userId | The user UUID. This can be found in the panel under \"API\" and will never change ( even after the change of user e-mail). | | X-Auth-Token | Is generated from the API hash and must be sent with all API requests. Both the token and its permissions can be configured in the panel.| ## Response Headers | Header | Description | | --- | --- | | Content-Type | Always \"application/json\". | | X-Time-Provisioning | The time taken to process the request (in ms). | | X-Api-Identity | The currently active Provisioning API version. Useful when reporting bugs to us. | | X-Request-Id | The unique identifier of the request, be sure to include it when referring to a request. | | RateLimit-Limit | The number of requests that can be made per minute. | | RateLimit-Remaining | The number of requests that still remain before you hit your request limit. | | RateLimit-Reset | A [Unix timestamp](https://en.wikipedia.org/wiki/Unix_time) in milliseconds of when the rate limit will reset, or the time at which a request no longer will return 429 - Too Many Requests. | ## Timestamp Format All timestamps follow <a href=\"https://de.wikipedia.org/wiki/ISO_8601\" target=\"_blank_\">ISO 8601</a> and issued in <a href=\"https://www.timeanddate.de/zeitzonen/utc-gmt\" target=\"_blank_\">UTC</a> ## CORS ### Cross Origin Resource Sharing To allow API access from other domains that supports the API CORS (Cross Origin Resource Sharing). See: enable-cors.org/ . This allows direct use the API in the browser running a JavaScript web control panel. All this is done in the background by the browser. The following HTTP headers are set by the API: Header | Parameter | Description --- | --- | --- Access-Control-Allow-Methods | GET, POST, PUT, PATCH, DELETE, OPTIONS | Contains all available methods that may be used for queries. Access-Control-Allow-Credentials | true | Is set to \"true\". Allows the browser to send the authentication data via X-Auth HTTP header. Access-Control-Allow-Headers | Origin, X-Requested-With, Content-Type, Accept, X-Auth-UserId, X-Auth-Token, X-Exec-Time, X-API-Version, X-Api-Client | The HTTP headers available for requests. Access-Control-Allow-Origin | * | The domain sent by the browser as a source of demand. Access-Control-Expose-Headers | X-Exec-Time, X-Api-Version | The HTTP headers that can be used by a browser application. ## Rate Limits The number of requests that can be made through our API is currently limited to 210 requests per 60 seconds. The current state of rate limiting is returned within the response headers of each request. The relevant response headers are - RateLimit-Limit - RateLimit-Remaining - RateLimit-Reset See the Response Headers section for details. As long as the `RateLimit-Remaining` count is above zero, you will be able to make further requests. As soon as the `RateLimit-Remaining` header value is zero, subsequent requests will return the 429 status code. This will stay until the timestamp given in `RateLimit-Reset` has been reached. ### Example rate limiting response ```shell HTTP/1.0 429 TOO MANY REQUESTS Content-Length: 66 Content-Type: application/json; charset=utf-8 Date: Mon, 11 Nov 2019 11:11:33 GMT RateLimit-Limit: 210 RateLimit-Remaining: 0 RateLimit-Reset: 1573468299256 { \"id\": \"too_many_requests\", \"message\": \"API Rate limit exceeded.\" } ``` It is important to understand how rate limits are reset in order to use the API efficiently. Rate limits are reset for all counted requests at once. This means that that once the timestamp `RateLimit-Remaining` has arrived all counted request are reset and you can again start sending requests to the API. This allows for short burst of traffic. The downside is once you have hit the request limit no more requests are allowed until the rate limit duration is reset. ## Object Relations Relationships describe resource objects (storages, networks, IPs, etc.) that are connected to a server. These relationships are treated like objects themselves and can have properties specific to this relation. One example would be, that the MAC address of a private network connected to a server (Server-to-Network relation) can be found as property of the relation itself - the relation is the _network interface_ in the server. Another example is storage, where the SCSI LUN is also part of the Server-to-Storage relation object. This information is especially interesting if some kind of network boot is used on the servers, where the properties of the server need to be known beforehand. ## Deleted Objects Objects that are deleted are no longer visible on their *regular* endpoints. For historical reasons these objects are still available read-only on a special endpoint named /deleted. If objects have been deleted but have not yet been billed in the current period, the yet-to-be-billed price is still shown. <!-- #strip_js --> ## Node.js Library We have a JavaScript library for you to use our API with ease. <a href=\"https://www.npmjs.com/package/@gridscale/api\" target=\"_blank\"><img src=\"https://badge.fury.io/js/%40gridscale%2Fapi.svg\" alt=\"npm badge\"></a> <aside class=\"success\"> We want to make it even easier for you to manage your Infrastructure via our API - so feel free to contact us with any ideas, or languages you would like to see included. </aside> Requests with our Node.js lib return a little differently. Everything is the same except it allows you to add URL parameters to customize your requests. To get started <a href=\"https://www.npmjs.com/package/@gridscale/api\" target=\"_blank\">click here</a> . <!-- #strip_js_end --> <!-- #strip_go --> ## Golang Library We also have a Golang library for Gophers. Requests with our Golang lib return a little differently. Everything is the same except it allows you to add URL parameters to customize your requests. To get started <a href=\"https://github.com/gridscale/gsclient-go\" target=\"_blank\">click here</a> . <!-- #strip_go_end --> <!-- #strip_python --> ## Python Library We have a Python library, that optionally also simplifies handling of asynchronous requests by mimicking synchronous blocking behaviour. To get started <a href=\"https://pypi.org/project/gs-api-client/\" target=\"_blank\">click here</a> . <!-- #strip_python_end --> # Authentication In order to use the API, the User-UUID and an API_Token are required. Both are available via the web GUI which can be found here on <a href=\"https://my.gridscale.io/APIs/\" target=\"_blank\">Your Account</a> <aside class=\"success\"> If you are logged in, your UUID and Token will be pulled dynamically from your account, so you can copy request examples straight into your code. </aside> The User-UUID remains the same, even if the users email address is changed. The API_Token is a randomly generated hash that allows read/write access. ## API_Token <table class=\"security-details\"><tbody><tr><th> Security scheme type: </th><td> API Key </td></tr><tr><th> header parameter name:</th><td> X-Auth-Token </td></tr></tbody></table> ## User_UUID <table class=\"security-details\"><tbody><tr><th> Security scheme type: </th><td> API Key </td></tr><tr><th> header parameter name:</th><td> X-Auth-UserId </td></tr></tbody></table> ## Examples <!-- #strip_js --> > Node.js ``` // to get started // read the docs @ https://www.npmjs.com/package/@gs_js_auth/api var gs_js_auth = require('@gs_js_auth/api').gs_js_auth; var client = new gs_js_auth.Client(\"##API_TOKEN##\",\"##USER_UUID##\"); ``` <!-- #strip_js_end --> <!-- #strip_go --> > Golang ``` // to get started // read the docs @ https://github.com/gridscale/gsclient-go config := gsclient.NewConfiguration( \"https://api.gridscale.io\", \"##USER_UUID##\", \"##API_TOKEN##\", false, //set debug mode ) client := gsclient.NewClient(config) ``` <!-- #strip_go_end --> > Shell Authentication Headers ``` -H \"X-Auth-UserId: ##USER_UUID##\" \\ -H \"X-Auth-Token: ##API_TOKEN##\" \\ ``` > Setting Authentication in your Environment variables ``` export API_TOKEN=\"##API_TOKEN##\" USER_UUID=\"##USER_UUID##\" ``` <aside class=\"notice\"> You must replace <code>USER_UUID</code> and <code>API_Token</code> with your personal UUID and API key respectively. </aside> # noqa: E501 7 8 OpenAPI spec version: 1.0.16 9 10 Generated by: https://github.com/swagger-api/swagger-codegen.git 11""" 12 13 14import pprint 15import re # noqa: F401 16 17import six 18 19from gs_api_client.swagger.models.task_events_server_server_add import TaskEventsServerServerAdd # noqa: F401,E501 20from gs_api_client.swagger.models.task_events_server_server_power_update import TaskEventsServerServerPowerUpdate # noqa: F401,E501 21from gs_api_client.swagger.models.task_events_server_server_relation_ipaddr_add import TaskEventsServerServerRelationIpaddrAdd # noqa: F401,E501 22from gs_api_client.swagger.models.task_events_server_server_relation_isoimage_add import TaskEventsServerServerRelationIsoimageAdd # noqa: F401,E501 23from gs_api_client.swagger.models.task_events_server_server_relation_isoimage_remove import TaskEventsServerServerRelationIsoimageRemove # noqa: F401,E501 24from gs_api_client.swagger.models.task_events_server_server_relation_network_add import TaskEventsServerServerRelationNetworkAdd # noqa: F401,E501 25from gs_api_client.swagger.models.task_events_server_server_relation_network_remove import TaskEventsServerServerRelationNetworkRemove # noqa: F401,E501 26from gs_api_client.swagger.models.task_events_server_server_relation_storage_add import TaskEventsServerServerRelationStorageAdd # noqa: F401,E501 27from gs_api_client.swagger.models.task_events_server_server_relation_storage_remove import TaskEventsServerServerRelationStorageRemove # noqa: F401,E501 28from gs_api_client.swagger.models.task_events_server_server_remove import TaskEventsServerServerRemove # noqa: F401,E501 29from gs_api_client.swagger.models.task_events_server_server_update import TaskEventsServerServerUpdate # noqa: F401,E501 30 31 32class TaskEventsServer(object): 33 """NOTE: This class is auto generated by the swagger code generator program. 34 35 Do not edit the class manually. 36 """ 37 38 """ 39 Attributes: 40 swagger_types (dict): The key is attribute name 41 and the value is attribute type. 42 attribute_map (dict): The key is attribute name 43 and the value is json key in definition. 44 """ 45 swagger_types = { 46 'server_relation_isoimage_add': 'TaskEventsServerServerRelationIsoimageAdd', 47 'server_relation_isoimage_update': 'TaskEventsServerServerRelationIsoimageAdd', 48 'server_relation_isoimage_remove': 'TaskEventsServerServerRelationIsoimageRemove', 49 'server_relation_ipaddr_add': 'TaskEventsServerServerRelationIpaddrAdd', 50 'server_relation_ipaddr_remove': 'TaskEventsServerServerRelationIpaddrAdd', 51 'server_relation_network_add': 'TaskEventsServerServerRelationNetworkAdd', 52 'server_relation_network_update': 'TaskEventsServerServerRelationNetworkAdd', 53 'server_relation_network_remove': 'TaskEventsServerServerRelationNetworkRemove', 54 'server_relation_storage_add': 'TaskEventsServerServerRelationStorageAdd', 55 'server_relation_storage_update': 'TaskEventsServerServerRelationStorageAdd', 56 'server_relation_storage_remove': 'TaskEventsServerServerRelationStorageRemove', 57 'server_add': 'TaskEventsServerServerAdd', 58 'server_update': 'TaskEventsServerServerUpdate', 59 'server_remove': 'TaskEventsServerServerRemove', 60 'server_power_shutdown': 'TaskEventsServerServerRemove', 61 'server_power_update': 'TaskEventsServerServerPowerUpdate' 62 } 63 64 attribute_map = { 65 'server_relation_isoimage_add': 'server_relation_isoimage_add', 66 'server_relation_isoimage_update': 'server_relation_isoimage_update', 67 'server_relation_isoimage_remove': 'server_relation_isoimage_remove', 68 'server_relation_ipaddr_add': 'server_relation_ipaddr_add', 69 'server_relation_ipaddr_remove': 'server_relation_ipaddr_remove', 70 'server_relation_network_add': 'server_relation_network_add', 71 'server_relation_network_update': 'server_relation_network_update', 72 'server_relation_network_remove': 'server_relation_network_remove', 73 'server_relation_storage_add': 'server_relation_storage_add', 74 'server_relation_storage_update': 'server_relation_storage_update', 75 'server_relation_storage_remove': 'server_relation_storage_remove', 76 'server_add': 'server_add', 77 'server_update': 'server_update', 78 'server_remove': 'server_remove', 79 'server_power_shutdown': 'server_power_shutdown', 80 'server_power_update': 'server_power_update' 81 } 82 83 def __init__(self, server_relation_isoimage_add=None, server_relation_isoimage_update=None, server_relation_isoimage_remove=None, server_relation_ipaddr_add=None, server_relation_ipaddr_remove=None, server_relation_network_add=None, server_relation_network_update=None, server_relation_network_remove=None, server_relation_storage_add=None, server_relation_storage_update=None, server_relation_storage_remove=None, server_add=None, server_update=None, server_remove=None, server_power_shutdown=None, server_power_update=None): # noqa: E501 84 """TaskEventsServer - a model defined in Swagger""" # noqa: E501 85 86 self._server_relation_isoimage_add = None 87 self._server_relation_isoimage_update = None 88 self._server_relation_isoimage_remove = None 89 self._server_relation_ipaddr_add = None 90 self._server_relation_ipaddr_remove = None 91 self._server_relation_network_add = None 92 self._server_relation_network_update = None 93 self._server_relation_network_remove = None 94 self._server_relation_storage_add = None 95 self._server_relation_storage_update = None 96 self._server_relation_storage_remove = None 97 self._server_add = None 98 self._server_update = None 99 self._server_remove = None 100 self._server_power_shutdown = None 101 self._server_power_update = None 102 self.discriminator = None 103 104 if server_relation_isoimage_add is not None: 105 self.server_relation_isoimage_add = server_relation_isoimage_add 106 if server_relation_isoimage_update is not None: 107 self.server_relation_isoimage_update = server_relation_isoimage_update 108 if server_relation_isoimage_remove is not None: 109 self.server_relation_isoimage_remove = server_relation_isoimage_remove 110 if server_relation_ipaddr_add is not None: 111 self.server_relation_ipaddr_add = server_relation_ipaddr_add 112 if server_relation_ipaddr_remove is not None: 113 self.server_relation_ipaddr_remove = server_relation_ipaddr_remove 114 if server_relation_network_add is not None: 115 self.server_relation_network_add = server_relation_network_add 116 if server_relation_network_update is not None: 117 self.server_relation_network_update = server_relation_network_update 118 if server_relation_network_remove is not None: 119 self.server_relation_network_remove = server_relation_network_remove 120 if server_relation_storage_add is not None: 121 self.server_relation_storage_add = server_relation_storage_add 122 if server_relation_storage_update is not None: 123 self.server_relation_storage_update = server_relation_storage_update 124 if server_relation_storage_remove is not None: 125 self.server_relation_storage_remove = server_relation_storage_remove 126 if server_add is not None: 127 self.server_add = server_add 128 if server_update is not None: 129 self.server_update = server_update 130 if server_remove is not None: 131 self.server_remove = server_remove 132 if server_power_shutdown is not None: 133 self.server_power_shutdown = server_power_shutdown 134 if server_power_update is not None: 135 self.server_power_update = server_power_update 136 137 @property 138 def server_relation_isoimage_add(self): 139 """Gets the server_relation_isoimage_add of this TaskEventsServer. # noqa: E501 140 141 142 :return: The server_relation_isoimage_add of this TaskEventsServer. # noqa: E501 143 :rtype: TaskEventsServerServerRelationIsoimageAdd 144 """ 145 return self._server_relation_isoimage_add 146 147 @server_relation_isoimage_add.setter 148 def server_relation_isoimage_add(self, server_relation_isoimage_add): 149 """Sets the server_relation_isoimage_add of this TaskEventsServer. 150 151 152 :param server_relation_isoimage_add: The server_relation_isoimage_add of this TaskEventsServer. # noqa: E501 153 :type: TaskEventsServerServerRelationIsoimageAdd 154 """ 155 156 self._server_relation_isoimage_add = server_relation_isoimage_add 157 158 @property 159 def server_relation_isoimage_update(self): 160 """Gets the server_relation_isoimage_update of this TaskEventsServer. # noqa: E501 161 162 163 :return: The server_relation_isoimage_update of this TaskEventsServer. # noqa: E501 164 :rtype: TaskEventsServerServerRelationIsoimageAdd 165 """ 166 return self._server_relation_isoimage_update 167 168 @server_relation_isoimage_update.setter 169 def server_relation_isoimage_update(self, server_relation_isoimage_update): 170 """Sets the server_relation_isoimage_update of this TaskEventsServer. 171 172 173 :param server_relation_isoimage_update: The server_relation_isoimage_update of this TaskEventsServer. # noqa: E501 174 :type: TaskEventsServerServerRelationIsoimageAdd 175 """ 176 177 self._server_relation_isoimage_update = server_relation_isoimage_update 178 179 @property 180 def server_relation_isoimage_remove(self): 181 """Gets the server_relation_isoimage_remove of this TaskEventsServer. # noqa: E501 182 183 184 :return: The server_relation_isoimage_remove of this TaskEventsServer. # noqa: E501 185 :rtype: TaskEventsServerServerRelationIsoimageRemove 186 """ 187 return self._server_relation_isoimage_remove 188 189 @server_relation_isoimage_remove.setter 190 def server_relation_isoimage_remove(self, server_relation_isoimage_remove): 191 """Sets the server_relation_isoimage_remove of this TaskEventsServer. 192 193 194 :param server_relation_isoimage_remove: The server_relation_isoimage_remove of this TaskEventsServer. # noqa: E501 195 :type: TaskEventsServerServerRelationIsoimageRemove 196 """ 197 198 self._server_relation_isoimage_remove = server_relation_isoimage_remove 199 200 @property 201 def server_relation_ipaddr_add(self): 202 """Gets the server_relation_ipaddr_add of this TaskEventsServer. # noqa: E501 203 204 205 :return: The server_relation_ipaddr_add of this TaskEventsServer. # noqa: E501 206 :rtype: TaskEventsServerServerRelationIpaddrAdd 207 """ 208 return self._server_relation_ipaddr_add 209 210 @server_relation_ipaddr_add.setter 211 def server_relation_ipaddr_add(self, server_relation_ipaddr_add): 212 """Sets the server_relation_ipaddr_add of this TaskEventsServer. 213 214 215 :param server_relation_ipaddr_add: The server_relation_ipaddr_add of this TaskEventsServer. # noqa: E501 216 :type: TaskEventsServerServerRelationIpaddrAdd 217 """ 218 219 self._server_relation_ipaddr_add = server_relation_ipaddr_add 220 221 @property 222 def server_relation_ipaddr_remove(self): 223 """Gets the server_relation_ipaddr_remove of this TaskEventsServer. # noqa: E501 224 225 226 :return: The server_relation_ipaddr_remove of this TaskEventsServer. # noqa: E501 227 :rtype: TaskEventsServerServerRelationIpaddrAdd 228 """ 229 return self._server_relation_ipaddr_remove 230 231 @server_relation_ipaddr_remove.setter 232 def server_relation_ipaddr_remove(self, server_relation_ipaddr_remove): 233 """Sets the server_relation_ipaddr_remove of this TaskEventsServer. 234 235 236 :param server_relation_ipaddr_remove: The server_relation_ipaddr_remove of this TaskEventsServer. # noqa: E501 237 :type: TaskEventsServerServerRelationIpaddrAdd 238 """ 239 240 self._server_relation_ipaddr_remove = server_relation_ipaddr_remove 241 242 @property 243 def server_relation_network_add(self): 244 """Gets the server_relation_network_add of this TaskEventsServer. # noqa: E501 245 246 247 :return: The server_relation_network_add of this TaskEventsServer. # noqa: E501 248 :rtype: TaskEventsServerServerRelationNetworkAdd 249 """ 250 return self._server_relation_network_add 251 252 @server_relation_network_add.setter 253 def server_relation_network_add(self, server_relation_network_add): 254 """Sets the server_relation_network_add of this TaskEventsServer. 255 256 257 :param server_relation_network_add: The server_relation_network_add of this TaskEventsServer. # noqa: E501 258 :type: TaskEventsServerServerRelationNetworkAdd 259 """ 260 261 self._server_relation_network_add = server_relation_network_add 262 263 @property 264 def server_relation_network_update(self): 265 """Gets the server_relation_network_update of this TaskEventsServer. # noqa: E501 266 267 268 :return: The server_relation_network_update of this TaskEventsServer. # noqa: E501 269 :rtype: TaskEventsServerServerRelationNetworkAdd 270 """ 271 return self._server_relation_network_update 272 273 @server_relation_network_update.setter 274 def server_relation_network_update(self, server_relation_network_update): 275 """Sets the server_relation_network_update of this TaskEventsServer. 276 277 278 :param server_relation_network_update: The server_relation_network_update of this TaskEventsServer. # noqa: E501 279 :type: TaskEventsServerServerRelationNetworkAdd 280 """ 281 282 self._server_relation_network_update = server_relation_network_update 283 284 @property 285 def server_relation_network_remove(self): 286 """Gets the server_relation_network_remove of this TaskEventsServer. # noqa: E501 287 288 289 :return: The server_relation_network_remove of this TaskEventsServer. # noqa: E501 290 :rtype: TaskEventsServerServerRelationNetworkRemove 291 """ 292 return self._server_relation_network_remove 293 294 @server_relation_network_remove.setter 295 def server_relation_network_remove(self, server_relation_network_remove): 296 """Sets the server_relation_network_remove of this TaskEventsServer. 297 298 299 :param server_relation_network_remove: The server_relation_network_remove of this TaskEventsServer. # noqa: E501 300 :type: TaskEventsServerServerRelationNetworkRemove 301 """ 302 303 self._server_relation_network_remove = server_relation_network_remove 304 305 @property 306 def server_relation_storage_add(self): 307 """Gets the server_relation_storage_add of this TaskEventsServer. # noqa: E501 308 309 310 :return: The server_relation_storage_add of this TaskEventsServer. # noqa: E501 311 :rtype: TaskEventsServerServerRelationStorageAdd 312 """ 313 return self._server_relation_storage_add 314 315 @server_relation_storage_add.setter 316 def server_relation_storage_add(self, server_relation_storage_add): 317 """Sets the server_relation_storage_add of this TaskEventsServer. 318 319 320 :param server_relation_storage_add: The server_relation_storage_add of this TaskEventsServer. # noqa: E501 321 :type: TaskEventsServerServerRelationStorageAdd 322 """ 323 324 self._server_relation_storage_add = server_relation_storage_add 325 326 @property 327 def server_relation_storage_update(self): 328 """Gets the server_relation_storage_update of this TaskEventsServer. # noqa: E501 329 330 331 :return: The server_relation_storage_update of this TaskEventsServer. # noqa: E501 332 :rtype: TaskEventsServerServerRelationStorageAdd 333 """ 334 return self._server_relation_storage_update 335 336 @server_relation_storage_update.setter 337 def server_relation_storage_update(self, server_relation_storage_update): 338 """Sets the server_relation_storage_update of this TaskEventsServer. 339 340 341 :param server_relation_storage_update: The server_relation_storage_update of this TaskEventsServer. # noqa: E501 342 :type: TaskEventsServerServerRelationStorageAdd 343 """ 344 345 self._server_relation_storage_update = server_relation_storage_update 346 347 @property 348 def server_relation_storage_remove(self): 349 """Gets the server_relation_storage_remove of this TaskEventsServer. # noqa: E501 350 351 352 :return: The server_relation_storage_remove of this TaskEventsServer. # noqa: E501 353 :rtype: TaskEventsServerServerRelationStorageRemove 354 """ 355 return self._server_relation_storage_remove 356 357 @server_relation_storage_remove.setter 358 def server_relation_storage_remove(self, server_relation_storage_remove): 359 """Sets the server_relation_storage_remove of this TaskEventsServer. 360 361 362 :param server_relation_storage_remove: The server_relation_storage_remove of this TaskEventsServer. # noqa: E501 363 :type: TaskEventsServerServerRelationStorageRemove 364 """ 365 366 self._server_relation_storage_remove = server_relation_storage_remove 367 368 @property 369 def server_add(self): 370 """Gets the server_add of this TaskEventsServer. # noqa: E501 371 372 373 :return: The server_add of this TaskEventsServer. # noqa: E501 374 :rtype: TaskEventsServerServerAdd 375 """ 376 return self._server_add 377 378 @server_add.setter 379 def server_add(self, server_add): 380 """Sets the server_add of this TaskEventsServer. 381 382 383 :param server_add: The server_add of this TaskEventsServer. # noqa: E501 384 :type: TaskEventsServerServerAdd 385 """ 386 387 self._server_add = server_add 388 389 @property 390 def server_update(self): 391 """Gets the server_update of this TaskEventsServer. # noqa: E501 392 393 394 :return: The server_update of this TaskEventsServer. # noqa: E501 395 :rtype: TaskEventsServerServerUpdate 396 """ 397 return self._server_update 398 399 @server_update.setter 400 def server_update(self, server_update): 401 """Sets the server_update of this TaskEventsServer. 402 403 404 :param server_update: The server_update of this TaskEventsServer. # noqa: E501 405 :type: TaskEventsServerServerUpdate 406 """ 407 408 self._server_update = server_update 409 410 @property 411 def server_remove(self): 412 """Gets the server_remove of this TaskEventsServer. # noqa: E501 413 414 415 :return: The server_remove of this TaskEventsServer. # noqa: E501 416 :rtype: TaskEventsServerServerRemove 417 """ 418 return self._server_remove 419 420 @server_remove.setter 421 def server_remove(self, server_remove): 422 """Sets the server_remove of this TaskEventsServer. 423 424 425 :param server_remove: The server_remove of this TaskEventsServer. # noqa: E501 426 :type: TaskEventsServerServerRemove 427 """ 428 429 self._server_remove = server_remove 430 431 @property 432 def server_power_shutdown(self): 433 """Gets the server_power_shutdown of this TaskEventsServer. # noqa: E501 434 435 436 :return: The server_power_shutdown of this TaskEventsServer. # noqa: E501 437 :rtype: TaskEventsServerServerRemove 438 """ 439 return self._server_power_shutdown 440 441 @server_power_shutdown.setter 442 def server_power_shutdown(self, server_power_shutdown): 443 """Sets the server_power_shutdown of this TaskEventsServer. 444 445 446 :param server_power_shutdown: The server_power_shutdown of this TaskEventsServer. # noqa: E501 447 :type: TaskEventsServerServerRemove 448 """ 449 450 self._server_power_shutdown = server_power_shutdown 451 452 @property 453 def server_power_update(self): 454 """Gets the server_power_update of this TaskEventsServer. # noqa: E501 455 456 457 :return: The server_power_update of this TaskEventsServer. # noqa: E501 458 :rtype: TaskEventsServerServerPowerUpdate 459 """ 460 return self._server_power_update 461 462 @server_power_update.setter 463 def server_power_update(self, server_power_update): 464 """Sets the server_power_update of this TaskEventsServer. 465 466 467 :param server_power_update: The server_power_update of this TaskEventsServer. # noqa: E501 468 :type: TaskEventsServerServerPowerUpdate 469 """ 470 471 self._server_power_update = server_power_update 472 473 def to_dict(self): 474 """Returns the model properties as a dict""" 475 result = {} 476 477 for attr, _ in six.iteritems(self.swagger_types): 478 value = getattr(self, attr) 479 if isinstance(value, list): 480 result[attr] = list(map( 481 lambda x: x.to_dict() if hasattr(x, "to_dict") else x, 482 value 483 )) 484 elif hasattr(value, "to_dict"): 485 result[attr] = value.to_dict() 486 elif isinstance(value, dict): 487 result[attr] = dict(map( 488 lambda item: (item[0], item[1].to_dict()) 489 if hasattr(item[1], "to_dict") else item, 490 value.items() 491 )) 492 else: 493 result[attr] = value 494 if issubclass(TaskEventsServer, dict): 495 for key, value in self.items(): 496 result[key] = value 497 498 return result 499 500 def to_str(self): 501 """Returns the string representation of the model""" 502 return pprint.pformat(self.to_dict()) 503 504 def __repr__(self): 505 """For `print` and `pprint`""" 506 return self.to_str() 507 508 def __eq__(self, other): 509 """Returns true if both objects are equal""" 510 if not isinstance(other, TaskEventsServer): 511 return False 512 513 return self.__dict__ == other.__dict__ 514 515 def __ne__(self, other): 516 """Returns true if both objects are not equal""" 517 return not self == other 518