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.ip_relation import IpRelation # noqa: F401,E501 20 21 22class IpBrief(object): 23 """NOTE: This class is auto generated by the swagger code generator program. 24 25 Do not edit the class manually. 26 """ 27 28 """ 29 Attributes: 30 swagger_types (dict): The key is attribute name 31 and the value is attribute type. 32 attribute_map (dict): The key is attribute name 33 and the value is json key in definition. 34 """ 35 swagger_types = { 36 'create_time': 'datetime', 37 'status': 'str', 38 'relations': 'IpRelation', 39 'object_uuid': 'str', 40 'location_country': 'str', 41 'prefix': 'str', 42 'delete_block': 'bool', 43 'failover': 'bool', 44 'location_uuid': 'str', 45 'location_name': 'str', 46 'labels': 'list[str]', 47 'change_time': 'datetime', 48 'ip': 'str', 49 'family': 'str', 50 'location_iata': 'str', 51 'reverse_dns': 'str', 52 'current_price': 'float', 53 'usage_in_minutes': 'int', 54 'name': 'str', 55 'partner_uuid': 'str' 56 } 57 58 attribute_map = { 59 'create_time': 'create_time', 60 'status': 'status', 61 'relations': 'relations', 62 'object_uuid': 'object_uuid', 63 'location_country': 'location_country', 64 'prefix': 'prefix', 65 'delete_block': 'delete_block', 66 'failover': 'failover', 67 'location_uuid': 'location_uuid', 68 'location_name': 'location_name', 69 'labels': 'labels', 70 'change_time': 'change_time', 71 'ip': 'ip', 72 'family': 'family', 73 'location_iata': 'location_iata', 74 'reverse_dns': 'reverse_dns', 75 'current_price': 'current_price', 76 'usage_in_minutes': 'usage_in_minutes', 77 'name': 'name', 78 'partner_uuid': 'partner_uuid' 79 } 80 81 def __init__(self, create_time=None, status=None, relations=None, object_uuid=None, location_country=None, prefix=None, delete_block=None, failover=None, location_uuid=None, location_name=None, labels=None, change_time=None, ip=None, family=None, location_iata=None, reverse_dns=None, current_price=None, usage_in_minutes=None, name=None, partner_uuid=None): # noqa: E501 82 """IpBrief - a model defined in Swagger""" # noqa: E501 83 84 self._create_time = None 85 self._status = None 86 self._relations = None 87 self._object_uuid = None 88 self._location_country = None 89 self._prefix = None 90 self._delete_block = None 91 self._failover = None 92 self._location_uuid = None 93 self._location_name = None 94 self._labels = None 95 self._change_time = None 96 self._ip = None 97 self._family = None 98 self._location_iata = None 99 self._reverse_dns = None 100 self._current_price = None 101 self._usage_in_minutes = None 102 self._name = None 103 self._partner_uuid = None 104 self.discriminator = None 105 106 if create_time is not None: 107 self.create_time = create_time 108 if status is not None: 109 self.status = status 110 if relations is not None: 111 self.relations = relations 112 if object_uuid is not None: 113 self.object_uuid = object_uuid 114 if location_country is not None: 115 self.location_country = location_country 116 if prefix is not None: 117 self.prefix = prefix 118 if delete_block is not None: 119 self.delete_block = delete_block 120 if failover is not None: 121 self.failover = failover 122 if location_uuid is not None: 123 self.location_uuid = location_uuid 124 if location_name is not None: 125 self.location_name = location_name 126 if labels is not None: 127 self.labels = labels 128 if change_time is not None: 129 self.change_time = change_time 130 if ip is not None: 131 self.ip = ip 132 if family is not None: 133 self.family = family 134 if location_iata is not None: 135 self.location_iata = location_iata 136 if reverse_dns is not None: 137 self.reverse_dns = reverse_dns 138 if current_price is not None: 139 self.current_price = current_price 140 if usage_in_minutes is not None: 141 self.usage_in_minutes = usage_in_minutes 142 if name is not None: 143 self.name = name 144 if partner_uuid is not None: 145 self.partner_uuid = partner_uuid 146 147 @property 148 def create_time(self): 149 """Gets the create_time of this IpBrief. # noqa: E501 150 151 Defines the date and time the object was initially created. # noqa: E501 152 153 :return: The create_time of this IpBrief. # noqa: E501 154 :rtype: datetime 155 """ 156 return self._create_time 157 158 @create_time.setter 159 def create_time(self, create_time): 160 """Sets the create_time of this IpBrief. 161 162 Defines the date and time the object was initially created. # noqa: E501 163 164 :param create_time: The create_time of this IpBrief. # noqa: E501 165 :type: datetime 166 """ 167 168 self._create_time = create_time 169 170 @property 171 def status(self): 172 """Gets the status of this IpBrief. # noqa: E501 173 174 Status indicates the status of the object. # noqa: E501 175 176 :return: The status of this IpBrief. # noqa: E501 177 :rtype: str 178 """ 179 return self._status 180 181 @status.setter 182 def status(self, status): 183 """Sets the status of this IpBrief. 184 185 Status indicates the status of the object. # noqa: E501 186 187 :param status: The status of this IpBrief. # noqa: E501 188 :type: str 189 """ 190 191 self._status = status 192 193 @property 194 def relations(self): 195 """Gets the relations of this IpBrief. # noqa: E501 196 197 198 :return: The relations of this IpBrief. # noqa: E501 199 :rtype: IpRelation 200 """ 201 return self._relations 202 203 @relations.setter 204 def relations(self, relations): 205 """Sets the relations of this IpBrief. 206 207 208 :param relations: The relations of this IpBrief. # noqa: E501 209 :type: IpRelation 210 """ 211 212 self._relations = relations 213 214 @property 215 def object_uuid(self): 216 """Gets the object_uuid of this IpBrief. # noqa: E501 217 218 The UUID of an object is always unique, and refers to a specific object. # noqa: E501 219 220 :return: The object_uuid of this IpBrief. # noqa: E501 221 :rtype: str 222 """ 223 return self._object_uuid 224 225 @object_uuid.setter 226 def object_uuid(self, object_uuid): 227 """Sets the object_uuid of this IpBrief. 228 229 The UUID of an object is always unique, and refers to a specific object. # noqa: E501 230 231 :param object_uuid: The object_uuid of this IpBrief. # noqa: E501 232 :type: str 233 """ 234 235 self._object_uuid = object_uuid 236 237 @property 238 def location_country(self): 239 """Gets the location_country of this IpBrief. # noqa: E501 240 241 The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters. # noqa: E501 242 243 :return: The location_country of this IpBrief. # noqa: E501 244 :rtype: str 245 """ 246 return self._location_country 247 248 @location_country.setter 249 def location_country(self, location_country): 250 """Sets the location_country of this IpBrief. 251 252 The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters. # noqa: E501 253 254 :param location_country: The location_country of this IpBrief. # noqa: E501 255 :type: str 256 """ 257 258 self._location_country = location_country 259 260 @property 261 def prefix(self): 262 """Gets the prefix of this IpBrief. # noqa: E501 263 264 The IP prefix. # noqa: E501 265 266 :return: The prefix of this IpBrief. # noqa: E501 267 :rtype: str 268 """ 269 return self._prefix 270 271 @prefix.setter 272 def prefix(self, prefix): 273 """Sets the prefix of this IpBrief. 274 275 The IP prefix. # noqa: E501 276 277 :param prefix: The prefix of this IpBrief. # noqa: E501 278 :type: str 279 """ 280 281 self._prefix = prefix 282 283 @property 284 def delete_block(self): 285 """Gets the delete_block of this IpBrief. # noqa: E501 286 287 Defines if the object is administratively blocked. If true, it can not be deleted by the user. # noqa: E501 288 289 :return: The delete_block of this IpBrief. # noqa: E501 290 :rtype: bool 291 """ 292 return self._delete_block 293 294 @delete_block.setter 295 def delete_block(self, delete_block): 296 """Sets the delete_block of this IpBrief. 297 298 Defines if the object is administratively blocked. If true, it can not be deleted by the user. # noqa: E501 299 300 :param delete_block: The delete_block of this IpBrief. # noqa: E501 301 :type: bool 302 """ 303 304 self._delete_block = delete_block 305 306 @property 307 def failover(self): 308 """Gets the failover of this IpBrief. # noqa: E501 309 310 Sets failover mode for this IP. If true, then this IP is no longer available for DHCP and can no longer be related to any server. # noqa: E501 311 312 :return: The failover of this IpBrief. # noqa: E501 313 :rtype: bool 314 """ 315 return self._failover 316 317 @failover.setter 318 def failover(self, failover): 319 """Sets the failover of this IpBrief. 320 321 Sets failover mode for this IP. If true, then this IP is no longer available for DHCP and can no longer be related to any server. # noqa: E501 322 323 :param failover: The failover of this IpBrief. # noqa: E501 324 :type: bool 325 """ 326 327 self._failover = failover 328 329 @property 330 def location_uuid(self): 331 """Gets the location_uuid of this IpBrief. # noqa: E501 332 333 Helps to identify which data-center an object belongs to. # noqa: E501 334 335 :return: The location_uuid of this IpBrief. # noqa: E501 336 :rtype: str 337 """ 338 return self._location_uuid 339 340 @location_uuid.setter 341 def location_uuid(self, location_uuid): 342 """Sets the location_uuid of this IpBrief. 343 344 Helps to identify which data-center an object belongs to. # noqa: E501 345 346 :param location_uuid: The location_uuid of this IpBrief. # noqa: E501 347 :type: str 348 """ 349 350 self._location_uuid = location_uuid 351 352 @property 353 def location_name(self): 354 """Gets the location_name of this IpBrief. # noqa: E501 355 356 The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters. # noqa: E501 357 358 :return: The location_name of this IpBrief. # noqa: E501 359 :rtype: str 360 """ 361 return self._location_name 362 363 @location_name.setter 364 def location_name(self, location_name): 365 """Sets the location_name of this IpBrief. 366 367 The human-readable name of the location. It supports the full UTF-8 charset, with a maximum of 64 characters. # noqa: E501 368 369 :param location_name: The location_name of this IpBrief. # noqa: E501 370 :type: str 371 """ 372 373 self._location_name = location_name 374 375 @property 376 def labels(self): 377 """Gets the labels of this IpBrief. # noqa: E501 378 379 List of labels. # noqa: E501 380 381 :return: The labels of this IpBrief. # noqa: E501 382 :rtype: list[str] 383 """ 384 return self._labels 385 386 @labels.setter 387 def labels(self, labels): 388 """Sets the labels of this IpBrief. 389 390 List of labels. # noqa: E501 391 392 :param labels: The labels of this IpBrief. # noqa: E501 393 :type: list[str] 394 """ 395 396 self._labels = labels 397 398 @property 399 def change_time(self): 400 """Gets the change_time of this IpBrief. # noqa: E501 401 402 Defines the date and time of the last object change. # noqa: E501 403 404 :return: The change_time of this IpBrief. # noqa: E501 405 :rtype: datetime 406 """ 407 return self._change_time 408 409 @change_time.setter 410 def change_time(self, change_time): 411 """Sets the change_time of this IpBrief. 412 413 Defines the date and time of the last object change. # noqa: E501 414 415 :param change_time: The change_time of this IpBrief. # noqa: E501 416 :type: datetime 417 """ 418 419 self._change_time = change_time 420 421 @property 422 def ip(self): 423 """Gets the ip of this IpBrief. # noqa: E501 424 425 Defines the IP Address (v4 or v6). # noqa: E501 426 427 :return: The ip of this IpBrief. # noqa: E501 428 :rtype: str 429 """ 430 return self._ip 431 432 @ip.setter 433 def ip(self, ip): 434 """Sets the ip of this IpBrief. 435 436 Defines the IP Address (v4 or v6). # noqa: E501 437 438 :param ip: The ip of this IpBrief. # noqa: E501 439 :type: str 440 """ 441 442 self._ip = ip 443 444 @property 445 def family(self): 446 """Gets the family of this IpBrief. # noqa: E501 447 448 The IP Address family (v4 or v6). # noqa: E501 449 450 :return: The family of this IpBrief. # noqa: E501 451 :rtype: str 452 """ 453 return self._family 454 455 @family.setter 456 def family(self, family): 457 """Sets the family of this IpBrief. 458 459 The IP Address family (v4 or v6). # noqa: E501 460 461 :param family: The family of this IpBrief. # noqa: E501 462 :type: str 463 """ 464 allowed_values = ["4", "6"] # noqa: E501 465 if family not in allowed_values: 466 raise ValueError( 467 "Invalid value for `family` ({0}), must be one of {1}" # noqa: E501 468 .format(family, allowed_values) 469 ) 470 471 self._family = family 472 473 @property 474 def location_iata(self): 475 """Gets the location_iata of this IpBrief. # noqa: E501 476 477 Uses IATA airport code, which works as a location identifier. # noqa: E501 478 479 :return: The location_iata of this IpBrief. # noqa: E501 480 :rtype: str 481 """ 482 return self._location_iata 483 484 @location_iata.setter 485 def location_iata(self, location_iata): 486 """Sets the location_iata of this IpBrief. 487 488 Uses IATA airport code, which works as a location identifier. # noqa: E501 489 490 :param location_iata: The location_iata of this IpBrief. # noqa: E501 491 :type: str 492 """ 493 494 self._location_iata = location_iata 495 496 @property 497 def reverse_dns(self): 498 """Gets the reverse_dns of this IpBrief. # noqa: E501 499 500 Defines the reverse DNS entry for the IP Address (PTR Resource Record). # noqa: E501 501 502 :return: The reverse_dns of this IpBrief. # noqa: E501 503 :rtype: str 504 """ 505 return self._reverse_dns 506 507 @reverse_dns.setter 508 def reverse_dns(self, reverse_dns): 509 """Sets the reverse_dns of this IpBrief. 510 511 Defines the reverse DNS entry for the IP Address (PTR Resource Record). # noqa: E501 512 513 :param reverse_dns: The reverse_dns of this IpBrief. # noqa: E501 514 :type: str 515 """ 516 517 self._reverse_dns = reverse_dns 518 519 @property 520 def current_price(self): 521 """Gets the current_price of this IpBrief. # noqa: E501 522 523 The price for the current period since the last bill. # noqa: E501 524 525 :return: The current_price of this IpBrief. # noqa: E501 526 :rtype: float 527 """ 528 return self._current_price 529 530 @current_price.setter 531 def current_price(self, current_price): 532 """Sets the current_price of this IpBrief. 533 534 The price for the current period since the last bill. # noqa: E501 535 536 :param current_price: The current_price of this IpBrief. # noqa: E501 537 :type: float 538 """ 539 540 self._current_price = current_price 541 542 @property 543 def usage_in_minutes(self): 544 """Gets the usage_in_minutes of this IpBrief. # noqa: E501 545 546 Total minutes the object has been running. # noqa: E501 547 548 :return: The usage_in_minutes of this IpBrief. # noqa: E501 549 :rtype: int 550 """ 551 return self._usage_in_minutes 552 553 @usage_in_minutes.setter 554 def usage_in_minutes(self, usage_in_minutes): 555 """Sets the usage_in_minutes of this IpBrief. 556 557 Total minutes the object has been running. # noqa: E501 558 559 :param usage_in_minutes: The usage_in_minutes of this IpBrief. # noqa: E501 560 :type: int 561 """ 562 563 self._usage_in_minutes = usage_in_minutes 564 565 @property 566 def name(self): 567 """Gets the name of this IpBrief. # noqa: E501 568 569 The human-readable name of the object. It supports the full UTF-8 charset, with a maximum of 64 characters. # noqa: E501 570 571 :return: The name of this IpBrief. # noqa: E501 572 :rtype: str 573 """ 574 return self._name 575 576 @name.setter 577 def name(self, name): 578 """Sets the name of this IpBrief. 579 580 The human-readable name of the object. It supports the full UTF-8 charset, with a maximum of 64 characters. # noqa: E501 581 582 :param name: The name of this IpBrief. # noqa: E501 583 :type: str 584 """ 585 586 self._name = name 587 588 @property 589 def partner_uuid(self): 590 """Gets the partner_uuid of this IpBrief. # noqa: E501 591 592 The UUID of the Storage used to create this Snapshot. # noqa: E501 593 594 :return: The partner_uuid of this IpBrief. # noqa: E501 595 :rtype: str 596 """ 597 return self._partner_uuid 598 599 @partner_uuid.setter 600 def partner_uuid(self, partner_uuid): 601 """Sets the partner_uuid of this IpBrief. 602 603 The UUID of the Storage used to create this Snapshot. # noqa: E501 604 605 :param partner_uuid: The partner_uuid of this IpBrief. # noqa: E501 606 :type: str 607 """ 608 609 self._partner_uuid = partner_uuid 610 611 def to_dict(self): 612 """Returns the model properties as a dict""" 613 result = {} 614 615 for attr, _ in six.iteritems(self.swagger_types): 616 value = getattr(self, attr) 617 if isinstance(value, list): 618 result[attr] = list(map( 619 lambda x: x.to_dict() if hasattr(x, "to_dict") else x, 620 value 621 )) 622 elif hasattr(value, "to_dict"): 623 result[attr] = value.to_dict() 624 elif isinstance(value, dict): 625 result[attr] = dict(map( 626 lambda item: (item[0], item[1].to_dict()) 627 if hasattr(item[1], "to_dict") else item, 628 value.items() 629 )) 630 else: 631 result[attr] = value 632 if issubclass(IpBrief, dict): 633 for key, value in self.items(): 634 result[key] = value 635 636 return result 637 638 def to_str(self): 639 """Returns the string representation of the model""" 640 return pprint.pformat(self.to_dict()) 641 642 def __repr__(self): 643 """For `print` and `pprint`""" 644 return self.to_str() 645 646 def __eq__(self, other): 647 """Returns true if both objects are equal""" 648 if not isinstance(other, IpBrief): 649 return False 650 651 return self.__dict__ == other.__dict__ 652 653 def __ne__(self, other): 654 """Returns true if both objects are not equal""" 655 return not self == other 656