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_03_01.models.AlertSeverity
135    :ivar error_details: Error details of the alert.
136    :vartype error_details: ~azure.mgmt.databoxedge.v2019_03_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_03_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_03_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_03_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_03_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_03_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_03_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_03_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_03_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 DataBoxEdgeDevice(ARMBaseModel):
552    """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    :param location: Required. The location of the device. This is a supported and registered Azure
565     geographical region (for example, West US, East US, or Southeast Asia). The geographical region
566     of a device cannot be changed once it is created, but if an identical geographical region is
567     specified on update, the request will succeed.
568    :type location: str
569    :param tags: A set of tags. The list of tags that describe the device. These tags can be used
570     to view and group this device (across resource groups).
571    :type tags: dict[str, str]
572    :param sku: The SKU type.
573    :type sku: ~azure.mgmt.databoxedge.v2019_03_01.models.Sku
574    :param etag: The etag for the devices.
575    :type etag: str
576    :param data_box_edge_device_status: The status of the Data Box Edge/Gateway device. Possible
577     values include: "ReadyToSetup", "Online", "Offline", "NeedsAttention", "Disconnected",
578     "PartiallyDisconnected".
579    :type data_box_edge_device_status: str or
580     ~azure.mgmt.databoxedge.v2019_03_01.models.DataBoxEdgeDeviceStatus
581    :ivar serial_number: The Serial Number of Data Box Edge/Gateway device.
582    :vartype serial_number: str
583    :param description: The Description of the Data Box Edge/Gateway device.
584    :type description: str
585    :param model_description: The description of the Data Box Edge/Gateway device model.
586    :type model_description: str
587    :ivar device_type: The type of the Data Box Edge/Gateway device. Possible values include:
588     "DataBoxEdgeDevice".
589    :vartype device_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.DeviceType
590    :param friendly_name: The Data Box Edge/Gateway device name.
591    :type friendly_name: str
592    :ivar culture: The Data Box Edge/Gateway device culture.
593    :vartype culture: str
594    :ivar device_model: The Data Box Edge/Gateway device model.
595    :vartype device_model: str
596    :ivar device_software_version: The Data Box Edge/Gateway device software version.
597    :vartype device_software_version: str
598    :ivar device_local_capacity: The Data Box Edge/Gateway device local capacity in MB.
599    :vartype device_local_capacity: long
600    :ivar time_zone: The Data Box Edge/Gateway device timezone.
601    :vartype time_zone: str
602    :ivar device_hcs_version: The device software version number of the device (eg: 1.2.18105.6).
603    :vartype device_hcs_version: str
604    :ivar configured_role_types: Type of compute roles configured.
605    :vartype configured_role_types: list[str or
606     ~azure.mgmt.databoxedge.v2019_03_01.models.RoleTypes]
607    """
608
609    _validation = {
610        'id': {'readonly': True},
611        'name': {'readonly': True},
612        'type': {'readonly': True},
613        'location': {'required': True},
614        'serial_number': {'readonly': True},
615        'device_type': {'readonly': True},
616        'culture': {'readonly': True},
617        'device_model': {'readonly': True},
618        'device_software_version': {'readonly': True},
619        'device_local_capacity': {'readonly': True},
620        'time_zone': {'readonly': True},
621        'device_hcs_version': {'readonly': True},
622        'configured_role_types': {'readonly': True},
623    }
624
625    _attribute_map = {
626        'id': {'key': 'id', 'type': 'str'},
627        'name': {'key': 'name', 'type': 'str'},
628        'type': {'key': 'type', 'type': 'str'},
629        'location': {'key': 'location', 'type': 'str'},
630        'tags': {'key': 'tags', 'type': '{str}'},
631        'sku': {'key': 'sku', 'type': 'Sku'},
632        'etag': {'key': 'etag', 'type': 'str'},
633        'data_box_edge_device_status': {'key': 'properties.dataBoxEdgeDeviceStatus', 'type': 'str'},
634        'serial_number': {'key': 'properties.serialNumber', 'type': 'str'},
635        'description': {'key': 'properties.description', 'type': 'str'},
636        'model_description': {'key': 'properties.modelDescription', 'type': 'str'},
637        'device_type': {'key': 'properties.deviceType', 'type': 'str'},
638        'friendly_name': {'key': 'properties.friendlyName', 'type': 'str'},
639        'culture': {'key': 'properties.culture', 'type': 'str'},
640        'device_model': {'key': 'properties.deviceModel', 'type': 'str'},
641        'device_software_version': {'key': 'properties.deviceSoftwareVersion', 'type': 'str'},
642        'device_local_capacity': {'key': 'properties.deviceLocalCapacity', 'type': 'long'},
643        'time_zone': {'key': 'properties.timeZone', 'type': 'str'},
644        'device_hcs_version': {'key': 'properties.deviceHcsVersion', 'type': 'str'},
645        'configured_role_types': {'key': 'properties.configuredRoleTypes', 'type': '[str]'},
646    }
647
648    def __init__(
649        self,
650        *,
651        location: str,
652        tags: Optional[Dict[str, str]] = None,
653        sku: Optional["Sku"] = None,
654        etag: Optional[str] = None,
655        data_box_edge_device_status: Optional[Union[str, "DataBoxEdgeDeviceStatus"]] = None,
656        description: Optional[str] = None,
657        model_description: Optional[str] = None,
658        friendly_name: Optional[str] = None,
659        **kwargs
660    ):
661        super(DataBoxEdgeDevice, self).__init__(**kwargs)
662        self.location = location
663        self.tags = tags
664        self.sku = sku
665        self.etag = etag
666        self.data_box_edge_device_status = data_box_edge_device_status
667        self.serial_number = None
668        self.description = description
669        self.model_description = model_description
670        self.device_type = None
671        self.friendly_name = friendly_name
672        self.culture = None
673        self.device_model = None
674        self.device_software_version = None
675        self.device_local_capacity = None
676        self.time_zone = None
677        self.device_hcs_version = None
678        self.configured_role_types = None
679
680
681class DataBoxEdgeDeviceExtendedInfo(ARMBaseModel):
682    """The extended Info of the Data Box Edge/Gateway device.
683
684    Variables are only populated by the server, and will be ignored when sending a request.
685
686    :ivar id: The path ID that uniquely identifies the object.
687    :vartype id: str
688    :ivar name: The object name.
689    :vartype name: str
690    :ivar type: The hierarchical type of the object.
691    :vartype type: str
692    :param encryption_key_thumbprint: The digital signature of encrypted certificate.
693    :type encryption_key_thumbprint: str
694    :param encryption_key: The public part of the encryption certificate. Client uses this to
695     encrypt any secret.
696    :type encryption_key: str
697    :ivar resource_key: The Resource ID of the Resource.
698    :vartype resource_key: str
699    """
700
701    _validation = {
702        'id': {'readonly': True},
703        'name': {'readonly': True},
704        'type': {'readonly': True},
705        'resource_key': {'readonly': True},
706    }
707
708    _attribute_map = {
709        'id': {'key': 'id', 'type': 'str'},
710        'name': {'key': 'name', 'type': 'str'},
711        'type': {'key': 'type', 'type': 'str'},
712        'encryption_key_thumbprint': {'key': 'properties.encryptionKeyThumbprint', 'type': 'str'},
713        'encryption_key': {'key': 'properties.encryptionKey', 'type': 'str'},
714        'resource_key': {'key': 'properties.resourceKey', 'type': 'str'},
715    }
716
717    def __init__(
718        self,
719        *,
720        encryption_key_thumbprint: Optional[str] = None,
721        encryption_key: Optional[str] = None,
722        **kwargs
723    ):
724        super(DataBoxEdgeDeviceExtendedInfo, self).__init__(**kwargs)
725        self.encryption_key_thumbprint = encryption_key_thumbprint
726        self.encryption_key = encryption_key
727        self.resource_key = None
728
729
730class DataBoxEdgeDeviceList(msrest.serialization.Model):
731    """The collection of Data Box Edge/Gateway devices.
732
733    Variables are only populated by the server, and will be ignored when sending a request.
734
735    :ivar value: The list of Data Box Edge/Gateway devices.
736    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.DataBoxEdgeDevice]
737    :ivar next_link: Link to the next set of results.
738    :vartype next_link: str
739    """
740
741    _validation = {
742        'value': {'readonly': True},
743        'next_link': {'readonly': True},
744    }
745
746    _attribute_map = {
747        'value': {'key': 'value', 'type': '[DataBoxEdgeDevice]'},
748        'next_link': {'key': 'nextLink', 'type': 'str'},
749    }
750
751    def __init__(
752        self,
753        **kwargs
754    ):
755        super(DataBoxEdgeDeviceList, self).__init__(**kwargs)
756        self.value = None
757        self.next_link = None
758
759
760class DataBoxEdgeDevicePatch(msrest.serialization.Model):
761    """The Data Box Edge/Gateway device patch.
762
763    :param tags: A set of tags. The tags attached to the Data Box Edge/Gateway resource.
764    :type tags: dict[str, str]
765    """
766
767    _attribute_map = {
768        'tags': {'key': 'tags', 'type': '{str}'},
769    }
770
771    def __init__(
772        self,
773        *,
774        tags: Optional[Dict[str, str]] = None,
775        **kwargs
776    ):
777        super(DataBoxEdgeDevicePatch, self).__init__(**kwargs)
778        self.tags = tags
779
780
781class Trigger(ARMBaseModel):
782    """Trigger details.
783
784    You probably want to use the sub-classes and not this class directly. Known
785    sub-classes are: FileEventTrigger, PeriodicTimerEventTrigger.
786
787    Variables are only populated by the server, and will be ignored when sending a request.
788
789    All required parameters must be populated in order to send to Azure.
790
791    :ivar id: The path ID that uniquely identifies the object.
792    :vartype id: str
793    :ivar name: The object name.
794    :vartype name: str
795    :ivar type: The hierarchical type of the object.
796    :vartype type: str
797    :param kind: Required. Trigger Kind.Constant filled by server.  Possible values include:
798     "FileEvent", "PeriodicTimerEvent".
799    :type kind: str or ~azure.mgmt.databoxedge.v2019_03_01.models.TriggerEventType
800    """
801
802    _validation = {
803        'id': {'readonly': True},
804        'name': {'readonly': True},
805        'type': {'readonly': True},
806        'kind': {'required': True},
807    }
808
809    _attribute_map = {
810        'id': {'key': 'id', 'type': 'str'},
811        'name': {'key': 'name', 'type': 'str'},
812        'type': {'key': 'type', 'type': 'str'},
813        'kind': {'key': 'kind', 'type': 'str'},
814    }
815
816    _subtype_map = {
817        'kind': {'FileEvent': 'FileEventTrigger', 'PeriodicTimerEvent': 'PeriodicTimerEventTrigger'}
818    }
819
820    def __init__(
821        self,
822        **kwargs
823    ):
824        super(Trigger, self).__init__(**kwargs)
825        self.kind = 'Trigger'  # type: str
826
827
828class FileEventTrigger(Trigger):
829    """Trigger details.
830
831    Variables are only populated by the server, and will be ignored when sending a request.
832
833    All required parameters must be populated in order to send to Azure.
834
835    :ivar id: The path ID that uniquely identifies the object.
836    :vartype id: str
837    :ivar name: The object name.
838    :vartype name: str
839    :ivar type: The hierarchical type of the object.
840    :vartype type: str
841    :param kind: Required. Trigger Kind.Constant filled by server.  Possible values include:
842     "FileEvent", "PeriodicTimerEvent".
843    :type kind: str or ~azure.mgmt.databoxedge.v2019_03_01.models.TriggerEventType
844    :param source_info: Required. File event source details.
845    :type source_info: ~azure.mgmt.databoxedge.v2019_03_01.models.FileSourceInfo
846    :param sink_info: Required. Role sink info.
847    :type sink_info: ~azure.mgmt.databoxedge.v2019_03_01.models.RoleSinkInfo
848    :param custom_context_tag: A custom context tag typically used to correlate the trigger against
849     its usage. For example, if a periodic timer trigger is intended for certain specific IoT
850     modules in the device, the tag can be the name or the image URL of the module.
851    :type custom_context_tag: str
852    """
853
854    _validation = {
855        'id': {'readonly': True},
856        'name': {'readonly': True},
857        'type': {'readonly': True},
858        'kind': {'required': True},
859        'source_info': {'required': True},
860        'sink_info': {'required': True},
861    }
862
863    _attribute_map = {
864        'id': {'key': 'id', 'type': 'str'},
865        'name': {'key': 'name', 'type': 'str'},
866        'type': {'key': 'type', 'type': 'str'},
867        'kind': {'key': 'kind', 'type': 'str'},
868        'source_info': {'key': 'properties.sourceInfo', 'type': 'FileSourceInfo'},
869        'sink_info': {'key': 'properties.sinkInfo', 'type': 'RoleSinkInfo'},
870        'custom_context_tag': {'key': 'properties.customContextTag', 'type': 'str'},
871    }
872
873    def __init__(
874        self,
875        *,
876        source_info: "FileSourceInfo",
877        sink_info: "RoleSinkInfo",
878        custom_context_tag: Optional[str] = None,
879        **kwargs
880    ):
881        super(FileEventTrigger, self).__init__(**kwargs)
882        self.kind = 'FileEvent'  # type: str
883        self.source_info = source_info
884        self.sink_info = sink_info
885        self.custom_context_tag = custom_context_tag
886
887
888class FileSourceInfo(msrest.serialization.Model):
889    """File source details.
890
891    All required parameters must be populated in order to send to Azure.
892
893    :param share_id: Required. File share ID.
894    :type share_id: str
895    """
896
897    _validation = {
898        'share_id': {'required': True},
899    }
900
901    _attribute_map = {
902        'share_id': {'key': 'shareId', 'type': 'str'},
903    }
904
905    def __init__(
906        self,
907        *,
908        share_id: str,
909        **kwargs
910    ):
911        super(FileSourceInfo, self).__init__(**kwargs)
912        self.share_id = share_id
913
914
915class IoTDeviceInfo(msrest.serialization.Model):
916    """Metadata of IoT device/IoT Edge device to be configured.
917
918    All required parameters must be populated in order to send to Azure.
919
920    :param device_id: Required. ID of the IoT device/edge device.
921    :type device_id: str
922    :param io_t_host_hub: Required. Host name for the IoT hub associated to the device.
923    :type io_t_host_hub: str
924    :param authentication: IoT device authentication info.
925    :type authentication: ~azure.mgmt.databoxedge.v2019_03_01.models.Authentication
926    """
927
928    _validation = {
929        'device_id': {'required': True},
930        'io_t_host_hub': {'required': True},
931    }
932
933    _attribute_map = {
934        'device_id': {'key': 'deviceId', 'type': 'str'},
935        'io_t_host_hub': {'key': 'ioTHostHub', 'type': 'str'},
936        'authentication': {'key': 'authentication', 'type': 'Authentication'},
937    }
938
939    def __init__(
940        self,
941        *,
942        device_id: str,
943        io_t_host_hub: str,
944        authentication: Optional["Authentication"] = None,
945        **kwargs
946    ):
947        super(IoTDeviceInfo, self).__init__(**kwargs)
948        self.device_id = device_id
949        self.io_t_host_hub = io_t_host_hub
950        self.authentication = authentication
951
952
953class Role(ARMBaseModel):
954    """Compute role.
955
956    You probably want to use the sub-classes and not this class directly. Known
957    sub-classes are: IoTRole.
958
959    Variables are only populated by the server, and will be ignored when sending a request.
960
961    All required parameters must be populated in order to send to Azure.
962
963    :ivar id: The path ID that uniquely identifies the object.
964    :vartype id: str
965    :ivar name: The object name.
966    :vartype name: str
967    :ivar type: The hierarchical type of the object.
968    :vartype type: str
969    :param kind: Required. Role type.Constant filled by server.  Possible values include: "IOT",
970     "ASA", "Functions", "Cognitive".
971    :type kind: str or ~azure.mgmt.databoxedge.v2019_03_01.models.RoleTypes
972    """
973
974    _validation = {
975        'id': {'readonly': True},
976        'name': {'readonly': True},
977        'type': {'readonly': True},
978        'kind': {'required': True},
979    }
980
981    _attribute_map = {
982        'id': {'key': 'id', 'type': 'str'},
983        'name': {'key': 'name', 'type': 'str'},
984        'type': {'key': 'type', 'type': 'str'},
985        'kind': {'key': 'kind', 'type': 'str'},
986    }
987
988    _subtype_map = {
989        'kind': {'IOT': 'IoTRole'}
990    }
991
992    def __init__(
993        self,
994        **kwargs
995    ):
996        super(Role, self).__init__(**kwargs)
997        self.kind = 'Role'  # type: str
998
999
1000class IoTRole(Role):
1001    """Compute role.
1002
1003    Variables are only populated by the server, and will be ignored when sending a request.
1004
1005    All required parameters must be populated in order to send to Azure.
1006
1007    :ivar id: The path ID that uniquely identifies the object.
1008    :vartype id: str
1009    :ivar name: The object name.
1010    :vartype name: str
1011    :ivar type: The hierarchical type of the object.
1012    :vartype type: str
1013    :param kind: Required. Role type.Constant filled by server.  Possible values include: "IOT",
1014     "ASA", "Functions", "Cognitive".
1015    :type kind: str or ~azure.mgmt.databoxedge.v2019_03_01.models.RoleTypes
1016    :param host_platform: Host OS supported by the IoT role. Possible values include: "Windows",
1017     "Linux".
1018    :type host_platform: str or ~azure.mgmt.databoxedge.v2019_03_01.models.PlatformType
1019    :param io_t_device_details: IoT device metadata to which data box edge device needs to be
1020     connected.
1021    :type io_t_device_details: ~azure.mgmt.databoxedge.v2019_03_01.models.IoTDeviceInfo
1022    :param io_t_edge_device_details: IoT edge device to which the IoT role needs to be configured.
1023    :type io_t_edge_device_details: ~azure.mgmt.databoxedge.v2019_03_01.models.IoTDeviceInfo
1024    :param share_mappings: Mount points of shares in role(s).
1025    :type share_mappings: list[~azure.mgmt.databoxedge.v2019_03_01.models.MountPointMap]
1026    :param role_status: Role status. Possible values include: "Enabled", "Disabled".
1027    :type role_status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.RoleStatus
1028    """
1029
1030    _validation = {
1031        'id': {'readonly': True},
1032        'name': {'readonly': True},
1033        'type': {'readonly': True},
1034        'kind': {'required': True},
1035    }
1036
1037    _attribute_map = {
1038        'id': {'key': 'id', 'type': 'str'},
1039        'name': {'key': 'name', 'type': 'str'},
1040        'type': {'key': 'type', 'type': 'str'},
1041        'kind': {'key': 'kind', 'type': 'str'},
1042        'host_platform': {'key': 'properties.hostPlatform', 'type': 'str'},
1043        'io_t_device_details': {'key': 'properties.ioTDeviceDetails', 'type': 'IoTDeviceInfo'},
1044        'io_t_edge_device_details': {'key': 'properties.ioTEdgeDeviceDetails', 'type': 'IoTDeviceInfo'},
1045        'share_mappings': {'key': 'properties.shareMappings', 'type': '[MountPointMap]'},
1046        'role_status': {'key': 'properties.roleStatus', 'type': 'str'},
1047    }
1048
1049    def __init__(
1050        self,
1051        *,
1052        host_platform: Optional[Union[str, "PlatformType"]] = None,
1053        io_t_device_details: Optional["IoTDeviceInfo"] = None,
1054        io_t_edge_device_details: Optional["IoTDeviceInfo"] = None,
1055        share_mappings: Optional[List["MountPointMap"]] = None,
1056        role_status: Optional[Union[str, "RoleStatus"]] = None,
1057        **kwargs
1058    ):
1059        super(IoTRole, self).__init__(**kwargs)
1060        self.kind = 'IOT'  # type: str
1061        self.host_platform = host_platform
1062        self.io_t_device_details = io_t_device_details
1063        self.io_t_edge_device_details = io_t_edge_device_details
1064        self.share_mappings = share_mappings
1065        self.role_status = role_status
1066
1067
1068class Ipv4Config(msrest.serialization.Model):
1069    """Details related to the IPv4 address configuration.
1070
1071    Variables are only populated by the server, and will be ignored when sending a request.
1072
1073    :ivar ip_address: The IPv4 address of the network adapter.
1074    :vartype ip_address: str
1075    :ivar subnet: The IPv4 subnet of the network adapter.
1076    :vartype subnet: str
1077    :ivar gateway: The IPv4 gateway of the network adapter.
1078    :vartype gateway: str
1079    """
1080
1081    _validation = {
1082        'ip_address': {'readonly': True},
1083        'subnet': {'readonly': True},
1084        'gateway': {'readonly': True},
1085    }
1086
1087    _attribute_map = {
1088        'ip_address': {'key': 'ipAddress', 'type': 'str'},
1089        'subnet': {'key': 'subnet', 'type': 'str'},
1090        'gateway': {'key': 'gateway', 'type': 'str'},
1091    }
1092
1093    def __init__(
1094        self,
1095        **kwargs
1096    ):
1097        super(Ipv4Config, self).__init__(**kwargs)
1098        self.ip_address = None
1099        self.subnet = None
1100        self.gateway = None
1101
1102
1103class Ipv6Config(msrest.serialization.Model):
1104    """Details related to the IPv6 address configuration.
1105
1106    Variables are only populated by the server, and will be ignored when sending a request.
1107
1108    :ivar ip_address: The IPv6 address of the network adapter.
1109    :vartype ip_address: str
1110    :ivar prefix_length: The IPv6 prefix of the network adapter.
1111    :vartype prefix_length: int
1112    :ivar gateway: The IPv6 gateway of the network adapter.
1113    :vartype gateway: str
1114    """
1115
1116    _validation = {
1117        'ip_address': {'readonly': True},
1118        'prefix_length': {'readonly': True},
1119        'gateway': {'readonly': True},
1120    }
1121
1122    _attribute_map = {
1123        'ip_address': {'key': 'ipAddress', 'type': 'str'},
1124        'prefix_length': {'key': 'prefixLength', 'type': 'int'},
1125        'gateway': {'key': 'gateway', 'type': 'str'},
1126    }
1127
1128    def __init__(
1129        self,
1130        **kwargs
1131    ):
1132        super(Ipv6Config, self).__init__(**kwargs)
1133        self.ip_address = None
1134        self.prefix_length = None
1135        self.gateway = None
1136
1137
1138class Job(msrest.serialization.Model):
1139    """A device job.
1140
1141    Variables are only populated by the server, and will be ignored when sending a request.
1142
1143    :ivar id: The path ID that uniquely identifies the object.
1144    :vartype id: str
1145    :ivar name: The name of the object.
1146    :vartype name: str
1147    :ivar type: The hierarchical type of the object.
1148    :vartype type: str
1149    :ivar status: The current status of the job. Possible values include: "Invalid", "Running",
1150     "Succeeded", "Failed", "Canceled", "Paused", "Scheduled".
1151    :vartype status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.JobStatus
1152    :ivar start_time: The UTC date and time at which the job started.
1153    :vartype start_time: ~datetime.datetime
1154    :ivar end_time: The UTC date and time at which the job completed.
1155    :vartype end_time: ~datetime.datetime
1156    :ivar percent_complete: The percentage of the job that is complete.
1157    :vartype percent_complete: int
1158    :ivar error: The error details.
1159    :vartype error: ~azure.mgmt.databoxedge.v2019_03_01.models.JobErrorDetails
1160    :ivar job_type: The type of the job. Possible values include: "Invalid", "ScanForUpdates",
1161     "DownloadUpdates", "InstallUpdates", "RefreshShare".
1162    :vartype job_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.JobType
1163    :ivar current_stage: Current stage of the update operation. Possible values include: "Unknown",
1164     "Initial", "ScanStarted", "ScanComplete", "ScanFailed", "DownloadStarted", "DownloadComplete",
1165     "DownloadFailed", "InstallStarted", "InstallComplete", "InstallFailed", "RebootInitiated",
1166     "Success", "Failure", "RescanStarted", "RescanComplete", "RescanFailed".
1167    :vartype current_stage: str or ~azure.mgmt.databoxedge.v2019_03_01.models.UpdateOperationStage
1168    :ivar download_progress: The download progress.
1169    :vartype download_progress: ~azure.mgmt.databoxedge.v2019_03_01.models.UpdateDownloadProgress
1170    :ivar install_progress: The install progress.
1171    :vartype install_progress: ~azure.mgmt.databoxedge.v2019_03_01.models.UpdateInstallProgress
1172    :ivar total_refresh_errors: Total number of errors encountered during the refresh process.
1173    :vartype total_refresh_errors: int
1174    :ivar error_manifest_file: Local share/remote container relative path to the error manifest
1175     file of the refresh.
1176    :vartype error_manifest_file: str
1177    :ivar share_id: ARM ID of the share that was refreshed.
1178    :vartype share_id: str
1179    :param folder: If only subfolders need to be refreshed, then the subfolder path inside the
1180     share. (The path is empty if there are no subfolders.).
1181    :type folder: str
1182    """
1183
1184    _validation = {
1185        'id': {'readonly': True},
1186        'name': {'readonly': True},
1187        'type': {'readonly': True},
1188        'status': {'readonly': True},
1189        'start_time': {'readonly': True},
1190        'end_time': {'readonly': True},
1191        'percent_complete': {'readonly': True},
1192        'error': {'readonly': True},
1193        'job_type': {'readonly': True},
1194        'current_stage': {'readonly': True},
1195        'download_progress': {'readonly': True},
1196        'install_progress': {'readonly': True},
1197        'total_refresh_errors': {'readonly': True},
1198        'error_manifest_file': {'readonly': True},
1199        'share_id': {'readonly': True},
1200    }
1201
1202    _attribute_map = {
1203        'id': {'key': 'id', 'type': 'str'},
1204        'name': {'key': 'name', 'type': 'str'},
1205        'type': {'key': 'type', 'type': 'str'},
1206        'status': {'key': 'status', 'type': 'str'},
1207        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
1208        'end_time': {'key': 'endTime', 'type': 'iso-8601'},
1209        'percent_complete': {'key': 'percentComplete', 'type': 'int'},
1210        'error': {'key': 'error', 'type': 'JobErrorDetails'},
1211        'job_type': {'key': 'properties.jobType', 'type': 'str'},
1212        'current_stage': {'key': 'properties.currentStage', 'type': 'str'},
1213        'download_progress': {'key': 'properties.downloadProgress', 'type': 'UpdateDownloadProgress'},
1214        'install_progress': {'key': 'properties.installProgress', 'type': 'UpdateInstallProgress'},
1215        'total_refresh_errors': {'key': 'properties.totalRefreshErrors', 'type': 'int'},
1216        'error_manifest_file': {'key': 'properties.errorManifestFile', 'type': 'str'},
1217        'share_id': {'key': 'properties.shareId', 'type': 'str'},
1218        'folder': {'key': 'properties.folder', 'type': 'str'},
1219    }
1220
1221    def __init__(
1222        self,
1223        *,
1224        folder: Optional[str] = None,
1225        **kwargs
1226    ):
1227        super(Job, self).__init__(**kwargs)
1228        self.id = None
1229        self.name = None
1230        self.type = None
1231        self.status = None
1232        self.start_time = None
1233        self.end_time = None
1234        self.percent_complete = None
1235        self.error = None
1236        self.job_type = None
1237        self.current_stage = None
1238        self.download_progress = None
1239        self.install_progress = None
1240        self.total_refresh_errors = None
1241        self.error_manifest_file = None
1242        self.share_id = None
1243        self.folder = folder
1244
1245
1246class JobErrorDetails(msrest.serialization.Model):
1247    """The job error information containing the list of job errors.
1248
1249    Variables are only populated by the server, and will be ignored when sending a request.
1250
1251    :ivar error_details: The error details.
1252    :vartype error_details: list[~azure.mgmt.databoxedge.v2019_03_01.models.JobErrorItem]
1253    :ivar code: The code intended for programmatic access.
1254    :vartype code: str
1255    :ivar message: The message that describes the error in detail.
1256    :vartype message: str
1257    """
1258
1259    _validation = {
1260        'error_details': {'readonly': True},
1261        'code': {'readonly': True},
1262        'message': {'readonly': True},
1263    }
1264
1265    _attribute_map = {
1266        'error_details': {'key': 'errorDetails', 'type': '[JobErrorItem]'},
1267        'code': {'key': 'code', 'type': 'str'},
1268        'message': {'key': 'message', 'type': 'str'},
1269    }
1270
1271    def __init__(
1272        self,
1273        **kwargs
1274    ):
1275        super(JobErrorDetails, self).__init__(**kwargs)
1276        self.error_details = None
1277        self.code = None
1278        self.message = None
1279
1280
1281class JobErrorItem(msrest.serialization.Model):
1282    """The job error items.
1283
1284    Variables are only populated by the server, and will be ignored when sending a request.
1285
1286    :ivar recommendations: The recommended actions.
1287    :vartype recommendations: list[str]
1288    :ivar code: The code intended for programmatic access.
1289    :vartype code: str
1290    :ivar message: The message that describes the error in detail.
1291    :vartype message: str
1292    """
1293
1294    _validation = {
1295        'recommendations': {'readonly': True},
1296        'code': {'readonly': True},
1297        'message': {'readonly': True},
1298    }
1299
1300    _attribute_map = {
1301        'recommendations': {'key': 'recommendations', 'type': '[str]'},
1302        'code': {'key': 'code', 'type': 'str'},
1303        'message': {'key': 'message', 'type': 'str'},
1304    }
1305
1306    def __init__(
1307        self,
1308        **kwargs
1309    ):
1310        super(JobErrorItem, self).__init__(**kwargs)
1311        self.recommendations = None
1312        self.code = None
1313        self.message = None
1314
1315
1316class MetricDimensionV1(msrest.serialization.Model):
1317    """Metric Dimension v1.
1318
1319    :param name: Name of the metrics dimension.
1320    :type name: str
1321    :param display_name: Display name of the metrics dimension.
1322    :type display_name: str
1323    :param to_be_exported_for_shoebox: To be exported to shoe box.
1324    :type to_be_exported_for_shoebox: bool
1325    """
1326
1327    _attribute_map = {
1328        'name': {'key': 'name', 'type': 'str'},
1329        'display_name': {'key': 'displayName', 'type': 'str'},
1330        'to_be_exported_for_shoebox': {'key': 'toBeExportedForShoebox', 'type': 'bool'},
1331    }
1332
1333    def __init__(
1334        self,
1335        *,
1336        name: Optional[str] = None,
1337        display_name: Optional[str] = None,
1338        to_be_exported_for_shoebox: Optional[bool] = None,
1339        **kwargs
1340    ):
1341        super(MetricDimensionV1, self).__init__(**kwargs)
1342        self.name = name
1343        self.display_name = display_name
1344        self.to_be_exported_for_shoebox = to_be_exported_for_shoebox
1345
1346
1347class MetricSpecificationV1(msrest.serialization.Model):
1348    """Metric specification version 1.
1349
1350    :param name: Name of the metric.
1351    :type name: str
1352    :param display_name: Display name of the metric.
1353    :type display_name: str
1354    :param display_description: Description of the metric to be displayed.
1355    :type display_description: str
1356    :param unit: Metric units. Possible values include: "NotSpecified", "Percent", "Count",
1357     "Seconds", "Milliseconds", "Bytes", "BytesPerSecond", "CountPerSecond".
1358    :type unit: str or ~azure.mgmt.databoxedge.v2019_03_01.models.MetricUnit
1359    :param aggregation_type: Metric aggregation type. Possible values include: "NotSpecified",
1360     "None", "Average", "Minimum", "Maximum", "Total", "Count".
1361    :type aggregation_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.MetricAggregationType
1362    :param dimensions: Metric dimensions, other than default dimension which is resource.
1363    :type dimensions: list[~azure.mgmt.databoxedge.v2019_03_01.models.MetricDimensionV1]
1364    :param fill_gap_with_zero: Set true to fill the gaps with zero.
1365    :type fill_gap_with_zero: bool
1366    :param category: Metric category. Possible values include: "Capacity", "Transaction".
1367    :type category: str or ~azure.mgmt.databoxedge.v2019_03_01.models.MetricCategory
1368    :param resource_id_dimension_name_override: Resource name override.
1369    :type resource_id_dimension_name_override: str
1370    :param supported_time_grain_types: Support granularity of metrics.
1371    :type supported_time_grain_types: list[str or
1372     ~azure.mgmt.databoxedge.v2019_03_01.models.TimeGrain]
1373    :param supported_aggregation_types: Support metric aggregation type.
1374    :type supported_aggregation_types: list[str or
1375     ~azure.mgmt.databoxedge.v2019_03_01.models.MetricAggregationType]
1376    """
1377
1378    _attribute_map = {
1379        'name': {'key': 'name', 'type': 'str'},
1380        'display_name': {'key': 'displayName', 'type': 'str'},
1381        'display_description': {'key': 'displayDescription', 'type': 'str'},
1382        'unit': {'key': 'unit', 'type': 'str'},
1383        'aggregation_type': {'key': 'aggregationType', 'type': 'str'},
1384        'dimensions': {'key': 'dimensions', 'type': '[MetricDimensionV1]'},
1385        'fill_gap_with_zero': {'key': 'fillGapWithZero', 'type': 'bool'},
1386        'category': {'key': 'category', 'type': 'str'},
1387        'resource_id_dimension_name_override': {'key': 'resourceIdDimensionNameOverride', 'type': 'str'},
1388        'supported_time_grain_types': {'key': 'supportedTimeGrainTypes', 'type': '[str]'},
1389        'supported_aggregation_types': {'key': 'supportedAggregationTypes', 'type': '[str]'},
1390    }
1391
1392    def __init__(
1393        self,
1394        *,
1395        name: Optional[str] = None,
1396        display_name: Optional[str] = None,
1397        display_description: Optional[str] = None,
1398        unit: Optional[Union[str, "MetricUnit"]] = None,
1399        aggregation_type: Optional[Union[str, "MetricAggregationType"]] = None,
1400        dimensions: Optional[List["MetricDimensionV1"]] = None,
1401        fill_gap_with_zero: Optional[bool] = None,
1402        category: Optional[Union[str, "MetricCategory"]] = None,
1403        resource_id_dimension_name_override: Optional[str] = None,
1404        supported_time_grain_types: Optional[List[Union[str, "TimeGrain"]]] = None,
1405        supported_aggregation_types: Optional[List[Union[str, "MetricAggregationType"]]] = None,
1406        **kwargs
1407    ):
1408        super(MetricSpecificationV1, self).__init__(**kwargs)
1409        self.name = name
1410        self.display_name = display_name
1411        self.display_description = display_description
1412        self.unit = unit
1413        self.aggregation_type = aggregation_type
1414        self.dimensions = dimensions
1415        self.fill_gap_with_zero = fill_gap_with_zero
1416        self.category = category
1417        self.resource_id_dimension_name_override = resource_id_dimension_name_override
1418        self.supported_time_grain_types = supported_time_grain_types
1419        self.supported_aggregation_types = supported_aggregation_types
1420
1421
1422class MountPointMap(msrest.serialization.Model):
1423    """The share mount point.
1424
1425    Variables are only populated by the server, and will be ignored when sending a request.
1426
1427    All required parameters must be populated in order to send to Azure.
1428
1429    :param share_id: Required. ID of the share mounted to the role VM.
1430    :type share_id: str
1431    :ivar role_id: ID of the role to which share is mounted.
1432    :vartype role_id: str
1433    :ivar mount_point: Mount point for the share.
1434    :vartype mount_point: str
1435    :ivar role_type: Role type. Possible values include: "IOT", "ASA", "Functions", "Cognitive".
1436    :vartype role_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.RoleTypes
1437    """
1438
1439    _validation = {
1440        'share_id': {'required': True},
1441        'role_id': {'readonly': True},
1442        'mount_point': {'readonly': True},
1443        'role_type': {'readonly': True},
1444    }
1445
1446    _attribute_map = {
1447        'share_id': {'key': 'shareId', 'type': 'str'},
1448        'role_id': {'key': 'roleId', 'type': 'str'},
1449        'mount_point': {'key': 'mountPoint', 'type': 'str'},
1450        'role_type': {'key': 'roleType', 'type': 'str'},
1451    }
1452
1453    def __init__(
1454        self,
1455        *,
1456        share_id: str,
1457        **kwargs
1458    ):
1459        super(MountPointMap, self).__init__(**kwargs)
1460        self.share_id = share_id
1461        self.role_id = None
1462        self.mount_point = None
1463        self.role_type = None
1464
1465
1466class NetworkAdapter(msrest.serialization.Model):
1467    """Represents the networkAdapter on a device.
1468
1469    Variables are only populated by the server, and will be ignored when sending a request.
1470
1471    :ivar adapter_id: Instance ID of network adapter.
1472    :vartype adapter_id: str
1473    :ivar adapter_position: Hardware position of network adapter.
1474    :vartype adapter_position: ~azure.mgmt.databoxedge.v2019_03_01.models.NetworkAdapterPosition
1475    :ivar index: Logical index of the adapter.
1476    :vartype index: int
1477    :ivar node_id: Node ID of the network adapter.
1478    :vartype node_id: str
1479    :ivar network_adapter_name: Network adapter name.
1480    :vartype network_adapter_name: str
1481    :ivar label: Hardware label for the adapter.
1482    :vartype label: str
1483    :ivar mac_address: MAC address.
1484    :vartype mac_address: str
1485    :ivar link_speed: Link speed.
1486    :vartype link_speed: long
1487    :ivar status: Value indicating whether this adapter is valid. Possible values include:
1488     "Inactive", "Active".
1489    :vartype status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.NetworkAdapterStatus
1490    :param rdma_status: Value indicating whether this adapter is RDMA capable. Possible values
1491     include: "Incapable", "Capable".
1492    :type rdma_status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.NetworkAdapterRDMAStatus
1493    :param dhcp_status: Value indicating whether this adapter has DHCP enabled. Possible values
1494     include: "Disabled", "Enabled".
1495    :type dhcp_status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.NetworkAdapterDHCPStatus
1496    :ivar ipv4_configuration: The IPv4 configuration of the network adapter.
1497    :vartype ipv4_configuration: ~azure.mgmt.databoxedge.v2019_03_01.models.Ipv4Config
1498    :ivar ipv6_configuration: The IPv6 configuration of the network adapter.
1499    :vartype ipv6_configuration: ~azure.mgmt.databoxedge.v2019_03_01.models.Ipv6Config
1500    :ivar ipv6_link_local_address: The IPv6 local address.
1501    :vartype ipv6_link_local_address: str
1502    :ivar dns_servers: The list of DNS Servers of the device.
1503    :vartype dns_servers: list[str]
1504    """
1505
1506    _validation = {
1507        'adapter_id': {'readonly': True},
1508        'adapter_position': {'readonly': True},
1509        'index': {'readonly': True},
1510        'node_id': {'readonly': True},
1511        'network_adapter_name': {'readonly': True},
1512        'label': {'readonly': True},
1513        'mac_address': {'readonly': True},
1514        'link_speed': {'readonly': True},
1515        'status': {'readonly': True},
1516        'ipv4_configuration': {'readonly': True},
1517        'ipv6_configuration': {'readonly': True},
1518        'ipv6_link_local_address': {'readonly': True},
1519        'dns_servers': {'readonly': True},
1520    }
1521
1522    _attribute_map = {
1523        'adapter_id': {'key': 'adapterId', 'type': 'str'},
1524        'adapter_position': {'key': 'adapterPosition', 'type': 'NetworkAdapterPosition'},
1525        'index': {'key': 'index', 'type': 'int'},
1526        'node_id': {'key': 'nodeId', 'type': 'str'},
1527        'network_adapter_name': {'key': 'networkAdapterName', 'type': 'str'},
1528        'label': {'key': 'label', 'type': 'str'},
1529        'mac_address': {'key': 'macAddress', 'type': 'str'},
1530        'link_speed': {'key': 'linkSpeed', 'type': 'long'},
1531        'status': {'key': 'status', 'type': 'str'},
1532        'rdma_status': {'key': 'rdmaStatus', 'type': 'str'},
1533        'dhcp_status': {'key': 'dhcpStatus', 'type': 'str'},
1534        'ipv4_configuration': {'key': 'ipv4Configuration', 'type': 'Ipv4Config'},
1535        'ipv6_configuration': {'key': 'ipv6Configuration', 'type': 'Ipv6Config'},
1536        'ipv6_link_local_address': {'key': 'ipv6LinkLocalAddress', 'type': 'str'},
1537        'dns_servers': {'key': 'dnsServers', 'type': '[str]'},
1538    }
1539
1540    def __init__(
1541        self,
1542        *,
1543        rdma_status: Optional[Union[str, "NetworkAdapterRDMAStatus"]] = None,
1544        dhcp_status: Optional[Union[str, "NetworkAdapterDHCPStatus"]] = None,
1545        **kwargs
1546    ):
1547        super(NetworkAdapter, self).__init__(**kwargs)
1548        self.adapter_id = None
1549        self.adapter_position = None
1550        self.index = None
1551        self.node_id = None
1552        self.network_adapter_name = None
1553        self.label = None
1554        self.mac_address = None
1555        self.link_speed = None
1556        self.status = None
1557        self.rdma_status = rdma_status
1558        self.dhcp_status = dhcp_status
1559        self.ipv4_configuration = None
1560        self.ipv6_configuration = None
1561        self.ipv6_link_local_address = None
1562        self.dns_servers = None
1563
1564
1565class NetworkAdapterPosition(msrest.serialization.Model):
1566    """The network adapter position.
1567
1568    Variables are only populated by the server, and will be ignored when sending a request.
1569
1570    :ivar network_group: The network group. Possible values include: "None", "NonRDMA", "RDMA".
1571    :vartype network_group: str or ~azure.mgmt.databoxedge.v2019_03_01.models.NetworkGroup
1572    :ivar port: The port.
1573    :vartype port: int
1574    """
1575
1576    _validation = {
1577        'network_group': {'readonly': True},
1578        'port': {'readonly': True},
1579    }
1580
1581    _attribute_map = {
1582        'network_group': {'key': 'networkGroup', 'type': 'str'},
1583        'port': {'key': 'port', 'type': 'int'},
1584    }
1585
1586    def __init__(
1587        self,
1588        **kwargs
1589    ):
1590        super(NetworkAdapterPosition, self).__init__(**kwargs)
1591        self.network_group = None
1592        self.port = None
1593
1594
1595class NetworkSettings(ARMBaseModel):
1596    """The network settings of a device.
1597
1598    Variables are only populated by the server, and will be ignored when sending a request.
1599
1600    :ivar id: The path ID that uniquely identifies the object.
1601    :vartype id: str
1602    :ivar name: The object name.
1603    :vartype name: str
1604    :ivar type: The hierarchical type of the object.
1605    :vartype type: str
1606    :ivar network_adapters: The network adapter list on the device.
1607    :vartype network_adapters: list[~azure.mgmt.databoxedge.v2019_03_01.models.NetworkAdapter]
1608    """
1609
1610    _validation = {
1611        'id': {'readonly': True},
1612        'name': {'readonly': True},
1613        'type': {'readonly': True},
1614        'network_adapters': {'readonly': True},
1615    }
1616
1617    _attribute_map = {
1618        'id': {'key': 'id', 'type': 'str'},
1619        'name': {'key': 'name', 'type': 'str'},
1620        'type': {'key': 'type', 'type': 'str'},
1621        'network_adapters': {'key': 'properties.networkAdapters', 'type': '[NetworkAdapter]'},
1622    }
1623
1624    def __init__(
1625        self,
1626        **kwargs
1627    ):
1628        super(NetworkSettings, self).__init__(**kwargs)
1629        self.network_adapters = None
1630
1631
1632class Operation(msrest.serialization.Model):
1633    """Operations.
1634
1635    :param name: Name of the operation.
1636    :type name: str
1637    :param display: Properties displayed for the operation.
1638    :type display: ~azure.mgmt.databoxedge.v2019_03_01.models.OperationDisplay
1639    :param origin: Origin of the operation.
1640    :type origin: str
1641    :param service_specification: Service specification.
1642    :type service_specification: ~azure.mgmt.databoxedge.v2019_03_01.models.ServiceSpecification
1643    """
1644
1645    _attribute_map = {
1646        'name': {'key': 'name', 'type': 'str'},
1647        'display': {'key': 'display', 'type': 'OperationDisplay'},
1648        'origin': {'key': 'origin', 'type': 'str'},
1649        'service_specification': {'key': 'properties.serviceSpecification', 'type': 'ServiceSpecification'},
1650    }
1651
1652    def __init__(
1653        self,
1654        *,
1655        name: Optional[str] = None,
1656        display: Optional["OperationDisplay"] = None,
1657        origin: Optional[str] = None,
1658        service_specification: Optional["ServiceSpecification"] = None,
1659        **kwargs
1660    ):
1661        super(Operation, self).__init__(**kwargs)
1662        self.name = name
1663        self.display = display
1664        self.origin = origin
1665        self.service_specification = service_specification
1666
1667
1668class OperationDisplay(msrest.serialization.Model):
1669    """Operation display properties.
1670
1671    :param provider: Provider name.
1672    :type provider: str
1673    :param resource: The type of resource in which the operation is performed.
1674    :type resource: str
1675    :param operation: Operation to be performed on the resource.
1676    :type operation: str
1677    :param description: Description of the operation to be performed.
1678    :type description: str
1679    """
1680
1681    _attribute_map = {
1682        'provider': {'key': 'provider', 'type': 'str'},
1683        'resource': {'key': 'resource', 'type': 'str'},
1684        'operation': {'key': 'operation', 'type': 'str'},
1685        'description': {'key': 'description', 'type': 'str'},
1686    }
1687
1688    def __init__(
1689        self,
1690        *,
1691        provider: Optional[str] = None,
1692        resource: Optional[str] = None,
1693        operation: Optional[str] = None,
1694        description: Optional[str] = None,
1695        **kwargs
1696    ):
1697        super(OperationDisplay, self).__init__(**kwargs)
1698        self.provider = provider
1699        self.resource = resource
1700        self.operation = operation
1701        self.description = description
1702
1703
1704class OperationsList(msrest.serialization.Model):
1705    """The list of operations used for the discovery of available provider operations.
1706
1707    All required parameters must be populated in order to send to Azure.
1708
1709    :param value: Required. The value.
1710    :type value: list[~azure.mgmt.databoxedge.v2019_03_01.models.Operation]
1711    :param next_link: Link to the next set of results.
1712    :type next_link: str
1713    """
1714
1715    _validation = {
1716        'value': {'required': True},
1717    }
1718
1719    _attribute_map = {
1720        'value': {'key': 'value', 'type': '[Operation]'},
1721        'next_link': {'key': 'nextLink', 'type': 'str'},
1722    }
1723
1724    def __init__(
1725        self,
1726        *,
1727        value: List["Operation"],
1728        next_link: Optional[str] = None,
1729        **kwargs
1730    ):
1731        super(OperationsList, self).__init__(**kwargs)
1732        self.value = value
1733        self.next_link = next_link
1734
1735
1736class Order(ARMBaseModel):
1737    """The order details.
1738
1739    Variables are only populated by the server, and will be ignored when sending a request.
1740
1741    :ivar id: The path ID that uniquely identifies the object.
1742    :vartype id: str
1743    :ivar name: The object name.
1744    :vartype name: str
1745    :ivar type: The hierarchical type of the object.
1746    :vartype type: str
1747    :param contact_information: The contact details.
1748    :type contact_information: ~azure.mgmt.databoxedge.v2019_03_01.models.ContactDetails
1749    :param shipping_address: The shipping address.
1750    :type shipping_address: ~azure.mgmt.databoxedge.v2019_03_01.models.Address
1751    :param current_status: Current status of the order.
1752    :type current_status: ~azure.mgmt.databoxedge.v2019_03_01.models.OrderStatus
1753    :ivar order_history: List of status changes in the order.
1754    :vartype order_history: list[~azure.mgmt.databoxedge.v2019_03_01.models.OrderStatus]
1755    :ivar serial_number: Serial number of the device.
1756    :vartype serial_number: str
1757    :ivar delivery_tracking_info: Tracking information for the package delivered to the customer
1758     whether it has an original or a replacement device.
1759    :vartype delivery_tracking_info: list[~azure.mgmt.databoxedge.v2019_03_01.models.TrackingInfo]
1760    :ivar return_tracking_info: Tracking information for the package returned from the customer
1761     whether it has an original or a replacement device.
1762    :vartype return_tracking_info: list[~azure.mgmt.databoxedge.v2019_03_01.models.TrackingInfo]
1763    """
1764
1765    _validation = {
1766        'id': {'readonly': True},
1767        'name': {'readonly': True},
1768        'type': {'readonly': True},
1769        'order_history': {'readonly': True},
1770        'serial_number': {'readonly': True},
1771        'delivery_tracking_info': {'readonly': True},
1772        'return_tracking_info': {'readonly': True},
1773    }
1774
1775    _attribute_map = {
1776        'id': {'key': 'id', 'type': 'str'},
1777        'name': {'key': 'name', 'type': 'str'},
1778        'type': {'key': 'type', 'type': 'str'},
1779        'contact_information': {'key': 'properties.contactInformation', 'type': 'ContactDetails'},
1780        'shipping_address': {'key': 'properties.shippingAddress', 'type': 'Address'},
1781        'current_status': {'key': 'properties.currentStatus', 'type': 'OrderStatus'},
1782        'order_history': {'key': 'properties.orderHistory', 'type': '[OrderStatus]'},
1783        'serial_number': {'key': 'properties.serialNumber', 'type': 'str'},
1784        'delivery_tracking_info': {'key': 'properties.deliveryTrackingInfo', 'type': '[TrackingInfo]'},
1785        'return_tracking_info': {'key': 'properties.returnTrackingInfo', 'type': '[TrackingInfo]'},
1786    }
1787
1788    def __init__(
1789        self,
1790        *,
1791        contact_information: Optional["ContactDetails"] = None,
1792        shipping_address: Optional["Address"] = None,
1793        current_status: Optional["OrderStatus"] = None,
1794        **kwargs
1795    ):
1796        super(Order, self).__init__(**kwargs)
1797        self.contact_information = contact_information
1798        self.shipping_address = shipping_address
1799        self.current_status = current_status
1800        self.order_history = None
1801        self.serial_number = None
1802        self.delivery_tracking_info = None
1803        self.return_tracking_info = None
1804
1805
1806class OrderList(msrest.serialization.Model):
1807    """List of order entities.
1808
1809    Variables are only populated by the server, and will be ignored when sending a request.
1810
1811    :ivar value: The list of orders.
1812    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.Order]
1813    :ivar next_link: Link to the next set of results.
1814    :vartype next_link: str
1815    """
1816
1817    _validation = {
1818        'value': {'readonly': True},
1819        'next_link': {'readonly': True},
1820    }
1821
1822    _attribute_map = {
1823        'value': {'key': 'value', 'type': '[Order]'},
1824        'next_link': {'key': 'nextLink', 'type': 'str'},
1825    }
1826
1827    def __init__(
1828        self,
1829        **kwargs
1830    ):
1831        super(OrderList, self).__init__(**kwargs)
1832        self.value = None
1833        self.next_link = None
1834
1835
1836class OrderStatus(msrest.serialization.Model):
1837    """Represents a single status change.
1838
1839    Variables are only populated by the server, and will be ignored when sending a request.
1840
1841    All required parameters must be populated in order to send to Azure.
1842
1843    :param status: Required. Status of the order as per the allowed status types. Possible values
1844     include: "Untracked", "AwaitingFulfilment", "AwaitingPreparation", "AwaitingShipment",
1845     "Shipped", "Arriving", "Delivered", "ReplacementRequested", "LostDevice", "Declined",
1846     "ReturnInitiated", "AwaitingReturnShipment", "ShippedBack", "CollectedAtMicrosoft".
1847    :type status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.OrderState
1848    :ivar update_date_time: Time of status update.
1849    :vartype update_date_time: ~datetime.datetime
1850    :param comments: Comments related to this status change.
1851    :type comments: str
1852    """
1853
1854    _validation = {
1855        'status': {'required': True},
1856        'update_date_time': {'readonly': True},
1857    }
1858
1859    _attribute_map = {
1860        'status': {'key': 'status', 'type': 'str'},
1861        'update_date_time': {'key': 'updateDateTime', 'type': 'iso-8601'},
1862        'comments': {'key': 'comments', 'type': 'str'},
1863    }
1864
1865    def __init__(
1866        self,
1867        *,
1868        status: Union[str, "OrderState"],
1869        comments: Optional[str] = None,
1870        **kwargs
1871    ):
1872        super(OrderStatus, self).__init__(**kwargs)
1873        self.status = status
1874        self.update_date_time = None
1875        self.comments = comments
1876
1877
1878class PeriodicTimerEventTrigger(Trigger):
1879    """Trigger details.
1880
1881    Variables are only populated by the server, and will be ignored when sending a request.
1882
1883    All required parameters must be populated in order to send to Azure.
1884
1885    :ivar id: The path ID that uniquely identifies the object.
1886    :vartype id: str
1887    :ivar name: The object name.
1888    :vartype name: str
1889    :ivar type: The hierarchical type of the object.
1890    :vartype type: str
1891    :param kind: Required. Trigger Kind.Constant filled by server.  Possible values include:
1892     "FileEvent", "PeriodicTimerEvent".
1893    :type kind: str or ~azure.mgmt.databoxedge.v2019_03_01.models.TriggerEventType
1894    :param source_info: Required. Periodic timer details.
1895    :type source_info: ~azure.mgmt.databoxedge.v2019_03_01.models.PeriodicTimerSourceInfo
1896    :param sink_info: Required. Role Sink information.
1897    :type sink_info: ~azure.mgmt.databoxedge.v2019_03_01.models.RoleSinkInfo
1898    :param custom_context_tag: A custom context tag typically used to correlate the trigger against
1899     its usage. For example, if a periodic timer trigger is intended for certain specific IoT
1900     modules in the device, the tag can be the name or the image URL of the module.
1901    :type custom_context_tag: str
1902    """
1903
1904    _validation = {
1905        'id': {'readonly': True},
1906        'name': {'readonly': True},
1907        'type': {'readonly': True},
1908        'kind': {'required': True},
1909        'source_info': {'required': True},
1910        'sink_info': {'required': True},
1911    }
1912
1913    _attribute_map = {
1914        'id': {'key': 'id', 'type': 'str'},
1915        'name': {'key': 'name', 'type': 'str'},
1916        'type': {'key': 'type', 'type': 'str'},
1917        'kind': {'key': 'kind', 'type': 'str'},
1918        'source_info': {'key': 'properties.sourceInfo', 'type': 'PeriodicTimerSourceInfo'},
1919        'sink_info': {'key': 'properties.sinkInfo', 'type': 'RoleSinkInfo'},
1920        'custom_context_tag': {'key': 'properties.customContextTag', 'type': 'str'},
1921    }
1922
1923    def __init__(
1924        self,
1925        *,
1926        source_info: "PeriodicTimerSourceInfo",
1927        sink_info: "RoleSinkInfo",
1928        custom_context_tag: Optional[str] = None,
1929        **kwargs
1930    ):
1931        super(PeriodicTimerEventTrigger, self).__init__(**kwargs)
1932        self.kind = 'PeriodicTimerEvent'  # type: str
1933        self.source_info = source_info
1934        self.sink_info = sink_info
1935        self.custom_context_tag = custom_context_tag
1936
1937
1938class PeriodicTimerSourceInfo(msrest.serialization.Model):
1939    """Periodic timer event source.
1940
1941    All required parameters must be populated in order to send to Azure.
1942
1943    :param start_time: Required. The time of the day that results in a valid trigger. Schedule is
1944     computed with reference to the time specified up to seconds. If timezone is not specified the
1945     time will considered to be in device timezone. The value will always be returned as UTC time.
1946    :type start_time: ~datetime.datetime
1947    :param schedule: Required. Periodic frequency at which timer event needs to be raised. Supports
1948     daily, hourly, minutes, and seconds.
1949    :type schedule: str
1950    :param topic: Topic where periodic events are published to IoT device.
1951    :type topic: str
1952    """
1953
1954    _validation = {
1955        'start_time': {'required': True},
1956        'schedule': {'required': True},
1957    }
1958
1959    _attribute_map = {
1960        'start_time': {'key': 'startTime', 'type': 'iso-8601'},
1961        'schedule': {'key': 'schedule', 'type': 'str'},
1962        'topic': {'key': 'topic', 'type': 'str'},
1963    }
1964
1965    def __init__(
1966        self,
1967        *,
1968        start_time: datetime.datetime,
1969        schedule: str,
1970        topic: Optional[str] = None,
1971        **kwargs
1972    ):
1973        super(PeriodicTimerSourceInfo, self).__init__(**kwargs)
1974        self.start_time = start_time
1975        self.schedule = schedule
1976        self.topic = topic
1977
1978
1979class RefreshDetails(msrest.serialization.Model):
1980    """Fields for tracking refresh job on the share.
1981
1982    :param in_progress_refresh_job_id: If a refresh share job is currently in progress on this
1983     share, this field indicates the ARM resource ID of that job. The field is empty if no job is in
1984     progress.
1985    :type in_progress_refresh_job_id: str
1986    :param last_completed_refresh_job_time_in_utc: Indicates the completed time for the last
1987     refresh job on this particular share, if any.This could be a failed job or a successful job.
1988    :type last_completed_refresh_job_time_in_utc: ~datetime.datetime
1989    :param error_manifest_file: Indicates the relative path of the error xml for the last refresh
1990     job on this particular share, if any. This could be a failed job or a successful job.
1991    :type error_manifest_file: str
1992    :param last_job: Indicates the id of the last refresh job on this particular share,if any. This
1993     could be a failed job or a successful job.
1994    :type last_job: str
1995    """
1996
1997    _attribute_map = {
1998        'in_progress_refresh_job_id': {'key': 'inProgressRefreshJobId', 'type': 'str'},
1999        'last_completed_refresh_job_time_in_utc': {'key': 'lastCompletedRefreshJobTimeInUTC', 'type': 'iso-8601'},
2000        'error_manifest_file': {'key': 'errorManifestFile', 'type': 'str'},
2001        'last_job': {'key': 'lastJob', 'type': 'str'},
2002    }
2003
2004    def __init__(
2005        self,
2006        *,
2007        in_progress_refresh_job_id: Optional[str] = None,
2008        last_completed_refresh_job_time_in_utc: Optional[datetime.datetime] = None,
2009        error_manifest_file: Optional[str] = None,
2010        last_job: Optional[str] = None,
2011        **kwargs
2012    ):
2013        super(RefreshDetails, self).__init__(**kwargs)
2014        self.in_progress_refresh_job_id = in_progress_refresh_job_id
2015        self.last_completed_refresh_job_time_in_utc = last_completed_refresh_job_time_in_utc
2016        self.error_manifest_file = error_manifest_file
2017        self.last_job = last_job
2018
2019
2020class RoleList(msrest.serialization.Model):
2021    """Collection of all the roles on the Data Box Edge device.
2022
2023    Variables are only populated by the server, and will be ignored when sending a request.
2024
2025    :ivar value: The Value.
2026    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.Role]
2027    :ivar next_link: Link to the next set of results.
2028    :vartype next_link: str
2029    """
2030
2031    _validation = {
2032        'value': {'readonly': True},
2033        'next_link': {'readonly': True},
2034    }
2035
2036    _attribute_map = {
2037        'value': {'key': 'value', 'type': '[Role]'},
2038        'next_link': {'key': 'nextLink', 'type': 'str'},
2039    }
2040
2041    def __init__(
2042        self,
2043        **kwargs
2044    ):
2045        super(RoleList, self).__init__(**kwargs)
2046        self.value = None
2047        self.next_link = None
2048
2049
2050class RoleSinkInfo(msrest.serialization.Model):
2051    """Compute role against which events will be raised.
2052
2053    All required parameters must be populated in order to send to Azure.
2054
2055    :param role_id: Required. Compute role ID.
2056    :type role_id: str
2057    """
2058
2059    _validation = {
2060        'role_id': {'required': True},
2061    }
2062
2063    _attribute_map = {
2064        'role_id': {'key': 'roleId', 'type': 'str'},
2065    }
2066
2067    def __init__(
2068        self,
2069        *,
2070        role_id: str,
2071        **kwargs
2072    ):
2073        super(RoleSinkInfo, self).__init__(**kwargs)
2074        self.role_id = role_id
2075
2076
2077class SecuritySettings(ARMBaseModel):
2078    """The security settings of a device.
2079
2080    Variables are only populated by the server, and will be ignored when sending a request.
2081
2082    All required parameters must be populated in order to send to Azure.
2083
2084    :ivar id: The path ID that uniquely identifies the object.
2085    :vartype id: str
2086    :ivar name: The object name.
2087    :vartype name: str
2088    :ivar type: The hierarchical type of the object.
2089    :vartype type: str
2090    :param device_admin_password: Required. Device administrator password as an encrypted string
2091     (encrypted using RSA PKCS #1) is used to sign into the  local web UI of the device. The Actual
2092     password should have at least 8 characters that are a combination of  uppercase, lowercase,
2093     numeric, and special characters.
2094    :type device_admin_password:
2095     ~azure.mgmt.databoxedge.v2019_03_01.models.AsymmetricEncryptedSecret
2096    """
2097
2098    _validation = {
2099        'id': {'readonly': True},
2100        'name': {'readonly': True},
2101        'type': {'readonly': True},
2102        'device_admin_password': {'required': True},
2103    }
2104
2105    _attribute_map = {
2106        'id': {'key': 'id', 'type': 'str'},
2107        'name': {'key': 'name', 'type': 'str'},
2108        'type': {'key': 'type', 'type': 'str'},
2109        'device_admin_password': {'key': 'properties.deviceAdminPassword', 'type': 'AsymmetricEncryptedSecret'},
2110    }
2111
2112    def __init__(
2113        self,
2114        *,
2115        device_admin_password: "AsymmetricEncryptedSecret",
2116        **kwargs
2117    ):
2118        super(SecuritySettings, self).__init__(**kwargs)
2119        self.device_admin_password = device_admin_password
2120
2121
2122class ServiceSpecification(msrest.serialization.Model):
2123    """Service specification.
2124
2125    :param metric_specifications: Metric specification as defined by shoebox.
2126    :type metric_specifications:
2127     list[~azure.mgmt.databoxedge.v2019_03_01.models.MetricSpecificationV1]
2128    """
2129
2130    _attribute_map = {
2131        'metric_specifications': {'key': 'metricSpecifications', 'type': '[MetricSpecificationV1]'},
2132    }
2133
2134    def __init__(
2135        self,
2136        *,
2137        metric_specifications: Optional[List["MetricSpecificationV1"]] = None,
2138        **kwargs
2139    ):
2140        super(ServiceSpecification, self).__init__(**kwargs)
2141        self.metric_specifications = metric_specifications
2142
2143
2144class Share(ARMBaseModel):
2145    """Represents a share on the  Data Box Edge/Gateway device.
2146
2147    Variables are only populated by the server, and will be ignored when sending a request.
2148
2149    All required parameters must be populated in order to send to Azure.
2150
2151    :ivar id: The path ID that uniquely identifies the object.
2152    :vartype id: str
2153    :ivar name: The object name.
2154    :vartype name: str
2155    :ivar type: The hierarchical type of the object.
2156    :vartype type: str
2157    :param description: Description for the share.
2158    :type description: str
2159    :param share_status: Required. Current status of the share. Possible values include: "Online",
2160     "Offline".
2161    :type share_status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.ShareStatus
2162    :param monitoring_status: Required. Current monitoring status of the share. Possible values
2163     include: "Enabled", "Disabled".
2164    :type monitoring_status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.MonitoringStatus
2165    :param azure_container_info: Azure container mapping for the share.
2166    :type azure_container_info: ~azure.mgmt.databoxedge.v2019_03_01.models.AzureContainerInfo
2167    :param access_protocol: Required. Access protocol to be used by the share. Possible values
2168     include: "SMB", "NFS".
2169    :type access_protocol: str or ~azure.mgmt.databoxedge.v2019_03_01.models.ShareAccessProtocol
2170    :param user_access_rights: Mapping of users and corresponding access rights on the share
2171     (required for SMB protocol).
2172    :type user_access_rights: list[~azure.mgmt.databoxedge.v2019_03_01.models.UserAccessRight]
2173    :param client_access_rights: List of IP addresses and corresponding access rights on the
2174     share(required for NFS protocol).
2175    :type client_access_rights: list[~azure.mgmt.databoxedge.v2019_03_01.models.ClientAccessRight]
2176    :param refresh_details: Details of the refresh job on this share.
2177    :type refresh_details: ~azure.mgmt.databoxedge.v2019_03_01.models.RefreshDetails
2178    :ivar share_mappings: Share mount point to the role.
2179    :vartype share_mappings: list[~azure.mgmt.databoxedge.v2019_03_01.models.MountPointMap]
2180    :param data_policy: Data policy of the share. Possible values include: "Cloud", "Local".
2181    :type data_policy: str or ~azure.mgmt.databoxedge.v2019_03_01.models.DataPolicy
2182    """
2183
2184    _validation = {
2185        'id': {'readonly': True},
2186        'name': {'readonly': True},
2187        'type': {'readonly': True},
2188        'share_status': {'required': True},
2189        'monitoring_status': {'required': True},
2190        'access_protocol': {'required': True},
2191        'share_mappings': {'readonly': True},
2192    }
2193
2194    _attribute_map = {
2195        'id': {'key': 'id', 'type': 'str'},
2196        'name': {'key': 'name', 'type': 'str'},
2197        'type': {'key': 'type', 'type': 'str'},
2198        'description': {'key': 'properties.description', 'type': 'str'},
2199        'share_status': {'key': 'properties.shareStatus', 'type': 'str'},
2200        'monitoring_status': {'key': 'properties.monitoringStatus', 'type': 'str'},
2201        'azure_container_info': {'key': 'properties.azureContainerInfo', 'type': 'AzureContainerInfo'},
2202        'access_protocol': {'key': 'properties.accessProtocol', 'type': 'str'},
2203        'user_access_rights': {'key': 'properties.userAccessRights', 'type': '[UserAccessRight]'},
2204        'client_access_rights': {'key': 'properties.clientAccessRights', 'type': '[ClientAccessRight]'},
2205        'refresh_details': {'key': 'properties.refreshDetails', 'type': 'RefreshDetails'},
2206        'share_mappings': {'key': 'properties.shareMappings', 'type': '[MountPointMap]'},
2207        'data_policy': {'key': 'properties.dataPolicy', 'type': 'str'},
2208    }
2209
2210    def __init__(
2211        self,
2212        *,
2213        share_status: Union[str, "ShareStatus"],
2214        monitoring_status: Union[str, "MonitoringStatus"],
2215        access_protocol: Union[str, "ShareAccessProtocol"],
2216        description: Optional[str] = None,
2217        azure_container_info: Optional["AzureContainerInfo"] = None,
2218        user_access_rights: Optional[List["UserAccessRight"]] = None,
2219        client_access_rights: Optional[List["ClientAccessRight"]] = None,
2220        refresh_details: Optional["RefreshDetails"] = None,
2221        data_policy: Optional[Union[str, "DataPolicy"]] = None,
2222        **kwargs
2223    ):
2224        super(Share, self).__init__(**kwargs)
2225        self.description = description
2226        self.share_status = share_status
2227        self.monitoring_status = monitoring_status
2228        self.azure_container_info = azure_container_info
2229        self.access_protocol = access_protocol
2230        self.user_access_rights = user_access_rights
2231        self.client_access_rights = client_access_rights
2232        self.refresh_details = refresh_details
2233        self.share_mappings = None
2234        self.data_policy = data_policy
2235
2236
2237class ShareAccessRight(msrest.serialization.Model):
2238    """Specifies the mapping between this particular user and the type of access he has on shares on this device.
2239
2240    All required parameters must be populated in order to send to Azure.
2241
2242    :param share_id: Required. The share ID.
2243    :type share_id: str
2244    :param access_type: Required. Type of access to be allowed on the share for this user. Possible
2245     values include: "Change", "Read", "Custom".
2246    :type access_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.ShareAccessType
2247    """
2248
2249    _validation = {
2250        'share_id': {'required': True},
2251        'access_type': {'required': True},
2252    }
2253
2254    _attribute_map = {
2255        'share_id': {'key': 'shareId', 'type': 'str'},
2256        'access_type': {'key': 'accessType', 'type': 'str'},
2257    }
2258
2259    def __init__(
2260        self,
2261        *,
2262        share_id: str,
2263        access_type: Union[str, "ShareAccessType"],
2264        **kwargs
2265    ):
2266        super(ShareAccessRight, self).__init__(**kwargs)
2267        self.share_id = share_id
2268        self.access_type = access_type
2269
2270
2271class ShareList(msrest.serialization.Model):
2272    """Collection of all the shares on the Data Box Edge/Gateway device.
2273
2274    Variables are only populated by the server, and will be ignored when sending a request.
2275
2276    :ivar value: The list of shares.
2277    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.Share]
2278    :ivar next_link: Link to the next set of results.
2279    :vartype next_link: str
2280    """
2281
2282    _validation = {
2283        'value': {'readonly': True},
2284        'next_link': {'readonly': True},
2285    }
2286
2287    _attribute_map = {
2288        'value': {'key': 'value', 'type': '[Share]'},
2289        'next_link': {'key': 'nextLink', 'type': 'str'},
2290    }
2291
2292    def __init__(
2293        self,
2294        **kwargs
2295    ):
2296        super(ShareList, self).__init__(**kwargs)
2297        self.value = None
2298        self.next_link = None
2299
2300
2301class Sku(msrest.serialization.Model):
2302    """The SKU type.
2303
2304    :param name: SKU name. Possible values include: "Gateway", "Edge".
2305    :type name: str or ~azure.mgmt.databoxedge.v2019_03_01.models.SkuName
2306    :param tier: The SKU tier. This is based on the SKU name. Possible values include: "Standard".
2307    :type tier: str or ~azure.mgmt.databoxedge.v2019_03_01.models.SkuTier
2308    """
2309
2310    _attribute_map = {
2311        'name': {'key': 'name', 'type': 'str'},
2312        'tier': {'key': 'tier', 'type': 'str'},
2313    }
2314
2315    def __init__(
2316        self,
2317        *,
2318        name: Optional[Union[str, "SkuName"]] = None,
2319        tier: Optional[Union[str, "SkuTier"]] = None,
2320        **kwargs
2321    ):
2322        super(Sku, self).__init__(**kwargs)
2323        self.name = name
2324        self.tier = tier
2325
2326
2327class StorageAccountCredential(ARMBaseModel):
2328    """The storage account credential.
2329
2330    Variables are only populated by the server, and will be ignored when sending a request.
2331
2332    All required parameters must be populated in order to send to Azure.
2333
2334    :ivar id: The path ID that uniquely identifies the object.
2335    :vartype id: str
2336    :ivar name: The object name.
2337    :vartype name: str
2338    :ivar type: The hierarchical type of the object.
2339    :vartype type: str
2340    :param alias: Required. Alias for the storage account.
2341    :type alias: str
2342    :param user_name: Username for the storage account.
2343    :type user_name: str
2344    :param account_key: Encrypted storage key.
2345    :type account_key: ~azure.mgmt.databoxedge.v2019_03_01.models.AsymmetricEncryptedSecret
2346    :param connection_string: Connection string for the storage account. Use this string if
2347     username and account key are not specified.
2348    :type connection_string: str
2349    :param ssl_status: Required. Signifies whether SSL needs to be enabled or not. Possible values
2350     include: "Enabled", "Disabled".
2351    :type ssl_status: str or ~azure.mgmt.databoxedge.v2019_03_01.models.SSLStatus
2352    :param blob_domain_name: Blob end point for private clouds.
2353    :type blob_domain_name: str
2354    :param account_type: Required. Type of storage accessed on the storage account. Possible values
2355     include: "GeneralPurposeStorage", "BlobStorage".
2356    :type account_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.AccountType
2357    """
2358
2359    _validation = {
2360        'id': {'readonly': True},
2361        'name': {'readonly': True},
2362        'type': {'readonly': True},
2363        'alias': {'required': True},
2364        'ssl_status': {'required': True},
2365        'account_type': {'required': True},
2366    }
2367
2368    _attribute_map = {
2369        'id': {'key': 'id', 'type': 'str'},
2370        'name': {'key': 'name', 'type': 'str'},
2371        'type': {'key': 'type', 'type': 'str'},
2372        'alias': {'key': 'properties.alias', 'type': 'str'},
2373        'user_name': {'key': 'properties.userName', 'type': 'str'},
2374        'account_key': {'key': 'properties.accountKey', 'type': 'AsymmetricEncryptedSecret'},
2375        'connection_string': {'key': 'properties.connectionString', 'type': 'str'},
2376        'ssl_status': {'key': 'properties.sslStatus', 'type': 'str'},
2377        'blob_domain_name': {'key': 'properties.blobDomainName', 'type': 'str'},
2378        'account_type': {'key': 'properties.accountType', 'type': 'str'},
2379    }
2380
2381    def __init__(
2382        self,
2383        *,
2384        alias: str,
2385        ssl_status: Union[str, "SSLStatus"],
2386        account_type: Union[str, "AccountType"],
2387        user_name: Optional[str] = None,
2388        account_key: Optional["AsymmetricEncryptedSecret"] = None,
2389        connection_string: Optional[str] = None,
2390        blob_domain_name: Optional[str] = None,
2391        **kwargs
2392    ):
2393        super(StorageAccountCredential, self).__init__(**kwargs)
2394        self.alias = alias
2395        self.user_name = user_name
2396        self.account_key = account_key
2397        self.connection_string = connection_string
2398        self.ssl_status = ssl_status
2399        self.blob_domain_name = blob_domain_name
2400        self.account_type = account_type
2401
2402
2403class StorageAccountCredentialList(msrest.serialization.Model):
2404    """The collection of storage account credentials.
2405
2406    Variables are only populated by the server, and will be ignored when sending a request.
2407
2408    :ivar value: The value.
2409    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.StorageAccountCredential]
2410    :ivar next_link: Link to the next set of results.
2411    :vartype next_link: str
2412    """
2413
2414    _validation = {
2415        'value': {'readonly': True},
2416        'next_link': {'readonly': True},
2417    }
2418
2419    _attribute_map = {
2420        'value': {'key': 'value', 'type': '[StorageAccountCredential]'},
2421        'next_link': {'key': 'nextLink', 'type': 'str'},
2422    }
2423
2424    def __init__(
2425        self,
2426        **kwargs
2427    ):
2428        super(StorageAccountCredentialList, self).__init__(**kwargs)
2429        self.value = None
2430        self.next_link = None
2431
2432
2433class SymmetricKey(msrest.serialization.Model):
2434    """Symmetric key for authentication.
2435
2436    :param connection_string: Connection string based on the symmetric key.
2437    :type connection_string: ~azure.mgmt.databoxedge.v2019_03_01.models.AsymmetricEncryptedSecret
2438    """
2439
2440    _attribute_map = {
2441        'connection_string': {'key': 'connectionString', 'type': 'AsymmetricEncryptedSecret'},
2442    }
2443
2444    def __init__(
2445        self,
2446        *,
2447        connection_string: Optional["AsymmetricEncryptedSecret"] = None,
2448        **kwargs
2449    ):
2450        super(SymmetricKey, self).__init__(**kwargs)
2451        self.connection_string = connection_string
2452
2453
2454class TrackingInfo(msrest.serialization.Model):
2455    """Tracking courier information.
2456
2457    :param serial_number: Serial number of the device being tracked.
2458    :type serial_number: str
2459    :param carrier_name: Name of the carrier used in the delivery.
2460    :type carrier_name: str
2461    :param tracking_id: Tracking ID of the shipment.
2462    :type tracking_id: str
2463    :param tracking_url: Tracking URL of the shipment.
2464    :type tracking_url: str
2465    """
2466
2467    _attribute_map = {
2468        'serial_number': {'key': 'serialNumber', 'type': 'str'},
2469        'carrier_name': {'key': 'carrierName', 'type': 'str'},
2470        'tracking_id': {'key': 'trackingId', 'type': 'str'},
2471        'tracking_url': {'key': 'trackingUrl', 'type': 'str'},
2472    }
2473
2474    def __init__(
2475        self,
2476        *,
2477        serial_number: Optional[str] = None,
2478        carrier_name: Optional[str] = None,
2479        tracking_id: Optional[str] = None,
2480        tracking_url: Optional[str] = None,
2481        **kwargs
2482    ):
2483        super(TrackingInfo, self).__init__(**kwargs)
2484        self.serial_number = serial_number
2485        self.carrier_name = carrier_name
2486        self.tracking_id = tracking_id
2487        self.tracking_url = tracking_url
2488
2489
2490class TriggerList(msrest.serialization.Model):
2491    """Collection of all trigger on the data box edge device.
2492
2493    Variables are only populated by the server, and will be ignored when sending a request.
2494
2495    :ivar value: The list of triggers.
2496    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.Trigger]
2497    :ivar next_link: Link to the next set of results.
2498    :vartype next_link: str
2499    """
2500
2501    _validation = {
2502        'value': {'readonly': True},
2503        'next_link': {'readonly': True},
2504    }
2505
2506    _attribute_map = {
2507        'value': {'key': 'value', 'type': '[Trigger]'},
2508        'next_link': {'key': 'nextLink', 'type': 'str'},
2509    }
2510
2511    def __init__(
2512        self,
2513        **kwargs
2514    ):
2515        super(TriggerList, self).__init__(**kwargs)
2516        self.value = None
2517        self.next_link = None
2518
2519
2520class UpdateDownloadProgress(msrest.serialization.Model):
2521    """Details about the download progress of update.
2522
2523    Variables are only populated by the server, and will be ignored when sending a request.
2524
2525    :ivar download_phase: The download phase. Possible values include: "Unknown", "Initializing",
2526     "Downloading", "Verifying".
2527    :vartype download_phase: str or ~azure.mgmt.databoxedge.v2019_03_01.models.DownloadPhase
2528    :ivar percent_complete: Percentage of completion.
2529    :vartype percent_complete: int
2530    :ivar total_bytes_to_download: Total bytes to download.
2531    :vartype total_bytes_to_download: float
2532    :ivar total_bytes_downloaded: Total bytes downloaded.
2533    :vartype total_bytes_downloaded: float
2534    :ivar number_of_updates_to_download: Number of updates to download.
2535    :vartype number_of_updates_to_download: int
2536    :ivar number_of_updates_downloaded: Number of updates downloaded.
2537    :vartype number_of_updates_downloaded: int
2538    """
2539
2540    _validation = {
2541        'download_phase': {'readonly': True},
2542        'percent_complete': {'readonly': True},
2543        'total_bytes_to_download': {'readonly': True},
2544        'total_bytes_downloaded': {'readonly': True},
2545        'number_of_updates_to_download': {'readonly': True},
2546        'number_of_updates_downloaded': {'readonly': True},
2547    }
2548
2549    _attribute_map = {
2550        'download_phase': {'key': 'downloadPhase', 'type': 'str'},
2551        'percent_complete': {'key': 'percentComplete', 'type': 'int'},
2552        'total_bytes_to_download': {'key': 'totalBytesToDownload', 'type': 'float'},
2553        'total_bytes_downloaded': {'key': 'totalBytesDownloaded', 'type': 'float'},
2554        'number_of_updates_to_download': {'key': 'numberOfUpdatesToDownload', 'type': 'int'},
2555        'number_of_updates_downloaded': {'key': 'numberOfUpdatesDownloaded', 'type': 'int'},
2556    }
2557
2558    def __init__(
2559        self,
2560        **kwargs
2561    ):
2562        super(UpdateDownloadProgress, self).__init__(**kwargs)
2563        self.download_phase = None
2564        self.percent_complete = None
2565        self.total_bytes_to_download = None
2566        self.total_bytes_downloaded = None
2567        self.number_of_updates_to_download = None
2568        self.number_of_updates_downloaded = None
2569
2570
2571class UpdateInstallProgress(msrest.serialization.Model):
2572    """Progress details during installation of updates.
2573
2574    Variables are only populated by the server, and will be ignored when sending a request.
2575
2576    :ivar percent_complete: Percentage completed.
2577    :vartype percent_complete: int
2578    :ivar number_of_updates_to_install: Number of updates to install.
2579    :vartype number_of_updates_to_install: int
2580    :ivar number_of_updates_installed: Number of updates installed.
2581    :vartype number_of_updates_installed: int
2582    """
2583
2584    _validation = {
2585        'percent_complete': {'readonly': True},
2586        'number_of_updates_to_install': {'readonly': True},
2587        'number_of_updates_installed': {'readonly': True},
2588    }
2589
2590    _attribute_map = {
2591        'percent_complete': {'key': 'percentComplete', 'type': 'int'},
2592        'number_of_updates_to_install': {'key': 'numberOfUpdatesToInstall', 'type': 'int'},
2593        'number_of_updates_installed': {'key': 'numberOfUpdatesInstalled', 'type': 'int'},
2594    }
2595
2596    def __init__(
2597        self,
2598        **kwargs
2599    ):
2600        super(UpdateInstallProgress, self).__init__(**kwargs)
2601        self.percent_complete = None
2602        self.number_of_updates_to_install = None
2603        self.number_of_updates_installed = None
2604
2605
2606class UpdateSummary(ARMBaseModel):
2607    """Details about ongoing updates and availability of updates on the device.
2608
2609    Variables are only populated by the server, and will be ignored when sending a request.
2610
2611    :ivar id: The path ID that uniquely identifies the object.
2612    :vartype id: str
2613    :ivar name: The object name.
2614    :vartype name: str
2615    :ivar type: The hierarchical type of the object.
2616    :vartype type: str
2617    :param device_version_number: The current version of the device in format: 1.2.17312.13.",.
2618    :type device_version_number: str
2619    :param friendly_device_version_name: The current version of the device in text format.
2620    :type friendly_device_version_name: str
2621    :param device_last_scanned_date_time: The last time when a scan was done on the device.
2622    :type device_last_scanned_date_time: ~datetime.datetime
2623    :param last_completed_scan_job_date_time: The time when the last scan job was completed
2624     (success/cancelled/failed) on the appliance.
2625    :type last_completed_scan_job_date_time: ~datetime.datetime
2626    :ivar last_completed_download_job_date_time: The time when the last Download job was completed
2627     (success/cancelled/failed) on the appliance.
2628    :vartype last_completed_download_job_date_time: ~datetime.datetime
2629    :ivar last_completed_install_job_date_time: The time when the last Install job was completed
2630     (success/cancelled/failed) on the appliance.
2631    :vartype last_completed_install_job_date_time: ~datetime.datetime
2632    :ivar total_number_of_updates_available: The number of updates available for the current device
2633     version as per the last device scan.
2634    :vartype total_number_of_updates_available: int
2635    :ivar total_number_of_updates_pending_download: The total number of items pending download.
2636    :vartype total_number_of_updates_pending_download: int
2637    :ivar total_number_of_updates_pending_install: The total number of items pending install.
2638    :vartype total_number_of_updates_pending_install: int
2639    :ivar reboot_behavior: Indicates if updates are available and at least one of the updates needs
2640     a reboot. Possible values include: "NeverReboots", "RequiresReboot", "RequestReboot".
2641    :vartype reboot_behavior: str or
2642     ~azure.mgmt.databoxedge.v2019_03_01.models.InstallRebootBehavior
2643    :ivar ongoing_update_operation: The current update operation. Possible values include: "None",
2644     "Scan", "Download", "Install".
2645    :vartype ongoing_update_operation: str or
2646     ~azure.mgmt.databoxedge.v2019_03_01.models.UpdateOperation
2647    :ivar in_progress_download_job_id: The job ID of the download job in progress.
2648    :vartype in_progress_download_job_id: str
2649    :ivar in_progress_install_job_id: The job ID of the install job in progress.
2650    :vartype in_progress_install_job_id: str
2651    :ivar in_progress_download_job_started_date_time: The time when the currently running download
2652     (if any) started.
2653    :vartype in_progress_download_job_started_date_time: ~datetime.datetime
2654    :ivar in_progress_install_job_started_date_time: The time when the currently running install
2655     (if any) started.
2656    :vartype in_progress_install_job_started_date_time: ~datetime.datetime
2657    :ivar update_titles: The list of updates available for install.
2658    :vartype update_titles: list[str]
2659    :ivar total_update_size_in_bytes: The total size of updates available for download in bytes.
2660    :vartype total_update_size_in_bytes: float
2661    """
2662
2663    _validation = {
2664        'id': {'readonly': True},
2665        'name': {'readonly': True},
2666        'type': {'readonly': True},
2667        'last_completed_download_job_date_time': {'readonly': True},
2668        'last_completed_install_job_date_time': {'readonly': True},
2669        'total_number_of_updates_available': {'readonly': True},
2670        'total_number_of_updates_pending_download': {'readonly': True},
2671        'total_number_of_updates_pending_install': {'readonly': True},
2672        'reboot_behavior': {'readonly': True},
2673        'ongoing_update_operation': {'readonly': True},
2674        'in_progress_download_job_id': {'readonly': True},
2675        'in_progress_install_job_id': {'readonly': True},
2676        'in_progress_download_job_started_date_time': {'readonly': True},
2677        'in_progress_install_job_started_date_time': {'readonly': True},
2678        'update_titles': {'readonly': True},
2679        'total_update_size_in_bytes': {'readonly': True},
2680    }
2681
2682    _attribute_map = {
2683        'id': {'key': 'id', 'type': 'str'},
2684        'name': {'key': 'name', 'type': 'str'},
2685        'type': {'key': 'type', 'type': 'str'},
2686        'device_version_number': {'key': 'properties.deviceVersionNumber', 'type': 'str'},
2687        'friendly_device_version_name': {'key': 'properties.friendlyDeviceVersionName', 'type': 'str'},
2688        'device_last_scanned_date_time': {'key': 'properties.deviceLastScannedDateTime', 'type': 'iso-8601'},
2689        'last_completed_scan_job_date_time': {'key': 'properties.lastCompletedScanJobDateTime', 'type': 'iso-8601'},
2690        'last_completed_download_job_date_time': {'key': 'properties.lastCompletedDownloadJobDateTime', 'type': 'iso-8601'},
2691        'last_completed_install_job_date_time': {'key': 'properties.lastCompletedInstallJobDateTime', 'type': 'iso-8601'},
2692        'total_number_of_updates_available': {'key': 'properties.totalNumberOfUpdatesAvailable', 'type': 'int'},
2693        'total_number_of_updates_pending_download': {'key': 'properties.totalNumberOfUpdatesPendingDownload', 'type': 'int'},
2694        'total_number_of_updates_pending_install': {'key': 'properties.totalNumberOfUpdatesPendingInstall', 'type': 'int'},
2695        'reboot_behavior': {'key': 'properties.rebootBehavior', 'type': 'str'},
2696        'ongoing_update_operation': {'key': 'properties.ongoingUpdateOperation', 'type': 'str'},
2697        'in_progress_download_job_id': {'key': 'properties.inProgressDownloadJobId', 'type': 'str'},
2698        'in_progress_install_job_id': {'key': 'properties.inProgressInstallJobId', 'type': 'str'},
2699        'in_progress_download_job_started_date_time': {'key': 'properties.inProgressDownloadJobStartedDateTime', 'type': 'iso-8601'},
2700        'in_progress_install_job_started_date_time': {'key': 'properties.inProgressInstallJobStartedDateTime', 'type': 'iso-8601'},
2701        'update_titles': {'key': 'properties.updateTitles', 'type': '[str]'},
2702        'total_update_size_in_bytes': {'key': 'properties.totalUpdateSizeInBytes', 'type': 'float'},
2703    }
2704
2705    def __init__(
2706        self,
2707        *,
2708        device_version_number: Optional[str] = None,
2709        friendly_device_version_name: Optional[str] = None,
2710        device_last_scanned_date_time: Optional[datetime.datetime] = None,
2711        last_completed_scan_job_date_time: Optional[datetime.datetime] = None,
2712        **kwargs
2713    ):
2714        super(UpdateSummary, self).__init__(**kwargs)
2715        self.device_version_number = device_version_number
2716        self.friendly_device_version_name = friendly_device_version_name
2717        self.device_last_scanned_date_time = device_last_scanned_date_time
2718        self.last_completed_scan_job_date_time = last_completed_scan_job_date_time
2719        self.last_completed_download_job_date_time = None
2720        self.last_completed_install_job_date_time = None
2721        self.total_number_of_updates_available = None
2722        self.total_number_of_updates_pending_download = None
2723        self.total_number_of_updates_pending_install = None
2724        self.reboot_behavior = None
2725        self.ongoing_update_operation = None
2726        self.in_progress_download_job_id = None
2727        self.in_progress_install_job_id = None
2728        self.in_progress_download_job_started_date_time = None
2729        self.in_progress_install_job_started_date_time = None
2730        self.update_titles = None
2731        self.total_update_size_in_bytes = None
2732
2733
2734class UploadCertificateRequest(msrest.serialization.Model):
2735    """The upload certificate request.
2736
2737    All required parameters must be populated in order to send to Azure.
2738
2739    :param authentication_type: The authentication type. Possible values include: "Invalid",
2740     "AzureActiveDirectory".
2741    :type authentication_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.AuthenticationType
2742    :param certificate: Required. The base64 encoded certificate raw data.
2743    :type certificate: str
2744    """
2745
2746    _validation = {
2747        'certificate': {'required': True},
2748    }
2749
2750    _attribute_map = {
2751        'authentication_type': {'key': 'properties.authenticationType', 'type': 'str'},
2752        'certificate': {'key': 'properties.certificate', 'type': 'str'},
2753    }
2754
2755    def __init__(
2756        self,
2757        *,
2758        certificate: str,
2759        authentication_type: Optional[Union[str, "AuthenticationType"]] = None,
2760        **kwargs
2761    ):
2762        super(UploadCertificateRequest, self).__init__(**kwargs)
2763        self.authentication_type = authentication_type
2764        self.certificate = certificate
2765
2766
2767class UploadCertificateResponse(msrest.serialization.Model):
2768    """The upload registration certificate response.
2769
2770    All required parameters must be populated in order to send to Azure.
2771
2772    :param auth_type: Specifies authentication type. Possible values include: "Invalid",
2773     "AzureActiveDirectory".
2774    :type auth_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.AuthenticationType
2775    :param resource_id: Required. The resource ID of the Data Box Edge/Gateway device.
2776    :type resource_id: str
2777    :param aad_authority: Required. Azure Active Directory tenant authority.
2778    :type aad_authority: str
2779    :param aad_tenant_id: Required. Azure Active Directory tenant ID.
2780    :type aad_tenant_id: str
2781    :param service_principal_client_id: Required. Azure Active Directory service principal client
2782     ID.
2783    :type service_principal_client_id: str
2784    :param service_principal_object_id: Required. Azure Active Directory service principal object
2785     ID.
2786    :type service_principal_object_id: str
2787    :param azure_management_endpoint_audience: Required. The azure management endpoint audience.
2788    :type azure_management_endpoint_audience: str
2789    """
2790
2791    _validation = {
2792        'resource_id': {'required': True},
2793        'aad_authority': {'required': True},
2794        'aad_tenant_id': {'required': True},
2795        'service_principal_client_id': {'required': True},
2796        'service_principal_object_id': {'required': True},
2797        'azure_management_endpoint_audience': {'required': True},
2798    }
2799
2800    _attribute_map = {
2801        'auth_type': {'key': 'authType', 'type': 'str'},
2802        'resource_id': {'key': 'resourceId', 'type': 'str'},
2803        'aad_authority': {'key': 'aadAuthority', 'type': 'str'},
2804        'aad_tenant_id': {'key': 'aadTenantId', 'type': 'str'},
2805        'service_principal_client_id': {'key': 'servicePrincipalClientId', 'type': 'str'},
2806        'service_principal_object_id': {'key': 'servicePrincipalObjectId', 'type': 'str'},
2807        'azure_management_endpoint_audience': {'key': 'azureManagementEndpointAudience', 'type': 'str'},
2808    }
2809
2810    def __init__(
2811        self,
2812        *,
2813        resource_id: str,
2814        aad_authority: str,
2815        aad_tenant_id: str,
2816        service_principal_client_id: str,
2817        service_principal_object_id: str,
2818        azure_management_endpoint_audience: str,
2819        auth_type: Optional[Union[str, "AuthenticationType"]] = None,
2820        **kwargs
2821    ):
2822        super(UploadCertificateResponse, self).__init__(**kwargs)
2823        self.auth_type = auth_type
2824        self.resource_id = resource_id
2825        self.aad_authority = aad_authority
2826        self.aad_tenant_id = aad_tenant_id
2827        self.service_principal_client_id = service_principal_client_id
2828        self.service_principal_object_id = service_principal_object_id
2829        self.azure_management_endpoint_audience = azure_management_endpoint_audience
2830
2831
2832class User(ARMBaseModel):
2833    """Represents a user who has access to one or more shares on the Data Box Edge/Gateway device.
2834
2835    Variables are only populated by the server, and will be ignored when sending a request.
2836
2837    :ivar id: The path ID that uniquely identifies the object.
2838    :vartype id: str
2839    :ivar name: The object name.
2840    :vartype name: str
2841    :ivar type: The hierarchical type of the object.
2842    :vartype type: str
2843    :param encrypted_password: The password details.
2844    :type encrypted_password: ~azure.mgmt.databoxedge.v2019_03_01.models.AsymmetricEncryptedSecret
2845    :param share_access_rights: List of shares that the user has rights on. This field should not
2846     be specified during user creation.
2847    :type share_access_rights: list[~azure.mgmt.databoxedge.v2019_03_01.models.ShareAccessRight]
2848    """
2849
2850    _validation = {
2851        'id': {'readonly': True},
2852        'name': {'readonly': True},
2853        'type': {'readonly': True},
2854    }
2855
2856    _attribute_map = {
2857        'id': {'key': 'id', 'type': 'str'},
2858        'name': {'key': 'name', 'type': 'str'},
2859        'type': {'key': 'type', 'type': 'str'},
2860        'encrypted_password': {'key': 'properties.encryptedPassword', 'type': 'AsymmetricEncryptedSecret'},
2861        'share_access_rights': {'key': 'properties.shareAccessRights', 'type': '[ShareAccessRight]'},
2862    }
2863
2864    def __init__(
2865        self,
2866        *,
2867        encrypted_password: Optional["AsymmetricEncryptedSecret"] = None,
2868        share_access_rights: Optional[List["ShareAccessRight"]] = None,
2869        **kwargs
2870    ):
2871        super(User, self).__init__(**kwargs)
2872        self.encrypted_password = encrypted_password
2873        self.share_access_rights = share_access_rights
2874
2875
2876class UserAccessRight(msrest.serialization.Model):
2877    """The mapping between a particular user and the access type on the SMB share.
2878
2879    All required parameters must be populated in order to send to Azure.
2880
2881    :param user_id: Required. User ID (already existing in the device).
2882    :type user_id: str
2883    :param access_type: Required. Type of access to be allowed for the user. Possible values
2884     include: "Change", "Read", "Custom".
2885    :type access_type: str or ~azure.mgmt.databoxedge.v2019_03_01.models.ShareAccessType
2886    """
2887
2888    _validation = {
2889        'user_id': {'required': True},
2890        'access_type': {'required': True},
2891    }
2892
2893    _attribute_map = {
2894        'user_id': {'key': 'userId', 'type': 'str'},
2895        'access_type': {'key': 'accessType', 'type': 'str'},
2896    }
2897
2898    def __init__(
2899        self,
2900        *,
2901        user_id: str,
2902        access_type: Union[str, "ShareAccessType"],
2903        **kwargs
2904    ):
2905        super(UserAccessRight, self).__init__(**kwargs)
2906        self.user_id = user_id
2907        self.access_type = access_type
2908
2909
2910class UserList(msrest.serialization.Model):
2911    """Collection of users.
2912
2913    Variables are only populated by the server, and will be ignored when sending a request.
2914
2915    :ivar value: The list of users.
2916    :vartype value: list[~azure.mgmt.databoxedge.v2019_03_01.models.User]
2917    :ivar next_link: Link to the next set of results.
2918    :vartype next_link: str
2919    """
2920
2921    _validation = {
2922        'value': {'readonly': True},
2923        'next_link': {'readonly': True},
2924    }
2925
2926    _attribute_map = {
2927        'value': {'key': 'value', 'type': '[User]'},
2928        'next_link': {'key': 'nextLink', 'type': 'str'},
2929    }
2930
2931    def __init__(
2932        self,
2933        **kwargs
2934    ):
2935        super(UserList, self).__init__(**kwargs)
2936        self.value = None
2937        self.next_link = None
2938