1# coding=utf-8
2# --------------------------------------------------------------------------
3# Copyright (c) Microsoft Corporation. All rights reserved.
4# Licensed under the MIT License. See License.txt in the project root for license information.
5# Code generated by Microsoft (R) AutoRest Code Generator.
6# Changes may cause incorrect behavior and will be lost if the code is regenerated.
7# --------------------------------------------------------------------------
8
9import datetime
10from typing import Dict, List, Optional, Union
11
12import msrest.serialization
13
14from ._data_box_edge_management_client_enums import *
15
16
17class Address(msrest.serialization.Model):
18    """The shipping address of the customer.
19
20    All required parameters must be populated in order to send to Azure.
21
22    :param address_line1: Required. The address line1.
23    :type address_line1: str
24    :param address_line2: The address line2.
25    :type address_line2: str
26    :param address_line3: The address line3.
27    :type address_line3: str
28    :param postal_code: Required. The postal code.
29    :type postal_code: str
30    :param city: Required. The city name.
31    :type city: str
32    :param state: Required. The state name.
33    :type state: str
34    :param country: Required. The country name.
35    :type country: str
36    """
37
38    _validation = {
39        'address_line1': {'required': True},
40        'postal_code': {'required': True},
41        'city': {'required': True},
42        'state': {'required': True},
43        'country': {'required': True},
44    }
45
46    _attribute_map = {
47        'address_line1': {'key': 'addressLine1', 'type': 'str'},
48        'address_line2': {'key': 'addressLine2', 'type': 'str'},
49        'address_line3': {'key': 'addressLine3', 'type': 'str'},
50        'postal_code': {'key': 'postalCode', 'type': 'str'},
51        'city': {'key': 'city', 'type': 'str'},
52        'state': {'key': 'state', 'type': 'str'},
53        'country': {'key': 'country', 'type': 'str'},
54    }
55
56    def __init__(
57        self,
58        *,
59        address_line1: str,
60        postal_code: str,
61        city: str,
62        state: str,
63        country: str,
64        address_line2: Optional[str] = None,
65        address_line3: Optional[str] = None,
66        **kwargs
67    ):
68        super(Address, self).__init__(**kwargs)
69        self.address_line1 = address_line1
70        self.address_line2 = address_line2
71        self.address_line3 = address_line3
72        self.postal_code = postal_code
73        self.city = city
74        self.state = state
75        self.country = country
76
77
78class ARMBaseModel(msrest.serialization.Model):
79    """Represents the base class for all object models.
80
81    Variables are only populated by the server, and will be ignored when sending a request.
82
83    :ivar id: The path ID that uniquely identifies the object.
84    :vartype id: str
85    :ivar name: The object name.
86    :vartype name: str
87    :ivar type: The hierarchical type of the object.
88    :vartype type: str
89    """
90
91    _validation = {
92        'id': {'readonly': True},
93        'name': {'readonly': True},
94        'type': {'readonly': True},
95    }
96
97    _attribute_map = {
98        'id': {'key': 'id', 'type': 'str'},
99        'name': {'key': 'name', 'type': 'str'},
100        'type': {'key': 'type', 'type': 'str'},
101    }
102
103    def __init__(
104        self,
105        **kwargs
106    ):
107        super(ARMBaseModel, self).__init__(**kwargs)
108        self.id = None
109        self.name = None
110        self.type = None
111
112
113class Alert(ARMBaseModel):
114    """Alert on the data box edge/gateway device.
115
116    Variables are only populated by the server, and will be ignored when sending a request.
117
118    :ivar id: The path ID that uniquely identifies the object.
119    :vartype id: str
120    :ivar name: The object name.
121    :vartype name: str
122    :ivar type: The hierarchical type of the object.
123    :vartype type: str
124    :ivar title: Alert title.
125    :vartype title: str
126    :ivar alert_type: Alert type.
127    :vartype alert_type: str
128    :ivar appeared_at_date_time: UTC time when the alert appeared.
129    :vartype appeared_at_date_time: ~datetime.datetime
130    :ivar recommendation: Alert recommendation.
131    :vartype recommendation: str
132    :ivar severity: Severity of the alert. Possible values include: "Informational", "Warning",
133     "Critical".
134    :vartype severity: str or ~azure.mgmt.databoxedge.v2019_08_01.models.AlertSeverity
135    :ivar error_details: Error details of the alert.
136    :vartype error_details: ~azure.mgmt.databoxedge.v2019_08_01.models.AlertErrorDetails
137    :ivar detailed_information: Alert details.
138    :vartype detailed_information: dict[str, str]
139    """
140
141    _validation = {
142        'id': {'readonly': True},
143        'name': {'readonly': True},
144        'type': {'readonly': True},
145        'title': {'readonly': True},
146        'alert_type': {'readonly': True},
147        'appeared_at_date_time': {'readonly': True},
148        'recommendation': {'readonly': True},
149        'severity': {'readonly': True},
150        'error_details': {'readonly': True},
151        'detailed_information': {'readonly': True},
152    }
153
154    _attribute_map = {
155        'id': {'key': 'id', 'type': 'str'},
156        'name': {'key': 'name', 'type': 'str'},
157        'type': {'key': 'type', 'type': 'str'},
158        'title': {'key': 'properties.title', 'type': 'str'},
159        'alert_type': {'key': 'properties.alertType', 'type': 'str'},
160        'appeared_at_date_time': {'key': 'properties.appearedAtDateTime', 'type': 'iso-8601'},
161        'recommendation': {'key': 'properties.recommendation', 'type': 'str'},
162        'severity': {'key': 'properties.severity', 'type': 'str'},
163        'error_details': {'key': 'properties.errorDetails', 'type': 'AlertErrorDetails'},
164        'detailed_information': {'key': 'properties.detailedInformation', 'type': '{str}'},
165    }
166
167    def __init__(
168        self,
169        **kwargs
170    ):
171        super(Alert, self).__init__(**kwargs)
172        self.title = None
173        self.alert_type = None
174        self.appeared_at_date_time = None
175        self.recommendation = None
176        self.severity = None
177        self.error_details = None
178        self.detailed_information = None
179
180
181class AlertErrorDetails(msrest.serialization.Model):
182    """Error details for the alert.
183
184    Variables are only populated by the server, and will be ignored when sending a request.
185
186    :ivar error_code: Error code.
187    :vartype error_code: str
188    :ivar error_message: Error Message.
189    :vartype error_message: str
190    :ivar occurrences: Number of occurrences.
191    :vartype occurrences: int
192    """
193
194    _validation = {
195        'error_code': {'readonly': True},
196        'error_message': {'readonly': True},
197        'occurrences': {'readonly': True},
198    }
199
200    _attribute_map = {
201        'error_code': {'key': 'errorCode', 'type': 'str'},
202        'error_message': {'key': 'errorMessage', 'type': 'str'},
203        'occurrences': {'key': 'occurrences', 'type': 'int'},
204    }
205
206    def __init__(
207        self,
208        **kwargs
209    ):
210        super(AlertErrorDetails, self).__init__(**kwargs)
211        self.error_code = None
212        self.error_message = None
213        self.occurrences = None
214
215
216class AlertList(msrest.serialization.Model):
217    """Collection of alerts.
218
219    Variables are only populated by the server, and will be ignored when sending a request.
220
221    :ivar value: The value.
222    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Alert]
223    :ivar next_link: Link to the next set of results.
224    :vartype next_link: str
225    """
226
227    _validation = {
228        'value': {'readonly': True},
229        'next_link': {'readonly': True},
230    }
231
232    _attribute_map = {
233        'value': {'key': 'value', 'type': '[Alert]'},
234        'next_link': {'key': 'nextLink', 'type': 'str'},
235    }
236
237    def __init__(
238        self,
239        **kwargs
240    ):
241        super(AlertList, self).__init__(**kwargs)
242        self.value = None
243        self.next_link = None
244
245
246class AsymmetricEncryptedSecret(msrest.serialization.Model):
247    """Represent the secrets intended for encryption with asymmetric key pair.
248
249    All required parameters must be populated in order to send to Azure.
250
251    :param value: Required. The value of the secret.
252    :type value: str
253    :param encryption_cert_thumbprint: Thumbprint certificate used to encrypt \"Value\". If the
254     value is unencrypted, it will be null.
255    :type encryption_cert_thumbprint: str
256    :param encryption_algorithm: Required. The algorithm used to encrypt "Value". Possible values
257     include: "None", "AES256", "RSAES_PKCS1_v_1_5".
258    :type encryption_algorithm: str or
259     ~azure.mgmt.databoxedge.v2019_08_01.models.EncryptionAlgorithm
260    """
261
262    _validation = {
263        'value': {'required': True},
264        'encryption_algorithm': {'required': True},
265    }
266
267    _attribute_map = {
268        'value': {'key': 'value', 'type': 'str'},
269        'encryption_cert_thumbprint': {'key': 'encryptionCertThumbprint', 'type': 'str'},
270        'encryption_algorithm': {'key': 'encryptionAlgorithm', 'type': 'str'},
271    }
272
273    def __init__(
274        self,
275        *,
276        value: str,
277        encryption_algorithm: Union[str, "EncryptionAlgorithm"],
278        encryption_cert_thumbprint: Optional[str] = None,
279        **kwargs
280    ):
281        super(AsymmetricEncryptedSecret, self).__init__(**kwargs)
282        self.value = value
283        self.encryption_cert_thumbprint = encryption_cert_thumbprint
284        self.encryption_algorithm = encryption_algorithm
285
286
287class Authentication(msrest.serialization.Model):
288    """Authentication mechanism for IoT devices.
289
290    :param symmetric_key: Symmetric key for authentication.
291    :type symmetric_key: ~azure.mgmt.databoxedge.v2019_08_01.models.SymmetricKey
292    """
293
294    _attribute_map = {
295        'symmetric_key': {'key': 'symmetricKey', 'type': 'SymmetricKey'},
296    }
297
298    def __init__(
299        self,
300        *,
301        symmetric_key: Optional["SymmetricKey"] = None,
302        **kwargs
303    ):
304        super(Authentication, self).__init__(**kwargs)
305        self.symmetric_key = symmetric_key
306
307
308class AzureContainerInfo(msrest.serialization.Model):
309    """Azure container mapping of the endpoint.
310
311    All required parameters must be populated in order to send to Azure.
312
313    :param storage_account_credential_id: Required. ID of the storage account credential used to
314     access storage.
315    :type storage_account_credential_id: str
316    :param container_name: Required. Container name (Based on the data format specified, this
317     represents the name of Azure Files/Page blob/Block blob).
318    :type container_name: str
319    :param data_format: Required. Storage format used for the file represented by the share.
320     Possible values include: "BlockBlob", "PageBlob", "AzureFile".
321    :type data_format: str or ~azure.mgmt.databoxedge.v2019_08_01.models.AzureContainerDataFormat
322    """
323
324    _validation = {
325        'storage_account_credential_id': {'required': True},
326        'container_name': {'required': True},
327        'data_format': {'required': True},
328    }
329
330    _attribute_map = {
331        'storage_account_credential_id': {'key': 'storageAccountCredentialId', 'type': 'str'},
332        'container_name': {'key': 'containerName', 'type': 'str'},
333        'data_format': {'key': 'dataFormat', 'type': 'str'},
334    }
335
336    def __init__(
337        self,
338        *,
339        storage_account_credential_id: str,
340        container_name: str,
341        data_format: Union[str, "AzureContainerDataFormat"],
342        **kwargs
343    ):
344        super(AzureContainerInfo, self).__init__(**kwargs)
345        self.storage_account_credential_id = storage_account_credential_id
346        self.container_name = container_name
347        self.data_format = data_format
348
349
350class BandwidthSchedule(ARMBaseModel):
351    """The bandwidth schedule details.
352
353    Variables are only populated by the server, and will be ignored when sending a request.
354
355    All required parameters must be populated in order to send to Azure.
356
357    :ivar id: The path ID that uniquely identifies the object.
358    :vartype id: str
359    :ivar name: The object name.
360    :vartype name: str
361    :ivar type: The hierarchical type of the object.
362    :vartype type: str
363    :param start: Required. The start time of the schedule in UTC.
364    :type start: str
365    :param stop: Required. The stop time of the schedule in UTC.
366    :type stop: str
367    :param rate_in_mbps: Required. The bandwidth rate in Mbps.
368    :type rate_in_mbps: int
369    :param days: Required. The days of the week when this schedule is applicable.
370    :type days: list[str or ~azure.mgmt.databoxedge.v2019_08_01.models.DayOfWeek]
371    """
372
373    _validation = {
374        'id': {'readonly': True},
375        'name': {'readonly': True},
376        'type': {'readonly': True},
377        'start': {'required': True},
378        'stop': {'required': True},
379        'rate_in_mbps': {'required': True},
380        'days': {'required': True},
381    }
382
383    _attribute_map = {
384        'id': {'key': 'id', 'type': 'str'},
385        'name': {'key': 'name', 'type': 'str'},
386        'type': {'key': 'type', 'type': 'str'},
387        'start': {'key': 'properties.start', 'type': 'str'},
388        'stop': {'key': 'properties.stop', 'type': 'str'},
389        'rate_in_mbps': {'key': 'properties.rateInMbps', 'type': 'int'},
390        'days': {'key': 'properties.days', 'type': '[str]'},
391    }
392
393    def __init__(
394        self,
395        *,
396        start: str,
397        stop: str,
398        rate_in_mbps: int,
399        days: List[Union[str, "DayOfWeek"]],
400        **kwargs
401    ):
402        super(BandwidthSchedule, self).__init__(**kwargs)
403        self.start = start
404        self.stop = stop
405        self.rate_in_mbps = rate_in_mbps
406        self.days = days
407
408
409class BandwidthSchedulesList(msrest.serialization.Model):
410    """The collection of bandwidth schedules.
411
412    Variables are only populated by the server, and will be ignored when sending a request.
413
414    :ivar value: The list of bandwidth schedules.
415    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.BandwidthSchedule]
416    :ivar next_link: Link to the next set of results.
417    :vartype next_link: str
418    """
419
420    _validation = {
421        'value': {'readonly': True},
422        'next_link': {'readonly': True},
423    }
424
425    _attribute_map = {
426        'value': {'key': 'value', 'type': '[BandwidthSchedule]'},
427        'next_link': {'key': 'nextLink', 'type': 'str'},
428    }
429
430    def __init__(
431        self,
432        **kwargs
433    ):
434        super(BandwidthSchedulesList, self).__init__(**kwargs)
435        self.value = None
436        self.next_link = None
437
438
439class ClientAccessRight(msrest.serialization.Model):
440    """The mapping between a particular client IP and the type of access client has on the NFS share.
441
442    All required parameters must be populated in order to send to Azure.
443
444    :param client: Required. IP of the client.
445    :type client: str
446    :param access_permission: Required. Type of access to be allowed for the client. Possible
447     values include: "NoAccess", "ReadOnly", "ReadWrite".
448    :type access_permission: str or ~azure.mgmt.databoxedge.v2019_08_01.models.ClientPermissionType
449    """
450
451    _validation = {
452        'client': {'required': True},
453        'access_permission': {'required': True},
454    }
455
456    _attribute_map = {
457        'client': {'key': 'client', 'type': 'str'},
458        'access_permission': {'key': 'accessPermission', 'type': 'str'},
459    }
460
461    def __init__(
462        self,
463        *,
464        client: str,
465        access_permission: Union[str, "ClientPermissionType"],
466        **kwargs
467    ):
468        super(ClientAccessRight, self).__init__(**kwargs)
469        self.client = client
470        self.access_permission = access_permission
471
472
473class CloudErrorBody(msrest.serialization.Model):
474    """An error response from the service.
475
476    :param code: An identifier for the error. Codes are invariant and are intended to be consumed
477     programmatically.
478    :type code: str
479    :param message: A message describing the error, intended to be suitable for display in a user
480     interface.
481    :type message: str
482    :param details: A list of additional details about the error.
483    :type details: list[~azure.mgmt.databoxedge.v2019_08_01.models.CloudErrorBody]
484    """
485
486    _attribute_map = {
487        'code': {'key': 'code', 'type': 'str'},
488        'message': {'key': 'message', 'type': 'str'},
489        'details': {'key': 'details', 'type': '[CloudErrorBody]'},
490    }
491
492    def __init__(
493        self,
494        *,
495        code: Optional[str] = None,
496        message: Optional[str] = None,
497        details: Optional[List["CloudErrorBody"]] = None,
498        **kwargs
499    ):
500        super(CloudErrorBody, self).__init__(**kwargs)
501        self.code = code
502        self.message = message
503        self.details = details
504
505
506class ContactDetails(msrest.serialization.Model):
507    """Contains all the contact details of the customer.
508
509    All required parameters must be populated in order to send to Azure.
510
511    :param contact_person: Required. The contact person name.
512    :type contact_person: str
513    :param company_name: Required. The name of the company.
514    :type company_name: str
515    :param phone: Required. The phone number.
516    :type phone: str
517    :param email_list: Required. The email list.
518    :type email_list: list[str]
519    """
520
521    _validation = {
522        'contact_person': {'required': True},
523        'company_name': {'required': True},
524        'phone': {'required': True},
525        'email_list': {'required': True},
526    }
527
528    _attribute_map = {
529        'contact_person': {'key': 'contactPerson', 'type': 'str'},
530        'company_name': {'key': 'companyName', 'type': 'str'},
531        'phone': {'key': 'phone', 'type': 'str'},
532        'email_list': {'key': 'emailList', 'type': '[str]'},
533    }
534
535    def __init__(
536        self,
537        *,
538        contact_person: str,
539        company_name: str,
540        phone: str,
541        email_list: List[str],
542        **kwargs
543    ):
544        super(ContactDetails, self).__init__(**kwargs)
545        self.contact_person = contact_person
546        self.company_name = company_name
547        self.phone = phone
548        self.email_list = email_list
549
550
551class Container(ARMBaseModel):
552    """Represents a container on the  Data Box Edge/Gateway device.
553
554    Variables are only populated by the server, and will be ignored when sending a request.
555
556    All required parameters must be populated in order to send to Azure.
557
558    :ivar id: The path ID that uniquely identifies the object.
559    :vartype id: str
560    :ivar name: The object name.
561    :vartype name: str
562    :ivar type: The hierarchical type of the object.
563    :vartype type: str
564    :ivar container_status: Current status of the container. Possible values include: "OK",
565     "Offline", "Unknown", "Updating", "NeedsAttention".
566    :vartype container_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.ContainerStatus
567    :param data_format: Required. DataFormat for Container. Possible values include: "BlockBlob",
568     "PageBlob", "AzureFile".
569    :type data_format: str or ~azure.mgmt.databoxedge.v2019_08_01.models.AzureContainerDataFormat
570    :ivar refresh_details: Details of the refresh job on this container.
571    :vartype refresh_details: ~azure.mgmt.databoxedge.v2019_08_01.models.RefreshDetails
572    :ivar created_date_time: The UTC time when container got created.
573    :vartype created_date_time: ~datetime.datetime
574    """
575
576    _validation = {
577        'id': {'readonly': True},
578        'name': {'readonly': True},
579        'type': {'readonly': True},
580        'container_status': {'readonly': True},
581        'data_format': {'required': True},
582        'refresh_details': {'readonly': True},
583        'created_date_time': {'readonly': True},
584    }
585
586    _attribute_map = {
587        'id': {'key': 'id', 'type': 'str'},
588        'name': {'key': 'name', 'type': 'str'},
589        'type': {'key': 'type', 'type': 'str'},
590        'container_status': {'key': 'properties.containerStatus', 'type': 'str'},
591        'data_format': {'key': 'properties.dataFormat', 'type': 'str'},
592        'refresh_details': {'key': 'properties.refreshDetails', 'type': 'RefreshDetails'},
593        'created_date_time': {'key': 'properties.createdDateTime', 'type': 'iso-8601'},
594    }
595
596    def __init__(
597        self,
598        *,
599        data_format: Union[str, "AzureContainerDataFormat"],
600        **kwargs
601    ):
602        super(Container, self).__init__(**kwargs)
603        self.container_status = None
604        self.data_format = data_format
605        self.refresh_details = None
606        self.created_date_time = None
607
608
609class ContainerList(msrest.serialization.Model):
610    """Collection of all the containers on the Data Box Edge/Gateway device.
611
612    Variables are only populated by the server, and will be ignored when sending a request.
613
614    :ivar value: The list of containers.
615    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Container]
616    :ivar next_link: Link to the next set of results.
617    :vartype next_link: str
618    """
619
620    _validation = {
621        'value': {'readonly': True},
622        'next_link': {'readonly': True},
623    }
624
625    _attribute_map = {
626        'value': {'key': 'value', 'type': '[Container]'},
627        'next_link': {'key': 'nextLink', 'type': 'str'},
628    }
629
630    def __init__(
631        self,
632        **kwargs
633    ):
634        super(ContainerList, self).__init__(**kwargs)
635        self.value = None
636        self.next_link = None
637
638
639class DataBoxEdgeDevice(ARMBaseModel):
640    """The Data Box Edge/Gateway device.
641
642    Variables are only populated by the server, and will be ignored when sending a request.
643
644    All required parameters must be populated in order to send to Azure.
645
646    :ivar id: The path ID that uniquely identifies the object.
647    :vartype id: str
648    :ivar name: The object name.
649    :vartype name: str
650    :ivar type: The hierarchical type of the object.
651    :vartype type: str
652    :param location: Required. The location of the device. This is a supported and registered Azure
653     geographical region (for example, West US, East US, or Southeast Asia). The geographical region
654     of a device cannot be changed once it is created, but if an identical geographical region is
655     specified on update, the request will succeed.
656    :type location: str
657    :param tags: A set of tags. The list of tags that describe the device. These tags can be used
658     to view and group this device (across resource groups).
659    :type tags: dict[str, str]
660    :param sku: The SKU type.
661    :type sku: ~azure.mgmt.databoxedge.v2019_08_01.models.Sku
662    :param etag: The etag for the devices.
663    :type etag: str
664    :param data_box_edge_device_status: The status of the Data Box Edge/Gateway device. Possible
665     values include: "ReadyToSetup", "Online", "Offline", "NeedsAttention", "Disconnected",
666     "PartiallyDisconnected", "Maintenance".
667    :type data_box_edge_device_status: str or
668     ~azure.mgmt.databoxedge.v2019_08_01.models.DataBoxEdgeDeviceStatus
669    :ivar serial_number: The Serial Number of Data Box Edge/Gateway device.
670    :vartype serial_number: str
671    :param description: The Description of the Data Box Edge/Gateway device.
672    :type description: str
673    :param model_description: The description of the Data Box Edge/Gateway device model.
674    :type model_description: str
675    :ivar device_type: The type of the Data Box Edge/Gateway device. Possible values include:
676     "DataBoxEdgeDevice".
677    :vartype device_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.DeviceType
678    :param friendly_name: The Data Box Edge/Gateway device name.
679    :type friendly_name: str
680    :ivar culture: The Data Box Edge/Gateway device culture.
681    :vartype culture: str
682    :ivar device_model: The Data Box Edge/Gateway device model.
683    :vartype device_model: str
684    :ivar device_software_version: The Data Box Edge/Gateway device software version.
685    :vartype device_software_version: str
686    :ivar device_local_capacity: The Data Box Edge/Gateway device local capacity in MB.
687    :vartype device_local_capacity: long
688    :ivar time_zone: The Data Box Edge/Gateway device timezone.
689    :vartype time_zone: str
690    :ivar device_hcs_version: The device software version number of the device (eg: 1.2.18105.6).
691    :vartype device_hcs_version: str
692    :ivar configured_role_types: Type of compute roles configured.
693    :vartype configured_role_types: list[str or
694     ~azure.mgmt.databoxedge.v2019_08_01.models.RoleTypes]
695    :ivar node_count: The number of nodes in the cluster.
696    :vartype node_count: int
697    """
698
699    _validation = {
700        'id': {'readonly': True},
701        'name': {'readonly': True},
702        'type': {'readonly': True},
703        'location': {'required': True},
704        'serial_number': {'readonly': True},
705        'device_type': {'readonly': True},
706        'culture': {'readonly': True},
707        'device_model': {'readonly': True},
708        'device_software_version': {'readonly': True},
709        'device_local_capacity': {'readonly': True},
710        'time_zone': {'readonly': True},
711        'device_hcs_version': {'readonly': True},
712        'configured_role_types': {'readonly': True},
713        'node_count': {'readonly': True},
714    }
715
716    _attribute_map = {
717        'id': {'key': 'id', 'type': 'str'},
718        'name': {'key': 'name', 'type': 'str'},
719        'type': {'key': 'type', 'type': 'str'},
720        'location': {'key': 'location', 'type': 'str'},
721        'tags': {'key': 'tags', 'type': '{str}'},
722        'sku': {'key': 'sku', 'type': 'Sku'},
723        'etag': {'key': 'etag', 'type': 'str'},
724        'data_box_edge_device_status': {'key': 'properties.dataBoxEdgeDeviceStatus', 'type': 'str'},
725        'serial_number': {'key': 'properties.serialNumber', 'type': 'str'},
726        'description': {'key': 'properties.description', 'type': 'str'},
727        'model_description': {'key': 'properties.modelDescription', 'type': 'str'},
728        'device_type': {'key': 'properties.deviceType', 'type': 'str'},
729        'friendly_name': {'key': 'properties.friendlyName', 'type': 'str'},
730        'culture': {'key': 'properties.culture', 'type': 'str'},
731        'device_model': {'key': 'properties.deviceModel', 'type': 'str'},
732        'device_software_version': {'key': 'properties.deviceSoftwareVersion', 'type': 'str'},
733        'device_local_capacity': {'key': 'properties.deviceLocalCapacity', 'type': 'long'},
734        'time_zone': {'key': 'properties.timeZone', 'type': 'str'},
735        'device_hcs_version': {'key': 'properties.deviceHcsVersion', 'type': 'str'},
736        'configured_role_types': {'key': 'properties.configuredRoleTypes', 'type': '[str]'},
737        'node_count': {'key': 'properties.nodeCount', 'type': 'int'},
738    }
739
740    def __init__(
741        self,
742        *,
743        location: str,
744        tags: Optional[Dict[str, str]] = None,
745        sku: Optional["Sku"] = None,
746        etag: Optional[str] = None,
747        data_box_edge_device_status: Optional[Union[str, "DataBoxEdgeDeviceStatus"]] = None,
748        description: Optional[str] = None,
749        model_description: Optional[str] = None,
750        friendly_name: Optional[str] = None,
751        **kwargs
752    ):
753        super(DataBoxEdgeDevice, self).__init__(**kwargs)
754        self.location = location
755        self.tags = tags
756        self.sku = sku
757        self.etag = etag
758        self.data_box_edge_device_status = data_box_edge_device_status
759        self.serial_number = None
760        self.description = description
761        self.model_description = model_description
762        self.device_type = None
763        self.friendly_name = friendly_name
764        self.culture = None
765        self.device_model = None
766        self.device_software_version = None
767        self.device_local_capacity = None
768        self.time_zone = None
769        self.device_hcs_version = None
770        self.configured_role_types = None
771        self.node_count = None
772
773
774class DataBoxEdgeDeviceExtendedInfo(ARMBaseModel):
775    """The extended Info of the Data Box Edge/Gateway device.
776
777    Variables are only populated by the server, and will be ignored when sending a request.
778
779    :ivar id: The path ID that uniquely identifies the object.
780    :vartype id: str
781    :ivar name: The object name.
782    :vartype name: str
783    :ivar type: The hierarchical type of the object.
784    :vartype type: str
785    :param encryption_key_thumbprint: The digital signature of encrypted certificate.
786    :type encryption_key_thumbprint: str
787    :param encryption_key: The public part of the encryption certificate. Client uses this to
788     encrypt any secret.
789    :type encryption_key: str
790    :ivar resource_key: The Resource ID of the Resource.
791    :vartype resource_key: str
792    """
793
794    _validation = {
795        'id': {'readonly': True},
796        'name': {'readonly': True},
797        'type': {'readonly': True},
798        'resource_key': {'readonly': True},
799    }
800
801    _attribute_map = {
802        'id': {'key': 'id', 'type': 'str'},
803        'name': {'key': 'name', 'type': 'str'},
804        'type': {'key': 'type', 'type': 'str'},
805        'encryption_key_thumbprint': {'key': 'properties.encryptionKeyThumbprint', 'type': 'str'},
806        'encryption_key': {'key': 'properties.encryptionKey', 'type': 'str'},
807        'resource_key': {'key': 'properties.resourceKey', 'type': 'str'},
808    }
809
810    def __init__(
811        self,
812        *,
813        encryption_key_thumbprint: Optional[str] = None,
814        encryption_key: Optional[str] = None,
815        **kwargs
816    ):
817        super(DataBoxEdgeDeviceExtendedInfo, self).__init__(**kwargs)
818        self.encryption_key_thumbprint = encryption_key_thumbprint
819        self.encryption_key = encryption_key
820        self.resource_key = None
821
822
823class DataBoxEdgeDeviceList(msrest.serialization.Model):
824    """The collection of Data Box Edge/Gateway devices.
825
826    Variables are only populated by the server, and will be ignored when sending a request.
827
828    :ivar value: The list of Data Box Edge/Gateway devices.
829    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.DataBoxEdgeDevice]
830    :ivar next_link: Link to the next set of results.
831    :vartype next_link: str
832    """
833
834    _validation = {
835        'value': {'readonly': True},
836        'next_link': {'readonly': True},
837    }
838
839    _attribute_map = {
840        'value': {'key': 'value', 'type': '[DataBoxEdgeDevice]'},
841        'next_link': {'key': 'nextLink', 'type': 'str'},
842    }
843
844    def __init__(
845        self,
846        **kwargs
847    ):
848        super(DataBoxEdgeDeviceList, self).__init__(**kwargs)
849        self.value = None
850        self.next_link = None
851
852
853class DataBoxEdgeDevicePatch(msrest.serialization.Model):
854    """The Data Box Edge/Gateway device patch.
855
856    :param tags: A set of tags. The tags attached to the Data Box Edge/Gateway resource.
857    :type tags: dict[str, str]
858    """
859
860    _attribute_map = {
861        'tags': {'key': 'tags', 'type': '{str}'},
862    }
863
864    def __init__(
865        self,
866        *,
867        tags: Optional[Dict[str, str]] = None,
868        **kwargs
869    ):
870        super(DataBoxEdgeDevicePatch, self).__init__(**kwargs)
871        self.tags = tags
872
873
874class Trigger(ARMBaseModel):
875    """Trigger details.
876
877    You probably want to use the sub-classes and not this class directly. Known
878    sub-classes are: FileEventTrigger, PeriodicTimerEventTrigger.
879
880    Variables are only populated by the server, and will be ignored when sending a request.
881
882    All required parameters must be populated in order to send to Azure.
883
884    :ivar id: The path ID that uniquely identifies the object.
885    :vartype id: str
886    :ivar name: The object name.
887    :vartype name: str
888    :ivar type: The hierarchical type of the object.
889    :vartype type: str
890    :param kind: Required. Trigger Kind.Constant filled by server.  Possible values include:
891     "FileEvent", "PeriodicTimerEvent".
892    :type kind: str or ~azure.mgmt.databoxedge.v2019_08_01.models.TriggerEventType
893    """
894
895    _validation = {
896        'id': {'readonly': True},
897        'name': {'readonly': True},
898        'type': {'readonly': True},
899        'kind': {'required': True},
900    }
901
902    _attribute_map = {
903        'id': {'key': 'id', 'type': 'str'},
904        'name': {'key': 'name', 'type': 'str'},
905        'type': {'key': 'type', 'type': 'str'},
906        'kind': {'key': 'kind', 'type': 'str'},
907    }
908
909    _subtype_map = {
910        'kind': {'FileEvent': 'FileEventTrigger', 'PeriodicTimerEvent': 'PeriodicTimerEventTrigger'}
911    }
912
913    def __init__(
914        self,
915        **kwargs
916    ):
917        super(Trigger, self).__init__(**kwargs)
918        self.kind = 'Trigger'  # type: str
919
920
921class FileEventTrigger(Trigger):
922    """Trigger details.
923
924    Variables are only populated by the server, and will be ignored when sending a request.
925
926    All required parameters must be populated in order to send to Azure.
927
928    :ivar id: The path ID that uniquely identifies the object.
929    :vartype id: str
930    :ivar name: The object name.
931    :vartype name: str
932    :ivar type: The hierarchical type of the object.
933    :vartype type: str
934    :param kind: Required. Trigger Kind.Constant filled by server.  Possible values include:
935     "FileEvent", "PeriodicTimerEvent".
936    :type kind: str or ~azure.mgmt.databoxedge.v2019_08_01.models.TriggerEventType
937    :param source_info: Required. File event source details.
938    :type source_info: ~azure.mgmt.databoxedge.v2019_08_01.models.FileSourceInfo
939    :param sink_info: Required. Role sink info.
940    :type sink_info: ~azure.mgmt.databoxedge.v2019_08_01.models.RoleSinkInfo
941    :param custom_context_tag: A custom context tag typically used to correlate the trigger against
942     its usage. For example, if a periodic timer trigger is intended for certain specific IoT
943     modules in the device, the tag can be the name or the image URL of the module.
944    :type custom_context_tag: str
945    """
946
947    _validation = {
948        'id': {'readonly': True},
949        'name': {'readonly': True},
950        'type': {'readonly': True},
951        'kind': {'required': True},
952        'source_info': {'required': True},
953        'sink_info': {'required': True},
954    }
955
956    _attribute_map = {
957        'id': {'key': 'id', 'type': 'str'},
958        'name': {'key': 'name', 'type': 'str'},
959        'type': {'key': 'type', 'type': 'str'},
960        'kind': {'key': 'kind', 'type': 'str'},
961        'source_info': {'key': 'properties.sourceInfo', 'type': 'FileSourceInfo'},
962        'sink_info': {'key': 'properties.sinkInfo', 'type': 'RoleSinkInfo'},
963        'custom_context_tag': {'key': 'properties.customContextTag', 'type': 'str'},
964    }
965
966    def __init__(
967        self,
968        *,
969        source_info: "FileSourceInfo",
970        sink_info: "RoleSinkInfo",
971        custom_context_tag: Optional[str] = None,
972        **kwargs
973    ):
974        super(FileEventTrigger, self).__init__(**kwargs)
975        self.kind = 'FileEvent'  # type: str
976        self.source_info = source_info
977        self.sink_info = sink_info
978        self.custom_context_tag = custom_context_tag
979
980
981class FileSourceInfo(msrest.serialization.Model):
982    """File source details.
983
984    All required parameters must be populated in order to send to Azure.
985
986    :param share_id: Required. File share ID.
987    :type share_id: str
988    """
989
990    _validation = {
991        'share_id': {'required': True},
992    }
993
994    _attribute_map = {
995        'share_id': {'key': 'shareId', 'type': 'str'},
996    }
997
998    def __init__(
999        self,
1000        *,
1001        share_id: str,
1002        **kwargs
1003    ):
1004        super(FileSourceInfo, self).__init__(**kwargs)
1005        self.share_id = share_id
1006
1007
1008class IoTDeviceInfo(msrest.serialization.Model):
1009    """Metadata of IoT device/IoT Edge device to be configured.
1010
1011    All required parameters must be populated in order to send to Azure.
1012
1013    :param device_id: Required. ID of the IoT device/edge device.
1014    :type device_id: str
1015    :param io_t_host_hub: Required. Host name for the IoT hub associated to the device.
1016    :type io_t_host_hub: str
1017    :param io_t_host_hub_id: Id for the IoT hub associated to the device.
1018    :type io_t_host_hub_id: str
1019    :param authentication: IoT device authentication info.
1020    :type authentication: ~azure.mgmt.databoxedge.v2019_08_01.models.Authentication
1021    """
1022
1023    _validation = {
1024        'device_id': {'required': True},
1025        'io_t_host_hub': {'required': True},
1026    }
1027
1028    _attribute_map = {
1029        'device_id': {'key': 'deviceId', 'type': 'str'},
1030        'io_t_host_hub': {'key': 'ioTHostHub', 'type': 'str'},
1031        'io_t_host_hub_id': {'key': 'ioTHostHubId', 'type': 'str'},
1032        'authentication': {'key': 'authentication', 'type': 'Authentication'},
1033    }
1034
1035    def __init__(
1036        self,
1037        *,
1038        device_id: str,
1039        io_t_host_hub: str,
1040        io_t_host_hub_id: Optional[str] = None,
1041        authentication: Optional["Authentication"] = None,
1042        **kwargs
1043    ):
1044        super(IoTDeviceInfo, self).__init__(**kwargs)
1045        self.device_id = device_id
1046        self.io_t_host_hub = io_t_host_hub
1047        self.io_t_host_hub_id = io_t_host_hub_id
1048        self.authentication = authentication
1049
1050
1051class Role(ARMBaseModel):
1052    """Compute role.
1053
1054    You probably want to use the sub-classes and not this class directly. Known
1055    sub-classes are: IoTRole.
1056
1057    Variables are only populated by the server, and will be ignored when sending a request.
1058
1059    All required parameters must be populated in order to send to Azure.
1060
1061    :ivar id: The path ID that uniquely identifies the object.
1062    :vartype id: str
1063    :ivar name: The object name.
1064    :vartype name: str
1065    :ivar type: The hierarchical type of the object.
1066    :vartype type: str
1067    :param kind: Required. Role type.Constant filled by server.  Possible values include: "IOT",
1068     "ASA", "Functions", "Cognitive".
1069    :type kind: str or ~azure.mgmt.databoxedge.v2019_08_01.models.RoleTypes
1070    """
1071
1072    _validation = {
1073        'id': {'readonly': True},
1074        'name': {'readonly': True},
1075        'type': {'readonly': True},
1076        'kind': {'required': True},
1077    }
1078
1079    _attribute_map = {
1080        'id': {'key': 'id', 'type': 'str'},
1081        'name': {'key': 'name', 'type': 'str'},
1082        'type': {'key': 'type', 'type': 'str'},
1083        'kind': {'key': 'kind', 'type': 'str'},
1084    }
1085
1086    _subtype_map = {
1087        'kind': {'IOT': 'IoTRole'}
1088    }
1089
1090    def __init__(
1091        self,
1092        **kwargs
1093    ):
1094        super(Role, self).__init__(**kwargs)
1095        self.kind = 'Role'  # type: str
1096
1097
1098class IoTRole(Role):
1099    """Compute role.
1100
1101    Variables are only populated by the server, and will be ignored when sending a request.
1102
1103    All required parameters must be populated in order to send to Azure.
1104
1105    :ivar id: The path ID that uniquely identifies the object.
1106    :vartype id: str
1107    :ivar name: The object name.
1108    :vartype name: str
1109    :ivar type: The hierarchical type of the object.
1110    :vartype type: str
1111    :param kind: Required. Role type.Constant filled by server.  Possible values include: "IOT",
1112     "ASA", "Functions", "Cognitive".
1113    :type kind: str or ~azure.mgmt.databoxedge.v2019_08_01.models.RoleTypes
1114    :param host_platform: Host OS supported by the IoT role. Possible values include: "Windows",
1115     "Linux".
1116    :type host_platform: str or ~azure.mgmt.databoxedge.v2019_08_01.models.PlatformType
1117    :param io_t_device_details: IoT device metadata to which data box edge device needs to be
1118     connected.
1119    :type io_t_device_details: ~azure.mgmt.databoxedge.v2019_08_01.models.IoTDeviceInfo
1120    :param io_t_edge_device_details: IoT edge device to which the IoT role needs to be configured.
1121    :type io_t_edge_device_details: ~azure.mgmt.databoxedge.v2019_08_01.models.IoTDeviceInfo
1122    :param share_mappings: Mount points of shares in role(s).
1123    :type share_mappings: list[~azure.mgmt.databoxedge.v2019_08_01.models.MountPointMap]
1124    :param role_status: Role status. Possible values include: "Enabled", "Disabled".
1125    :type role_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.RoleStatus
1126    """
1127
1128    _validation = {
1129        'id': {'readonly': True},
1130        'name': {'readonly': True},
1131        'type': {'readonly': True},
1132        'kind': {'required': True},
1133    }
1134
1135    _attribute_map = {
1136        'id': {'key': 'id', 'type': 'str'},
1137        'name': {'key': 'name', 'type': 'str'},
1138        'type': {'key': 'type', 'type': 'str'},
1139        'kind': {'key': 'kind', 'type': 'str'},
1140        'host_platform': {'key': 'properties.hostPlatform', 'type': 'str'},
1141        'io_t_device_details': {'key': 'properties.ioTDeviceDetails', 'type': 'IoTDeviceInfo'},
1142        'io_t_edge_device_details': {'key': 'properties.ioTEdgeDeviceDetails', 'type': 'IoTDeviceInfo'},
1143        'share_mappings': {'key': 'properties.shareMappings', 'type': '[MountPointMap]'},
1144        'role_status': {'key': 'properties.roleStatus', 'type': 'str'},
1145    }
1146
1147    def __init__(
1148        self,
1149        *,
1150        host_platform: Optional[Union[str, "PlatformType"]] = None,
1151        io_t_device_details: Optional["IoTDeviceInfo"] = None,
1152        io_t_edge_device_details: Optional["IoTDeviceInfo"] = None,
1153        share_mappings: Optional[List["MountPointMap"]] = None,
1154        role_status: Optional[Union[str, "RoleStatus"]] = None,
1155        **kwargs
1156    ):
1157        super(IoTRole, self).__init__(**kwargs)
1158        self.kind = 'IOT'  # type: str
1159        self.host_platform = host_platform
1160        self.io_t_device_details = io_t_device_details
1161        self.io_t_edge_device_details = io_t_edge_device_details
1162        self.share_mappings = share_mappings
1163        self.role_status = role_status
1164
1165
1166class Ipv4Config(msrest.serialization.Model):
1167    """Details related to the IPv4 address configuration.
1168
1169    Variables are only populated by the server, and will be ignored when sending a request.
1170
1171    :ivar ip_address: The IPv4 address of the network adapter.
1172    :vartype ip_address: str
1173    :ivar subnet: The IPv4 subnet of the network adapter.
1174    :vartype subnet: str
1175    :ivar gateway: The IPv4 gateway of the network adapter.
1176    :vartype gateway: str
1177    """
1178
1179    _validation = {
1180        'ip_address': {'readonly': True},
1181        'subnet': {'readonly': True},
1182        'gateway': {'readonly': True},
1183    }
1184
1185    _attribute_map = {
1186        'ip_address': {'key': 'ipAddress', 'type': 'str'},
1187        'subnet': {'key': 'subnet', 'type': 'str'},
1188        'gateway': {'key': 'gateway', 'type': 'str'},
1189    }
1190
1191    def __init__(
1192        self,
1193        **kwargs
1194    ):
1195        super(Ipv4Config, self).__init__(**kwargs)
1196        self.ip_address = None
1197        self.subnet = None
1198        self.gateway = None
1199
1200
1201class Ipv6Config(msrest.serialization.Model):
1202    """Details related to the IPv6 address configuration.
1203
1204    Variables are only populated by the server, and will be ignored when sending a request.
1205
1206    :ivar ip_address: The IPv6 address of the network adapter.
1207    :vartype ip_address: str
1208    :ivar prefix_length: The IPv6 prefix of the network adapter.
1209    :vartype prefix_length: int
1210    :ivar gateway: The IPv6 gateway of the network adapter.
1211    :vartype gateway: str
1212    """
1213
1214    _validation = {
1215        'ip_address': {'readonly': True},
1216        'prefix_length': {'readonly': True},
1217        'gateway': {'readonly': True},
1218    }
1219
1220    _attribute_map = {
1221        'ip_address': {'key': 'ipAddress', 'type': 'str'},
1222        'prefix_length': {'key': 'prefixLength', 'type': 'int'},
1223        'gateway': {'key': 'gateway', 'type': 'str'},
1224    }
1225
1226    def __init__(
1227        self,
1228        **kwargs
1229    ):
1230        super(Ipv6Config, self).__init__(**kwargs)
1231        self.ip_address = None
1232        self.prefix_length = None
1233        self.gateway = None
1234
1235
1236class Job(msrest.serialization.Model):
1237    """A device job.
1238
1239    Variables are only populated by the server, and will be ignored when sending a request.
1240
1241    :ivar id: The path ID that uniquely identifies the object.
1242    :vartype id: str
1243    :ivar name: The name of the object.
1244    :vartype name: str
1245    :ivar type: The hierarchical type of the object.
1246    :vartype type: str
1247    :ivar status: The current status of the job. Possible values include: "Invalid", "Running",
1248     "Succeeded", "Failed", "Canceled", "Paused", "Scheduled".
1249    :vartype status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.JobStatus
1250    :ivar start_time: The UTC date and time at which the job started.
1251    :vartype start_time: ~datetime.datetime
1252    :ivar end_time: The UTC date and time at which the job completed.
1253    :vartype end_time: ~datetime.datetime
1254    :ivar percent_complete: The percentage of the job that is complete.
1255    :vartype percent_complete: int
1256    :ivar error: The error details.
1257    :vartype error: ~azure.mgmt.databoxedge.v2019_08_01.models.JobErrorDetails
1258    :ivar job_type: The type of the job. Possible values include: "Invalid", "ScanForUpdates",
1259     "DownloadUpdates", "InstallUpdates", "RefreshShare", "RefreshContainer".
1260    :vartype job_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.JobType
1261    :ivar current_stage: Current stage of the update operation. Possible values include: "Unknown",
1262     "Initial", "ScanStarted", "ScanComplete", "ScanFailed", "DownloadStarted", "DownloadComplete",
1263     "DownloadFailed", "InstallStarted", "InstallComplete", "InstallFailed", "RebootInitiated",
1264     "Success", "Failure", "RescanStarted", "RescanComplete", "RescanFailed".
1265    :vartype current_stage: str or ~azure.mgmt.databoxedge.v2019_08_01.models.UpdateOperationStage
1266    :ivar download_progress: The download progress.
1267    :vartype download_progress: ~azure.mgmt.databoxedge.v2019_08_01.models.UpdateDownloadProgress
1268    :ivar install_progress: The install progress.
1269    :vartype install_progress: ~azure.mgmt.databoxedge.v2019_08_01.models.UpdateInstallProgress
1270    :ivar total_refresh_errors: Total number of errors encountered during the refresh process.
1271    :vartype total_refresh_errors: int
1272    :ivar error_manifest_file: Local share/remote container relative path to the error manifest
1273     file of the refresh.
1274    :vartype error_manifest_file: str
1275    :ivar refreshed_entity_id: ARM ID of the entity that was refreshed.
1276    :vartype refreshed_entity_id: str
1277    :param folder: If only subfolders need to be refreshed, then the subfolder path inside the
1278     share or container. (The path is empty if there are no subfolders.).
1279    :type folder: str
1280    """
1281
1282    _validation = {
1283        'id': {'readonly': True},
1284        'name': {'readonly': True},
1285        'type': {'readonly': True},
1286        'status': {'readonly': True},
1287        'start_time': {'readonly': True},
1288        'end_time': {'readonly': True},
1289        'percent_complete': {'readonly': True},
1290        'error': {'readonly': True},
1291        'job_type': {'readonly': True},
1292        'current_stage': {'readonly': True},
1293        'download_progress': {'readonly': True},
1294        'install_progress': {'readonly': True},
1295        'total_refresh_errors': {'readonly': True},
1296        'error_manifest_file': {'readonly': True},
1297        'refreshed_entity_id': {'readonly': True},
1298    }
1299
1300    _attribute_map = {
1301        'id': {'key': 'id', 'type': 'str'},
1302        'name': {'key': 'name', 'type': 'str'},
1303        'type': {'key': 'type', 'type': 'str'},
1304        'status': {'key': 'status', 'type': 'str'},
1305        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
1306        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
1307        'percent_complete': {'key': 'percentComplete', 'type': 'int'},
1308        'error': {'key': 'error', 'type': 'JobErrorDetails'},
1309        'job_type': {'key': 'properties.jobType', 'type': 'str'},
1310        'current_stage': {'key': 'properties.currentStage', 'type': 'str'},
1311        'download_progress': {'key': 'properties.downloadProgress', 'type': 'UpdateDownloadProgress'},
1312        'install_progress': {'key': 'properties.installProgress', 'type': 'UpdateInstallProgress'},
1313        'total_refresh_errors': {'key': 'properties.totalRefreshErrors', 'type': 'int'},
1314        'error_manifest_file': {'key': 'properties.errorManifestFile', 'type': 'str'},
1315        'refreshed_entity_id': {'key': 'properties.refreshedEntityId', 'type': 'str'},
1316        'folder': {'key': 'properties.folder', 'type': 'str'},
1317    }
1318
1319    def __init__(
1320        self,
1321        *,
1322        folder: Optional[str] = None,
1323        **kwargs
1324    ):
1325        super(Job, self).__init__(**kwargs)
1326        self.id = None
1327        self.name = None
1328        self.type = None
1329        self.status = None
1330        self.start_time = None
1331        self.end_time = None
1332        self.percent_complete = None
1333        self.error = None
1334        self.job_type = None
1335        self.current_stage = None
1336        self.download_progress = None
1337        self.install_progress = None
1338        self.total_refresh_errors = None
1339        self.error_manifest_file = None
1340        self.refreshed_entity_id = None
1341        self.folder = folder
1342
1343
1344class JobErrorDetails(msrest.serialization.Model):
1345    """The job error information containing the list of job errors.
1346
1347    Variables are only populated by the server, and will be ignored when sending a request.
1348
1349    :ivar error_details: The error details.
1350    :vartype error_details: list[~azure.mgmt.databoxedge.v2019_08_01.models.JobErrorItem]
1351    :ivar code: The code intended for programmatic access.
1352    :vartype code: str
1353    :ivar message: The message that describes the error in detail.
1354    :vartype message: str
1355    """
1356
1357    _validation = {
1358        'error_details': {'readonly': True},
1359        'code': {'readonly': True},
1360        'message': {'readonly': True},
1361    }
1362
1363    _attribute_map = {
1364        'error_details': {'key': 'errorDetails', 'type': '[JobErrorItem]'},
1365        'code': {'key': 'code', 'type': 'str'},
1366        'message': {'key': 'message', 'type': 'str'},
1367    }
1368
1369    def __init__(
1370        self,
1371        **kwargs
1372    ):
1373        super(JobErrorDetails, self).__init__(**kwargs)
1374        self.error_details = None
1375        self.code = None
1376        self.message = None
1377
1378
1379class JobErrorItem(msrest.serialization.Model):
1380    """The job error items.
1381
1382    Variables are only populated by the server, and will be ignored when sending a request.
1383
1384    :ivar recommendations: The recommended actions.
1385    :vartype recommendations: list[str]
1386    :ivar code: The code intended for programmatic access.
1387    :vartype code: str
1388    :ivar message: The message that describes the error in detail.
1389    :vartype message: str
1390    """
1391
1392    _validation = {
1393        'recommendations': {'readonly': True},
1394        'code': {'readonly': True},
1395        'message': {'readonly': True},
1396    }
1397
1398    _attribute_map = {
1399        'recommendations': {'key': 'recommendations', 'type': '[str]'},
1400        'code': {'key': 'code', 'type': 'str'},
1401        'message': {'key': 'message', 'type': 'str'},
1402    }
1403
1404    def __init__(
1405        self,
1406        **kwargs
1407    ):
1408        super(JobErrorItem, self).__init__(**kwargs)
1409        self.recommendations = None
1410        self.code = None
1411        self.message = None
1412
1413
1414class MetricDimensionV1(msrest.serialization.Model):
1415    """Metric Dimension v1.
1416
1417    :param name: Name of the metrics dimension.
1418    :type name: str
1419    :param display_name: Display name of the metrics dimension.
1420    :type display_name: str
1421    :param to_be_exported_for_shoebox: To be exported to shoe box.
1422    :type to_be_exported_for_shoebox: bool
1423    """
1424
1425    _attribute_map = {
1426        'name': {'key': 'name', 'type': 'str'},
1427        'display_name': {'key': 'displayName', 'type': 'str'},
1428        'to_be_exported_for_shoebox': {'key': 'toBeExportedForShoebox', 'type': 'bool'},
1429    }
1430
1431    def __init__(
1432        self,
1433        *,
1434        name: Optional[str] = None,
1435        display_name: Optional[str] = None,
1436        to_be_exported_for_shoebox: Optional[bool] = None,
1437        **kwargs
1438    ):
1439        super(MetricDimensionV1, self).__init__(**kwargs)
1440        self.name = name
1441        self.display_name = display_name
1442        self.to_be_exported_for_shoebox = to_be_exported_for_shoebox
1443
1444
1445class MetricSpecificationV1(msrest.serialization.Model):
1446    """Metric specification version 1.
1447
1448    :param name: Name of the metric.
1449    :type name: str
1450    :param display_name: Display name of the metric.
1451    :type display_name: str
1452    :param display_description: Description of the metric to be displayed.
1453    :type display_description: str
1454    :param unit: Metric units. Possible values include: "NotSpecified", "Percent", "Count",
1455     "Seconds", "Milliseconds", "Bytes", "BytesPerSecond", "CountPerSecond".
1456    :type unit: str or ~azure.mgmt.databoxedge.v2019_08_01.models.MetricUnit
1457    :param aggregation_type: Metric aggregation type. Possible values include: "NotSpecified",
1458     "None", "Average", "Minimum", "Maximum", "Total", "Count".
1459    :type aggregation_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.MetricAggregationType
1460    :param dimensions: Metric dimensions, other than default dimension which is resource.
1461    :type dimensions: list[~azure.mgmt.databoxedge.v2019_08_01.models.MetricDimensionV1]
1462    :param fill_gap_with_zero: Set true to fill the gaps with zero.
1463    :type fill_gap_with_zero: bool
1464    :param category: Metric category. Possible values include: "Capacity", "Transaction".
1465    :type category: str or ~azure.mgmt.databoxedge.v2019_08_01.models.MetricCategory
1466    :param resource_id_dimension_name_override: Resource name override.
1467    :type resource_id_dimension_name_override: str
1468    :param supported_time_grain_types: Support granularity of metrics.
1469    :type supported_time_grain_types: list[str or
1470     ~azure.mgmt.databoxedge.v2019_08_01.models.TimeGrain]
1471    :param supported_aggregation_types: Support metric aggregation type.
1472    :type supported_aggregation_types: list[str or
1473     ~azure.mgmt.databoxedge.v2019_08_01.models.MetricAggregationType]
1474    """
1475
1476    _attribute_map = {
1477        'name': {'key': 'name', 'type': 'str'},
1478        'display_name': {'key': 'displayName', 'type': 'str'},
1479        'display_description': {'key': 'displayDescription', 'type': 'str'},
1480        'unit': {'key': 'unit', 'type': 'str'},
1481        'aggregation_type': {'key': 'aggregationType', 'type': 'str'},
1482        'dimensions': {'key': 'dimensions', 'type': '[MetricDimensionV1]'},
1483        'fill_gap_with_zero': {'key': 'fillGapWithZero', 'type': 'bool'},
1484        'category': {'key': 'category', 'type': 'str'},
1485        'resource_id_dimension_name_override': {'key': 'resourceIdDimensionNameOverride', 'type': 'str'},
1486        'supported_time_grain_types': {'key': 'supportedTimeGrainTypes', 'type': '[str]'},
1487        'supported_aggregation_types': {'key': 'supportedAggregationTypes', 'type': '[str]'},
1488    }
1489
1490    def __init__(
1491        self,
1492        *,
1493        name: Optional[str] = None,
1494        display_name: Optional[str] = None,
1495        display_description: Optional[str] = None,
1496        unit: Optional[Union[str, "MetricUnit"]] = None,
1497        aggregation_type: Optional[Union[str, "MetricAggregationType"]] = None,
1498        dimensions: Optional[List["MetricDimensionV1"]] = None,
1499        fill_gap_with_zero: Optional[bool] = None,
1500        category: Optional[Union[str, "MetricCategory"]] = None,
1501        resource_id_dimension_name_override: Optional[str] = None,
1502        supported_time_grain_types: Optional[List[Union[str, "TimeGrain"]]] = None,
1503        supported_aggregation_types: Optional[List[Union[str, "MetricAggregationType"]]] = None,
1504        **kwargs
1505    ):
1506        super(MetricSpecificationV1, self).__init__(**kwargs)
1507        self.name = name
1508        self.display_name = display_name
1509        self.display_description = display_description
1510        self.unit = unit
1511        self.aggregation_type = aggregation_type
1512        self.dimensions = dimensions
1513        self.fill_gap_with_zero = fill_gap_with_zero
1514        self.category = category
1515        self.resource_id_dimension_name_override = resource_id_dimension_name_override
1516        self.supported_time_grain_types = supported_time_grain_types
1517        self.supported_aggregation_types = supported_aggregation_types
1518
1519
1520class MountPointMap(msrest.serialization.Model):
1521    """The share mount point.
1522
1523    Variables are only populated by the server, and will be ignored when sending a request.
1524
1525    All required parameters must be populated in order to send to Azure.
1526
1527    :param share_id: Required. ID of the share mounted to the role VM.
1528    :type share_id: str
1529    :ivar role_id: ID of the role to which share is mounted.
1530    :vartype role_id: str
1531    :ivar mount_point: Mount point for the share.
1532    :vartype mount_point: str
1533    :ivar role_type: Role type. Possible values include: "IOT", "ASA", "Functions", "Cognitive".
1534    :vartype role_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.RoleTypes
1535    """
1536
1537    _validation = {
1538        'share_id': {'required': True},
1539        'role_id': {'readonly': True},
1540        'mount_point': {'readonly': True},
1541        'role_type': {'readonly': True},
1542    }
1543
1544    _attribute_map = {
1545        'share_id': {'key': 'shareId', 'type': 'str'},
1546        'role_id': {'key': 'roleId', 'type': 'str'},
1547        'mount_point': {'key': 'mountPoint', 'type': 'str'},
1548        'role_type': {'key': 'roleType', 'type': 'str'},
1549    }
1550
1551    def __init__(
1552        self,
1553        *,
1554        share_id: str,
1555        **kwargs
1556    ):
1557        super(MountPointMap, self).__init__(**kwargs)
1558        self.share_id = share_id
1559        self.role_id = None
1560        self.mount_point = None
1561        self.role_type = None
1562
1563
1564class NetworkAdapter(msrest.serialization.Model):
1565    """Represents the networkAdapter on a device.
1566
1567    Variables are only populated by the server, and will be ignored when sending a request.
1568
1569    :ivar adapter_id: Instance ID of network adapter.
1570    :vartype adapter_id: str
1571    :ivar adapter_position: Hardware position of network adapter.
1572    :vartype adapter_position: ~azure.mgmt.databoxedge.v2019_08_01.models.NetworkAdapterPosition
1573    :ivar index: Logical index of the adapter.
1574    :vartype index: int
1575    :ivar node_id: Node ID of the network adapter.
1576    :vartype node_id: str
1577    :ivar network_adapter_name: Network adapter name.
1578    :vartype network_adapter_name: str
1579    :ivar label: Hardware label for the adapter.
1580    :vartype label: str
1581    :ivar mac_address: MAC address.
1582    :vartype mac_address: str
1583    :ivar link_speed: Link speed.
1584    :vartype link_speed: long
1585    :ivar status: Value indicating whether this adapter is valid. Possible values include:
1586     "Inactive", "Active".
1587    :vartype status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.NetworkAdapterStatus
1588    :param rdma_status: Value indicating whether this adapter is RDMA capable. Possible values
1589     include: "Incapable", "Capable".
1590    :type rdma_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.NetworkAdapterRDMAStatus
1591    :param dhcp_status: Value indicating whether this adapter has DHCP enabled. Possible values
1592     include: "Disabled", "Enabled".
1593    :type dhcp_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.NetworkAdapterDHCPStatus
1594    :ivar ipv4_configuration: The IPv4 configuration of the network adapter.
1595    :vartype ipv4_configuration: ~azure.mgmt.databoxedge.v2019_08_01.models.Ipv4Config
1596    :ivar ipv6_configuration: The IPv6 configuration of the network adapter.
1597    :vartype ipv6_configuration: ~azure.mgmt.databoxedge.v2019_08_01.models.Ipv6Config
1598    :ivar ipv6_link_local_address: The IPv6 local address.
1599    :vartype ipv6_link_local_address: str
1600    :ivar dns_servers: The list of DNS Servers of the device.
1601    :vartype dns_servers: list[str]
1602    """
1603
1604    _validation = {
1605        'adapter_id': {'readonly': True},
1606        'adapter_position': {'readonly': True},
1607        'index': {'readonly': True},
1608        'node_id': {'readonly': True},
1609        'network_adapter_name': {'readonly': True},
1610        'label': {'readonly': True},
1611        'mac_address': {'readonly': True},
1612        'link_speed': {'readonly': True},
1613        'status': {'readonly': True},
1614        'ipv4_configuration': {'readonly': True},
1615        'ipv6_configuration': {'readonly': True},
1616        'ipv6_link_local_address': {'readonly': True},
1617        'dns_servers': {'readonly': True},
1618    }
1619
1620    _attribute_map = {
1621        'adapter_id': {'key': 'adapterId', 'type': 'str'},
1622        'adapter_position': {'key': 'adapterPosition', 'type': 'NetworkAdapterPosition'},
1623        'index': {'key': 'index', 'type': 'int'},
1624        'node_id': {'key': 'nodeId', 'type': 'str'},
1625        'network_adapter_name': {'key': 'networkAdapterName', 'type': 'str'},
1626        'label': {'key': 'label', 'type': 'str'},
1627        'mac_address': {'key': 'macAddress', 'type': 'str'},
1628        'link_speed': {'key': 'linkSpeed', 'type': 'long'},
1629        'status': {'key': 'status', 'type': 'str'},
1630        'rdma_status': {'key': 'rdmaStatus', 'type': 'str'},
1631        'dhcp_status': {'key': 'dhcpStatus', 'type': 'str'},
1632        'ipv4_configuration': {'key': 'ipv4Configuration', 'type': 'Ipv4Config'},
1633        'ipv6_configuration': {'key': 'ipv6Configuration', 'type': 'Ipv6Config'},
1634        'ipv6_link_local_address': {'key': 'ipv6LinkLocalAddress', 'type': 'str'},
1635        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
1636    }
1637
1638    def __init__(
1639        self,
1640        *,
1641        rdma_status: Optional[Union[str, "NetworkAdapterRDMAStatus"]] = None,
1642        dhcp_status: Optional[Union[str, "NetworkAdapterDHCPStatus"]] = None,
1643        **kwargs
1644    ):
1645        super(NetworkAdapter, self).__init__(**kwargs)
1646        self.adapter_id = None
1647        self.adapter_position = None
1648        self.index = None
1649        self.node_id = None
1650        self.network_adapter_name = None
1651        self.label = None
1652        self.mac_address = None
1653        self.link_speed = None
1654        self.status = None
1655        self.rdma_status = rdma_status
1656        self.dhcp_status = dhcp_status
1657        self.ipv4_configuration = None
1658        self.ipv6_configuration = None
1659        self.ipv6_link_local_address = None
1660        self.dns_servers = None
1661
1662
1663class NetworkAdapterPosition(msrest.serialization.Model):
1664    """The network adapter position.
1665
1666    Variables are only populated by the server, and will be ignored when sending a request.
1667
1668    :ivar network_group: The network group. Possible values include: "None", "NonRDMA", "RDMA".
1669    :vartype network_group: str or ~azure.mgmt.databoxedge.v2019_08_01.models.NetworkGroup
1670    :ivar port: The port.
1671    :vartype port: int
1672    """
1673
1674    _validation = {
1675        'network_group': {'readonly': True},
1676        'port': {'readonly': True},
1677    }
1678
1679    _attribute_map = {
1680        'network_group': {'key': 'networkGroup', 'type': 'str'},
1681        'port': {'key': 'port', 'type': 'int'},
1682    }
1683
1684    def __init__(
1685        self,
1686        **kwargs
1687    ):
1688        super(NetworkAdapterPosition, self).__init__(**kwargs)
1689        self.network_group = None
1690        self.port = None
1691
1692
1693class NetworkSettings(ARMBaseModel):
1694    """The network settings of a device.
1695
1696    Variables are only populated by the server, and will be ignored when sending a request.
1697
1698    :ivar id: The path ID that uniquely identifies the object.
1699    :vartype id: str
1700    :ivar name: The object name.
1701    :vartype name: str
1702    :ivar type: The hierarchical type of the object.
1703    :vartype type: str
1704    :ivar network_adapters: The network adapter list on the device.
1705    :vartype network_adapters: list[~azure.mgmt.databoxedge.v2019_08_01.models.NetworkAdapter]
1706    """
1707
1708    _validation = {
1709        'id': {'readonly': True},
1710        'name': {'readonly': True},
1711        'type': {'readonly': True},
1712        'network_adapters': {'readonly': True},
1713    }
1714
1715    _attribute_map = {
1716        'id': {'key': 'id', 'type': 'str'},
1717        'name': {'key': 'name', 'type': 'str'},
1718        'type': {'key': 'type', 'type': 'str'},
1719        'network_adapters': {'key': 'properties.networkAdapters', 'type': '[NetworkAdapter]'},
1720    }
1721
1722    def __init__(
1723        self,
1724        **kwargs
1725    ):
1726        super(NetworkSettings, self).__init__(**kwargs)
1727        self.network_adapters = None
1728
1729
1730class Node(ARMBaseModel):
1731    """Represents a single node in a Data box Edge/Gateway device
1732Gateway devices, standalone Edge devices and a single node cluster Edge device will all have 1 node
1733Multi-node Edge devices will have more than 1 nodes.
1734
1735    Variables are only populated by the server, and will be ignored when sending a request.
1736
1737    :ivar id: The path ID that uniquely identifies the object.
1738    :vartype id: str
1739    :ivar name: The object name.
1740    :vartype name: str
1741    :ivar type: The hierarchical type of the object.
1742    :vartype type: str
1743    :ivar node_status: The current status of the individual node. Possible values include:
1744     "Unknown", "Up", "Down", "Rebooting", "ShuttingDown".
1745    :vartype node_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.NodeStatus
1746    :ivar node_chassis_serial_number: Serial number of the Chassis.
1747    :vartype node_chassis_serial_number: str
1748    :ivar node_serial_number: Serial number of the individual node.
1749    :vartype node_serial_number: str
1750    :ivar node_display_name: Display Name of the individual node.
1751    :vartype node_display_name: str
1752    :ivar node_friendly_software_version: Friendly software version name that is currently
1753     installed on the node.
1754    :vartype node_friendly_software_version: str
1755    :ivar node_hcs_version: HCS version that is currently installed on the node.
1756    :vartype node_hcs_version: str
1757    :ivar node_instance_id: Guid instance id of the node.
1758    :vartype node_instance_id: str
1759    """
1760
1761    _validation = {
1762        'id': {'readonly': True},
1763        'name': {'readonly': True},
1764        'type': {'readonly': True},
1765        'node_status': {'readonly': True},
1766        'node_chassis_serial_number': {'readonly': True},
1767        'node_serial_number': {'readonly': True},
1768        'node_display_name': {'readonly': True},
1769        'node_friendly_software_version': {'readonly': True},
1770        'node_hcs_version': {'readonly': True},
1771        'node_instance_id': {'readonly': True},
1772    }
1773
1774    _attribute_map = {
1775        'id': {'key': 'id', 'type': 'str'},
1776        'name': {'key': 'name', 'type': 'str'},
1777        'type': {'key': 'type', 'type': 'str'},
1778        'node_status': {'key': 'properties.nodeStatus', 'type': 'str'},
1779        'node_chassis_serial_number': {'key': 'properties.nodeChassisSerialNumber', 'type': 'str'},
1780        'node_serial_number': {'key': 'properties.nodeSerialNumber', 'type': 'str'},
1781        'node_display_name': {'key': 'properties.nodeDisplayName', 'type': 'str'},
1782        'node_friendly_software_version': {'key': 'properties.nodeFriendlySoftwareVersion', 'type': 'str'},
1783        'node_hcs_version': {'key': 'properties.nodeHcsVersion', 'type': 'str'},
1784        'node_instance_id': {'key': 'properties.nodeInstanceId', 'type': 'str'},
1785    }
1786
1787    def __init__(
1788        self,
1789        **kwargs
1790    ):
1791        super(Node, self).__init__(**kwargs)
1792        self.node_status = None
1793        self.node_chassis_serial_number = None
1794        self.node_serial_number = None
1795        self.node_display_name = None
1796        self.node_friendly_software_version = None
1797        self.node_hcs_version = None
1798        self.node_instance_id = None
1799
1800
1801class NodeList(msrest.serialization.Model):
1802    """Collection of Nodes.
1803
1804    Variables are only populated by the server, and will be ignored when sending a request.
1805
1806    :ivar value: The list of Nodes.
1807    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Node]
1808    """
1809
1810    _validation = {
1811        'value': {'readonly': True},
1812    }
1813
1814    _attribute_map = {
1815        'value': {'key': 'value', 'type': '[Node]'},
1816    }
1817
1818    def __init__(
1819        self,
1820        **kwargs
1821    ):
1822        super(NodeList, self).__init__(**kwargs)
1823        self.value = None
1824
1825
1826class Operation(msrest.serialization.Model):
1827    """Operations.
1828
1829    :param name: Name of the operation.
1830    :type name: str
1831    :param display: Properties displayed for the operation.
1832    :type display: ~azure.mgmt.databoxedge.v2019_08_01.models.OperationDisplay
1833    :param origin: Origin of the operation.
1834    :type origin: str
1835    :param service_specification: Service specification.
1836    :type service_specification: ~azure.mgmt.databoxedge.v2019_08_01.models.ServiceSpecification
1837    """
1838
1839    _attribute_map = {
1840        'name': {'key': 'name', 'type': 'str'},
1841        'display': {'key': 'display', 'type': 'OperationDisplay'},
1842        'origin': {'key': 'origin', 'type': 'str'},
1843        'service_specification': {'key': 'properties.serviceSpecification', 'type': 'ServiceSpecification'},
1844    }
1845
1846    def __init__(
1847        self,
1848        *,
1849        name: Optional[str] = None,
1850        display: Optional["OperationDisplay"] = None,
1851        origin: Optional[str] = None,
1852        service_specification: Optional["ServiceSpecification"] = None,
1853        **kwargs
1854    ):
1855        super(Operation, self).__init__(**kwargs)
1856        self.name = name
1857        self.display = display
1858        self.origin = origin
1859        self.service_specification = service_specification
1860
1861
1862class OperationDisplay(msrest.serialization.Model):
1863    """Operation display properties.
1864
1865    :param provider: Provider name.
1866    :type provider: str
1867    :param resource: The type of resource in which the operation is performed.
1868    :type resource: str
1869    :param operation: Operation to be performed on the resource.
1870    :type operation: str
1871    :param description: Description of the operation to be performed.
1872    :type description: str
1873    """
1874
1875    _attribute_map = {
1876        'provider': {'key': 'provider', 'type': 'str'},
1877        'resource': {'key': 'resource', 'type': 'str'},
1878        'operation': {'key': 'operation', 'type': 'str'},
1879        'description': {'key': 'description', 'type': 'str'},
1880    }
1881
1882    def __init__(
1883        self,
1884        *,
1885        provider: Optional[str] = None,
1886        resource: Optional[str] = None,
1887        operation: Optional[str] = None,
1888        description: Optional[str] = None,
1889        **kwargs
1890    ):
1891        super(OperationDisplay, self).__init__(**kwargs)
1892        self.provider = provider
1893        self.resource = resource
1894        self.operation = operation
1895        self.description = description
1896
1897
1898class OperationsList(msrest.serialization.Model):
1899    """The list of operations used for the discovery of available provider operations.
1900
1901    All required parameters must be populated in order to send to Azure.
1902
1903    :param value: Required. The value.
1904    :type value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Operation]
1905    :param next_link: Link to the next set of results.
1906    :type next_link: str
1907    """
1908
1909    _validation = {
1910        'value': {'required': True},
1911    }
1912
1913    _attribute_map = {
1914        'value': {'key': 'value', 'type': '[Operation]'},
1915        'next_link': {'key': 'nextLink', 'type': 'str'},
1916    }
1917
1918    def __init__(
1919        self,
1920        *,
1921        value: List["Operation"],
1922        next_link: Optional[str] = None,
1923        **kwargs
1924    ):
1925        super(OperationsList, self).__init__(**kwargs)
1926        self.value = value
1927        self.next_link = next_link
1928
1929
1930class Order(ARMBaseModel):
1931    """The order details.
1932
1933    Variables are only populated by the server, and will be ignored when sending a request.
1934
1935    :ivar id: The path ID that uniquely identifies the object.
1936    :vartype id: str
1937    :ivar name: The object name.
1938    :vartype name: str
1939    :ivar type: The hierarchical type of the object.
1940    :vartype type: str
1941    :param contact_information: The contact details.
1942    :type contact_information: ~azure.mgmt.databoxedge.v2019_08_01.models.ContactDetails
1943    :param shipping_address: The shipping address.
1944    :type shipping_address: ~azure.mgmt.databoxedge.v2019_08_01.models.Address
1945    :param current_status: Current status of the order.
1946    :type current_status: ~azure.mgmt.databoxedge.v2019_08_01.models.OrderStatus
1947    :ivar order_history: List of status changes in the order.
1948    :vartype order_history: list[~azure.mgmt.databoxedge.v2019_08_01.models.OrderStatus]
1949    :ivar serial_number: Serial number of the device.
1950    :vartype serial_number: str
1951    :ivar delivery_tracking_info: Tracking information for the package delivered to the customer
1952     whether it has an original or a replacement device.
1953    :vartype delivery_tracking_info: list[~azure.mgmt.databoxedge.v2019_08_01.models.TrackingInfo]
1954    :ivar return_tracking_info: Tracking information for the package returned from the customer
1955     whether it has an original or a replacement device.
1956    :vartype return_tracking_info: list[~azure.mgmt.databoxedge.v2019_08_01.models.TrackingInfo]
1957    """
1958
1959    _validation = {
1960        'id': {'readonly': True},
1961        'name': {'readonly': True},
1962        'type': {'readonly': True},
1963        'order_history': {'readonly': True},
1964        'serial_number': {'readonly': True},
1965        'delivery_tracking_info': {'readonly': True},
1966        'return_tracking_info': {'readonly': True},
1967    }
1968
1969    _attribute_map = {
1970        'id': {'key': 'id', 'type': 'str'},
1971        'name': {'key': 'name', 'type': 'str'},
1972        'type': {'key': 'type', 'type': 'str'},
1973        'contact_information': {'key': 'properties.contactInformation', 'type': 'ContactDetails'},
1974        'shipping_address': {'key': 'properties.shippingAddress', 'type': 'Address'},
1975        'current_status': {'key': 'properties.currentStatus', 'type': 'OrderStatus'},
1976        'order_history': {'key': 'properties.orderHistory', 'type': '[OrderStatus]'},
1977        'serial_number': {'key': 'properties.serialNumber', 'type': 'str'},
1978        'delivery_tracking_info': {'key': 'properties.deliveryTrackingInfo', 'type': '[TrackingInfo]'},
1979        'return_tracking_info': {'key': 'properties.returnTrackingInfo', 'type': '[TrackingInfo]'},
1980    }
1981
1982    def __init__(
1983        self,
1984        *,
1985        contact_information: Optional["ContactDetails"] = None,
1986        shipping_address: Optional["Address"] = None,
1987        current_status: Optional["OrderStatus"] = None,
1988        **kwargs
1989    ):
1990        super(Order, self).__init__(**kwargs)
1991        self.contact_information = contact_information
1992        self.shipping_address = shipping_address
1993        self.current_status = current_status
1994        self.order_history = None
1995        self.serial_number = None
1996        self.delivery_tracking_info = None
1997        self.return_tracking_info = None
1998
1999
2000class OrderList(msrest.serialization.Model):
2001    """List of order entities.
2002
2003    Variables are only populated by the server, and will be ignored when sending a request.
2004
2005    :ivar value: The list of orders.
2006    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Order]
2007    :ivar next_link: Link to the next set of results.
2008    :vartype next_link: str
2009    """
2010
2011    _validation = {
2012        'value': {'readonly': True},
2013        'next_link': {'readonly': True},
2014    }
2015
2016    _attribute_map = {
2017        'value': {'key': 'value', 'type': '[Order]'},
2018        'next_link': {'key': 'nextLink', 'type': 'str'},
2019    }
2020
2021    def __init__(
2022        self,
2023        **kwargs
2024    ):
2025        super(OrderList, self).__init__(**kwargs)
2026        self.value = None
2027        self.next_link = None
2028
2029
2030class OrderStatus(msrest.serialization.Model):
2031    """Represents a single status change.
2032
2033    Variables are only populated by the server, and will be ignored when sending a request.
2034
2035    All required parameters must be populated in order to send to Azure.
2036
2037    :param status: Required. Status of the order as per the allowed status types. Possible values
2038     include: "Untracked", "AwaitingFulfilment", "AwaitingPreparation", "AwaitingShipment",
2039     "Shipped", "Arriving", "Delivered", "ReplacementRequested", "LostDevice", "Declined",
2040     "ReturnInitiated", "AwaitingReturnShipment", "ShippedBack", "CollectedAtMicrosoft".
2041    :type status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.OrderState
2042    :ivar update_date_time: Time of status update.
2043    :vartype update_date_time: ~datetime.datetime
2044    :param comments: Comments related to this status change.
2045    :type comments: str
2046    :ivar additional_order_details: Dictionary to hold generic information which is not stored
2047     by the already existing properties.
2048    :vartype additional_order_details: dict[str, str]
2049    """
2050
2051    _validation = {
2052        'status': {'required': True},
2053        'update_date_time': {'readonly': True},
2054        'additional_order_details': {'readonly': True},
2055    }
2056
2057    _attribute_map = {
2058        'status': {'key': 'status', 'type': 'str'},
2059        'update_date_time': {'key': 'updateDateTime', 'type': 'iso-8601'},
2060        'comments': {'key': 'comments', 'type': 'str'},
2061        'additional_order_details': {'key': 'additionalOrderDetails', 'type': '{str}'},
2062    }
2063
2064    def __init__(
2065        self,
2066        *,
2067        status: Union[str, "OrderState"],
2068        comments: Optional[str] = None,
2069        **kwargs
2070    ):
2071        super(OrderStatus, self).__init__(**kwargs)
2072        self.status = status
2073        self.update_date_time = None
2074        self.comments = comments
2075        self.additional_order_details = None
2076
2077
2078class PeriodicTimerEventTrigger(Trigger):
2079    """Trigger details.
2080
2081    Variables are only populated by the server, and will be ignored when sending a request.
2082
2083    All required parameters must be populated in order to send to Azure.
2084
2085    :ivar id: The path ID that uniquely identifies the object.
2086    :vartype id: str
2087    :ivar name: The object name.
2088    :vartype name: str
2089    :ivar type: The hierarchical type of the object.
2090    :vartype type: str
2091    :param kind: Required. Trigger Kind.Constant filled by server.  Possible values include:
2092     "FileEvent", "PeriodicTimerEvent".
2093    :type kind: str or ~azure.mgmt.databoxedge.v2019_08_01.models.TriggerEventType
2094    :param source_info: Required. Periodic timer details.
2095    :type source_info: ~azure.mgmt.databoxedge.v2019_08_01.models.PeriodicTimerSourceInfo
2096    :param sink_info: Required. Role Sink information.
2097    :type sink_info: ~azure.mgmt.databoxedge.v2019_08_01.models.RoleSinkInfo
2098    :param custom_context_tag: A custom context tag typically used to correlate the trigger against
2099     its usage. For example, if a periodic timer trigger is intended for certain specific IoT
2100     modules in the device, the tag can be the name or the image URL of the module.
2101    :type custom_context_tag: str
2102    """
2103
2104    _validation = {
2105        'id': {'readonly': True},
2106        'name': {'readonly': True},
2107        'type': {'readonly': True},
2108        'kind': {'required': True},
2109        'source_info': {'required': True},
2110        'sink_info': {'required': True},
2111    }
2112
2113    _attribute_map = {
2114        'id': {'key': 'id', 'type': 'str'},
2115        'name': {'key': 'name', 'type': 'str'},
2116        'type': {'key': 'type', 'type': 'str'},
2117        'kind': {'key': 'kind', 'type': 'str'},
2118        'source_info': {'key': 'properties.sourceInfo', 'type': 'PeriodicTimerSourceInfo'},
2119        'sink_info': {'key': 'properties.sinkInfo', 'type': 'RoleSinkInfo'},
2120        'custom_context_tag': {'key': 'properties.customContextTag', 'type': 'str'},
2121    }
2122
2123    def __init__(
2124        self,
2125        *,
2126        source_info: "PeriodicTimerSourceInfo",
2127        sink_info: "RoleSinkInfo",
2128        custom_context_tag: Optional[str] = None,
2129        **kwargs
2130    ):
2131        super(PeriodicTimerEventTrigger, self).__init__(**kwargs)
2132        self.kind = 'PeriodicTimerEvent'  # type: str
2133        self.source_info = source_info
2134        self.sink_info = sink_info
2135        self.custom_context_tag = custom_context_tag
2136
2137
2138class PeriodicTimerSourceInfo(msrest.serialization.Model):
2139    """Periodic timer event source.
2140
2141    All required parameters must be populated in order to send to Azure.
2142
2143    :param start_time: Required. The time of the day that results in a valid trigger. Schedule is
2144     computed with reference to the time specified upto seconds. If timezone is not specified the
2145     time will considered to be in device timezone. The value will always be returned as UTC time.
2146    :type start_time: ~datetime.datetime
2147    :param schedule: Required. Periodic frequency at which timer event needs to be raised. Supports
2148     daily, hourly, minutes, and seconds.
2149    :type schedule: str
2150    :param topic: Topic where periodic events are published to IoT device.
2151    :type topic: str
2152    """
2153
2154    _validation = {
2155        'start_time': {'required': True},
2156        'schedule': {'required': True},
2157    }
2158
2159    _attribute_map = {
2160        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
2161        'schedule': {'key': 'schedule', 'type': 'str'},
2162        'topic': {'key': 'topic', 'type': 'str'},
2163    }
2164
2165    def __init__(
2166        self,
2167        *,
2168        start_time: datetime.datetime,
2169        schedule: str,
2170        topic: Optional[str] = None,
2171        **kwargs
2172    ):
2173        super(PeriodicTimerSourceInfo, self).__init__(**kwargs)
2174        self.start_time = start_time
2175        self.schedule = schedule
2176        self.topic = topic
2177
2178
2179class RefreshDetails(msrest.serialization.Model):
2180    """Fields for tracking refresh job on the share or container.
2181
2182    :param in_progress_refresh_job_id: If a refresh job is currently in progress on this share or
2183     container, this field indicates the ARM resource ID of that job. The field is empty if no job
2184     is in progress.
2185    :type in_progress_refresh_job_id: str
2186    :param last_completed_refresh_job_time_in_utc: Indicates the completed time for the last
2187     refresh job on this particular share or container, if any.This could be a failed job or a
2188     successful job.
2189    :type last_completed_refresh_job_time_in_utc: ~datetime.datetime
2190    :param error_manifest_file: Indicates the relative path of the error xml for the last refresh
2191     job on this particular share or container, if any. This could be a failed job or a successful
2192     job.
2193    :type error_manifest_file: str
2194    :param last_job: Indicates the id of the last refresh job on this particular share or
2195     container,if any. This could be a failed job or a successful job.
2196    :type last_job: str
2197    """
2198
2199    _attribute_map = {
2200        'in_progress_refresh_job_id': {'key': 'inProgressRefreshJobId', 'type': 'str'},
2201        'last_completed_refresh_job_time_in_utc': {'key': 'lastCompletedRefreshJobTimeInUTC', 'type': 'iso-8601'},
2202        'error_manifest_file': {'key': 'errorManifestFile', 'type': 'str'},
2203        'last_job': {'key': 'lastJob', 'type': 'str'},
2204    }
2205
2206    def __init__(
2207        self,
2208        *,
2209        in_progress_refresh_job_id: Optional[str] = None,
2210        last_completed_refresh_job_time_in_utc: Optional[datetime.datetime] = None,
2211        error_manifest_file: Optional[str] = None,
2212        last_job: Optional[str] = None,
2213        **kwargs
2214    ):
2215        super(RefreshDetails, self).__init__(**kwargs)
2216        self.in_progress_refresh_job_id = in_progress_refresh_job_id
2217        self.last_completed_refresh_job_time_in_utc = last_completed_refresh_job_time_in_utc
2218        self.error_manifest_file = error_manifest_file
2219        self.last_job = last_job
2220
2221
2222class ResourceTypeSku(msrest.serialization.Model):
2223    """SkuInformation object.
2224
2225    Variables are only populated by the server, and will be ignored when sending a request.
2226
2227    :ivar resource_type: The type of the resource.
2228    :vartype resource_type: str
2229    :ivar name: The Sku name. Possible values include: "Gateway", "Edge", "TEA_1Node",
2230     "TEA_1Node_UPS", "TEA_1Node_Heater", "TEA_1Node_UPS_Heater", "TEA_4Node_Heater",
2231     "TEA_4Node_UPS_Heater", "TMA".
2232    :vartype name: str or ~azure.mgmt.databoxedge.v2019_08_01.models.SkuName
2233    :ivar kind: The Sku kind.
2234    :vartype kind: str
2235    :ivar tier: The Sku tier. Possible values include: "Standard".
2236    :vartype tier: str or ~azure.mgmt.databoxedge.v2019_08_01.models.SkuTier
2237    :ivar family: The Sku family.
2238    :vartype family: str
2239    :ivar locations: Availability of the SKU for the region.
2240    :vartype locations: list[str]
2241    :ivar api_versions: The API versions in which SKU is available.
2242    :vartype api_versions: list[str]
2243    :ivar location_info: Availability of the SKU for the location/zone.
2244    :vartype location_info: list[~azure.mgmt.databoxedge.v2019_08_01.models.SkuLocationInfo]
2245    :ivar costs: The pricing info of the Sku.
2246    :vartype costs: list[~azure.mgmt.databoxedge.v2019_08_01.models.SkuCost]
2247    :ivar restrictions: Restrictions of the SKU availability.
2248    :vartype restrictions: list[~azure.mgmt.databoxedge.v2019_08_01.models.SkuRestriction]
2249    """
2250
2251    _validation = {
2252        'resource_type': {'readonly': True},
2253        'name': {'readonly': True},
2254        'kind': {'readonly': True},
2255        'tier': {'readonly': True},
2256        'family': {'readonly': True},
2257        'locations': {'readonly': True},
2258        'api_versions': {'readonly': True},
2259        'location_info': {'readonly': True},
2260        'costs': {'readonly': True},
2261        'restrictions': {'readonly': True},
2262    }
2263
2264    _attribute_map = {
2265        'resource_type': {'key': 'resourceType', 'type': 'str'},
2266        'name': {'key': 'name', 'type': 'str'},
2267        'kind': {'key': 'kind', 'type': 'str'},
2268        'tier': {'key': 'tier', 'type': 'str'},
2269        'family': {'key': 'family', 'type': 'str'},
2270        'locations': {'key': 'locations', 'type': '[str]'},
2271        'api_versions': {'key': 'apiVersions', 'type': '[str]'},
2272        'location_info': {'key': 'locationInfo', 'type': '[SkuLocationInfo]'},
2273        'costs': {'key': 'costs', 'type': '[SkuCost]'},
2274        'restrictions': {'key': 'restrictions', 'type': '[SkuRestriction]'},
2275    }
2276
2277    def __init__(
2278        self,
2279        **kwargs
2280    ):
2281        super(ResourceTypeSku, self).__init__(**kwargs)
2282        self.resource_type = None
2283        self.name = None
2284        self.kind = None
2285        self.tier = None
2286        self.family = None
2287        self.locations = None
2288        self.api_versions = None
2289        self.location_info = None
2290        self.costs = None
2291        self.restrictions = None
2292
2293
2294class RoleList(msrest.serialization.Model):
2295    """Collection of all the roles on the Data Box Edge device.
2296
2297    Variables are only populated by the server, and will be ignored when sending a request.
2298
2299    :ivar value: The Value.
2300    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Role]
2301    :ivar next_link: Link to the next set of results.
2302    :vartype next_link: str
2303    """
2304
2305    _validation = {
2306        'value': {'readonly': True},
2307        'next_link': {'readonly': True},
2308    }
2309
2310    _attribute_map = {
2311        'value': {'key': 'value', 'type': '[Role]'},
2312        'next_link': {'key': 'nextLink', 'type': 'str'},
2313    }
2314
2315    def __init__(
2316        self,
2317        **kwargs
2318    ):
2319        super(RoleList, self).__init__(**kwargs)
2320        self.value = None
2321        self.next_link = None
2322
2323
2324class RoleSinkInfo(msrest.serialization.Model):
2325    """Compute role against which events will be raised.
2326
2327    All required parameters must be populated in order to send to Azure.
2328
2329    :param role_id: Required. Compute role ID.
2330    :type role_id: str
2331    """
2332
2333    _validation = {
2334        'role_id': {'required': True},
2335    }
2336
2337    _attribute_map = {
2338        'role_id': {'key': 'roleId', 'type': 'str'},
2339    }
2340
2341    def __init__(
2342        self,
2343        *,
2344        role_id: str,
2345        **kwargs
2346    ):
2347        super(RoleSinkInfo, self).__init__(**kwargs)
2348        self.role_id = role_id
2349
2350
2351class SecuritySettings(ARMBaseModel):
2352    """The security settings of a device.
2353
2354    Variables are only populated by the server, and will be ignored when sending a request.
2355
2356    All required parameters must be populated in order to send to Azure.
2357
2358    :ivar id: The path ID that uniquely identifies the object.
2359    :vartype id: str
2360    :ivar name: The object name.
2361    :vartype name: str
2362    :ivar type: The hierarchical type of the object.
2363    :vartype type: str
2364    :param device_admin_password: Required. Device administrator password as an encrypted string
2365     (encrypted using RSA PKCS #1) is used to sign into the  local web UI of the device. The Actual
2366     password should have at least 8 characters that are a combination of  uppercase, lowercase,
2367     numeric, and special characters.
2368    :type device_admin_password:
2369     ~azure.mgmt.databoxedge.v2019_08_01.models.AsymmetricEncryptedSecret
2370    """
2371
2372    _validation = {
2373        'id': {'readonly': True},
2374        'name': {'readonly': True},
2375        'type': {'readonly': True},
2376        'device_admin_password': {'required': True},
2377    }
2378
2379    _attribute_map = {
2380        'id': {'key': 'id', 'type': 'str'},
2381        'name': {'key': 'name', 'type': 'str'},
2382        'type': {'key': 'type', 'type': 'str'},
2383        'device_admin_password': {'key': 'properties.deviceAdminPassword', 'type': 'AsymmetricEncryptedSecret'},
2384    }
2385
2386    def __init__(
2387        self,
2388        *,
2389        device_admin_password: "AsymmetricEncryptedSecret",
2390        **kwargs
2391    ):
2392        super(SecuritySettings, self).__init__(**kwargs)
2393        self.device_admin_password = device_admin_password
2394
2395
2396class ServiceSpecification(msrest.serialization.Model):
2397    """Service specification.
2398
2399    :param metric_specifications: Metric specification as defined by shoebox.
2400    :type metric_specifications:
2401     list[~azure.mgmt.databoxedge.v2019_08_01.models.MetricSpecificationV1]
2402    """
2403
2404    _attribute_map = {
2405        'metric_specifications': {'key': 'metricSpecifications', 'type': '[MetricSpecificationV1]'},
2406    }
2407
2408    def __init__(
2409        self,
2410        *,
2411        metric_specifications: Optional[List["MetricSpecificationV1"]] = None,
2412        **kwargs
2413    ):
2414        super(ServiceSpecification, self).__init__(**kwargs)
2415        self.metric_specifications = metric_specifications
2416
2417
2418class Share(ARMBaseModel):
2419    """Represents a share on the  Data Box Edge/Gateway device.
2420
2421    Variables are only populated by the server, and will be ignored when sending a request.
2422
2423    All required parameters must be populated in order to send to Azure.
2424
2425    :ivar id: The path ID that uniquely identifies the object.
2426    :vartype id: str
2427    :ivar name: The object name.
2428    :vartype name: str
2429    :ivar type: The hierarchical type of the object.
2430    :vartype type: str
2431    :param description: Description for the share.
2432    :type description: str
2433    :param share_status: Required. Current status of the share. Possible values include: "Offline",
2434     "Unknown", "OK", "Updating", "NeedsAttention".
2435    :type share_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.ShareStatus
2436    :param monitoring_status: Required. Current monitoring status of the share. Possible values
2437     include: "Enabled", "Disabled".
2438    :type monitoring_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.MonitoringStatus
2439    :param azure_container_info: Azure container mapping for the share.
2440    :type azure_container_info: ~azure.mgmt.databoxedge.v2019_08_01.models.AzureContainerInfo
2441    :param access_protocol: Required. Access protocol to be used by the share. Possible values
2442     include: "SMB", "NFS".
2443    :type access_protocol: str or ~azure.mgmt.databoxedge.v2019_08_01.models.ShareAccessProtocol
2444    :param user_access_rights: Mapping of users and corresponding access rights on the share
2445     (required for SMB protocol).
2446    :type user_access_rights: list[~azure.mgmt.databoxedge.v2019_08_01.models.UserAccessRight]
2447    :param client_access_rights: List of IP addresses and corresponding access rights on the
2448     share(required for NFS protocol).
2449    :type client_access_rights: list[~azure.mgmt.databoxedge.v2019_08_01.models.ClientAccessRight]
2450    :param refresh_details: Details of the refresh job on this share.
2451    :type refresh_details: ~azure.mgmt.databoxedge.v2019_08_01.models.RefreshDetails
2452    :ivar share_mappings: Share mount point to the role.
2453    :vartype share_mappings: list[~azure.mgmt.databoxedge.v2019_08_01.models.MountPointMap]
2454    :param data_policy: Data policy of the share. Possible values include: "Cloud", "Local".
2455    :type data_policy: str or ~azure.mgmt.databoxedge.v2019_08_01.models.DataPolicy
2456    """
2457
2458    _validation = {
2459        'id': {'readonly': True},
2460        'name': {'readonly': True},
2461        'type': {'readonly': True},
2462        'share_status': {'required': True},
2463        'monitoring_status': {'required': True},
2464        'access_protocol': {'required': True},
2465        'share_mappings': {'readonly': True},
2466    }
2467
2468    _attribute_map = {
2469        'id': {'key': 'id', 'type': 'str'},
2470        'name': {'key': 'name', 'type': 'str'},
2471        'type': {'key': 'type', 'type': 'str'},
2472        'description': {'key': 'properties.description', 'type': 'str'},
2473        'share_status': {'key': 'properties.shareStatus', 'type': 'str'},
2474        'monitoring_status': {'key': 'properties.monitoringStatus', 'type': 'str'},
2475        'azure_container_info': {'key': 'properties.azureContainerInfo', 'type': 'AzureContainerInfo'},
2476        'access_protocol': {'key': 'properties.accessProtocol', 'type': 'str'},
2477        'user_access_rights': {'key': 'properties.userAccessRights', 'type': '[UserAccessRight]'},
2478        'client_access_rights': {'key': 'properties.clientAccessRights', 'type': '[ClientAccessRight]'},
2479        'refresh_details': {'key': 'properties.refreshDetails', 'type': 'RefreshDetails'},
2480        'share_mappings': {'key': 'properties.shareMappings', 'type': '[MountPointMap]'},
2481        'data_policy': {'key': 'properties.dataPolicy', 'type': 'str'},
2482    }
2483
2484    def __init__(
2485        self,
2486        *,
2487        share_status: Union[str, "ShareStatus"],
2488        monitoring_status: Union[str, "MonitoringStatus"],
2489        access_protocol: Union[str, "ShareAccessProtocol"],
2490        description: Optional[str] = None,
2491        azure_container_info: Optional["AzureContainerInfo"] = None,
2492        user_access_rights: Optional[List["UserAccessRight"]] = None,
2493        client_access_rights: Optional[List["ClientAccessRight"]] = None,
2494        refresh_details: Optional["RefreshDetails"] = None,
2495        data_policy: Optional[Union[str, "DataPolicy"]] = None,
2496        **kwargs
2497    ):
2498        super(Share, self).__init__(**kwargs)
2499        self.description = description
2500        self.share_status = share_status
2501        self.monitoring_status = monitoring_status
2502        self.azure_container_info = azure_container_info
2503        self.access_protocol = access_protocol
2504        self.user_access_rights = user_access_rights
2505        self.client_access_rights = client_access_rights
2506        self.refresh_details = refresh_details
2507        self.share_mappings = None
2508        self.data_policy = data_policy
2509
2510
2511class ShareAccessRight(msrest.serialization.Model):
2512    """Specifies the mapping between this particular user and the type of access he has on shares on this device.
2513
2514    All required parameters must be populated in order to send to Azure.
2515
2516    :param share_id: Required. The share ID.
2517    :type share_id: str
2518    :param access_type: Required. Type of access to be allowed on the share for this user. Possible
2519     values include: "Change", "Read", "Custom".
2520    :type access_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.ShareAccessType
2521    """
2522
2523    _validation = {
2524        'share_id': {'required': True},
2525        'access_type': {'required': True},
2526    }
2527
2528    _attribute_map = {
2529        'share_id': {'key': 'shareId', 'type': 'str'},
2530        'access_type': {'key': 'accessType', 'type': 'str'},
2531    }
2532
2533    def __init__(
2534        self,
2535        *,
2536        share_id: str,
2537        access_type: Union[str, "ShareAccessType"],
2538        **kwargs
2539    ):
2540        super(ShareAccessRight, self).__init__(**kwargs)
2541        self.share_id = share_id
2542        self.access_type = access_type
2543
2544
2545class ShareList(msrest.serialization.Model):
2546    """Collection of all the shares on the Data Box Edge/Gateway device.
2547
2548    Variables are only populated by the server, and will be ignored when sending a request.
2549
2550    :ivar value: The list of shares.
2551    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Share]
2552    :ivar next_link: Link to the next set of results.
2553    :vartype next_link: str
2554    """
2555
2556    _validation = {
2557        'value': {'readonly': True},
2558        'next_link': {'readonly': True},
2559    }
2560
2561    _attribute_map = {
2562        'value': {'key': 'value', 'type': '[Share]'},
2563        'next_link': {'key': 'nextLink', 'type': 'str'},
2564    }
2565
2566    def __init__(
2567        self,
2568        **kwargs
2569    ):
2570        super(ShareList, self).__init__(**kwargs)
2571        self.value = None
2572        self.next_link = None
2573
2574
2575class Sku(msrest.serialization.Model):
2576    """The SKU type.
2577
2578    :param name: SKU name. Possible values include: "Gateway", "Edge", "TEA_1Node",
2579     "TEA_1Node_UPS", "TEA_1Node_Heater", "TEA_1Node_UPS_Heater", "TEA_4Node_Heater",
2580     "TEA_4Node_UPS_Heater", "TMA".
2581    :type name: str or ~azure.mgmt.databoxedge.v2019_08_01.models.SkuName
2582    :param tier: The SKU tier. This is based on the SKU name. Possible values include: "Standard".
2583    :type tier: str or ~azure.mgmt.databoxedge.v2019_08_01.models.SkuTier
2584    """
2585
2586    _attribute_map = {
2587        'name': {'key': 'name', 'type': 'str'},
2588        'tier': {'key': 'tier', 'type': 'str'},
2589    }
2590
2591    def __init__(
2592        self,
2593        *,
2594        name: Optional[Union[str, "SkuName"]] = None,
2595        tier: Optional[Union[str, "SkuTier"]] = None,
2596        **kwargs
2597    ):
2598        super(Sku, self).__init__(**kwargs)
2599        self.name = name
2600        self.tier = tier
2601
2602
2603class SkuCost(msrest.serialization.Model):
2604    """The metadata for retrieving price info.
2605
2606    Variables are only populated by the server, and will be ignored when sending a request.
2607
2608    :ivar meter_id: Used for querying price from commerce.
2609    :vartype meter_id: str
2610    :ivar quantity: The cost quantity.
2611    :vartype quantity: long
2612    :ivar extended_unit: Restriction of the SKU for the location/zone.
2613    :vartype extended_unit: str
2614    """
2615
2616    _validation = {
2617        'meter_id': {'readonly': True},
2618        'quantity': {'readonly': True},
2619        'extended_unit': {'readonly': True},
2620    }
2621
2622    _attribute_map = {
2623        'meter_id': {'key': 'meterId', 'type': 'str'},
2624        'quantity': {'key': 'quantity', 'type': 'long'},
2625        'extended_unit': {'key': 'extendedUnit', 'type': 'str'},
2626    }
2627
2628    def __init__(
2629        self,
2630        **kwargs
2631    ):
2632        super(SkuCost, self).__init__(**kwargs)
2633        self.meter_id = None
2634        self.quantity = None
2635        self.extended_unit = None
2636
2637
2638class SkuInformationList(msrest.serialization.Model):
2639    """List of SKU Information objects.
2640
2641    Variables are only populated by the server, and will be ignored when sending a request.
2642
2643    :ivar value: List of ResourceType Sku.
2644    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.ResourceTypeSku]
2645    :ivar next_link: Links to the next set of results.
2646    :vartype next_link: str
2647    """
2648
2649    _validation = {
2650        'value': {'readonly': True},
2651        'next_link': {'readonly': True},
2652    }
2653
2654    _attribute_map = {
2655        'value': {'key': 'value', 'type': '[ResourceTypeSku]'},
2656        'next_link': {'key': 'nextLink', 'type': 'str'},
2657    }
2658
2659    def __init__(
2660        self,
2661        **kwargs
2662    ):
2663        super(SkuInformationList, self).__init__(**kwargs)
2664        self.value = None
2665        self.next_link = None
2666
2667
2668class SkuLocationInfo(msrest.serialization.Model):
2669    """The location info.
2670
2671    Variables are only populated by the server, and will be ignored when sending a request.
2672
2673    :ivar location: The location.
2674    :vartype location: str
2675    :ivar zones: The zones.
2676    :vartype zones: list[str]
2677    :ivar sites: The sites.
2678    :vartype sites: list[str]
2679    """
2680
2681    _validation = {
2682        'location': {'readonly': True},
2683        'zones': {'readonly': True},
2684        'sites': {'readonly': True},
2685    }
2686
2687    _attribute_map = {
2688        'location': {'key': 'location', 'type': 'str'},
2689        'zones': {'key': 'zones', 'type': '[str]'},
2690        'sites': {'key': 'sites', 'type': '[str]'},
2691    }
2692
2693    def __init__(
2694        self,
2695        **kwargs
2696    ):
2697        super(SkuLocationInfo, self).__init__(**kwargs)
2698        self.location = None
2699        self.zones = None
2700        self.sites = None
2701
2702
2703class SkuRestriction(msrest.serialization.Model):
2704    """The restrictions because of which SKU cannot be used.
2705
2706    Variables are only populated by the server, and will be ignored when sending a request.
2707
2708    :ivar type: The type of the restriction.
2709    :vartype type: str
2710    :ivar values: The locations where sku is restricted.
2711    :vartype values: list[str]
2712    :ivar reason_code: The SKU restriction reason. Possible values include:
2713     "NotAvailableForSubscription", "QuotaId".
2714    :vartype reason_code: str or
2715     ~azure.mgmt.databoxedge.v2019_08_01.models.SkuRestrictionReasonCode
2716    :ivar restriction_info: Restriction of the SKU for the location/zone.
2717    :vartype restriction_info: ~azure.mgmt.databoxedge.v2019_08_01.models.SkuRestrictionInfo
2718    """
2719
2720    _validation = {
2721        'type': {'readonly': True},
2722        'values': {'readonly': True},
2723        'reason_code': {'readonly': True},
2724        'restriction_info': {'readonly': True},
2725    }
2726
2727    _attribute_map = {
2728        'type': {'key': 'type', 'type': 'str'},
2729        'values': {'key': 'values', 'type': '[str]'},
2730        'reason_code': {'key': 'reasonCode', 'type': 'str'},
2731        'restriction_info': {'key': 'restrictionInfo', 'type': 'SkuRestrictionInfo'},
2732    }
2733
2734    def __init__(
2735        self,
2736        **kwargs
2737    ):
2738        super(SkuRestriction, self).__init__(**kwargs)
2739        self.type = None
2740        self.values = None
2741        self.reason_code = None
2742        self.restriction_info = None
2743
2744
2745class SkuRestrictionInfo(msrest.serialization.Model):
2746    """The restriction info with locations and zones.
2747
2748    Variables are only populated by the server, and will be ignored when sending a request.
2749
2750    :ivar locations: The locations.
2751    :vartype locations: list[str]
2752    :ivar zones: The zones.
2753    :vartype zones: list[str]
2754    """
2755
2756    _validation = {
2757        'locations': {'readonly': True},
2758        'zones': {'readonly': True},
2759    }
2760
2761    _attribute_map = {
2762        'locations': {'key': 'locations', 'type': '[str]'},
2763        'zones': {'key': 'zones', 'type': '[str]'},
2764    }
2765
2766    def __init__(
2767        self,
2768        **kwargs
2769    ):
2770        super(SkuRestrictionInfo, self).__init__(**kwargs)
2771        self.locations = None
2772        self.zones = None
2773
2774
2775class StorageAccount(ARMBaseModel):
2776    """Represents a Storage Account on the  Data Box Edge/Gateway device.
2777
2778    Variables are only populated by the server, and will be ignored when sending a request.
2779
2780    :ivar id: The path ID that uniquely identifies the object.
2781    :vartype id: str
2782    :ivar name: The object name.
2783    :vartype name: str
2784    :ivar type: The hierarchical type of the object.
2785    :vartype type: str
2786    :param description: Description for the storage Account.
2787    :type description: str
2788    :param storage_account_status: Current status of the storage account. Possible values include:
2789     "OK", "Offline", "Unknown", "Updating", "NeedsAttention".
2790    :type storage_account_status: str or
2791     ~azure.mgmt.databoxedge.v2019_08_01.models.StorageAccountStatus
2792    :param data_policy: Data policy of the storage Account. Possible values include: "Cloud",
2793     "Local".
2794    :type data_policy: str or ~azure.mgmt.databoxedge.v2019_08_01.models.DataPolicy
2795    :param storage_account_credential_id: Storage Account Credential Id.
2796    :type storage_account_credential_id: str
2797    :ivar blob_endpoint: BlobEndpoint of Storage Account.
2798    :vartype blob_endpoint: str
2799    :ivar container_count: The Container Count. Present only for Storage Accounts with DataPolicy
2800     set to Cloud.
2801    :vartype container_count: int
2802    """
2803
2804    _validation = {
2805        'id': {'readonly': True},
2806        'name': {'readonly': True},
2807        'type': {'readonly': True},
2808        'blob_endpoint': {'readonly': True},
2809        'container_count': {'readonly': True},
2810    }
2811
2812    _attribute_map = {
2813        'id': {'key': 'id', 'type': 'str'},
2814        'name': {'key': 'name', 'type': 'str'},
2815        'type': {'key': 'type', 'type': 'str'},
2816        'description': {'key': 'properties.description', 'type': 'str'},
2817        'storage_account_status': {'key': 'properties.storageAccountStatus', 'type': 'str'},
2818        'data_policy': {'key': 'properties.dataPolicy', 'type': 'str'},
2819        'storage_account_credential_id': {'key': 'properties.storageAccountCredentialId', 'type': 'str'},
2820        'blob_endpoint': {'key': 'properties.blobEndpoint', 'type': 'str'},
2821        'container_count': {'key': 'properties.containerCount', 'type': 'int'},
2822    }
2823
2824    def __init__(
2825        self,
2826        *,
2827        description: Optional[str] = None,
2828        storage_account_status: Optional[Union[str, "StorageAccountStatus"]] = None,
2829        data_policy: Optional[Union[str, "DataPolicy"]] = None,
2830        storage_account_credential_id: Optional[str] = None,
2831        **kwargs
2832    ):
2833        super(StorageAccount, self).__init__(**kwargs)
2834        self.description = description
2835        self.storage_account_status = storage_account_status
2836        self.data_policy = data_policy
2837        self.storage_account_credential_id = storage_account_credential_id
2838        self.blob_endpoint = None
2839        self.container_count = None
2840
2841
2842class StorageAccountCredential(ARMBaseModel):
2843    """The storage account credential.
2844
2845    Variables are only populated by the server, and will be ignored when sending a request.
2846
2847    All required parameters must be populated in order to send to Azure.
2848
2849    :ivar id: The path ID that uniquely identifies the object.
2850    :vartype id: str
2851    :ivar name: The object name.
2852    :vartype name: str
2853    :ivar type: The hierarchical type of the object.
2854    :vartype type: str
2855    :param alias: Required. Alias for the storage account.
2856    :type alias: str
2857    :param user_name: Username for the storage account.
2858    :type user_name: str
2859    :param account_key: Encrypted storage key.
2860    :type account_key: ~azure.mgmt.databoxedge.v2019_08_01.models.AsymmetricEncryptedSecret
2861    :param connection_string: Connection string for the storage account. Use this string if
2862     username and account key are not specified.
2863    :type connection_string: str
2864    :param ssl_status: Required. Signifies whether SSL needs to be enabled or not. Possible values
2865     include: "Enabled", "Disabled".
2866    :type ssl_status: str or ~azure.mgmt.databoxedge.v2019_08_01.models.SSLStatus
2867    :param blob_domain_name: Blob end point for private clouds.
2868    :type blob_domain_name: str
2869    :param account_type: Required. Type of storage accessed on the storage account. Possible values
2870     include: "GeneralPurposeStorage", "BlobStorage".
2871    :type account_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.AccountType
2872    :param storage_account_id: Id of the storage account.
2873    :type storage_account_id: str
2874    """
2875
2876    _validation = {
2877        'id': {'readonly': True},
2878        'name': {'readonly': True},
2879        'type': {'readonly': True},
2880        'alias': {'required': True},
2881        'ssl_status': {'required': True},
2882        'account_type': {'required': True},
2883    }
2884
2885    _attribute_map = {
2886        'id': {'key': 'id', 'type': 'str'},
2887        'name': {'key': 'name', 'type': 'str'},
2888        'type': {'key': 'type', 'type': 'str'},
2889        'alias': {'key': 'properties.alias', 'type': 'str'},
2890        'user_name': {'key': 'properties.userName', 'type': 'str'},
2891        'account_key': {'key': 'properties.accountKey', 'type': 'AsymmetricEncryptedSecret'},
2892        'connection_string': {'key': 'properties.connectionString', 'type': 'str'},
2893        'ssl_status': {'key': 'properties.sslStatus', 'type': 'str'},
2894        'blob_domain_name': {'key': 'properties.blobDomainName', 'type': 'str'},
2895        'account_type': {'key': 'properties.accountType', 'type': 'str'},
2896        'storage_account_id': {'key': 'properties.storageAccountId', 'type': 'str'},
2897    }
2898
2899    def __init__(
2900        self,
2901        *,
2902        alias: str,
2903        ssl_status: Union[str, "SSLStatus"],
2904        account_type: Union[str, "AccountType"],
2905        user_name: Optional[str] = None,
2906        account_key: Optional["AsymmetricEncryptedSecret"] = None,
2907        connection_string: Optional[str] = None,
2908        blob_domain_name: Optional[str] = None,
2909        storage_account_id: Optional[str] = None,
2910        **kwargs
2911    ):
2912        super(StorageAccountCredential, self).__init__(**kwargs)
2913        self.alias = alias
2914        self.user_name = user_name
2915        self.account_key = account_key
2916        self.connection_string = connection_string
2917        self.ssl_status = ssl_status
2918        self.blob_domain_name = blob_domain_name
2919        self.account_type = account_type
2920        self.storage_account_id = storage_account_id
2921
2922
2923class StorageAccountCredentialList(msrest.serialization.Model):
2924    """The collection of storage account credentials.
2925
2926    Variables are only populated by the server, and will be ignored when sending a request.
2927
2928    :ivar value: The value.
2929    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.StorageAccountCredential]
2930    :ivar next_link: Link to the next set of results.
2931    :vartype next_link: str
2932    """
2933
2934    _validation = {
2935        'value': {'readonly': True},
2936        'next_link': {'readonly': True},
2937    }
2938
2939    _attribute_map = {
2940        'value': {'key': 'value', 'type': '[StorageAccountCredential]'},
2941        'next_link': {'key': 'nextLink', 'type': 'str'},
2942    }
2943
2944    def __init__(
2945        self,
2946        **kwargs
2947    ):
2948        super(StorageAccountCredentialList, self).__init__(**kwargs)
2949        self.value = None
2950        self.next_link = None
2951
2952
2953class StorageAccountList(msrest.serialization.Model):
2954    """Collection of all the Storage Accounts on the Data Box Edge/Gateway device.
2955
2956    Variables are only populated by the server, and will be ignored when sending a request.
2957
2958    :ivar value: The list of storageAccounts.
2959    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.StorageAccount]
2960    :ivar next_link: Link to the next set of results.
2961    :vartype next_link: str
2962    """
2963
2964    _validation = {
2965        'value': {'readonly': True},
2966        'next_link': {'readonly': True},
2967    }
2968
2969    _attribute_map = {
2970        'value': {'key': 'value', 'type': '[StorageAccount]'},
2971        'next_link': {'key': 'nextLink', 'type': 'str'},
2972    }
2973
2974    def __init__(
2975        self,
2976        **kwargs
2977    ):
2978        super(StorageAccountList, self).__init__(**kwargs)
2979        self.value = None
2980        self.next_link = None
2981
2982
2983class SymmetricKey(msrest.serialization.Model):
2984    """Symmetric key for authentication.
2985
2986    :param connection_string: Connection string based on the symmetric key.
2987    :type connection_string: ~azure.mgmt.databoxedge.v2019_08_01.models.AsymmetricEncryptedSecret
2988    """
2989
2990    _attribute_map = {
2991        'connection_string': {'key': 'connectionString', 'type': 'AsymmetricEncryptedSecret'},
2992    }
2993
2994    def __init__(
2995        self,
2996        *,
2997        connection_string: Optional["AsymmetricEncryptedSecret"] = None,
2998        **kwargs
2999    ):
3000        super(SymmetricKey, self).__init__(**kwargs)
3001        self.connection_string = connection_string
3002
3003
3004class TrackingInfo(msrest.serialization.Model):
3005    """Tracking courier information.
3006
3007    :param serial_number: Serial number of the device being tracked.
3008    :type serial_number: str
3009    :param carrier_name: Name of the carrier used in the delivery.
3010    :type carrier_name: str
3011    :param tracking_id: Tracking ID of the shipment.
3012    :type tracking_id: str
3013    :param tracking_url: Tracking URL of the shipment.
3014    :type tracking_url: str
3015    """
3016
3017    _attribute_map = {
3018        'serial_number': {'key': 'serialNumber', 'type': 'str'},
3019        'carrier_name': {'key': 'carrierName', 'type': 'str'},
3020        'tracking_id': {'key': 'trackingId', 'type': 'str'},
3021        'tracking_url': {'key': 'trackingUrl', 'type': 'str'},
3022    }
3023
3024    def __init__(
3025        self,
3026        *,
3027        serial_number: Optional[str] = None,
3028        carrier_name: Optional[str] = None,
3029        tracking_id: Optional[str] = None,
3030        tracking_url: Optional[str] = None,
3031        **kwargs
3032    ):
3033        super(TrackingInfo, self).__init__(**kwargs)
3034        self.serial_number = serial_number
3035        self.carrier_name = carrier_name
3036        self.tracking_id = tracking_id
3037        self.tracking_url = tracking_url
3038
3039
3040class TriggerList(msrest.serialization.Model):
3041    """Collection of all trigger on the data box edge device.
3042
3043    Variables are only populated by the server, and will be ignored when sending a request.
3044
3045    :ivar value: The list of triggers.
3046    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.Trigger]
3047    :ivar next_link: Link to the next set of results.
3048    :vartype next_link: str
3049    """
3050
3051    _validation = {
3052        'value': {'readonly': True},
3053        'next_link': {'readonly': True},
3054    }
3055
3056    _attribute_map = {
3057        'value': {'key': 'value', 'type': '[Trigger]'},
3058        'next_link': {'key': 'nextLink', 'type': 'str'},
3059    }
3060
3061    def __init__(
3062        self,
3063        **kwargs
3064    ):
3065        super(TriggerList, self).__init__(**kwargs)
3066        self.value = None
3067        self.next_link = None
3068
3069
3070class UpdateDownloadProgress(msrest.serialization.Model):
3071    """Details about the download progress of update.
3072
3073    Variables are only populated by the server, and will be ignored when sending a request.
3074
3075    :ivar download_phase: The download phase. Possible values include: "Unknown", "Initializing",
3076     "Downloading", "Verifying".
3077    :vartype download_phase: str or ~azure.mgmt.databoxedge.v2019_08_01.models.DownloadPhase
3078    :ivar percent_complete: Percentage of completion.
3079    :vartype percent_complete: int
3080    :ivar total_bytes_to_download: Total bytes to download.
3081    :vartype total_bytes_to_download: float
3082    :ivar total_bytes_downloaded: Total bytes downloaded.
3083    :vartype total_bytes_downloaded: float
3084    :ivar number_of_updates_to_download: Number of updates to download.
3085    :vartype number_of_updates_to_download: int
3086    :ivar number_of_updates_downloaded: Number of updates downloaded.
3087    :vartype number_of_updates_downloaded: int
3088    """
3089
3090    _validation = {
3091        'download_phase': {'readonly': True},
3092        'percent_complete': {'readonly': True},
3093        'total_bytes_to_download': {'readonly': True},
3094        'total_bytes_downloaded': {'readonly': True},
3095        'number_of_updates_to_download': {'readonly': True},
3096        'number_of_updates_downloaded': {'readonly': True},
3097    }
3098
3099    _attribute_map = {
3100        'download_phase': {'key': 'downloadPhase', 'type': 'str'},
3101        'percent_complete': {'key': 'percentComplete', 'type': 'int'},
3102        'total_bytes_to_download': {'key': 'totalBytesToDownload', 'type': 'float'},
3103        'total_bytes_downloaded': {'key': 'totalBytesDownloaded', 'type': 'float'},
3104        'number_of_updates_to_download': {'key': 'numberOfUpdatesToDownload', 'type': 'int'},
3105        'number_of_updates_downloaded': {'key': 'numberOfUpdatesDownloaded', 'type': 'int'},
3106    }
3107
3108    def __init__(
3109        self,
3110        **kwargs
3111    ):
3112        super(UpdateDownloadProgress, self).__init__(**kwargs)
3113        self.download_phase = None
3114        self.percent_complete = None
3115        self.total_bytes_to_download = None
3116        self.total_bytes_downloaded = None
3117        self.number_of_updates_to_download = None
3118        self.number_of_updates_downloaded = None
3119
3120
3121class UpdateInstallProgress(msrest.serialization.Model):
3122    """Progress details during installation of updates.
3123
3124    Variables are only populated by the server, and will be ignored when sending a request.
3125
3126    :ivar percent_complete: Percentage completed.
3127    :vartype percent_complete: int
3128    :ivar number_of_updates_to_install: Number of updates to install.
3129    :vartype number_of_updates_to_install: int
3130    :ivar number_of_updates_installed: Number of updates installed.
3131    :vartype number_of_updates_installed: int
3132    """
3133
3134    _validation = {
3135        'percent_complete': {'readonly': True},
3136        'number_of_updates_to_install': {'readonly': True},
3137        'number_of_updates_installed': {'readonly': True},
3138    }
3139
3140    _attribute_map = {
3141        'percent_complete': {'key': 'percentComplete', 'type': 'int'},
3142        'number_of_updates_to_install': {'key': 'numberOfUpdatesToInstall', 'type': 'int'},
3143        'number_of_updates_installed': {'key': 'numberOfUpdatesInstalled', 'type': 'int'},
3144    }
3145
3146    def __init__(
3147        self,
3148        **kwargs
3149    ):
3150        super(UpdateInstallProgress, self).__init__(**kwargs)
3151        self.percent_complete = None
3152        self.number_of_updates_to_install = None
3153        self.number_of_updates_installed = None
3154
3155
3156class UpdateSummary(ARMBaseModel):
3157    """Details about ongoing updates and availability of updates on the device.
3158
3159    Variables are only populated by the server, and will be ignored when sending a request.
3160
3161    :ivar id: The path ID that uniquely identifies the object.
3162    :vartype id: str
3163    :ivar name: The object name.
3164    :vartype name: str
3165    :ivar type: The hierarchical type of the object.
3166    :vartype type: str
3167    :param device_version_number: The current version of the device in format: 1.2.17312.13.",.
3168    :type device_version_number: str
3169    :param friendly_device_version_name: The current version of the device in text format.
3170    :type friendly_device_version_name: str
3171    :param device_last_scanned_date_time: The last time when a scan was done on the device.
3172    :type device_last_scanned_date_time: ~datetime.datetime
3173    :param last_completed_scan_job_date_time: The time when the last scan job was completed
3174     (success/cancelled/failed) on the appliance.
3175    :type last_completed_scan_job_date_time: ~datetime.datetime
3176    :ivar last_completed_download_job_date_time: The time when the last Download job was completed
3177     (success/cancelled/failed) on the appliance.
3178    :vartype last_completed_download_job_date_time: ~datetime.datetime
3179    :ivar last_completed_install_job_date_time: The time when the last Install job was completed
3180     (success/cancelled/failed) on the appliance.
3181    :vartype last_completed_install_job_date_time: ~datetime.datetime
3182    :ivar total_number_of_updates_available: The number of updates available for the current device
3183     version as per the last device scan.
3184    :vartype total_number_of_updates_available: int
3185    :ivar total_number_of_updates_pending_download: The total number of items pending download.
3186    :vartype total_number_of_updates_pending_download: int
3187    :ivar total_number_of_updates_pending_install: The total number of items pending install.
3188    :vartype total_number_of_updates_pending_install: int
3189    :ivar reboot_behavior: Indicates if updates are available and at least one of the updates needs
3190     a reboot. Possible values include: "NeverReboots", "RequiresReboot", "RequestReboot".
3191    :vartype reboot_behavior: str or
3192     ~azure.mgmt.databoxedge.v2019_08_01.models.InstallRebootBehavior
3193    :ivar ongoing_update_operation: The current update operation. Possible values include: "None",
3194     "Scan", "Download", "Install".
3195    :vartype ongoing_update_operation: str or
3196     ~azure.mgmt.databoxedge.v2019_08_01.models.UpdateOperation
3197    :ivar in_progress_download_job_id: The job ID of the download job in progress.
3198    :vartype in_progress_download_job_id: str
3199    :ivar in_progress_install_job_id: The job ID of the install job in progress.
3200    :vartype in_progress_install_job_id: str
3201    :ivar in_progress_download_job_started_date_time: The time when the currently running download
3202     (if any) started.
3203    :vartype in_progress_download_job_started_date_time: ~datetime.datetime
3204    :ivar in_progress_install_job_started_date_time: The time when the currently running install
3205     (if any) started.
3206    :vartype in_progress_install_job_started_date_time: ~datetime.datetime
3207    :ivar update_titles: The list of updates available for install.
3208    :vartype update_titles: list[str]
3209    :ivar total_update_size_in_bytes: The total size of updates available for download in bytes.
3210    :vartype total_update_size_in_bytes: float
3211    """
3212
3213    _validation = {
3214        'id': {'readonly': True},
3215        'name': {'readonly': True},
3216        'type': {'readonly': True},
3217        'last_completed_download_job_date_time': {'readonly': True},
3218        'last_completed_install_job_date_time': {'readonly': True},
3219        'total_number_of_updates_available': {'readonly': True},
3220        'total_number_of_updates_pending_download': {'readonly': True},
3221        'total_number_of_updates_pending_install': {'readonly': True},
3222        'reboot_behavior': {'readonly': True},
3223        'ongoing_update_operation': {'readonly': True},
3224        'in_progress_download_job_id': {'readonly': True},
3225        'in_progress_install_job_id': {'readonly': True},
3226        'in_progress_download_job_started_date_time': {'readonly': True},
3227        'in_progress_install_job_started_date_time': {'readonly': True},
3228        'update_titles': {'readonly': True},
3229        'total_update_size_in_bytes': {'readonly': True},
3230    }
3231
3232    _attribute_map = {
3233        'id': {'key': 'id', 'type': 'str'},
3234        'name': {'key': 'name', 'type': 'str'},
3235        'type': {'key': 'type', 'type': 'str'},
3236        'device_version_number': {'key': 'properties.deviceVersionNumber', 'type': 'str'},
3237        'friendly_device_version_name': {'key': 'properties.friendlyDeviceVersionName', 'type': 'str'},
3238        'device_last_scanned_date_time': {'key': 'properties.deviceLastScannedDateTime', 'type': 'iso-8601'},
3239        'last_completed_scan_job_date_time': {'key': 'properties.lastCompletedScanJobDateTime', 'type': 'iso-8601'},
3240        'last_completed_download_job_date_time': {'key': 'properties.lastCompletedDownloadJobDateTime', 'type': 'iso-8601'},
3241        'last_completed_install_job_date_time': {'key': 'properties.lastCompletedInstallJobDateTime', 'type': 'iso-8601'},
3242        'total_number_of_updates_available': {'key': 'properties.totalNumberOfUpdatesAvailable', 'type': 'int'},
3243        'total_number_of_updates_pending_download': {'key': 'properties.totalNumberOfUpdatesPendingDownload', 'type': 'int'},
3244        'total_number_of_updates_pending_install': {'key': 'properties.totalNumberOfUpdatesPendingInstall', 'type': 'int'},
3245        'reboot_behavior': {'key': 'properties.rebootBehavior', 'type': 'str'},
3246        'ongoing_update_operation': {'key': 'properties.ongoingUpdateOperation', 'type': 'str'},
3247        'in_progress_download_job_id': {'key': 'properties.inProgressDownloadJobId', 'type': 'str'},
3248        'in_progress_install_job_id': {'key': 'properties.inProgressInstallJobId', 'type': 'str'},
3249        'in_progress_download_job_started_date_time': {'key': 'properties.inProgressDownloadJobStartedDateTime', 'type': 'iso-8601'},
3250        'in_progress_install_job_started_date_time': {'key': 'properties.inProgressInstallJobStartedDateTime', 'type': 'iso-8601'},
3251        'update_titles': {'key': 'properties.updateTitles', 'type': '[str]'},
3252        'total_update_size_in_bytes': {'key': 'properties.totalUpdateSizeInBytes', 'type': 'float'},
3253    }
3254
3255    def __init__(
3256        self,
3257        *,
3258        device_version_number: Optional[str] = None,
3259        friendly_device_version_name: Optional[str] = None,
3260        device_last_scanned_date_time: Optional[datetime.datetime] = None,
3261        last_completed_scan_job_date_time: Optional[datetime.datetime] = None,
3262        **kwargs
3263    ):
3264        super(UpdateSummary, self).__init__(**kwargs)
3265        self.device_version_number = device_version_number
3266        self.friendly_device_version_name = friendly_device_version_name
3267        self.device_last_scanned_date_time = device_last_scanned_date_time
3268        self.last_completed_scan_job_date_time = last_completed_scan_job_date_time
3269        self.last_completed_download_job_date_time = None
3270        self.last_completed_install_job_date_time = None
3271        self.total_number_of_updates_available = None
3272        self.total_number_of_updates_pending_download = None
3273        self.total_number_of_updates_pending_install = None
3274        self.reboot_behavior = None
3275        self.ongoing_update_operation = None
3276        self.in_progress_download_job_id = None
3277        self.in_progress_install_job_id = None
3278        self.in_progress_download_job_started_date_time = None
3279        self.in_progress_install_job_started_date_time = None
3280        self.update_titles = None
3281        self.total_update_size_in_bytes = None
3282
3283
3284class UploadCertificateRequest(msrest.serialization.Model):
3285    """The upload certificate request.
3286
3287    All required parameters must be populated in order to send to Azure.
3288
3289    :param authentication_type: The authentication type. Possible values include: "Invalid",
3290     "AzureActiveDirectory".
3291    :type authentication_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.AuthenticationType
3292    :param certificate: Required. The base64 encoded certificate raw data.
3293    :type certificate: str
3294    """
3295
3296    _validation = {
3297        'certificate': {'required': True},
3298    }
3299
3300    _attribute_map = {
3301        'authentication_type': {'key': 'properties.authenticationType', 'type': 'str'},
3302        'certificate': {'key': 'properties.certificate', 'type': 'str'},
3303    }
3304
3305    def __init__(
3306        self,
3307        *,
3308        certificate: str,
3309        authentication_type: Optional[Union[str, "AuthenticationType"]] = None,
3310        **kwargs
3311    ):
3312        super(UploadCertificateRequest, self).__init__(**kwargs)
3313        self.authentication_type = authentication_type
3314        self.certificate = certificate
3315
3316
3317class UploadCertificateResponse(msrest.serialization.Model):
3318    """The upload registration certificate response.
3319
3320    Variables are only populated by the server, and will be ignored when sending a request.
3321
3322    :param auth_type: Specifies authentication type. Possible values include: "Invalid",
3323     "AzureActiveDirectory".
3324    :type auth_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.AuthenticationType
3325    :ivar resource_id: The resource ID of the Data Box Edge/Gateway device.
3326    :vartype resource_id: str
3327    :ivar aad_authority: Azure Active Directory tenant authority.
3328    :vartype aad_authority: str
3329    :ivar aad_tenant_id: Azure Active Directory tenant ID.
3330    :vartype aad_tenant_id: str
3331    :ivar service_principal_client_id: Azure Active Directory service principal client ID.
3332    :vartype service_principal_client_id: str
3333    :ivar service_principal_object_id: Azure Active Directory service principal object ID.
3334    :vartype service_principal_object_id: str
3335    :ivar azure_management_endpoint_audience: The azure management endpoint audience.
3336    :vartype azure_management_endpoint_audience: str
3337    :ivar aad_audience: Identifier of the target resource that is the recipient of the requested
3338     token.
3339    :vartype aad_audience: str
3340    """
3341
3342    _validation = {
3343        'resource_id': {'readonly': True},
3344        'aad_authority': {'readonly': True},
3345        'aad_tenant_id': {'readonly': True},
3346        'service_principal_client_id': {'readonly': True},
3347        'service_principal_object_id': {'readonly': True},
3348        'azure_management_endpoint_audience': {'readonly': True},
3349        'aad_audience': {'readonly': True},
3350    }
3351
3352    _attribute_map = {
3353        'auth_type': {'key': 'authType', 'type': 'str'},
3354        'resource_id': {'key': 'resourceId', 'type': 'str'},
3355        'aad_authority': {'key': 'aadAuthority', 'type': 'str'},
3356        'aad_tenant_id': {'key': 'aadTenantId', 'type': 'str'},
3357        'service_principal_client_id': {'key': 'servicePrincipalClientId', 'type': 'str'},
3358        'service_principal_object_id': {'key': 'servicePrincipalObjectId', 'type': 'str'},
3359        'azure_management_endpoint_audience': {'key': 'azureManagementEndpointAudience', 'type': 'str'},
3360        'aad_audience': {'key': 'aadAudience', 'type': 'str'},
3361    }
3362
3363    def __init__(
3364        self,
3365        *,
3366        auth_type: Optional[Union[str, "AuthenticationType"]] = None,
3367        **kwargs
3368    ):
3369        super(UploadCertificateResponse, self).__init__(**kwargs)
3370        self.auth_type = auth_type
3371        self.resource_id = None
3372        self.aad_authority = None
3373        self.aad_tenant_id = None
3374        self.service_principal_client_id = None
3375        self.service_principal_object_id = None
3376        self.azure_management_endpoint_audience = None
3377        self.aad_audience = None
3378
3379
3380class User(ARMBaseModel):
3381    """Represents a user who has access to one or more shares on the Data Box Edge/Gateway device.
3382
3383    Variables are only populated by the server, and will be ignored when sending a request.
3384
3385    All required parameters must be populated in order to send to Azure.
3386
3387    :ivar id: The path ID that uniquely identifies the object.
3388    :vartype id: str
3389    :ivar name: The object name.
3390    :vartype name: str
3391    :ivar type: The hierarchical type of the object.
3392    :vartype type: str
3393    :param encrypted_password: The password details.
3394    :type encrypted_password: ~azure.mgmt.databoxedge.v2019_08_01.models.AsymmetricEncryptedSecret
3395    :param share_access_rights: List of shares that the user has rights on. This field should not
3396     be specified during user creation.
3397    :type share_access_rights: list[~azure.mgmt.databoxedge.v2019_08_01.models.ShareAccessRight]
3398    :param user_type: Required. Type of the user. Possible values include: "Share",
3399     "LocalManagement", "ARM".
3400    :type user_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.UserType
3401    """
3402
3403    _validation = {
3404        'id': {'readonly': True},
3405        'name': {'readonly': True},
3406        'type': {'readonly': True},
3407        'user_type': {'required': True},
3408    }
3409
3410    _attribute_map = {
3411        'id': {'key': 'id', 'type': 'str'},
3412        'name': {'key': 'name', 'type': 'str'},
3413        'type': {'key': 'type', 'type': 'str'},
3414        'encrypted_password': {'key': 'properties.encryptedPassword', 'type': 'AsymmetricEncryptedSecret'},
3415        'share_access_rights': {'key': 'properties.shareAccessRights', 'type': '[ShareAccessRight]'},
3416        'user_type': {'key': 'properties.userType', 'type': 'str'},
3417    }
3418
3419    def __init__(
3420        self,
3421        *,
3422        user_type: Union[str, "UserType"],
3423        encrypted_password: Optional["AsymmetricEncryptedSecret"] = None,
3424        share_access_rights: Optional[List["ShareAccessRight"]] = None,
3425        **kwargs
3426    ):
3427        super(User, self).__init__(**kwargs)
3428        self.encrypted_password = encrypted_password
3429        self.share_access_rights = share_access_rights
3430        self.user_type = user_type
3431
3432
3433class UserAccessRight(msrest.serialization.Model):
3434    """The mapping between a particular user and the access type on the SMB share.
3435
3436    All required parameters must be populated in order to send to Azure.
3437
3438    :param user_id: Required. User ID (already existing in the device).
3439    :type user_id: str
3440    :param access_type: Required. Type of access to be allowed for the user. Possible values
3441     include: "Change", "Read", "Custom".
3442    :type access_type: str or ~azure.mgmt.databoxedge.v2019_08_01.models.ShareAccessType
3443    """
3444
3445    _validation = {
3446        'user_id': {'required': True},
3447        'access_type': {'required': True},
3448    }
3449
3450    _attribute_map = {
3451        'user_id': {'key': 'userId', 'type': 'str'},
3452        'access_type': {'key': 'accessType', 'type': 'str'},
3453    }
3454
3455    def __init__(
3456        self,
3457        *,
3458        user_id: str,
3459        access_type: Union[str, "ShareAccessType"],
3460        **kwargs
3461    ):
3462        super(UserAccessRight, self).__init__(**kwargs)
3463        self.user_id = user_id
3464        self.access_type = access_type
3465
3466
3467class UserList(msrest.serialization.Model):
3468    """Collection of users.
3469
3470    Variables are only populated by the server, and will be ignored when sending a request.
3471
3472    :ivar value: The list of users.
3473    :vartype value: list[~azure.mgmt.databoxedge.v2019_08_01.models.User]
3474    :ivar next_link: Link to the next set of results.
3475    :vartype next_link: str
3476    """
3477
3478    _validation = {
3479        'value': {'readonly': True},
3480        'next_link': {'readonly': True},
3481    }
3482
3483    _attribute_map = {
3484        'value': {'key': 'value', 'type': '[User]'},
3485        'next_link': {'key': 'nextLink', 'type': 'str'},
3486    }
3487
3488    def __init__(
3489        self,
3490        **kwargs
3491    ):
3492        super(UserList, self).__init__(**kwargs)
3493        self.value = None
3494        self.next_link = None
3495