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
9from azure.core.exceptions import HttpResponseError
10import msrest.serialization
11
12
13class ApplicationDeltaHealthPolicy(msrest.serialization.Model):
14    """Defines a delta health policy used to evaluate the health of an application or one of its child entities when upgrading the cluster.
15
16    :param default_service_type_delta_health_policy: The delta health policy used by default to
17     evaluate the health of a service type when upgrading the cluster.
18    :type default_service_type_delta_health_policy:
19     ~azure.mgmt.servicefabric.models.ServiceTypeDeltaHealthPolicy
20    :param service_type_delta_health_policies: The map with service type delta health policy per
21     service type name. The map is empty by default.
22    :type service_type_delta_health_policies: dict[str,
23     ~azure.mgmt.servicefabric.models.ServiceTypeDeltaHealthPolicy]
24    """
25
26    _attribute_map = {
27        'default_service_type_delta_health_policy': {'key': 'defaultServiceTypeDeltaHealthPolicy', 'type': 'ServiceTypeDeltaHealthPolicy'},
28        'service_type_delta_health_policies': {'key': 'serviceTypeDeltaHealthPolicies', 'type': '{ServiceTypeDeltaHealthPolicy}'},
29    }
30
31    def __init__(
32        self,
33        **kwargs
34    ):
35        super(ApplicationDeltaHealthPolicy, self).__init__(**kwargs)
36        self.default_service_type_delta_health_policy = kwargs.get('default_service_type_delta_health_policy', None)
37        self.service_type_delta_health_policies = kwargs.get('service_type_delta_health_policies', None)
38
39
40class ApplicationHealthPolicy(msrest.serialization.Model):
41    """Defines a health policy used to evaluate the health of an application or one of its children entities.
42
43    :param default_service_type_health_policy: The health policy used by default to evaluate the
44     health of a service type.
45    :type default_service_type_health_policy:
46     ~azure.mgmt.servicefabric.models.ServiceTypeHealthPolicy
47    :param service_type_health_policies: The map with service type health policy per service type
48     name. The map is empty by default.
49    :type service_type_health_policies: dict[str,
50     ~azure.mgmt.servicefabric.models.ServiceTypeHealthPolicy]
51    """
52
53    _attribute_map = {
54        'default_service_type_health_policy': {'key': 'defaultServiceTypeHealthPolicy', 'type': 'ServiceTypeHealthPolicy'},
55        'service_type_health_policies': {'key': 'serviceTypeHealthPolicies', 'type': '{ServiceTypeHealthPolicy}'},
56    }
57
58    def __init__(
59        self,
60        **kwargs
61    ):
62        super(ApplicationHealthPolicy, self).__init__(**kwargs)
63        self.default_service_type_health_policy = kwargs.get('default_service_type_health_policy', None)
64        self.service_type_health_policies = kwargs.get('service_type_health_policies', None)
65
66
67class ApplicationMetricDescription(msrest.serialization.Model):
68    """Describes capacity information for a custom resource balancing metric. This can be used to limit the total consumption of this metric by the services of this application.
69
70    :param name: The name of the metric.
71    :type name: str
72    :param maximum_capacity: The maximum node capacity for Service Fabric application.
73     This is the maximum Load for an instance of this application on a single node. Even if the
74     capacity of node is greater than this value, Service Fabric will limit the total load of
75     services within the application on each node to this value.
76     If set to zero, capacity for this metric is unlimited on each node.
77     When creating a new application with application capacity defined, the product of MaximumNodes
78     and this value must always be smaller than or equal to TotalApplicationCapacity.
79     When updating existing application with application capacity, the product of MaximumNodes and
80     this value must always be smaller than or equal to TotalApplicationCapacity.
81    :type maximum_capacity: long
82    :param reservation_capacity: The node reservation capacity for Service Fabric application.
83     This is the amount of load which is reserved on nodes which have instances of this
84     application.
85     If MinimumNodes is specified, then the product of these values will be the capacity reserved
86     in the cluster for the application.
87     If set to zero, no capacity is reserved for this metric.
88     When setting application capacity or when updating application capacity; this value must be
89     smaller than or equal to MaximumCapacity for each metric.
90    :type reservation_capacity: long
91    :param total_application_capacity: The total metric capacity for Service Fabric application.
92     This is the total metric capacity for this application in the cluster. Service Fabric will try
93     to limit the sum of loads of services within the application to this value.
94     When creating a new application with application capacity defined, the product of MaximumNodes
95     and MaximumCapacity must always be smaller than or equal to this value.
96    :type total_application_capacity: long
97    """
98
99    _attribute_map = {
100        'name': {'key': 'name', 'type': 'str'},
101        'maximum_capacity': {'key': 'maximumCapacity', 'type': 'long'},
102        'reservation_capacity': {'key': 'reservationCapacity', 'type': 'long'},
103        'total_application_capacity': {'key': 'totalApplicationCapacity', 'type': 'long'},
104    }
105
106    def __init__(
107        self,
108        **kwargs
109    ):
110        super(ApplicationMetricDescription, self).__init__(**kwargs)
111        self.name = kwargs.get('name', None)
112        self.maximum_capacity = kwargs.get('maximum_capacity', None)
113        self.reservation_capacity = kwargs.get('reservation_capacity', None)
114        self.total_application_capacity = kwargs.get('total_application_capacity', None)
115
116
117class ProxyResource(msrest.serialization.Model):
118    """The resource model definition for proxy-only resource.
119
120    Variables are only populated by the server, and will be ignored when sending a request.
121
122    :ivar id: Azure resource identifier.
123    :vartype id: str
124    :ivar name: Azure resource name.
125    :vartype name: str
126    :ivar type: Azure resource type.
127    :vartype type: str
128    :param location: It will be deprecated in New API, resource location depends on the parent
129     resource.
130    :type location: str
131    :param tags: A set of tags. Azure resource tags.
132    :type tags: dict[str, str]
133    :ivar etag: Azure resource etag.
134    :vartype etag: str
135    """
136
137    _validation = {
138        'id': {'readonly': True},
139        'name': {'readonly': True},
140        'type': {'readonly': True},
141        'etag': {'readonly': True},
142    }
143
144    _attribute_map = {
145        'id': {'key': 'id', 'type': 'str'},
146        'name': {'key': 'name', 'type': 'str'},
147        'type': {'key': 'type', 'type': 'str'},
148        'location': {'key': 'location', 'type': 'str'},
149        'tags': {'key': 'tags', 'type': '{str}'},
150        'etag': {'key': 'etag', 'type': 'str'},
151    }
152
153    def __init__(
154        self,
155        **kwargs
156    ):
157        super(ProxyResource, self).__init__(**kwargs)
158        self.id = None
159        self.name = None
160        self.type = None
161        self.location = kwargs.get('location', None)
162        self.tags = kwargs.get('tags', None)
163        self.etag = None
164
165
166class ApplicationResource(ProxyResource):
167    """The application resource.
168
169    Variables are only populated by the server, and will be ignored when sending a request.
170
171    :ivar id: Azure resource identifier.
172    :vartype id: str
173    :ivar name: Azure resource name.
174    :vartype name: str
175    :ivar type: Azure resource type.
176    :vartype type: str
177    :param location: It will be deprecated in New API, resource location depends on the parent
178     resource.
179    :type location: str
180    :param tags: A set of tags. Azure resource tags.
181    :type tags: dict[str, str]
182    :ivar etag: Azure resource etag.
183    :vartype etag: str
184    :param identity: Describes the managed identities for an Azure resource.
185    :type identity: ~azure.mgmt.servicefabric.models.ManagedIdentity
186    :param type_version: The version of the application type as defined in the application
187     manifest.
188    :type type_version: str
189    :param parameters: List of application parameters with overridden values from their default
190     values specified in the application manifest.
191    :type parameters: dict[str, str]
192    :param upgrade_policy: Describes the policy for a monitored application upgrade.
193    :type upgrade_policy: ~azure.mgmt.servicefabric.models.ApplicationUpgradePolicy
194    :param minimum_nodes: The minimum number of nodes where Service Fabric will reserve capacity
195     for this application. Note that this does not mean that the services of this application will
196     be placed on all of those nodes. If this property is set to zero, no capacity will be reserved.
197     The value of this property cannot be more than the value of the MaximumNodes property.
198    :type minimum_nodes: long
199    :param maximum_nodes: The maximum number of nodes where Service Fabric will reserve capacity
200     for this application. Note that this does not mean that the services of this application will
201     be placed on all of those nodes. By default, the value of this property is zero and it means
202     that the services can be placed on any node.
203    :type maximum_nodes: long
204    :param remove_application_capacity: Remove the current application capacity settings.
205    :type remove_application_capacity: bool
206    :param metrics: List of application capacity metric description.
207    :type metrics: list[~azure.mgmt.servicefabric.models.ApplicationMetricDescription]
208    :param managed_identities: List of user assigned identities for the application, each mapped to
209     a friendly name.
210    :type managed_identities:
211     list[~azure.mgmt.servicefabric.models.ApplicationUserAssignedIdentity]
212    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
213     the response.
214    :vartype provisioning_state: str
215    :param type_name: The application type name as defined in the application manifest.
216    :type type_name: str
217    """
218
219    _validation = {
220        'id': {'readonly': True},
221        'name': {'readonly': True},
222        'type': {'readonly': True},
223        'etag': {'readonly': True},
224        'minimum_nodes': {'minimum': 0},
225        'maximum_nodes': {'minimum': 0},
226        'provisioning_state': {'readonly': True},
227    }
228
229    _attribute_map = {
230        'id': {'key': 'id', 'type': 'str'},
231        'name': {'key': 'name', 'type': 'str'},
232        'type': {'key': 'type', 'type': 'str'},
233        'location': {'key': 'location', 'type': 'str'},
234        'tags': {'key': 'tags', 'type': '{str}'},
235        'etag': {'key': 'etag', 'type': 'str'},
236        'identity': {'key': 'identity', 'type': 'ManagedIdentity'},
237        'type_version': {'key': 'properties.typeVersion', 'type': 'str'},
238        'parameters': {'key': 'properties.parameters', 'type': '{str}'},
239        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'ApplicationUpgradePolicy'},
240        'minimum_nodes': {'key': 'properties.minimumNodes', 'type': 'long'},
241        'maximum_nodes': {'key': 'properties.maximumNodes', 'type': 'long'},
242        'remove_application_capacity': {'key': 'properties.removeApplicationCapacity', 'type': 'bool'},
243        'metrics': {'key': 'properties.metrics', 'type': '[ApplicationMetricDescription]'},
244        'managed_identities': {'key': 'properties.managedIdentities', 'type': '[ApplicationUserAssignedIdentity]'},
245        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
246        'type_name': {'key': 'properties.typeName', 'type': 'str'},
247    }
248
249    def __init__(
250        self,
251        **kwargs
252    ):
253        super(ApplicationResource, self).__init__(**kwargs)
254        self.identity = kwargs.get('identity', None)
255        self.type_version = kwargs.get('type_version', None)
256        self.parameters = kwargs.get('parameters', None)
257        self.upgrade_policy = kwargs.get('upgrade_policy', None)
258        self.minimum_nodes = kwargs.get('minimum_nodes', None)
259        self.maximum_nodes = kwargs.get('maximum_nodes', 0)
260        self.remove_application_capacity = kwargs.get('remove_application_capacity', None)
261        self.metrics = kwargs.get('metrics', None)
262        self.managed_identities = kwargs.get('managed_identities', None)
263        self.provisioning_state = None
264        self.type_name = kwargs.get('type_name', None)
265
266
267class ApplicationResourceList(msrest.serialization.Model):
268    """The list of application resources.
269
270    Variables are only populated by the server, and will be ignored when sending a request.
271
272    :param value:
273    :type value: list[~azure.mgmt.servicefabric.models.ApplicationResource]
274    :ivar next_link: URL to get the next set of application list results if there are any.
275    :vartype next_link: str
276    """
277
278    _validation = {
279        'next_link': {'readonly': True},
280    }
281
282    _attribute_map = {
283        'value': {'key': 'value', 'type': '[ApplicationResource]'},
284        'next_link': {'key': 'nextLink', 'type': 'str'},
285    }
286
287    def __init__(
288        self,
289        **kwargs
290    ):
291        super(ApplicationResourceList, self).__init__(**kwargs)
292        self.value = kwargs.get('value', None)
293        self.next_link = None
294
295
296class ApplicationResourceUpdateProperties(msrest.serialization.Model):
297    """The application resource properties for patch operations.
298
299    :param type_version: The version of the application type as defined in the application
300     manifest.
301    :type type_version: str
302    :param parameters: List of application parameters with overridden values from their default
303     values specified in the application manifest.
304    :type parameters: dict[str, str]
305    :param upgrade_policy: Describes the policy for a monitored application upgrade.
306    :type upgrade_policy: ~azure.mgmt.servicefabric.models.ApplicationUpgradePolicy
307    :param minimum_nodes: The minimum number of nodes where Service Fabric will reserve capacity
308     for this application. Note that this does not mean that the services of this application will
309     be placed on all of those nodes. If this property is set to zero, no capacity will be reserved.
310     The value of this property cannot be more than the value of the MaximumNodes property.
311    :type minimum_nodes: long
312    :param maximum_nodes: The maximum number of nodes where Service Fabric will reserve capacity
313     for this application. Note that this does not mean that the services of this application will
314     be placed on all of those nodes. By default, the value of this property is zero and it means
315     that the services can be placed on any node.
316    :type maximum_nodes: long
317    :param remove_application_capacity: Remove the current application capacity settings.
318    :type remove_application_capacity: bool
319    :param metrics: List of application capacity metric description.
320    :type metrics: list[~azure.mgmt.servicefabric.models.ApplicationMetricDescription]
321    :param managed_identities: List of user assigned identities for the application, each mapped to
322     a friendly name.
323    :type managed_identities:
324     list[~azure.mgmt.servicefabric.models.ApplicationUserAssignedIdentity]
325    """
326
327    _validation = {
328        'minimum_nodes': {'minimum': 0},
329        'maximum_nodes': {'minimum': 0},
330    }
331
332    _attribute_map = {
333        'type_version': {'key': 'typeVersion', 'type': 'str'},
334        'parameters': {'key': 'parameters', 'type': '{str}'},
335        'upgrade_policy': {'key': 'upgradePolicy', 'type': 'ApplicationUpgradePolicy'},
336        'minimum_nodes': {'key': 'minimumNodes', 'type': 'long'},
337        'maximum_nodes': {'key': 'maximumNodes', 'type': 'long'},
338        'remove_application_capacity': {'key': 'removeApplicationCapacity', 'type': 'bool'},
339        'metrics': {'key': 'metrics', 'type': '[ApplicationMetricDescription]'},
340        'managed_identities': {'key': 'managedIdentities', 'type': '[ApplicationUserAssignedIdentity]'},
341    }
342
343    def __init__(
344        self,
345        **kwargs
346    ):
347        super(ApplicationResourceUpdateProperties, self).__init__(**kwargs)
348        self.type_version = kwargs.get('type_version', None)
349        self.parameters = kwargs.get('parameters', None)
350        self.upgrade_policy = kwargs.get('upgrade_policy', None)
351        self.minimum_nodes = kwargs.get('minimum_nodes', None)
352        self.maximum_nodes = kwargs.get('maximum_nodes', 0)
353        self.remove_application_capacity = kwargs.get('remove_application_capacity', None)
354        self.metrics = kwargs.get('metrics', None)
355        self.managed_identities = kwargs.get('managed_identities', None)
356
357
358class ApplicationResourceProperties(ApplicationResourceUpdateProperties):
359    """The application resource properties.
360
361    Variables are only populated by the server, and will be ignored when sending a request.
362
363    :param type_version: The version of the application type as defined in the application
364     manifest.
365    :type type_version: str
366    :param parameters: List of application parameters with overridden values from their default
367     values specified in the application manifest.
368    :type parameters: dict[str, str]
369    :param upgrade_policy: Describes the policy for a monitored application upgrade.
370    :type upgrade_policy: ~azure.mgmt.servicefabric.models.ApplicationUpgradePolicy
371    :param minimum_nodes: The minimum number of nodes where Service Fabric will reserve capacity
372     for this application. Note that this does not mean that the services of this application will
373     be placed on all of those nodes. If this property is set to zero, no capacity will be reserved.
374     The value of this property cannot be more than the value of the MaximumNodes property.
375    :type minimum_nodes: long
376    :param maximum_nodes: The maximum number of nodes where Service Fabric will reserve capacity
377     for this application. Note that this does not mean that the services of this application will
378     be placed on all of those nodes. By default, the value of this property is zero and it means
379     that the services can be placed on any node.
380    :type maximum_nodes: long
381    :param remove_application_capacity: Remove the current application capacity settings.
382    :type remove_application_capacity: bool
383    :param metrics: List of application capacity metric description.
384    :type metrics: list[~azure.mgmt.servicefabric.models.ApplicationMetricDescription]
385    :param managed_identities: List of user assigned identities for the application, each mapped to
386     a friendly name.
387    :type managed_identities:
388     list[~azure.mgmt.servicefabric.models.ApplicationUserAssignedIdentity]
389    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
390     the response.
391    :vartype provisioning_state: str
392    :param type_name: The application type name as defined in the application manifest.
393    :type type_name: str
394    """
395
396    _validation = {
397        'minimum_nodes': {'minimum': 0},
398        'maximum_nodes': {'minimum': 0},
399        'provisioning_state': {'readonly': True},
400    }
401
402    _attribute_map = {
403        'type_version': {'key': 'typeVersion', 'type': 'str'},
404        'parameters': {'key': 'parameters', 'type': '{str}'},
405        'upgrade_policy': {'key': 'upgradePolicy', 'type': 'ApplicationUpgradePolicy'},
406        'minimum_nodes': {'key': 'minimumNodes', 'type': 'long'},
407        'maximum_nodes': {'key': 'maximumNodes', 'type': 'long'},
408        'remove_application_capacity': {'key': 'removeApplicationCapacity', 'type': 'bool'},
409        'metrics': {'key': 'metrics', 'type': '[ApplicationMetricDescription]'},
410        'managed_identities': {'key': 'managedIdentities', 'type': '[ApplicationUserAssignedIdentity]'},
411        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
412        'type_name': {'key': 'typeName', 'type': 'str'},
413    }
414
415    def __init__(
416        self,
417        **kwargs
418    ):
419        super(ApplicationResourceProperties, self).__init__(**kwargs)
420        self.provisioning_state = None
421        self.type_name = kwargs.get('type_name', None)
422
423
424class ApplicationResourceUpdate(ProxyResource):
425    """The application resource for patch operations.
426
427    Variables are only populated by the server, and will be ignored when sending a request.
428
429    :ivar id: Azure resource identifier.
430    :vartype id: str
431    :ivar name: Azure resource name.
432    :vartype name: str
433    :ivar type: Azure resource type.
434    :vartype type: str
435    :param location: It will be deprecated in New API, resource location depends on the parent
436     resource.
437    :type location: str
438    :param tags: A set of tags. Azure resource tags.
439    :type tags: dict[str, str]
440    :ivar etag: Azure resource etag.
441    :vartype etag: str
442    :param type_version: The version of the application type as defined in the application
443     manifest.
444    :type type_version: str
445    :param parameters: List of application parameters with overridden values from their default
446     values specified in the application manifest.
447    :type parameters: dict[str, str]
448    :param upgrade_policy: Describes the policy for a monitored application upgrade.
449    :type upgrade_policy: ~azure.mgmt.servicefabric.models.ApplicationUpgradePolicy
450    :param minimum_nodes: The minimum number of nodes where Service Fabric will reserve capacity
451     for this application. Note that this does not mean that the services of this application will
452     be placed on all of those nodes. If this property is set to zero, no capacity will be reserved.
453     The value of this property cannot be more than the value of the MaximumNodes property.
454    :type minimum_nodes: long
455    :param maximum_nodes: The maximum number of nodes where Service Fabric will reserve capacity
456     for this application. Note that this does not mean that the services of this application will
457     be placed on all of those nodes. By default, the value of this property is zero and it means
458     that the services can be placed on any node.
459    :type maximum_nodes: long
460    :param remove_application_capacity: Remove the current application capacity settings.
461    :type remove_application_capacity: bool
462    :param metrics: List of application capacity metric description.
463    :type metrics: list[~azure.mgmt.servicefabric.models.ApplicationMetricDescription]
464    :param managed_identities: List of user assigned identities for the application, each mapped to
465     a friendly name.
466    :type managed_identities:
467     list[~azure.mgmt.servicefabric.models.ApplicationUserAssignedIdentity]
468    """
469
470    _validation = {
471        'id': {'readonly': True},
472        'name': {'readonly': True},
473        'type': {'readonly': True},
474        'etag': {'readonly': True},
475        'minimum_nodes': {'minimum': 0},
476        'maximum_nodes': {'minimum': 0},
477    }
478
479    _attribute_map = {
480        'id': {'key': 'id', 'type': 'str'},
481        'name': {'key': 'name', 'type': 'str'},
482        'type': {'key': 'type', 'type': 'str'},
483        'location': {'key': 'location', 'type': 'str'},
484        'tags': {'key': 'tags', 'type': '{str}'},
485        'etag': {'key': 'etag', 'type': 'str'},
486        'type_version': {'key': 'properties.typeVersion', 'type': 'str'},
487        'parameters': {'key': 'properties.parameters', 'type': '{str}'},
488        'upgrade_policy': {'key': 'properties.upgradePolicy', 'type': 'ApplicationUpgradePolicy'},
489        'minimum_nodes': {'key': 'properties.minimumNodes', 'type': 'long'},
490        'maximum_nodes': {'key': 'properties.maximumNodes', 'type': 'long'},
491        'remove_application_capacity': {'key': 'properties.removeApplicationCapacity', 'type': 'bool'},
492        'metrics': {'key': 'properties.metrics', 'type': '[ApplicationMetricDescription]'},
493        'managed_identities': {'key': 'properties.managedIdentities', 'type': '[ApplicationUserAssignedIdentity]'},
494    }
495
496    def __init__(
497        self,
498        **kwargs
499    ):
500        super(ApplicationResourceUpdate, self).__init__(**kwargs)
501        self.type_version = kwargs.get('type_version', None)
502        self.parameters = kwargs.get('parameters', None)
503        self.upgrade_policy = kwargs.get('upgrade_policy', None)
504        self.minimum_nodes = kwargs.get('minimum_nodes', None)
505        self.maximum_nodes = kwargs.get('maximum_nodes', 0)
506        self.remove_application_capacity = kwargs.get('remove_application_capacity', None)
507        self.metrics = kwargs.get('metrics', None)
508        self.managed_identities = kwargs.get('managed_identities', None)
509
510
511class ApplicationTypeResource(ProxyResource):
512    """The application type name resource.
513
514    Variables are only populated by the server, and will be ignored when sending a request.
515
516    :ivar id: Azure resource identifier.
517    :vartype id: str
518    :ivar name: Azure resource name.
519    :vartype name: str
520    :ivar type: Azure resource type.
521    :vartype type: str
522    :param location: It will be deprecated in New API, resource location depends on the parent
523     resource.
524    :type location: str
525    :param tags: A set of tags. Azure resource tags.
526    :type tags: dict[str, str]
527    :ivar etag: Azure resource etag.
528    :vartype etag: str
529    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
530     the response.
531    :vartype provisioning_state: str
532    """
533
534    _validation = {
535        'id': {'readonly': True},
536        'name': {'readonly': True},
537        'type': {'readonly': True},
538        'etag': {'readonly': True},
539        'provisioning_state': {'readonly': True},
540    }
541
542    _attribute_map = {
543        'id': {'key': 'id', 'type': 'str'},
544        'name': {'key': 'name', 'type': 'str'},
545        'type': {'key': 'type', 'type': 'str'},
546        'location': {'key': 'location', 'type': 'str'},
547        'tags': {'key': 'tags', 'type': '{str}'},
548        'etag': {'key': 'etag', 'type': 'str'},
549        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
550    }
551
552    def __init__(
553        self,
554        **kwargs
555    ):
556        super(ApplicationTypeResource, self).__init__(**kwargs)
557        self.provisioning_state = None
558
559
560class ApplicationTypeResourceList(msrest.serialization.Model):
561    """The list of application type names.
562
563    Variables are only populated by the server, and will be ignored when sending a request.
564
565    :param value:
566    :type value: list[~azure.mgmt.servicefabric.models.ApplicationTypeResource]
567    :ivar next_link: URL to get the next set of application type list results if there are any.
568    :vartype next_link: str
569    """
570
571    _validation = {
572        'next_link': {'readonly': True},
573    }
574
575    _attribute_map = {
576        'value': {'key': 'value', 'type': '[ApplicationTypeResource]'},
577        'next_link': {'key': 'nextLink', 'type': 'str'},
578    }
579
580    def __init__(
581        self,
582        **kwargs
583    ):
584        super(ApplicationTypeResourceList, self).__init__(**kwargs)
585        self.value = kwargs.get('value', None)
586        self.next_link = None
587
588
589class ApplicationTypeVersionResource(ProxyResource):
590    """An application type version resource for the specified application type name resource.
591
592    Variables are only populated by the server, and will be ignored when sending a request.
593
594    :ivar id: Azure resource identifier.
595    :vartype id: str
596    :ivar name: Azure resource name.
597    :vartype name: str
598    :ivar type: Azure resource type.
599    :vartype type: str
600    :param location: It will be deprecated in New API, resource location depends on the parent
601     resource.
602    :type location: str
603    :param tags: A set of tags. Azure resource tags.
604    :type tags: dict[str, str]
605    :ivar etag: Azure resource etag.
606    :vartype etag: str
607    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
608     the response.
609    :vartype provisioning_state: str
610    :param app_package_url: The URL to the application package.
611    :type app_package_url: str
612    :ivar default_parameter_list: List of application type parameters that can be overridden when
613     creating or updating the application.
614    :vartype default_parameter_list: dict[str, str]
615    """
616
617    _validation = {
618        'id': {'readonly': True},
619        'name': {'readonly': True},
620        'type': {'readonly': True},
621        'etag': {'readonly': True},
622        'provisioning_state': {'readonly': True},
623        'default_parameter_list': {'readonly': True},
624    }
625
626    _attribute_map = {
627        'id': {'key': 'id', 'type': 'str'},
628        'name': {'key': 'name', 'type': 'str'},
629        'type': {'key': 'type', 'type': 'str'},
630        'location': {'key': 'location', 'type': 'str'},
631        'tags': {'key': 'tags', 'type': '{str}'},
632        'etag': {'key': 'etag', 'type': 'str'},
633        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
634        'app_package_url': {'key': 'properties.appPackageUrl', 'type': 'str'},
635        'default_parameter_list': {'key': 'properties.defaultParameterList', 'type': '{str}'},
636    }
637
638    def __init__(
639        self,
640        **kwargs
641    ):
642        super(ApplicationTypeVersionResource, self).__init__(**kwargs)
643        self.provisioning_state = None
644        self.app_package_url = kwargs.get('app_package_url', None)
645        self.default_parameter_list = None
646
647
648class ApplicationTypeVersionResourceList(msrest.serialization.Model):
649    """The list of application type version resources for the specified application type name resource.
650
651    Variables are only populated by the server, and will be ignored when sending a request.
652
653    :param value:
654    :type value: list[~azure.mgmt.servicefabric.models.ApplicationTypeVersionResource]
655    :ivar next_link: URL to get the next set of application type version list results if there are
656     any.
657    :vartype next_link: str
658    """
659
660    _validation = {
661        'next_link': {'readonly': True},
662    }
663
664    _attribute_map = {
665        'value': {'key': 'value', 'type': '[ApplicationTypeVersionResource]'},
666        'next_link': {'key': 'nextLink', 'type': 'str'},
667    }
668
669    def __init__(
670        self,
671        **kwargs
672    ):
673        super(ApplicationTypeVersionResourceList, self).__init__(**kwargs)
674        self.value = kwargs.get('value', None)
675        self.next_link = None
676
677
678class ApplicationTypeVersionsCleanupPolicy(msrest.serialization.Model):
679    """ApplicationTypeVersionsCleanupPolicy.
680
681    All required parameters must be populated in order to send to Azure.
682
683    :param max_unused_versions_to_keep: Required. Number of unused versions per application type to
684     keep.
685    :type max_unused_versions_to_keep: int
686    """
687
688    _validation = {
689        'max_unused_versions_to_keep': {'required': True, 'minimum': 0},
690    }
691
692    _attribute_map = {
693        'max_unused_versions_to_keep': {'key': 'maxUnusedVersionsToKeep', 'type': 'int'},
694    }
695
696    def __init__(
697        self,
698        **kwargs
699    ):
700        super(ApplicationTypeVersionsCleanupPolicy, self).__init__(**kwargs)
701        self.max_unused_versions_to_keep = kwargs['max_unused_versions_to_keep']
702
703
704class ApplicationUpgradePolicy(msrest.serialization.Model):
705    """Describes the policy for a monitored application upgrade.
706
707    :param upgrade_replica_set_check_timeout: The maximum amount of time to block processing of an
708     upgrade domain and prevent loss of availability when there are unexpected issues. When this
709     timeout expires, processing of the upgrade domain will proceed regardless of availability loss
710     issues. The timeout is reset at the start of each upgrade domain. Valid values are between 0
711     and 42949672925 inclusive. (unsigned 32-bit integer).
712    :type upgrade_replica_set_check_timeout: str
713    :param force_restart: If true, then processes are forcefully restarted during upgrade even when
714     the code version has not changed (the upgrade only changes configuration or data).
715    :type force_restart: bool
716    :param rolling_upgrade_monitoring_policy: The policy used for monitoring the application
717     upgrade.
718    :type rolling_upgrade_monitoring_policy:
719     ~azure.mgmt.servicefabric.models.ArmRollingUpgradeMonitoringPolicy
720    :param application_health_policy: Defines a health policy used to evaluate the health of an
721     application or one of its children entities.
722    :type application_health_policy: ~azure.mgmt.servicefabric.models.ArmApplicationHealthPolicy
723    :param upgrade_mode: The mode used to monitor health during a rolling upgrade. The values are
724     UnmonitoredAuto, UnmonitoredManual, and Monitored. Possible values include: "Invalid",
725     "UnmonitoredAuto", "UnmonitoredManual", "Monitored". Default value: "Monitored".
726    :type upgrade_mode: str or ~azure.mgmt.servicefabric.models.RollingUpgradeMode
727    """
728
729    _attribute_map = {
730        'upgrade_replica_set_check_timeout': {'key': 'upgradeReplicaSetCheckTimeout', 'type': 'str'},
731        'force_restart': {'key': 'forceRestart', 'type': 'bool'},
732        'rolling_upgrade_monitoring_policy': {'key': 'rollingUpgradeMonitoringPolicy', 'type': 'ArmRollingUpgradeMonitoringPolicy'},
733        'application_health_policy': {'key': 'applicationHealthPolicy', 'type': 'ArmApplicationHealthPolicy'},
734        'upgrade_mode': {'key': 'upgradeMode', 'type': 'str'},
735    }
736
737    def __init__(
738        self,
739        **kwargs
740    ):
741        super(ApplicationUpgradePolicy, self).__init__(**kwargs)
742        self.upgrade_replica_set_check_timeout = kwargs.get('upgrade_replica_set_check_timeout', None)
743        self.force_restart = kwargs.get('force_restart', False)
744        self.rolling_upgrade_monitoring_policy = kwargs.get('rolling_upgrade_monitoring_policy', None)
745        self.application_health_policy = kwargs.get('application_health_policy', None)
746        self.upgrade_mode = kwargs.get('upgrade_mode', "Monitored")
747
748
749class ApplicationUserAssignedIdentity(msrest.serialization.Model):
750    """ApplicationUserAssignedIdentity.
751
752    All required parameters must be populated in order to send to Azure.
753
754    :param name: Required. The friendly name of user assigned identity.
755    :type name: str
756    :param principal_id: Required. The principal id of user assigned identity.
757    :type principal_id: str
758    """
759
760    _validation = {
761        'name': {'required': True},
762        'principal_id': {'required': True},
763    }
764
765    _attribute_map = {
766        'name': {'key': 'name', 'type': 'str'},
767        'principal_id': {'key': 'principalId', 'type': 'str'},
768    }
769
770    def __init__(
771        self,
772        **kwargs
773    ):
774        super(ApplicationUserAssignedIdentity, self).__init__(**kwargs)
775        self.name = kwargs['name']
776        self.principal_id = kwargs['principal_id']
777
778
779class ArmApplicationHealthPolicy(msrest.serialization.Model):
780    """Defines a health policy used to evaluate the health of an application or one of its children entities.
781
782    :param consider_warning_as_error: Indicates whether warnings are treated with the same severity
783     as errors.
784    :type consider_warning_as_error: bool
785    :param max_percent_unhealthy_deployed_applications: The maximum allowed percentage of unhealthy
786     deployed applications. Allowed values are Byte values from zero to 100.
787     The percentage represents the maximum tolerated percentage of deployed applications that can
788     be unhealthy before the application is considered in error.
789     This is calculated by dividing the number of unhealthy deployed applications over the number
790     of nodes where the application is currently deployed on in the cluster.
791     The computation rounds up to tolerate one failure on small numbers of nodes. Default
792     percentage is zero.
793    :type max_percent_unhealthy_deployed_applications: int
794    :param default_service_type_health_policy: The health policy used by default to evaluate the
795     health of a service type.
796    :type default_service_type_health_policy:
797     ~azure.mgmt.servicefabric.models.ArmServiceTypeHealthPolicy
798    :param service_type_health_policy_map: The map with service type health policy per service type
799     name. The map is empty by default.
800    :type service_type_health_policy_map: dict[str,
801     ~azure.mgmt.servicefabric.models.ArmServiceTypeHealthPolicy]
802    """
803
804    _attribute_map = {
805        'consider_warning_as_error': {'key': 'considerWarningAsError', 'type': 'bool'},
806        'max_percent_unhealthy_deployed_applications': {'key': 'maxPercentUnhealthyDeployedApplications', 'type': 'int'},
807        'default_service_type_health_policy': {'key': 'defaultServiceTypeHealthPolicy', 'type': 'ArmServiceTypeHealthPolicy'},
808        'service_type_health_policy_map': {'key': 'serviceTypeHealthPolicyMap', 'type': '{ArmServiceTypeHealthPolicy}'},
809    }
810
811    def __init__(
812        self,
813        **kwargs
814    ):
815        super(ArmApplicationHealthPolicy, self).__init__(**kwargs)
816        self.consider_warning_as_error = kwargs.get('consider_warning_as_error', False)
817        self.max_percent_unhealthy_deployed_applications = kwargs.get('max_percent_unhealthy_deployed_applications', 0)
818        self.default_service_type_health_policy = kwargs.get('default_service_type_health_policy', None)
819        self.service_type_health_policy_map = kwargs.get('service_type_health_policy_map', None)
820
821
822class ArmRollingUpgradeMonitoringPolicy(msrest.serialization.Model):
823    """The policy used for monitoring the application upgrade.
824
825    :param failure_action: The activation Mode of the service package. Possible values include:
826     "Rollback", "Manual".
827    :type failure_action: str or ~azure.mgmt.servicefabric.models.ArmUpgradeFailureAction
828    :param health_check_wait_duration: The amount of time to wait after completing an upgrade
829     domain before applying health policies. It is first interpreted as a string representing an ISO
830     8601 duration. If that fails, then it is interpreted as a number representing the total number
831     of milliseconds.
832    :type health_check_wait_duration: str
833    :param health_check_stable_duration: The amount of time that the application or cluster must
834     remain healthy before the upgrade proceeds to the next upgrade domain. It is first interpreted
835     as a string representing an ISO 8601 duration. If that fails, then it is interpreted as a
836     number representing the total number of milliseconds.
837    :type health_check_stable_duration: str
838    :param health_check_retry_timeout: The amount of time to retry health evaluation when the
839     application or cluster is unhealthy before FailureAction is executed. It is first interpreted
840     as a string representing an ISO 8601 duration. If that fails, then it is interpreted as a
841     number representing the total number of milliseconds.
842    :type health_check_retry_timeout: str
843    :param upgrade_timeout: The amount of time the overall upgrade has to complete before
844     FailureAction is executed. It is first interpreted as a string representing an ISO 8601
845     duration. If that fails, then it is interpreted as a number representing the total number of
846     milliseconds.
847    :type upgrade_timeout: str
848    :param upgrade_domain_timeout: The amount of time each upgrade domain has to complete before
849     FailureAction is executed. It is first interpreted as a string representing an ISO 8601
850     duration. If that fails, then it is interpreted as a number representing the total number of
851     milliseconds.
852    :type upgrade_domain_timeout: str
853    """
854
855    _attribute_map = {
856        'failure_action': {'key': 'failureAction', 'type': 'str'},
857        'health_check_wait_duration': {'key': 'healthCheckWaitDuration', 'type': 'str'},
858        'health_check_stable_duration': {'key': 'healthCheckStableDuration', 'type': 'str'},
859        'health_check_retry_timeout': {'key': 'healthCheckRetryTimeout', 'type': 'str'},
860        'upgrade_timeout': {'key': 'upgradeTimeout', 'type': 'str'},
861        'upgrade_domain_timeout': {'key': 'upgradeDomainTimeout', 'type': 'str'},
862    }
863
864    def __init__(
865        self,
866        **kwargs
867    ):
868        super(ArmRollingUpgradeMonitoringPolicy, self).__init__(**kwargs)
869        self.failure_action = kwargs.get('failure_action', None)
870        self.health_check_wait_duration = kwargs.get('health_check_wait_duration', "0")
871        self.health_check_stable_duration = kwargs.get('health_check_stable_duration', "PT0H2M0S")
872        self.health_check_retry_timeout = kwargs.get('health_check_retry_timeout', "PT0H10M0S")
873        self.upgrade_timeout = kwargs.get('upgrade_timeout', "P10675199DT02H48M05.4775807S")
874        self.upgrade_domain_timeout = kwargs.get('upgrade_domain_timeout', "P10675199DT02H48M05.4775807S")
875
876
877class ArmServiceTypeHealthPolicy(msrest.serialization.Model):
878    """Represents the health policy used to evaluate the health of services belonging to a service type.
879
880    :param max_percent_unhealthy_services: The maximum percentage of services allowed to be
881     unhealthy before your application is considered in error.
882    :type max_percent_unhealthy_services: int
883    :param max_percent_unhealthy_partitions_per_service: The maximum percentage of partitions per
884     service allowed to be unhealthy before your application is considered in error.
885    :type max_percent_unhealthy_partitions_per_service: int
886    :param max_percent_unhealthy_replicas_per_partition: The maximum percentage of replicas per
887     partition allowed to be unhealthy before your application is considered in error.
888    :type max_percent_unhealthy_replicas_per_partition: int
889    """
890
891    _validation = {
892        'max_percent_unhealthy_services': {'maximum': 100, 'minimum': 0},
893        'max_percent_unhealthy_partitions_per_service': {'maximum': 100, 'minimum': 0},
894        'max_percent_unhealthy_replicas_per_partition': {'maximum': 100, 'minimum': 0},
895    }
896
897    _attribute_map = {
898        'max_percent_unhealthy_services': {'key': 'maxPercentUnhealthyServices', 'type': 'int'},
899        'max_percent_unhealthy_partitions_per_service': {'key': 'maxPercentUnhealthyPartitionsPerService', 'type': 'int'},
900        'max_percent_unhealthy_replicas_per_partition': {'key': 'maxPercentUnhealthyReplicasPerPartition', 'type': 'int'},
901    }
902
903    def __init__(
904        self,
905        **kwargs
906    ):
907        super(ArmServiceTypeHealthPolicy, self).__init__(**kwargs)
908        self.max_percent_unhealthy_services = kwargs.get('max_percent_unhealthy_services', 0)
909        self.max_percent_unhealthy_partitions_per_service = kwargs.get('max_percent_unhealthy_partitions_per_service', 0)
910        self.max_percent_unhealthy_replicas_per_partition = kwargs.get('max_percent_unhealthy_replicas_per_partition', 0)
911
912
913class AvailableOperationDisplay(msrest.serialization.Model):
914    """Operation supported by the Service Fabric resource provider.
915
916    :param provider: The name of the provider.
917    :type provider: str
918    :param resource: The resource on which the operation is performed.
919    :type resource: str
920    :param operation: The operation that can be performed.
921    :type operation: str
922    :param description: Operation description.
923    :type description: str
924    """
925
926    _attribute_map = {
927        'provider': {'key': 'provider', 'type': 'str'},
928        'resource': {'key': 'resource', 'type': 'str'},
929        'operation': {'key': 'operation', 'type': 'str'},
930        'description': {'key': 'description', 'type': 'str'},
931    }
932
933    def __init__(
934        self,
935        **kwargs
936    ):
937        super(AvailableOperationDisplay, self).__init__(**kwargs)
938        self.provider = kwargs.get('provider', None)
939        self.resource = kwargs.get('resource', None)
940        self.operation = kwargs.get('operation', None)
941        self.description = kwargs.get('description', None)
942
943
944class AzureActiveDirectory(msrest.serialization.Model):
945    """The settings to enable AAD authentication on the cluster.
946
947    :param tenant_id: Azure active directory tenant id.
948    :type tenant_id: str
949    :param cluster_application: Azure active directory cluster application id.
950    :type cluster_application: str
951    :param client_application: Azure active directory client application id.
952    :type client_application: str
953    """
954
955    _attribute_map = {
956        'tenant_id': {'key': 'tenantId', 'type': 'str'},
957        'cluster_application': {'key': 'clusterApplication', 'type': 'str'},
958        'client_application': {'key': 'clientApplication', 'type': 'str'},
959    }
960
961    def __init__(
962        self,
963        **kwargs
964    ):
965        super(AzureActiveDirectory, self).__init__(**kwargs)
966        self.tenant_id = kwargs.get('tenant_id', None)
967        self.cluster_application = kwargs.get('cluster_application', None)
968        self.client_application = kwargs.get('client_application', None)
969
970
971class CertificateDescription(msrest.serialization.Model):
972    """Describes the certificate details.
973
974    All required parameters must be populated in order to send to Azure.
975
976    :param thumbprint: Required. Thumbprint of the primary certificate.
977    :type thumbprint: str
978    :param thumbprint_secondary: Thumbprint of the secondary certificate.
979    :type thumbprint_secondary: str
980    :param x509_store_name: The local certificate store location. Possible values include:
981     "AddressBook", "AuthRoot", "CertificateAuthority", "Disallowed", "My", "Root", "TrustedPeople",
982     "TrustedPublisher".
983    :type x509_store_name: str or ~azure.mgmt.servicefabric.models.StoreName
984    """
985
986    _validation = {
987        'thumbprint': {'required': True},
988    }
989
990    _attribute_map = {
991        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
992        'thumbprint_secondary': {'key': 'thumbprintSecondary', 'type': 'str'},
993        'x509_store_name': {'key': 'x509StoreName', 'type': 'str'},
994    }
995
996    def __init__(
997        self,
998        **kwargs
999    ):
1000        super(CertificateDescription, self).__init__(**kwargs)
1001        self.thumbprint = kwargs['thumbprint']
1002        self.thumbprint_secondary = kwargs.get('thumbprint_secondary', None)
1003        self.x509_store_name = kwargs.get('x509_store_name', None)
1004
1005
1006class ClientCertificate(msrest.serialization.Model):
1007    """Client Certificate definition.
1008
1009    All required parameters must be populated in order to send to Azure.
1010
1011    :param is_admin: Required. Whether the certificate is admin or not.
1012    :type is_admin: bool
1013    :param thumbprint: Certificate Thumbprint.
1014    :type thumbprint: str
1015    :param common_name: Certificate Common name.
1016    :type common_name: str
1017    :param issuer_thumbprint: Issuer thumbprint for the certificate. Only used together with
1018     CommonName.
1019    :type issuer_thumbprint: str
1020    """
1021
1022    _validation = {
1023        'is_admin': {'required': True},
1024    }
1025
1026    _attribute_map = {
1027        'is_admin': {'key': 'isAdmin', 'type': 'bool'},
1028        'thumbprint': {'key': 'thumbprint', 'type': 'str'},
1029        'common_name': {'key': 'commonName', 'type': 'str'},
1030        'issuer_thumbprint': {'key': 'issuerThumbprint', 'type': 'str'},
1031    }
1032
1033    def __init__(
1034        self,
1035        **kwargs
1036    ):
1037        super(ClientCertificate, self).__init__(**kwargs)
1038        self.is_admin = kwargs['is_admin']
1039        self.thumbprint = kwargs.get('thumbprint', None)
1040        self.common_name = kwargs.get('common_name', None)
1041        self.issuer_thumbprint = kwargs.get('issuer_thumbprint', None)
1042
1043
1044class ClientCertificateCommonName(msrest.serialization.Model):
1045    """Describes the client certificate details using common name.
1046
1047    All required parameters must be populated in order to send to Azure.
1048
1049    :param is_admin: Required. Indicates if the client certificate has admin access to the cluster.
1050     Non admin clients can perform only read only operations on the cluster.
1051    :type is_admin: bool
1052    :param certificate_common_name: Required. The common name of the client certificate.
1053    :type certificate_common_name: str
1054    :param certificate_issuer_thumbprint: Required. The issuer thumbprint of the client
1055     certificate.
1056    :type certificate_issuer_thumbprint: str
1057    """
1058
1059    _validation = {
1060        'is_admin': {'required': True},
1061        'certificate_common_name': {'required': True},
1062        'certificate_issuer_thumbprint': {'required': True},
1063    }
1064
1065    _attribute_map = {
1066        'is_admin': {'key': 'isAdmin', 'type': 'bool'},
1067        'certificate_common_name': {'key': 'certificateCommonName', 'type': 'str'},
1068        'certificate_issuer_thumbprint': {'key': 'certificateIssuerThumbprint', 'type': 'str'},
1069    }
1070
1071    def __init__(
1072        self,
1073        **kwargs
1074    ):
1075        super(ClientCertificateCommonName, self).__init__(**kwargs)
1076        self.is_admin = kwargs['is_admin']
1077        self.certificate_common_name = kwargs['certificate_common_name']
1078        self.certificate_issuer_thumbprint = kwargs['certificate_issuer_thumbprint']
1079
1080
1081class ClientCertificateThumbprint(msrest.serialization.Model):
1082    """Describes the client certificate details using thumbprint.
1083
1084    All required parameters must be populated in order to send to Azure.
1085
1086    :param is_admin: Required. Indicates if the client certificate has admin access to the cluster.
1087     Non admin clients can perform only read only operations on the cluster.
1088    :type is_admin: bool
1089    :param certificate_thumbprint: Required. The thumbprint of the client certificate.
1090    :type certificate_thumbprint: str
1091    """
1092
1093    _validation = {
1094        'is_admin': {'required': True},
1095        'certificate_thumbprint': {'required': True},
1096    }
1097
1098    _attribute_map = {
1099        'is_admin': {'key': 'isAdmin', 'type': 'bool'},
1100        'certificate_thumbprint': {'key': 'certificateThumbprint', 'type': 'str'},
1101    }
1102
1103    def __init__(
1104        self,
1105        **kwargs
1106    ):
1107        super(ClientCertificateThumbprint, self).__init__(**kwargs)
1108        self.is_admin = kwargs['is_admin']
1109        self.certificate_thumbprint = kwargs['certificate_thumbprint']
1110
1111
1112class Resource(msrest.serialization.Model):
1113    """The resource model definition.
1114
1115    Variables are only populated by the server, and will be ignored when sending a request.
1116
1117    All required parameters must be populated in order to send to Azure.
1118
1119    :ivar id: Azure resource identifier.
1120    :vartype id: str
1121    :ivar name: Azure resource name.
1122    :vartype name: str
1123    :ivar type: Azure resource type.
1124    :vartype type: str
1125    :param location: Required. Azure resource location.
1126    :type location: str
1127    :param tags: A set of tags. Azure resource tags.
1128    :type tags: dict[str, str]
1129    :ivar etag: Azure resource etag.
1130    :vartype etag: str
1131    """
1132
1133    _validation = {
1134        'id': {'readonly': True},
1135        'name': {'readonly': True},
1136        'type': {'readonly': True},
1137        'location': {'required': True},
1138        'etag': {'readonly': True},
1139    }
1140
1141    _attribute_map = {
1142        'id': {'key': 'id', 'type': 'str'},
1143        'name': {'key': 'name', 'type': 'str'},
1144        'type': {'key': 'type', 'type': 'str'},
1145        'location': {'key': 'location', 'type': 'str'},
1146        'tags': {'key': 'tags', 'type': '{str}'},
1147        'etag': {'key': 'etag', 'type': 'str'},
1148    }
1149
1150    def __init__(
1151        self,
1152        **kwargs
1153    ):
1154        super(Resource, self).__init__(**kwargs)
1155        self.id = None
1156        self.name = None
1157        self.type = None
1158        self.location = kwargs['location']
1159        self.tags = kwargs.get('tags', None)
1160        self.etag = None
1161
1162
1163class Cluster(Resource):
1164    """The cluster resource properties.
1165
1166    Variables are only populated by the server, and will be ignored when sending a request.
1167
1168    All required parameters must be populated in order to send to Azure.
1169
1170    :ivar id: Azure resource identifier.
1171    :vartype id: str
1172    :ivar name: Azure resource name.
1173    :vartype name: str
1174    :ivar type: Azure resource type.
1175    :vartype type: str
1176    :param location: Required. Azure resource location.
1177    :type location: str
1178    :param tags: A set of tags. Azure resource tags.
1179    :type tags: dict[str, str]
1180    :ivar etag: Azure resource etag.
1181    :vartype etag: str
1182    :param add_on_features: The list of add-on features to enable in the cluster.
1183    :type add_on_features: list[str or ~azure.mgmt.servicefabric.models.AddOnFeatures]
1184    :ivar available_cluster_versions: The Service Fabric runtime versions available for this
1185     cluster.
1186    :vartype available_cluster_versions:
1187     list[~azure.mgmt.servicefabric.models.ClusterVersionDetails]
1188    :param azure_active_directory: The AAD authentication settings of the cluster.
1189    :type azure_active_directory: ~azure.mgmt.servicefabric.models.AzureActiveDirectory
1190    :param certificate: The certificate to use for securing the cluster. The certificate provided
1191     will be used for node to node security within the cluster, SSL certificate for cluster
1192     management endpoint and default admin client.
1193    :type certificate: ~azure.mgmt.servicefabric.models.CertificateDescription
1194    :param certificate_common_names: Describes a list of server certificates referenced by common
1195     name that are used to secure the cluster.
1196    :type certificate_common_names: ~azure.mgmt.servicefabric.models.ServerCertificateCommonNames
1197    :param client_certificate_common_names: The list of client certificates referenced by common
1198     name that are allowed to manage the cluster.
1199    :type client_certificate_common_names:
1200     list[~azure.mgmt.servicefabric.models.ClientCertificateCommonName]
1201    :param client_certificate_thumbprints: The list of client certificates referenced by thumbprint
1202     that are allowed to manage the cluster.
1203    :type client_certificate_thumbprints:
1204     list[~azure.mgmt.servicefabric.models.ClientCertificateThumbprint]
1205    :param cluster_code_version: The Service Fabric runtime version of the cluster. This property
1206     can only by set the user when **upgradeMode** is set to 'Manual'. To get list of available
1207     Service Fabric versions for new clusters use `ClusterVersion API <./ClusterVersion.md>`_. To
1208     get the list of available version for existing clusters use **availableClusterVersions**.
1209    :type cluster_code_version: str
1210    :ivar cluster_endpoint: The Azure Resource Provider endpoint. A system service in the cluster
1211     connects to this  endpoint.
1212    :vartype cluster_endpoint: str
1213    :ivar cluster_id: A service generated unique identifier for the cluster resource.
1214    :vartype cluster_id: str
1215    :ivar cluster_state: The current state of the cluster.
1216
1217
1218     * WaitingForNodes - Indicates that the cluster resource is created and the resource provider
1219     is waiting for Service Fabric VM extension to boot up and report to it.
1220     * Deploying - Indicates that the Service Fabric runtime is being installed on the VMs. Cluster
1221     resource will be in this state until the cluster boots up and system services are up.
1222     * BaselineUpgrade - Indicates that the cluster is upgrading to establishes the cluster
1223     version. This upgrade is automatically initiated when the cluster boots up for the first time.
1224     * UpdatingUserConfiguration - Indicates that the cluster is being upgraded with the user
1225     provided configuration.
1226     * UpdatingUserCertificate - Indicates that the cluster is being upgraded with the user
1227     provided certificate.
1228     * UpdatingInfrastructure - Indicates that the cluster is being upgraded with the latest
1229     Service Fabric runtime version. This happens only when the **upgradeMode** is set to
1230     'Automatic'.
1231     * EnforcingClusterVersion - Indicates that cluster is on a different version than expected and
1232     the cluster is being upgraded to the expected version.
1233     * UpgradeServiceUnreachable - Indicates that the system service in the cluster is no longer
1234     polling the Resource Provider. Clusters in this state cannot be managed by the Resource
1235     Provider.
1236     * AutoScale - Indicates that the ReliabilityLevel of the cluster is being adjusted.
1237     * Ready - Indicates that the cluster is in a stable state. Possible values include:
1238     "WaitingForNodes", "Deploying", "BaselineUpgrade", "UpdatingUserConfiguration",
1239     "UpdatingUserCertificate", "UpdatingInfrastructure", "EnforcingClusterVersion",
1240     "UpgradeServiceUnreachable", "AutoScale", "Ready".
1241    :vartype cluster_state: str or ~azure.mgmt.servicefabric.models.ClusterState
1242    :param diagnostics_storage_account_config: The storage account information for storing Service
1243     Fabric diagnostic logs.
1244    :type diagnostics_storage_account_config:
1245     ~azure.mgmt.servicefabric.models.DiagnosticsStorageAccountConfig
1246    :param event_store_service_enabled: Indicates if the event store service is enabled.
1247    :type event_store_service_enabled: bool
1248    :param fabric_settings: The list of custom fabric settings to configure the cluster.
1249    :type fabric_settings: list[~azure.mgmt.servicefabric.models.SettingsSectionDescription]
1250    :param management_endpoint: The http management endpoint of the cluster.
1251    :type management_endpoint: str
1252    :param node_types: The list of node types in the cluster.
1253    :type node_types: list[~azure.mgmt.servicefabric.models.NodeTypeDescription]
1254    :ivar provisioning_state: The provisioning state of the cluster resource. Possible values
1255     include: "Updating", "Succeeded", "Failed", "Canceled".
1256    :vartype provisioning_state: str or ~azure.mgmt.servicefabric.models.ProvisioningState
1257    :param reliability_level: The reliability level sets the replica set size of system services.
1258     Learn about `ReliabilityLevel
1259     <https://docs.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity>`_.
1260
1261
1262     * None - Run the System services with a target replica set count of 1. This should only be
1263     used for test clusters.
1264     * Bronze - Run the System services with a target replica set count of 3. This should only be
1265     used for test clusters.
1266     * Silver - Run the System services with a target replica set count of 5.
1267     * Gold - Run the System services with a target replica set count of 7.
1268     * Platinum - Run the System services with a target replica set count of 9. Possible values
1269     include: "None", "Bronze", "Silver", "Gold", "Platinum".
1270    :type reliability_level: str or ~azure.mgmt.servicefabric.models.ReliabilityLevel
1271    :param reverse_proxy_certificate: The server certificate used by reverse proxy.
1272    :type reverse_proxy_certificate: ~azure.mgmt.servicefabric.models.CertificateDescription
1273    :param reverse_proxy_certificate_common_names: Describes a list of server certificates
1274     referenced by common name that are used to secure the cluster.
1275    :type reverse_proxy_certificate_common_names:
1276     ~azure.mgmt.servicefabric.models.ServerCertificateCommonNames
1277    :param upgrade_description: The policy to use when upgrading the cluster.
1278    :type upgrade_description: ~azure.mgmt.servicefabric.models.ClusterUpgradePolicy
1279    :param upgrade_mode: The upgrade mode of the cluster when new Service Fabric runtime version is
1280     available.
1281
1282
1283     * Automatic - The cluster will be automatically upgraded to the latest Service Fabric runtime
1284     version as soon as it is available.
1285     * Manual - The cluster will not be automatically upgraded to the latest Service Fabric runtime
1286     version. The cluster is upgraded by setting the **clusterCodeVersion** property in the cluster
1287     resource. Possible values include: "Automatic", "Manual".
1288    :type upgrade_mode: str or ~azure.mgmt.servicefabric.models.UpgradeMode
1289    :param application_type_versions_cleanup_policy: The policy used to clean up unused versions.
1290    :type application_type_versions_cleanup_policy:
1291     ~azure.mgmt.servicefabric.models.ApplicationTypeVersionsCleanupPolicy
1292    :param vm_image: The VM image VMSS has been configured with. Generic names such as Windows or
1293     Linux can be used.
1294    :type vm_image: str
1295    """
1296
1297    _validation = {
1298        'id': {'readonly': True},
1299        'name': {'readonly': True},
1300        'type': {'readonly': True},
1301        'location': {'required': True},
1302        'etag': {'readonly': True},
1303        'available_cluster_versions': {'readonly': True},
1304        'cluster_endpoint': {'readonly': True},
1305        'cluster_id': {'readonly': True},
1306        'cluster_state': {'readonly': True},
1307        'provisioning_state': {'readonly': True},
1308    }
1309
1310    _attribute_map = {
1311        'id': {'key': 'id', 'type': 'str'},
1312        'name': {'key': 'name', 'type': 'str'},
1313        'type': {'key': 'type', 'type': 'str'},
1314        'location': {'key': 'location', 'type': 'str'},
1315        'tags': {'key': 'tags', 'type': '{str}'},
1316        'etag': {'key': 'etag', 'type': 'str'},
1317        'add_on_features': {'key': 'properties.addOnFeatures', 'type': '[str]'},
1318        'available_cluster_versions': {'key': 'properties.availableClusterVersions', 'type': '[ClusterVersionDetails]'},
1319        'azure_active_directory': {'key': 'properties.azureActiveDirectory', 'type': 'AzureActiveDirectory'},
1320        'certificate': {'key': 'properties.certificate', 'type': 'CertificateDescription'},
1321        'certificate_common_names': {'key': 'properties.certificateCommonNames', 'type': 'ServerCertificateCommonNames'},
1322        'client_certificate_common_names': {'key': 'properties.clientCertificateCommonNames', 'type': '[ClientCertificateCommonName]'},
1323        'client_certificate_thumbprints': {'key': 'properties.clientCertificateThumbprints', 'type': '[ClientCertificateThumbprint]'},
1324        'cluster_code_version': {'key': 'properties.clusterCodeVersion', 'type': 'str'},
1325        'cluster_endpoint': {'key': 'properties.clusterEndpoint', 'type': 'str'},
1326        'cluster_id': {'key': 'properties.clusterId', 'type': 'str'},
1327        'cluster_state': {'key': 'properties.clusterState', 'type': 'str'},
1328        'diagnostics_storage_account_config': {'key': 'properties.diagnosticsStorageAccountConfig', 'type': 'DiagnosticsStorageAccountConfig'},
1329        'event_store_service_enabled': {'key': 'properties.eventStoreServiceEnabled', 'type': 'bool'},
1330        'fabric_settings': {'key': 'properties.fabricSettings', 'type': '[SettingsSectionDescription]'},
1331        'management_endpoint': {'key': 'properties.managementEndpoint', 'type': 'str'},
1332        'node_types': {'key': 'properties.nodeTypes', 'type': '[NodeTypeDescription]'},
1333        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
1334        'reliability_level': {'key': 'properties.reliabilityLevel', 'type': 'str'},
1335        'reverse_proxy_certificate': {'key': 'properties.reverseProxyCertificate', 'type': 'CertificateDescription'},
1336        'reverse_proxy_certificate_common_names': {'key': 'properties.reverseProxyCertificateCommonNames', 'type': 'ServerCertificateCommonNames'},
1337        'upgrade_description': {'key': 'properties.upgradeDescription', 'type': 'ClusterUpgradePolicy'},
1338        'upgrade_mode': {'key': 'properties.upgradeMode', 'type': 'str'},
1339        'application_type_versions_cleanup_policy': {'key': 'properties.applicationTypeVersionsCleanupPolicy', 'type': 'ApplicationTypeVersionsCleanupPolicy'},
1340        'vm_image': {'key': 'properties.vmImage', 'type': 'str'},
1341    }
1342
1343    def __init__(
1344        self,
1345        **kwargs
1346    ):
1347        super(Cluster, self).__init__(**kwargs)
1348        self.add_on_features = kwargs.get('add_on_features', None)
1349        self.available_cluster_versions = None
1350        self.azure_active_directory = kwargs.get('azure_active_directory', None)
1351        self.certificate = kwargs.get('certificate', None)
1352        self.certificate_common_names = kwargs.get('certificate_common_names', None)
1353        self.client_certificate_common_names = kwargs.get('client_certificate_common_names', None)
1354        self.client_certificate_thumbprints = kwargs.get('client_certificate_thumbprints', None)
1355        self.cluster_code_version = kwargs.get('cluster_code_version', None)
1356        self.cluster_endpoint = None
1357        self.cluster_id = None
1358        self.cluster_state = None
1359        self.diagnostics_storage_account_config = kwargs.get('diagnostics_storage_account_config', None)
1360        self.event_store_service_enabled = kwargs.get('event_store_service_enabled', None)
1361        self.fabric_settings = kwargs.get('fabric_settings', None)
1362        self.management_endpoint = kwargs.get('management_endpoint', None)
1363        self.node_types = kwargs.get('node_types', None)
1364        self.provisioning_state = None
1365        self.reliability_level = kwargs.get('reliability_level', None)
1366        self.reverse_proxy_certificate = kwargs.get('reverse_proxy_certificate', None)
1367        self.reverse_proxy_certificate_common_names = kwargs.get('reverse_proxy_certificate_common_names', None)
1368        self.upgrade_description = kwargs.get('upgrade_description', None)
1369        self.upgrade_mode = kwargs.get('upgrade_mode', None)
1370        self.application_type_versions_cleanup_policy = kwargs.get('application_type_versions_cleanup_policy', None)
1371        self.vm_image = kwargs.get('vm_image', None)
1372
1373
1374class ClusterCodeVersionsListResult(msrest.serialization.Model):
1375    """The list results of the Service Fabric runtime versions.
1376
1377    :param value:
1378    :type value: list[~azure.mgmt.servicefabric.models.ClusterCodeVersionsResult]
1379    :param next_link: The URL to use for getting the next set of results.
1380    :type next_link: str
1381    """
1382
1383    _attribute_map = {
1384        'value': {'key': 'value', 'type': '[ClusterCodeVersionsResult]'},
1385        'next_link': {'key': 'nextLink', 'type': 'str'},
1386    }
1387
1388    def __init__(
1389        self,
1390        **kwargs
1391    ):
1392        super(ClusterCodeVersionsListResult, self).__init__(**kwargs)
1393        self.value = kwargs.get('value', None)
1394        self.next_link = kwargs.get('next_link', None)
1395
1396
1397class ClusterCodeVersionsResult(msrest.serialization.Model):
1398    """The result of the Service Fabric runtime versions.
1399
1400    :param id: The identification of the result.
1401    :type id: str
1402    :param name: The name of the result.
1403    :type name: str
1404    :param type: The result resource type.
1405    :type type: str
1406    :param code_version: The Service Fabric runtime version of the cluster.
1407    :type code_version: str
1408    :param support_expiry_utc: The date of expiry of support of the version.
1409    :type support_expiry_utc: str
1410    :param environment: Indicates if this version is for Windows or Linux operating system.
1411     Possible values include: "Windows", "Linux".
1412    :type environment: str or ~azure.mgmt.servicefabric.models.ClusterEnvironment
1413    """
1414
1415    _attribute_map = {
1416        'id': {'key': 'id', 'type': 'str'},
1417        'name': {'key': 'name', 'type': 'str'},
1418        'type': {'key': 'type', 'type': 'str'},
1419        'code_version': {'key': 'properties.codeVersion', 'type': 'str'},
1420        'support_expiry_utc': {'key': 'properties.supportExpiryUtc', 'type': 'str'},
1421        'environment': {'key': 'properties.environment', 'type': 'str'},
1422    }
1423
1424    def __init__(
1425        self,
1426        **kwargs
1427    ):
1428        super(ClusterCodeVersionsResult, self).__init__(**kwargs)
1429        self.id = kwargs.get('id', None)
1430        self.name = kwargs.get('name', None)
1431        self.type = kwargs.get('type', None)
1432        self.code_version = kwargs.get('code_version', None)
1433        self.support_expiry_utc = kwargs.get('support_expiry_utc', None)
1434        self.environment = kwargs.get('environment', None)
1435
1436
1437class ClusterHealthPolicy(msrest.serialization.Model):
1438    """Defines a health policy used to evaluate the health of the cluster or of a cluster node.
1439
1440    :param max_percent_unhealthy_nodes: The maximum allowed percentage of unhealthy nodes before
1441     reporting an error. For example, to allow 10% of nodes to be unhealthy, this value would be 10.
1442
1443     The percentage represents the maximum tolerated percentage of nodes that can be unhealthy
1444     before the cluster is considered in error.
1445     If the percentage is respected but there is at least one unhealthy node, the health is
1446     evaluated as Warning.
1447     The percentage is calculated by dividing the number of unhealthy nodes over the total number
1448     of nodes in the cluster.
1449     The computation rounds up to tolerate one failure on small numbers of nodes. Default
1450     percentage is zero.
1451
1452     In large clusters, some nodes will always be down or out for repairs, so this percentage
1453     should be configured to tolerate that.
1454    :type max_percent_unhealthy_nodes: int
1455    :param max_percent_unhealthy_applications: The maximum allowed percentage of unhealthy
1456     applications before reporting an error. For example, to allow 10% of applications to be
1457     unhealthy, this value would be 10.
1458
1459     The percentage represents the maximum tolerated percentage of applications that can be
1460     unhealthy before the cluster is considered in error.
1461     If the percentage is respected but there is at least one unhealthy application, the health is
1462     evaluated as Warning.
1463     This is calculated by dividing the number of unhealthy applications over the total number of
1464     application instances in the cluster, excluding applications of application types that are
1465     included in the ApplicationTypeHealthPolicyMap.
1466     The computation rounds up to tolerate one failure on small numbers of applications. Default
1467     percentage is zero.
1468    :type max_percent_unhealthy_applications: int
1469    :param application_health_policies: Defines the application health policy map used to evaluate
1470     the health of an application or one of its children entities.
1471    :type application_health_policies: dict[str,
1472     ~azure.mgmt.servicefabric.models.ApplicationHealthPolicy]
1473    """
1474
1475    _validation = {
1476        'max_percent_unhealthy_nodes': {'maximum': 100, 'minimum': 0},
1477        'max_percent_unhealthy_applications': {'maximum': 100, 'minimum': 0},
1478    }
1479
1480    _attribute_map = {
1481        'max_percent_unhealthy_nodes': {'key': 'maxPercentUnhealthyNodes', 'type': 'int'},
1482        'max_percent_unhealthy_applications': {'key': 'maxPercentUnhealthyApplications', 'type': 'int'},
1483        'application_health_policies': {'key': 'applicationHealthPolicies', 'type': '{ApplicationHealthPolicy}'},
1484    }
1485
1486    def __init__(
1487        self,
1488        **kwargs
1489    ):
1490        super(ClusterHealthPolicy, self).__init__(**kwargs)
1491        self.max_percent_unhealthy_nodes = kwargs.get('max_percent_unhealthy_nodes', 0)
1492        self.max_percent_unhealthy_applications = kwargs.get('max_percent_unhealthy_applications', 0)
1493        self.application_health_policies = kwargs.get('application_health_policies', None)
1494
1495
1496class ClusterListResult(msrest.serialization.Model):
1497    """Cluster list results.
1498
1499    :param value:
1500    :type value: list[~azure.mgmt.servicefabric.models.Cluster]
1501    :param next_link: The URL to use for getting the next set of results.
1502    :type next_link: str
1503    """
1504
1505    _attribute_map = {
1506        'value': {'key': 'value', 'type': '[Cluster]'},
1507        'next_link': {'key': 'nextLink', 'type': 'str'},
1508    }
1509
1510    def __init__(
1511        self,
1512        **kwargs
1513    ):
1514        super(ClusterListResult, self).__init__(**kwargs)
1515        self.value = kwargs.get('value', None)
1516        self.next_link = kwargs.get('next_link', None)
1517
1518
1519class ClusterUpdateParameters(msrest.serialization.Model):
1520    """Cluster update request.
1521
1522    :param tags: A set of tags. Cluster update parameters.
1523    :type tags: dict[str, str]
1524    :param add_on_features: The list of add-on features to enable in the cluster.
1525    :type add_on_features: list[str or ~azure.mgmt.servicefabric.models.AddOnFeatures]
1526    :param certificate: The certificate to use for securing the cluster. The certificate provided
1527     will be used for  node to node security within the cluster, SSL certificate for cluster
1528     management endpoint and default  admin client.
1529    :type certificate: ~azure.mgmt.servicefabric.models.CertificateDescription
1530    :param certificate_common_names: Describes a list of server certificates referenced by common
1531     name that are used to secure the cluster.
1532    :type certificate_common_names: ~azure.mgmt.servicefabric.models.ServerCertificateCommonNames
1533    :param client_certificate_common_names: The list of client certificates referenced by common
1534     name that are allowed to manage the cluster. This will overwrite the existing list.
1535    :type client_certificate_common_names:
1536     list[~azure.mgmt.servicefabric.models.ClientCertificateCommonName]
1537    :param client_certificate_thumbprints: The list of client certificates referenced by thumbprint
1538     that are allowed to manage the cluster. This will overwrite the existing list.
1539    :type client_certificate_thumbprints:
1540     list[~azure.mgmt.servicefabric.models.ClientCertificateThumbprint]
1541    :param cluster_code_version: The Service Fabric runtime version of the cluster. This property
1542     can only by set the user when **upgradeMode** is set to 'Manual'. To get list of available
1543     Service Fabric versions for new clusters use `ClusterVersion API <./ClusterVersion.md>`_. To
1544     get the list of available version for existing clusters use **availableClusterVersions**.
1545    :type cluster_code_version: str
1546    :param event_store_service_enabled: Indicates if the event store service is enabled.
1547    :type event_store_service_enabled: bool
1548    :param fabric_settings: The list of custom fabric settings to configure the cluster. This will
1549     overwrite the existing list.
1550    :type fabric_settings: list[~azure.mgmt.servicefabric.models.SettingsSectionDescription]
1551    :param node_types: The list of node types in the cluster. This will overwrite the existing
1552     list.
1553    :type node_types: list[~azure.mgmt.servicefabric.models.NodeTypeDescription]
1554    :param reliability_level: The reliability level sets the replica set size of system services.
1555     Learn about `ReliabilityLevel
1556     <https://docs.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity>`_.
1557
1558
1559     * None - Run the System services with a target replica set count of 1. This should only be
1560     used for test clusters.
1561     * Bronze - Run the System services with a target replica set count of 3. This should only be
1562     used for test clusters.
1563     * Silver - Run the System services with a target replica set count of 5.
1564     * Gold - Run the System services with a target replica set count of 7.
1565     * Platinum - Run the System services with a target replica set count of 9. Possible values
1566     include: "None", "Bronze", "Silver", "Gold", "Platinum".
1567    :type reliability_level: str or ~azure.mgmt.servicefabric.models.ReliabilityLevel
1568    :param reverse_proxy_certificate: The server certificate used by reverse proxy.
1569    :type reverse_proxy_certificate: ~azure.mgmt.servicefabric.models.CertificateDescription
1570    :param upgrade_description: The policy to use when upgrading the cluster.
1571    :type upgrade_description: ~azure.mgmt.servicefabric.models.ClusterUpgradePolicy
1572    :param upgrade_mode: The upgrade mode of the cluster when new Service Fabric runtime version is
1573     available.
1574
1575
1576     * Automatic - The cluster will be automatically upgraded to the latest Service Fabric runtime
1577     version as soon as it is available.
1578     * Manual - The cluster will not be automatically upgraded to the latest Service Fabric runtime
1579     version. The cluster is upgraded by setting the **clusterCodeVersion** property in the cluster
1580     resource. Possible values include: "Automatic", "Manual".
1581    :type upgrade_mode: str or ~azure.mgmt.servicefabric.models.UpgradeMode
1582    :param application_type_versions_cleanup_policy: The policy used to clean up unused versions.
1583    :type application_type_versions_cleanup_policy:
1584     ~azure.mgmt.servicefabric.models.ApplicationTypeVersionsCleanupPolicy
1585    """
1586
1587    _attribute_map = {
1588        'tags': {'key': 'tags', 'type': '{str}'},
1589        'add_on_features': {'key': 'properties.addOnFeatures', 'type': '[str]'},
1590        'certificate': {'key': 'properties.certificate', 'type': 'CertificateDescription'},
1591        'certificate_common_names': {'key': 'properties.certificateCommonNames', 'type': 'ServerCertificateCommonNames'},
1592        'client_certificate_common_names': {'key': 'properties.clientCertificateCommonNames', 'type': '[ClientCertificateCommonName]'},
1593        'client_certificate_thumbprints': {'key': 'properties.clientCertificateThumbprints', 'type': '[ClientCertificateThumbprint]'},
1594        'cluster_code_version': {'key': 'properties.clusterCodeVersion', 'type': 'str'},
1595        'event_store_service_enabled': {'key': 'properties.eventStoreServiceEnabled', 'type': 'bool'},
1596        'fabric_settings': {'key': 'properties.fabricSettings', 'type': '[SettingsSectionDescription]'},
1597        'node_types': {'key': 'properties.nodeTypes', 'type': '[NodeTypeDescription]'},
1598        'reliability_level': {'key': 'properties.reliabilityLevel', 'type': 'str'},
1599        'reverse_proxy_certificate': {'key': 'properties.reverseProxyCertificate', 'type': 'CertificateDescription'},
1600        'upgrade_description': {'key': 'properties.upgradeDescription', 'type': 'ClusterUpgradePolicy'},
1601        'upgrade_mode': {'key': 'properties.upgradeMode', 'type': 'str'},
1602        'application_type_versions_cleanup_policy': {'key': 'properties.applicationTypeVersionsCleanupPolicy', 'type': 'ApplicationTypeVersionsCleanupPolicy'},
1603    }
1604
1605    def __init__(
1606        self,
1607        **kwargs
1608    ):
1609        super(ClusterUpdateParameters, self).__init__(**kwargs)
1610        self.tags = kwargs.get('tags', None)
1611        self.add_on_features = kwargs.get('add_on_features', None)
1612        self.certificate = kwargs.get('certificate', None)
1613        self.certificate_common_names = kwargs.get('certificate_common_names', None)
1614        self.client_certificate_common_names = kwargs.get('client_certificate_common_names', None)
1615        self.client_certificate_thumbprints = kwargs.get('client_certificate_thumbprints', None)
1616        self.cluster_code_version = kwargs.get('cluster_code_version', None)
1617        self.event_store_service_enabled = kwargs.get('event_store_service_enabled', None)
1618        self.fabric_settings = kwargs.get('fabric_settings', None)
1619        self.node_types = kwargs.get('node_types', None)
1620        self.reliability_level = kwargs.get('reliability_level', None)
1621        self.reverse_proxy_certificate = kwargs.get('reverse_proxy_certificate', None)
1622        self.upgrade_description = kwargs.get('upgrade_description', None)
1623        self.upgrade_mode = kwargs.get('upgrade_mode', None)
1624        self.application_type_versions_cleanup_policy = kwargs.get('application_type_versions_cleanup_policy', None)
1625
1626
1627class ClusterUpgradeDeltaHealthPolicy(msrest.serialization.Model):
1628    """Describes the delta health policies for the cluster upgrade.
1629
1630    All required parameters must be populated in order to send to Azure.
1631
1632    :param max_percent_delta_unhealthy_nodes: Required. The maximum allowed percentage of nodes
1633     health degradation allowed during cluster upgrades.
1634     The delta is measured between the state of the nodes at the beginning of upgrade and the state
1635     of the nodes at the time of the health evaluation.
1636     The check is performed after every upgrade domain upgrade completion to make sure the global
1637     state of the cluster is within tolerated limits.
1638    :type max_percent_delta_unhealthy_nodes: int
1639    :param max_percent_upgrade_domain_delta_unhealthy_nodes: Required. The maximum allowed
1640     percentage of upgrade domain nodes health degradation allowed during cluster upgrades.
1641     The delta is measured between the state of the upgrade domain nodes at the beginning of
1642     upgrade and the state of the upgrade domain nodes at the time of the health evaluation.
1643     The check is performed after every upgrade domain upgrade completion for all completed upgrade
1644     domains to make sure the state of the upgrade domains is within tolerated limits.
1645    :type max_percent_upgrade_domain_delta_unhealthy_nodes: int
1646    :param max_percent_delta_unhealthy_applications: Required. The maximum allowed percentage of
1647     applications health degradation allowed during cluster upgrades.
1648     The delta is measured between the state of the applications at the beginning of upgrade and
1649     the state of the applications at the time of the health evaluation.
1650     The check is performed after every upgrade domain upgrade completion to make sure the global
1651     state of the cluster is within tolerated limits. System services are not included in this.
1652    :type max_percent_delta_unhealthy_applications: int
1653    :param application_delta_health_policies: Defines the application delta health policy map used
1654     to evaluate the health of an application or one of its child entities when upgrading the
1655     cluster.
1656    :type application_delta_health_policies: dict[str,
1657     ~azure.mgmt.servicefabric.models.ApplicationDeltaHealthPolicy]
1658    """
1659
1660    _validation = {
1661        'max_percent_delta_unhealthy_nodes': {'required': True, 'maximum': 100, 'minimum': 0},
1662        'max_percent_upgrade_domain_delta_unhealthy_nodes': {'required': True, 'maximum': 100, 'minimum': 0},
1663        'max_percent_delta_unhealthy_applications': {'required': True, 'maximum': 100, 'minimum': 0},
1664    }
1665
1666    _attribute_map = {
1667        'max_percent_delta_unhealthy_nodes': {'key': 'maxPercentDeltaUnhealthyNodes', 'type': 'int'},
1668        'max_percent_upgrade_domain_delta_unhealthy_nodes': {'key': 'maxPercentUpgradeDomainDeltaUnhealthyNodes', 'type': 'int'},
1669        'max_percent_delta_unhealthy_applications': {'key': 'maxPercentDeltaUnhealthyApplications', 'type': 'int'},
1670        'application_delta_health_policies': {'key': 'applicationDeltaHealthPolicies', 'type': '{ApplicationDeltaHealthPolicy}'},
1671    }
1672
1673    def __init__(
1674        self,
1675        **kwargs
1676    ):
1677        super(ClusterUpgradeDeltaHealthPolicy, self).__init__(**kwargs)
1678        self.max_percent_delta_unhealthy_nodes = kwargs['max_percent_delta_unhealthy_nodes']
1679        self.max_percent_upgrade_domain_delta_unhealthy_nodes = kwargs['max_percent_upgrade_domain_delta_unhealthy_nodes']
1680        self.max_percent_delta_unhealthy_applications = kwargs['max_percent_delta_unhealthy_applications']
1681        self.application_delta_health_policies = kwargs.get('application_delta_health_policies', None)
1682
1683
1684class ClusterUpgradePolicy(msrest.serialization.Model):
1685    """Describes the policy used when upgrading the cluster.
1686
1687    All required parameters must be populated in order to send to Azure.
1688
1689    :param force_restart: If true, then processes are forcefully restarted during upgrade even when
1690     the code version has not changed (the upgrade only changes configuration or data).
1691    :type force_restart: bool
1692    :param upgrade_replica_set_check_timeout: Required. The maximum amount of time to block
1693     processing of an upgrade domain and prevent loss of availability when there are unexpected
1694     issues. When this timeout expires, processing of the upgrade domain will proceed regardless of
1695     availability loss issues. The timeout is reset at the start of each upgrade domain. The timeout
1696     can be in either hh:mm:ss or in d.hh:mm:ss.ms format.
1697    :type upgrade_replica_set_check_timeout: str
1698    :param health_check_wait_duration: Required. The length of time to wait after completing an
1699     upgrade domain before performing health checks. The duration can be in either hh:mm:ss or in
1700     d.hh:mm:ss.ms format.
1701    :type health_check_wait_duration: str
1702    :param health_check_stable_duration: Required. The amount of time that the application or
1703     cluster must remain healthy before the upgrade proceeds to the next upgrade domain. The
1704     duration can be in either hh:mm:ss or in d.hh:mm:ss.ms format.
1705    :type health_check_stable_duration: str
1706    :param health_check_retry_timeout: Required. The amount of time to retry health evaluation when
1707     the application or cluster is unhealthy before the upgrade rolls back. The timeout can be in
1708     either hh:mm:ss or in d.hh:mm:ss.ms format.
1709    :type health_check_retry_timeout: str
1710    :param upgrade_timeout: Required. The amount of time the overall upgrade has to complete before
1711     the upgrade rolls back. The timeout can be in either hh:mm:ss or in d.hh:mm:ss.ms format.
1712    :type upgrade_timeout: str
1713    :param upgrade_domain_timeout: Required. The amount of time each upgrade domain has to complete
1714     before the upgrade rolls back. The timeout can be in either hh:mm:ss or in d.hh:mm:ss.ms
1715     format.
1716    :type upgrade_domain_timeout: str
1717    :param health_policy: Required. The cluster health policy used when upgrading the cluster.
1718    :type health_policy: ~azure.mgmt.servicefabric.models.ClusterHealthPolicy
1719    :param delta_health_policy: The cluster delta health policy used when upgrading the cluster.
1720    :type delta_health_policy: ~azure.mgmt.servicefabric.models.ClusterUpgradeDeltaHealthPolicy
1721    """
1722
1723    _validation = {
1724        'upgrade_replica_set_check_timeout': {'required': True},
1725        'health_check_wait_duration': {'required': True},
1726        'health_check_stable_duration': {'required': True},
1727        'health_check_retry_timeout': {'required': True},
1728        'upgrade_timeout': {'required': True},
1729        'upgrade_domain_timeout': {'required': True},
1730        'health_policy': {'required': True},
1731    }
1732
1733    _attribute_map = {
1734        'force_restart': {'key': 'forceRestart', 'type': 'bool'},
1735        'upgrade_replica_set_check_timeout': {'key': 'upgradeReplicaSetCheckTimeout', 'type': 'str'},
1736        'health_check_wait_duration': {'key': 'healthCheckWaitDuration', 'type': 'str'},
1737        'health_check_stable_duration': {'key': 'healthCheckStableDuration', 'type': 'str'},
1738        'health_check_retry_timeout': {'key': 'healthCheckRetryTimeout', 'type': 'str'},
1739        'upgrade_timeout': {'key': 'upgradeTimeout', 'type': 'str'},
1740        'upgrade_domain_timeout': {'key': 'upgradeDomainTimeout', 'type': 'str'},
1741        'health_policy': {'key': 'healthPolicy', 'type': 'ClusterHealthPolicy'},
1742        'delta_health_policy': {'key': 'deltaHealthPolicy', 'type': 'ClusterUpgradeDeltaHealthPolicy'},
1743    }
1744
1745    def __init__(
1746        self,
1747        **kwargs
1748    ):
1749        super(ClusterUpgradePolicy, self).__init__(**kwargs)
1750        self.force_restart = kwargs.get('force_restart', None)
1751        self.upgrade_replica_set_check_timeout = kwargs['upgrade_replica_set_check_timeout']
1752        self.health_check_wait_duration = kwargs['health_check_wait_duration']
1753        self.health_check_stable_duration = kwargs['health_check_stable_duration']
1754        self.health_check_retry_timeout = kwargs['health_check_retry_timeout']
1755        self.upgrade_timeout = kwargs['upgrade_timeout']
1756        self.upgrade_domain_timeout = kwargs['upgrade_domain_timeout']
1757        self.health_policy = kwargs['health_policy']
1758        self.delta_health_policy = kwargs.get('delta_health_policy', None)
1759
1760
1761class ClusterVersionDetails(msrest.serialization.Model):
1762    """The detail of the Service Fabric runtime version result.
1763
1764    :param code_version: The Service Fabric runtime version of the cluster.
1765    :type code_version: str
1766    :param support_expiry_utc: The date of expiry of support of the version.
1767    :type support_expiry_utc: str
1768    :param environment: Indicates if this version is for Windows or Linux operating system.
1769     Possible values include: "Windows", "Linux".
1770    :type environment: str or ~azure.mgmt.servicefabric.models.ClusterEnvironment
1771    """
1772
1773    _attribute_map = {
1774        'code_version': {'key': 'codeVersion', 'type': 'str'},
1775        'support_expiry_utc': {'key': 'supportExpiryUtc', 'type': 'str'},
1776        'environment': {'key': 'environment', 'type': 'str'},
1777    }
1778
1779    def __init__(
1780        self,
1781        **kwargs
1782    ):
1783        super(ClusterVersionDetails, self).__init__(**kwargs)
1784        self.code_version = kwargs.get('code_version', None)
1785        self.support_expiry_utc = kwargs.get('support_expiry_utc', None)
1786        self.environment = kwargs.get('environment', None)
1787
1788
1789class DiagnosticsStorageAccountConfig(msrest.serialization.Model):
1790    """The storage account information for storing Service Fabric diagnostic logs.
1791
1792    All required parameters must be populated in order to send to Azure.
1793
1794    :param storage_account_name: Required. The Azure storage account name.
1795    :type storage_account_name: str
1796    :param protected_account_key_name: Required. The protected diagnostics storage key name.
1797    :type protected_account_key_name: str
1798    :param protected_account_key_name2: The secondary protected diagnostics storage key name. If
1799     one of the storage account keys is rotated the cluster will fallback to using the other.
1800    :type protected_account_key_name2: str
1801    :param blob_endpoint: Required. The blob endpoint of the azure storage account.
1802    :type blob_endpoint: str
1803    :param queue_endpoint: Required. The queue endpoint of the azure storage account.
1804    :type queue_endpoint: str
1805    :param table_endpoint: Required. The table endpoint of the azure storage account.
1806    :type table_endpoint: str
1807    """
1808
1809    _validation = {
1810        'storage_account_name': {'required': True},
1811        'protected_account_key_name': {'required': True},
1812        'blob_endpoint': {'required': True},
1813        'queue_endpoint': {'required': True},
1814        'table_endpoint': {'required': True},
1815    }
1816
1817    _attribute_map = {
1818        'storage_account_name': {'key': 'storageAccountName', 'type': 'str'},
1819        'protected_account_key_name': {'key': 'protectedAccountKeyName', 'type': 'str'},
1820        'protected_account_key_name2': {'key': 'protectedAccountKeyName2', 'type': 'str'},
1821        'blob_endpoint': {'key': 'blobEndpoint', 'type': 'str'},
1822        'queue_endpoint': {'key': 'queueEndpoint', 'type': 'str'},
1823        'table_endpoint': {'key': 'tableEndpoint', 'type': 'str'},
1824    }
1825
1826    def __init__(
1827        self,
1828        **kwargs
1829    ):
1830        super(DiagnosticsStorageAccountConfig, self).__init__(**kwargs)
1831        self.storage_account_name = kwargs['storage_account_name']
1832        self.protected_account_key_name = kwargs['protected_account_key_name']
1833        self.protected_account_key_name2 = kwargs.get('protected_account_key_name2', None)
1834        self.blob_endpoint = kwargs['blob_endpoint']
1835        self.queue_endpoint = kwargs['queue_endpoint']
1836        self.table_endpoint = kwargs['table_endpoint']
1837
1838
1839class EndpointRangeDescription(msrest.serialization.Model):
1840    """Port range details.
1841
1842    All required parameters must be populated in order to send to Azure.
1843
1844    :param start_port: Required. Starting port of a range of ports.
1845    :type start_port: int
1846    :param end_port: Required. End port of a range of ports.
1847    :type end_port: int
1848    """
1849
1850    _validation = {
1851        'start_port': {'required': True},
1852        'end_port': {'required': True},
1853    }
1854
1855    _attribute_map = {
1856        'start_port': {'key': 'startPort', 'type': 'int'},
1857        'end_port': {'key': 'endPort', 'type': 'int'},
1858    }
1859
1860    def __init__(
1861        self,
1862        **kwargs
1863    ):
1864        super(EndpointRangeDescription, self).__init__(**kwargs)
1865        self.start_port = kwargs['start_port']
1866        self.end_port = kwargs['end_port']
1867
1868
1869class ErrorModel(msrest.serialization.Model):
1870    """The structure of the error.
1871
1872    :param error: The error details.
1873    :type error: ~azure.mgmt.servicefabric.models.ErrorModelError
1874    """
1875
1876    _attribute_map = {
1877        'error': {'key': 'error', 'type': 'ErrorModelError'},
1878    }
1879
1880    def __init__(
1881        self,
1882        **kwargs
1883    ):
1884        super(ErrorModel, self).__init__(**kwargs)
1885        self.error = kwargs.get('error', None)
1886
1887
1888class ErrorModelError(msrest.serialization.Model):
1889    """The error details.
1890
1891    :param code: The error code.
1892    :type code: str
1893    :param message: The error message.
1894    :type message: str
1895    """
1896
1897    _attribute_map = {
1898        'code': {'key': 'code', 'type': 'str'},
1899        'message': {'key': 'message', 'type': 'str'},
1900    }
1901
1902    def __init__(
1903        self,
1904        **kwargs
1905    ):
1906        super(ErrorModelError, self).__init__(**kwargs)
1907        self.code = kwargs.get('code', None)
1908        self.message = kwargs.get('message', None)
1909
1910
1911class LoadBalancingRule(msrest.serialization.Model):
1912    """Describes a load balancing rule.
1913
1914    All required parameters must be populated in order to send to Azure.
1915
1916    :param frontend_port: Required. The port for the external endpoint. Port numbers for each rule
1917     must be unique within the Load Balancer. Acceptable values are between 1 and 65534.
1918    :type frontend_port: int
1919    :param backend_port: Required. The port used for internal connections on the endpoint.
1920     Acceptable values are between 1 and 65535.
1921    :type backend_port: int
1922    :param protocol: Required. The reference to the transport protocol used by the load balancing
1923     rule. Possible values include: "tcp", "udp".
1924    :type protocol: str or ~azure.mgmt.servicefabric.models.Protocol
1925    :param probe_protocol: Required. the reference to the load balancer probe used by the load
1926     balancing rule. Possible values include: "tcp", "http", "https".
1927    :type probe_protocol: str or ~azure.mgmt.servicefabric.models.ProbeProtocol
1928    :param probe_request_path: The probe request path. Only supported for HTTP/HTTPS probes.
1929    :type probe_request_path: str
1930    """
1931
1932    _validation = {
1933        'frontend_port': {'required': True, 'maximum': 65534, 'minimum': 1},
1934        'backend_port': {'required': True, 'maximum': 65534, 'minimum': 1},
1935        'protocol': {'required': True},
1936        'probe_protocol': {'required': True},
1937    }
1938
1939    _attribute_map = {
1940        'frontend_port': {'key': 'frontendPort', 'type': 'int'},
1941        'backend_port': {'key': 'backendPort', 'type': 'int'},
1942        'protocol': {'key': 'protocol', 'type': 'str'},
1943        'probe_protocol': {'key': 'probeProtocol', 'type': 'str'},
1944        'probe_request_path': {'key': 'probeRequestPath', 'type': 'str'},
1945    }
1946
1947    def __init__(
1948        self,
1949        **kwargs
1950    ):
1951        super(LoadBalancingRule, self).__init__(**kwargs)
1952        self.frontend_port = kwargs['frontend_port']
1953        self.backend_port = kwargs['backend_port']
1954        self.protocol = kwargs['protocol']
1955        self.probe_protocol = kwargs['probe_protocol']
1956        self.probe_request_path = kwargs.get('probe_request_path', None)
1957
1958
1959class ManagedCluster(Resource):
1960    """The manged cluster resource.
1961
1962    Variables are only populated by the server, and will be ignored when sending a request.
1963
1964    All required parameters must be populated in order to send to Azure.
1965
1966    :ivar id: Azure resource identifier.
1967    :vartype id: str
1968    :ivar name: Azure resource name.
1969    :vartype name: str
1970    :ivar type: Azure resource type.
1971    :vartype type: str
1972    :param location: Required. Azure resource location.
1973    :type location: str
1974    :param tags: A set of tags. Azure resource tags.
1975    :type tags: dict[str, str]
1976    :ivar etag: Azure resource etag.
1977    :vartype etag: str
1978    :param sku: The sku of the managed cluster.
1979    :type sku: ~azure.mgmt.servicefabric.models.Sku
1980    :param dns_name: The cluster dns name.
1981    :type dns_name: str
1982    :ivar fqdn: the cluster Fully qualified domain name.
1983    :vartype fqdn: str
1984    :ivar cluster_id: A service generated unique identifier for the cluster resource.
1985    :vartype cluster_id: str
1986    :ivar cluster_state: The current state of the cluster. Possible values include:
1987     "WaitingForNodes", "Deploying", "BaselineUpgrade", "UpdatingUserConfiguration",
1988     "UpdatingUserCertificate", "UpdatingInfrastructure", "EnforcingClusterVersion",
1989     "UpgradeServiceUnreachable", "AutoScale", "Ready".
1990    :vartype cluster_state: str or ~azure.mgmt.servicefabric.models.ClusterState
1991    :ivar cluster_certificate_thumbprint: The cluster certificate thumbprint used node to node
1992     communication.
1993    :vartype cluster_certificate_thumbprint: str
1994    :param client_connection_port: The port used for client connections to the cluster.
1995    :type client_connection_port: int
1996    :param http_gateway_connection_port: The port used for http connections to the cluster.
1997    :type http_gateway_connection_port: int
1998    :param admin_user_name: vm admin user name.
1999    :type admin_user_name: str
2000    :param admin_password: vm admin user password.
2001    :type admin_password: str
2002    :param load_balancing_rules: Describes load balancing rules.
2003    :type load_balancing_rules: list[~azure.mgmt.servicefabric.models.LoadBalancingRule]
2004    :param clients: client certificates for the cluster.
2005    :type clients: list[~azure.mgmt.servicefabric.models.ClientCertificate]
2006    :param azure_active_directory: Azure active directory.
2007    :type azure_active_directory: ~azure.mgmt.servicefabric.models.AzureActiveDirectory
2008    :param fabric_settings: The list of custom fabric settings to configure the cluster.
2009    :type fabric_settings: list[~azure.mgmt.servicefabric.models.SettingsSectionDescription]
2010    :ivar provisioning_state: The provisioning state of the managed cluster resource. Possible
2011     values include: "None", "Creating", "Created", "Updating", "Succeeded", "Failed", "Canceled",
2012     "Deleting", "Deleted", "Other".
2013    :vartype provisioning_state: str or
2014     ~azure.mgmt.servicefabric.models.ManagedResourceProvisioningState
2015    :param cluster_code_version: The Service Fabric runtime version of the cluster. This property
2016     can only by set the user when **upgradeMode** is set to 'Manual'. To get list of available
2017     Service Fabric versions for new clusters use `ClusterVersion API <./ClusterVersion.md>`_. To
2018     get the list of available version for existing clusters use **availableClusterVersions**.
2019    :type cluster_code_version: str
2020    :param addon_features: client certificates for the cluster.
2021    :type addon_features: list[str or ~azure.mgmt.servicefabric.models.ManagedClusterAddOnFeature]
2022    """
2023
2024    _validation = {
2025        'id': {'readonly': True},
2026        'name': {'readonly': True},
2027        'type': {'readonly': True},
2028        'location': {'required': True},
2029        'etag': {'readonly': True},
2030        'fqdn': {'readonly': True},
2031        'cluster_id': {'readonly': True},
2032        'cluster_state': {'readonly': True},
2033        'cluster_certificate_thumbprint': {'readonly': True},
2034        'provisioning_state': {'readonly': True},
2035    }
2036
2037    _attribute_map = {
2038        'id': {'key': 'id', 'type': 'str'},
2039        'name': {'key': 'name', 'type': 'str'},
2040        'type': {'key': 'type', 'type': 'str'},
2041        'location': {'key': 'location', 'type': 'str'},
2042        'tags': {'key': 'tags', 'type': '{str}'},
2043        'etag': {'key': 'etag', 'type': 'str'},
2044        'sku': {'key': 'sku', 'type': 'Sku'},
2045        'dns_name': {'key': 'properties.dnsName', 'type': 'str'},
2046        'fqdn': {'key': 'properties.fqdn', 'type': 'str'},
2047        'cluster_id': {'key': 'properties.clusterId', 'type': 'str'},
2048        'cluster_state': {'key': 'properties.clusterState', 'type': 'str'},
2049        'cluster_certificate_thumbprint': {'key': 'properties.clusterCertificateThumbprint', 'type': 'str'},
2050        'client_connection_port': {'key': 'properties.clientConnectionPort', 'type': 'int'},
2051        'http_gateway_connection_port': {'key': 'properties.httpGatewayConnectionPort', 'type': 'int'},
2052        'admin_user_name': {'key': 'properties.adminUserName', 'type': 'str'},
2053        'admin_password': {'key': 'properties.adminPassword', 'type': 'str'},
2054        'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[LoadBalancingRule]'},
2055        'clients': {'key': 'properties.clients', 'type': '[ClientCertificate]'},
2056        'azure_active_directory': {'key': 'properties.azureActiveDirectory', 'type': 'AzureActiveDirectory'},
2057        'fabric_settings': {'key': 'properties.fabricSettings', 'type': '[SettingsSectionDescription]'},
2058        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2059        'cluster_code_version': {'key': 'properties.clusterCodeVersion', 'type': 'str'},
2060        'addon_features': {'key': 'properties.addonFeatures', 'type': '[str]'},
2061    }
2062
2063    def __init__(
2064        self,
2065        **kwargs
2066    ):
2067        super(ManagedCluster, self).__init__(**kwargs)
2068        self.sku = kwargs.get('sku', None)
2069        self.dns_name = kwargs.get('dns_name', None)
2070        self.fqdn = None
2071        self.cluster_id = None
2072        self.cluster_state = None
2073        self.cluster_certificate_thumbprint = None
2074        self.client_connection_port = kwargs.get('client_connection_port', 19000)
2075        self.http_gateway_connection_port = kwargs.get('http_gateway_connection_port', 19080)
2076        self.admin_user_name = kwargs.get('admin_user_name', None)
2077        self.admin_password = kwargs.get('admin_password', None)
2078        self.load_balancing_rules = kwargs.get('load_balancing_rules', None)
2079        self.clients = kwargs.get('clients', None)
2080        self.azure_active_directory = kwargs.get('azure_active_directory', None)
2081        self.fabric_settings = kwargs.get('fabric_settings', None)
2082        self.provisioning_state = None
2083        self.cluster_code_version = kwargs.get('cluster_code_version', None)
2084        self.addon_features = kwargs.get('addon_features', None)
2085
2086
2087class ManagedClusterListResult(msrest.serialization.Model):
2088    """Managed Cluster list results.
2089
2090    :param value:
2091    :type value: list[~azure.mgmt.servicefabric.models.ManagedCluster]
2092    :param next_link: The URL to use for getting the next set of results.
2093    :type next_link: str
2094    """
2095
2096    _attribute_map = {
2097        'value': {'key': 'value', 'type': '[ManagedCluster]'},
2098        'next_link': {'key': 'nextLink', 'type': 'str'},
2099    }
2100
2101    def __init__(
2102        self,
2103        **kwargs
2104    ):
2105        super(ManagedClusterListResult, self).__init__(**kwargs)
2106        self.value = kwargs.get('value', None)
2107        self.next_link = kwargs.get('next_link', None)
2108
2109
2110class ManagedClusterUpdateParameters(msrest.serialization.Model):
2111    """Managed cluster update request.
2112
2113    :param tags: A set of tags. Managed cluster update parameters.
2114    :type tags: dict[str, str]
2115    :param client_connection_port: The port used for client connections to the cluster.
2116    :type client_connection_port: int
2117    :param http_gateway_connection_port: The port used for http connections to the cluster.
2118    :type http_gateway_connection_port: int
2119    :param load_balancing_rules: Describes load balancing rules.
2120    :type load_balancing_rules: list[~azure.mgmt.servicefabric.models.LoadBalancingRule]
2121    :param clients: client certificates for the cluster.
2122    :type clients: list[~azure.mgmt.servicefabric.models.ClientCertificate]
2123    :param azure_active_directory: Azure active directory.
2124    :type azure_active_directory: ~azure.mgmt.servicefabric.models.AzureActiveDirectory
2125    :param fabric_settings: The list of custom fabric settings to configure the cluster.
2126    :type fabric_settings: list[~azure.mgmt.servicefabric.models.SettingsSectionDescription]
2127    :param cluster_code_version: The Service Fabric runtime version of the cluster. This property
2128     can only by set the user when **upgradeMode** is set to 'Manual'. To get list of available
2129     Service Fabric versions for new clusters use `ClusterVersion API <./ClusterVersion.md>`_. To
2130     get the list of available version for existing clusters use **availableClusterVersions**.
2131    :type cluster_code_version: str
2132    :param addon_features: client certificates for the cluster.
2133    :type addon_features: list[str or ~azure.mgmt.servicefabric.models.ManagedClusterAddOnFeature]
2134    """
2135
2136    _attribute_map = {
2137        'tags': {'key': 'tags', 'type': '{str}'},
2138        'client_connection_port': {'key': 'properties.clientConnectionPort', 'type': 'int'},
2139        'http_gateway_connection_port': {'key': 'properties.httpGatewayConnectionPort', 'type': 'int'},
2140        'load_balancing_rules': {'key': 'properties.loadBalancingRules', 'type': '[LoadBalancingRule]'},
2141        'clients': {'key': 'properties.clients', 'type': '[ClientCertificate]'},
2142        'azure_active_directory': {'key': 'properties.azureActiveDirectory', 'type': 'AzureActiveDirectory'},
2143        'fabric_settings': {'key': 'properties.fabricSettings', 'type': '[SettingsSectionDescription]'},
2144        'cluster_code_version': {'key': 'properties.clusterCodeVersion', 'type': 'str'},
2145        'addon_features': {'key': 'properties.addonFeatures', 'type': '[str]'},
2146    }
2147
2148    def __init__(
2149        self,
2150        **kwargs
2151    ):
2152        super(ManagedClusterUpdateParameters, self).__init__(**kwargs)
2153        self.tags = kwargs.get('tags', None)
2154        self.client_connection_port = kwargs.get('client_connection_port', None)
2155        self.http_gateway_connection_port = kwargs.get('http_gateway_connection_port', None)
2156        self.load_balancing_rules = kwargs.get('load_balancing_rules', None)
2157        self.clients = kwargs.get('clients', None)
2158        self.azure_active_directory = kwargs.get('azure_active_directory', None)
2159        self.fabric_settings = kwargs.get('fabric_settings', None)
2160        self.cluster_code_version = kwargs.get('cluster_code_version', None)
2161        self.addon_features = kwargs.get('addon_features', None)
2162
2163
2164class ManagedClusterVersionDetails(msrest.serialization.Model):
2165    """The detail of the Service Fabric runtime version.
2166
2167    :param msi_version: The Service Fabric runtime version of the cluster.
2168    :type msi_version: str
2169    :param support_expiry_utc: The date of expiry of support of the version.
2170    :type support_expiry_utc: str
2171    :param os_type: Indicates the operating system of the cluster. Possible values include:
2172     "Windows", "Ubuntu", "RedHat", "Ubuntu18_04".
2173    :type os_type: str or ~azure.mgmt.servicefabric.models.ClusterOsType
2174    """
2175
2176    _attribute_map = {
2177        'msi_version': {'key': 'msiVersion', 'type': 'str'},
2178        'support_expiry_utc': {'key': 'supportExpiryUtc', 'type': 'str'},
2179        'os_type': {'key': 'osType', 'type': 'str'},
2180    }
2181
2182    def __init__(
2183        self,
2184        **kwargs
2185    ):
2186        super(ManagedClusterVersionDetails, self).__init__(**kwargs)
2187        self.msi_version = kwargs.get('msi_version', None)
2188        self.support_expiry_utc = kwargs.get('support_expiry_utc', None)
2189        self.os_type = kwargs.get('os_type', None)
2190
2191
2192class ManagedIdentity(msrest.serialization.Model):
2193    """Describes the managed identities for an Azure resource.
2194
2195    Variables are only populated by the server, and will be ignored when sending a request.
2196
2197    :ivar principal_id: The principal id of the managed identity. This property will only be
2198     provided for a system assigned identity.
2199    :vartype principal_id: str
2200    :ivar tenant_id: The tenant id of the managed identity. This property will only be provided for
2201     a system assigned identity.
2202    :vartype tenant_id: str
2203    :param type: The type of managed identity for the resource. Possible values include:
2204     "SystemAssigned", "UserAssigned", "SystemAssigned, UserAssigned", "None".
2205    :type type: str or ~azure.mgmt.servicefabric.models.ManagedIdentityType
2206    :param user_assigned_identities: The list of user identities associated with the resource. The
2207     user identity dictionary key references will be ARM resource ids in the form:
2208    '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
2209    :type user_assigned_identities: dict[str,
2210     ~azure.mgmt.servicefabric.models.UserAssignedIdentity]
2211    """
2212
2213    _validation = {
2214        'principal_id': {'readonly': True},
2215        'tenant_id': {'readonly': True},
2216    }
2217
2218    _attribute_map = {
2219        'principal_id': {'key': 'principalId', 'type': 'str'},
2220        'tenant_id': {'key': 'tenantId', 'type': 'str'},
2221        'type': {'key': 'type', 'type': 'str'},
2222        'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{UserAssignedIdentity}'},
2223    }
2224
2225    def __init__(
2226        self,
2227        **kwargs
2228    ):
2229        super(ManagedIdentity, self).__init__(**kwargs)
2230        self.principal_id = None
2231        self.tenant_id = None
2232        self.type = kwargs.get('type', None)
2233        self.user_assigned_identities = kwargs.get('user_assigned_identities', None)
2234
2235
2236class ManagedProxyResource(msrest.serialization.Model):
2237    """The resource model definition for proxy-only resource.
2238
2239    Variables are only populated by the server, and will be ignored when sending a request.
2240
2241    :ivar id: Azure resource identifier.
2242    :vartype id: str
2243    :ivar name: Azure resource name.
2244    :vartype name: str
2245    :ivar type: Azure resource type.
2246    :vartype type: str
2247    :param tags: A set of tags. Azure resource tags.
2248    :type tags: dict[str, str]
2249    """
2250
2251    _validation = {
2252        'id': {'readonly': True},
2253        'name': {'readonly': True},
2254        'type': {'readonly': True},
2255    }
2256
2257    _attribute_map = {
2258        'id': {'key': 'id', 'type': 'str'},
2259        'name': {'key': 'name', 'type': 'str'},
2260        'type': {'key': 'type', 'type': 'str'},
2261        'tags': {'key': 'tags', 'type': '{str}'},
2262    }
2263
2264    def __init__(
2265        self,
2266        **kwargs
2267    ):
2268        super(ManagedProxyResource, self).__init__(**kwargs)
2269        self.id = None
2270        self.name = None
2271        self.type = None
2272        self.tags = kwargs.get('tags', None)
2273
2274
2275class PartitionSchemeDescription(msrest.serialization.Model):
2276    """Describes how the service is partitioned.
2277
2278    You probably want to use the sub-classes and not this class directly. Known
2279    sub-classes are: NamedPartitionSchemeDescription, SingletonPartitionSchemeDescription, UniformInt64RangePartitionSchemeDescription.
2280
2281    All required parameters must be populated in order to send to Azure.
2282
2283    :param partition_scheme: Required. Specifies how the service is partitioned.Constant filled by
2284     server.  Possible values include: "Invalid", "Singleton", "UniformInt64Range", "Named".
2285    :type partition_scheme: str or ~azure.mgmt.servicefabric.models.PartitionScheme
2286    """
2287
2288    _validation = {
2289        'partition_scheme': {'required': True},
2290    }
2291
2292    _attribute_map = {
2293        'partition_scheme': {'key': 'partitionScheme', 'type': 'str'},
2294    }
2295
2296    _subtype_map = {
2297        'partition_scheme': {'Named': 'NamedPartitionSchemeDescription', 'Singleton': 'SingletonPartitionSchemeDescription', 'UniformInt64Range': 'UniformInt64RangePartitionSchemeDescription'}
2298    }
2299
2300    def __init__(
2301        self,
2302        **kwargs
2303    ):
2304        super(PartitionSchemeDescription, self).__init__(**kwargs)
2305        self.partition_scheme = None  # type: Optional[str]
2306
2307
2308class NamedPartitionSchemeDescription(PartitionSchemeDescription):
2309    """Describes the named partition scheme of the service.
2310
2311    All required parameters must be populated in order to send to Azure.
2312
2313    :param partition_scheme: Required. Specifies how the service is partitioned.Constant filled by
2314     server.  Possible values include: "Invalid", "Singleton", "UniformInt64Range", "Named".
2315    :type partition_scheme: str or ~azure.mgmt.servicefabric.models.PartitionScheme
2316    :param count: Required. The number of partitions.
2317    :type count: int
2318    :param names: Required. Array of size specified by the ‘count’ parameter, for the names of the
2319     partitions.
2320    :type names: list[str]
2321    """
2322
2323    _validation = {
2324        'partition_scheme': {'required': True},
2325        'count': {'required': True},
2326        'names': {'required': True},
2327    }
2328
2329    _attribute_map = {
2330        'partition_scheme': {'key': 'partitionScheme', 'type': 'str'},
2331        'count': {'key': 'count', 'type': 'int'},
2332        'names': {'key': 'names', 'type': '[str]'},
2333    }
2334
2335    def __init__(
2336        self,
2337        **kwargs
2338    ):
2339        super(NamedPartitionSchemeDescription, self).__init__(**kwargs)
2340        self.partition_scheme = 'Named'  # type: str
2341        self.count = kwargs['count']
2342        self.names = kwargs['names']
2343
2344
2345class NodeType(ManagedProxyResource):
2346    """Describes a node type in the cluster, each node type represents sub set of nodes in the cluster.
2347
2348    Variables are only populated by the server, and will be ignored when sending a request.
2349
2350    :ivar id: Azure resource identifier.
2351    :vartype id: str
2352    :ivar name: Azure resource name.
2353    :vartype name: str
2354    :ivar type: Azure resource type.
2355    :vartype type: str
2356    :param tags: A set of tags. Azure resource tags.
2357    :type tags: dict[str, str]
2358    :param is_primary: The node type on which system services will run. Only one node type should
2359     be marked as primary. Primary node type cannot be deleted or changed for existing clusters.
2360    :type is_primary: bool
2361    :param vm_instance_count: The number of nodes in the node type.
2362    :type vm_instance_count: int
2363    :param data_disk_size_gb: Disk size for each vm in the node type in GBs.
2364    :type data_disk_size_gb: int
2365    :param placement_properties: The placement tags applied to nodes in the node type, which can be
2366     used to indicate where certain services (workload) should run.
2367    :type placement_properties: dict[str, str]
2368    :param capacities: The capacity tags applied to the nodes in the node type, the cluster
2369     resource manager uses these tags to understand how much resource a node has.
2370    :type capacities: dict[str, str]
2371    :param application_ports: The range of ports from which cluster assigned port to Service Fabric
2372     applications.
2373    :type application_ports: ~azure.mgmt.servicefabric.models.EndpointRangeDescription
2374    :param ephemeral_ports: The range of ephemeral ports that nodes in this node type should be
2375     configured with.
2376    :type ephemeral_ports: ~azure.mgmt.servicefabric.models.EndpointRangeDescription
2377    :param vm_size: The size of virtual machines in the pool. All virtual machines in a pool are
2378     the same size. For example, Standard_D3.
2379    :type vm_size: str
2380    :param vm_image_publisher: The publisher of the Azure Virtual Machines Marketplace image. For
2381     example, Canonical or MicrosoftWindowsServer.
2382    :type vm_image_publisher: str
2383    :param vm_image_offer: The offer type of the Azure Virtual Machines Marketplace image. For
2384     example, UbuntuServer or WindowsServer.
2385    :type vm_image_offer: str
2386    :param vm_image_sku: The SKU of the Azure Virtual Machines Marketplace image. For example,
2387     14.04.0-LTS or 2012-R2-Datacenter.
2388    :type vm_image_sku: str
2389    :param vm_image_version: The version of the Azure Virtual Machines Marketplace image. A value
2390     of 'latest' can be specified to select the latest version of an image. If omitted, the default
2391     is 'latest'.
2392    :type vm_image_version: str
2393    :param vm_secrets: The secrets to install in the virtual machines.
2394    :type vm_secrets: list[~azure.mgmt.servicefabric.models.VaultSecretGroup]
2395    :param vm_extensions: Set of extensions that should be installed onto the virtual machines.
2396    :type vm_extensions: list[~azure.mgmt.servicefabric.models.VMSSExtension]
2397    :ivar provisioning_state: The provisioning state of the managed cluster resource. Possible
2398     values include: "None", "Creating", "Created", "Updating", "Succeeded", "Failed", "Canceled",
2399     "Deleting", "Deleted", "Other".
2400    :vartype provisioning_state: str or
2401     ~azure.mgmt.servicefabric.models.ManagedResourceProvisioningState
2402    """
2403
2404    _validation = {
2405        'id': {'readonly': True},
2406        'name': {'readonly': True},
2407        'type': {'readonly': True},
2408        'vm_instance_count': {'maximum': 2147483647, 'minimum': 1},
2409        'provisioning_state': {'readonly': True},
2410    }
2411
2412    _attribute_map = {
2413        'id': {'key': 'id', 'type': 'str'},
2414        'name': {'key': 'name', 'type': 'str'},
2415        'type': {'key': 'type', 'type': 'str'},
2416        'tags': {'key': 'tags', 'type': '{str}'},
2417        'is_primary': {'key': 'properties.isPrimary', 'type': 'bool'},
2418        'vm_instance_count': {'key': 'properties.vmInstanceCount', 'type': 'int'},
2419        'data_disk_size_gb': {'key': 'properties.dataDiskSizeGB', 'type': 'int'},
2420        'placement_properties': {'key': 'properties.placementProperties', 'type': '{str}'},
2421        'capacities': {'key': 'properties.capacities', 'type': '{str}'},
2422        'application_ports': {'key': 'properties.applicationPorts', 'type': 'EndpointRangeDescription'},
2423        'ephemeral_ports': {'key': 'properties.ephemeralPorts', 'type': 'EndpointRangeDescription'},
2424        'vm_size': {'key': 'properties.vmSize', 'type': 'str'},
2425        'vm_image_publisher': {'key': 'properties.vmImagePublisher', 'type': 'str'},
2426        'vm_image_offer': {'key': 'properties.vmImageOffer', 'type': 'str'},
2427        'vm_image_sku': {'key': 'properties.vmImageSku', 'type': 'str'},
2428        'vm_image_version': {'key': 'properties.vmImageVersion', 'type': 'str'},
2429        'vm_secrets': {'key': 'properties.vmSecrets', 'type': '[VaultSecretGroup]'},
2430        'vm_extensions': {'key': 'properties.vmExtensions', 'type': '[VMSSExtension]'},
2431        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2432    }
2433
2434    def __init__(
2435        self,
2436        **kwargs
2437    ):
2438        super(NodeType, self).__init__(**kwargs)
2439        self.is_primary = kwargs.get('is_primary', None)
2440        self.vm_instance_count = kwargs.get('vm_instance_count', None)
2441        self.data_disk_size_gb = kwargs.get('data_disk_size_gb', None)
2442        self.placement_properties = kwargs.get('placement_properties', None)
2443        self.capacities = kwargs.get('capacities', None)
2444        self.application_ports = kwargs.get('application_ports', None)
2445        self.ephemeral_ports = kwargs.get('ephemeral_ports', None)
2446        self.vm_size = kwargs.get('vm_size', None)
2447        self.vm_image_publisher = kwargs.get('vm_image_publisher', None)
2448        self.vm_image_offer = kwargs.get('vm_image_offer', None)
2449        self.vm_image_sku = kwargs.get('vm_image_sku', None)
2450        self.vm_image_version = kwargs.get('vm_image_version', None)
2451        self.vm_secrets = kwargs.get('vm_secrets', None)
2452        self.vm_extensions = kwargs.get('vm_extensions', None)
2453        self.provisioning_state = None
2454
2455
2456class NodeTypeActionParameters(msrest.serialization.Model):
2457    """Parameters for Node type action.
2458
2459    All required parameters must be populated in order to send to Azure.
2460
2461    :param nodes: Required. List of node names from the node type.
2462    :type nodes: list[str]
2463    :param force: Force the action to go through.
2464    :type force: bool
2465    """
2466
2467    _validation = {
2468        'nodes': {'required': True},
2469    }
2470
2471    _attribute_map = {
2472        'nodes': {'key': 'nodes', 'type': '[str]'},
2473        'force': {'key': 'force', 'type': 'bool'},
2474    }
2475
2476    def __init__(
2477        self,
2478        **kwargs
2479    ):
2480        super(NodeTypeActionParameters, self).__init__(**kwargs)
2481        self.nodes = kwargs['nodes']
2482        self.force = kwargs.get('force', None)
2483
2484
2485class NodeTypeDescription(msrest.serialization.Model):
2486    """Describes a node type in the cluster, each node type represents sub set of nodes in the cluster.
2487
2488    All required parameters must be populated in order to send to Azure.
2489
2490    :param name: Required. The name of the node type.
2491    :type name: str
2492    :param placement_properties: The placement tags applied to nodes in the node type, which can be
2493     used to indicate where certain services (workload) should run.
2494    :type placement_properties: dict[str, str]
2495    :param capacities: The capacity tags applied to the nodes in the node type, the cluster
2496     resource manager uses these tags to understand how much resource a node has.
2497    :type capacities: dict[str, str]
2498    :param client_connection_endpoint_port: Required. The TCP cluster management endpoint port.
2499    :type client_connection_endpoint_port: int
2500    :param http_gateway_endpoint_port: Required. The HTTP cluster management endpoint port.
2501    :type http_gateway_endpoint_port: int
2502    :param durability_level: The durability level of the node type. Learn about `DurabilityLevel
2503     <https://docs.microsoft.com/azure/service-fabric/service-fabric-cluster-capacity>`_.
2504
2505
2506     * Bronze - No privileges. This is the default.
2507     * Silver - The infrastructure jobs can be paused for a duration of 10 minutes per UD.
2508     * Gold - The infrastructure jobs can be paused for a duration of 2 hours per UD. Gold
2509     durability can be enabled only on full node VM skus like D15_V2, G5 etc. Possible values
2510     include: "Bronze", "Silver", "Gold".
2511    :type durability_level: str or ~azure.mgmt.servicefabric.models.DurabilityLevel
2512    :param application_ports: The range of ports from which cluster assigned port to Service Fabric
2513     applications.
2514    :type application_ports: ~azure.mgmt.servicefabric.models.EndpointRangeDescription
2515    :param ephemeral_ports: The range of ephemeral ports that nodes in this node type should be
2516     configured with.
2517    :type ephemeral_ports: ~azure.mgmt.servicefabric.models.EndpointRangeDescription
2518    :param is_primary: Required. The node type on which system services will run. Only one node
2519     type should be marked as primary. Primary node type cannot be deleted or changed for existing
2520     clusters.
2521    :type is_primary: bool
2522    :param vm_instance_count: Required. The number of nodes in the node type. This count should
2523     match the capacity property in the corresponding VirtualMachineScaleSet resource.
2524    :type vm_instance_count: int
2525    :param reverse_proxy_endpoint_port: The endpoint used by reverse proxy.
2526    :type reverse_proxy_endpoint_port: int
2527    """
2528
2529    _validation = {
2530        'name': {'required': True},
2531        'client_connection_endpoint_port': {'required': True},
2532        'http_gateway_endpoint_port': {'required': True},
2533        'is_primary': {'required': True},
2534        'vm_instance_count': {'required': True, 'maximum': 2147483647, 'minimum': 1},
2535    }
2536
2537    _attribute_map = {
2538        'name': {'key': 'name', 'type': 'str'},
2539        'placement_properties': {'key': 'placementProperties', 'type': '{str}'},
2540        'capacities': {'key': 'capacities', 'type': '{str}'},
2541        'client_connection_endpoint_port': {'key': 'clientConnectionEndpointPort', 'type': 'int'},
2542        'http_gateway_endpoint_port': {'key': 'httpGatewayEndpointPort', 'type': 'int'},
2543        'durability_level': {'key': 'durabilityLevel', 'type': 'str'},
2544        'application_ports': {'key': 'applicationPorts', 'type': 'EndpointRangeDescription'},
2545        'ephemeral_ports': {'key': 'ephemeralPorts', 'type': 'EndpointRangeDescription'},
2546        'is_primary': {'key': 'isPrimary', 'type': 'bool'},
2547        'vm_instance_count': {'key': 'vmInstanceCount', 'type': 'int'},
2548        'reverse_proxy_endpoint_port': {'key': 'reverseProxyEndpointPort', 'type': 'int'},
2549    }
2550
2551    def __init__(
2552        self,
2553        **kwargs
2554    ):
2555        super(NodeTypeDescription, self).__init__(**kwargs)
2556        self.name = kwargs['name']
2557        self.placement_properties = kwargs.get('placement_properties', None)
2558        self.capacities = kwargs.get('capacities', None)
2559        self.client_connection_endpoint_port = kwargs['client_connection_endpoint_port']
2560        self.http_gateway_endpoint_port = kwargs['http_gateway_endpoint_port']
2561        self.durability_level = kwargs.get('durability_level', None)
2562        self.application_ports = kwargs.get('application_ports', None)
2563        self.ephemeral_ports = kwargs.get('ephemeral_ports', None)
2564        self.is_primary = kwargs['is_primary']
2565        self.vm_instance_count = kwargs['vm_instance_count']
2566        self.reverse_proxy_endpoint_port = kwargs.get('reverse_proxy_endpoint_port', None)
2567
2568
2569class NodeTypeListResult(msrest.serialization.Model):
2570    """Node type list results.
2571
2572    :param value: The list of node types.
2573    :type value: list[~azure.mgmt.servicefabric.models.NodeType]
2574    :param next_link: The URL to use for getting the next set of results.
2575    :type next_link: str
2576    """
2577
2578    _attribute_map = {
2579        'value': {'key': 'value', 'type': '[NodeType]'},
2580        'next_link': {'key': 'nextLink', 'type': 'str'},
2581    }
2582
2583    def __init__(
2584        self,
2585        **kwargs
2586    ):
2587        super(NodeTypeListResult, self).__init__(**kwargs)
2588        self.value = kwargs.get('value', None)
2589        self.next_link = kwargs.get('next_link', None)
2590
2591
2592class NodeTypeUpdateParameters(msrest.serialization.Model):
2593    """Node type update request.
2594
2595    :param tags: A set of tags. Node type update parameters.
2596    :type tags: dict[str, str]
2597    :param vm_instance_count: The number of nodes in the node type.
2598    :type vm_instance_count: int
2599    :param placement_properties: The placement tags applied to nodes in the node type, which can be
2600     used to indicate where certain services (workload) should run.
2601    :type placement_properties: dict[str, str]
2602    :param capacities: The capacity tags applied to the nodes in the node type, the cluster
2603     resource manager uses these tags to understand how much resource a node has.
2604    :type capacities: dict[str, str]
2605    :param application_ports: The range of ports from which cluster assigned port to Service Fabric
2606     applications.
2607    :type application_ports: ~azure.mgmt.servicefabric.models.EndpointRangeDescription
2608    :param ephemeral_ports: The range of ephemeral ports that nodes in this node type should be
2609     configured with.
2610    :type ephemeral_ports: ~azure.mgmt.servicefabric.models.EndpointRangeDescription
2611    :param vm_secrets: The secrets to install in the virtual machines.
2612    :type vm_secrets: list[~azure.mgmt.servicefabric.models.VaultSecretGroup]
2613    :param vm_extensions: Set of extensions that should be installed onto the virtual machines.
2614    :type vm_extensions: list[~azure.mgmt.servicefabric.models.VMSSExtension]
2615    """
2616
2617    _validation = {
2618        'vm_instance_count': {'maximum': 2147483647, 'minimum': 1},
2619    }
2620
2621    _attribute_map = {
2622        'tags': {'key': 'tags', 'type': '{str}'},
2623        'vm_instance_count': {'key': 'properties.vmInstanceCount', 'type': 'int'},
2624        'placement_properties': {'key': 'properties.placementProperties', 'type': '{str}'},
2625        'capacities': {'key': 'properties.capacities', 'type': '{str}'},
2626        'application_ports': {'key': 'properties.applicationPorts', 'type': 'EndpointRangeDescription'},
2627        'ephemeral_ports': {'key': 'properties.ephemeralPorts', 'type': 'EndpointRangeDescription'},
2628        'vm_secrets': {'key': 'properties.vmSecrets', 'type': '[VaultSecretGroup]'},
2629        'vm_extensions': {'key': 'properties.vmExtensions', 'type': '[VMSSExtension]'},
2630    }
2631
2632    def __init__(
2633        self,
2634        **kwargs
2635    ):
2636        super(NodeTypeUpdateParameters, self).__init__(**kwargs)
2637        self.tags = kwargs.get('tags', None)
2638        self.vm_instance_count = kwargs.get('vm_instance_count', None)
2639        self.placement_properties = kwargs.get('placement_properties', None)
2640        self.capacities = kwargs.get('capacities', None)
2641        self.application_ports = kwargs.get('application_ports', None)
2642        self.ephemeral_ports = kwargs.get('ephemeral_ports', None)
2643        self.vm_secrets = kwargs.get('vm_secrets', None)
2644        self.vm_extensions = kwargs.get('vm_extensions', None)
2645
2646
2647class OperationListResult(msrest.serialization.Model):
2648    """Describes the result of the request to list Service Fabric resource provider operations.
2649
2650    Variables are only populated by the server, and will be ignored when sending a request.
2651
2652    :param value: List of operations supported by the Service Fabric resource provider.
2653    :type value: list[~azure.mgmt.servicefabric.models.OperationResult]
2654    :ivar next_link: URL to get the next set of operation list results if there are any.
2655    :vartype next_link: str
2656    """
2657
2658    _validation = {
2659        'next_link': {'readonly': True},
2660    }
2661
2662    _attribute_map = {
2663        'value': {'key': 'value', 'type': '[OperationResult]'},
2664        'next_link': {'key': 'nextLink', 'type': 'str'},
2665    }
2666
2667    def __init__(
2668        self,
2669        **kwargs
2670    ):
2671        super(OperationListResult, self).__init__(**kwargs)
2672        self.value = kwargs.get('value', None)
2673        self.next_link = None
2674
2675
2676class OperationResult(msrest.serialization.Model):
2677    """Available operation list result.
2678
2679    :param name: The name of the operation.
2680    :type name: str
2681    :param display: The object that represents the operation.
2682    :type display: ~azure.mgmt.servicefabric.models.AvailableOperationDisplay
2683    :param origin: Origin result.
2684    :type origin: str
2685    :param next_link: The URL to use for getting the next set of results.
2686    :type next_link: str
2687    """
2688
2689    _attribute_map = {
2690        'name': {'key': 'name', 'type': 'str'},
2691        'display': {'key': 'display', 'type': 'AvailableOperationDisplay'},
2692        'origin': {'key': 'origin', 'type': 'str'},
2693        'next_link': {'key': 'nextLink', 'type': 'str'},
2694    }
2695
2696    def __init__(
2697        self,
2698        **kwargs
2699    ):
2700        super(OperationResult, self).__init__(**kwargs)
2701        self.name = kwargs.get('name', None)
2702        self.display = kwargs.get('display', None)
2703        self.origin = kwargs.get('origin', None)
2704        self.next_link = kwargs.get('next_link', None)
2705
2706
2707class ServerCertificateCommonName(msrest.serialization.Model):
2708    """Describes the server certificate details using common name.
2709
2710    All required parameters must be populated in order to send to Azure.
2711
2712    :param certificate_common_name: Required. The common name of the server certificate.
2713    :type certificate_common_name: str
2714    :param certificate_issuer_thumbprint: Required. The issuer thumbprint of the server
2715     certificate.
2716    :type certificate_issuer_thumbprint: str
2717    """
2718
2719    _validation = {
2720        'certificate_common_name': {'required': True},
2721        'certificate_issuer_thumbprint': {'required': True},
2722    }
2723
2724    _attribute_map = {
2725        'certificate_common_name': {'key': 'certificateCommonName', 'type': 'str'},
2726        'certificate_issuer_thumbprint': {'key': 'certificateIssuerThumbprint', 'type': 'str'},
2727    }
2728
2729    def __init__(
2730        self,
2731        **kwargs
2732    ):
2733        super(ServerCertificateCommonName, self).__init__(**kwargs)
2734        self.certificate_common_name = kwargs['certificate_common_name']
2735        self.certificate_issuer_thumbprint = kwargs['certificate_issuer_thumbprint']
2736
2737
2738class ServerCertificateCommonNames(msrest.serialization.Model):
2739    """Describes a list of server certificates referenced by common name that are used to secure the cluster.
2740
2741    :param common_names: The list of server certificates referenced by common name that are used to
2742     secure the cluster.
2743    :type common_names: list[~azure.mgmt.servicefabric.models.ServerCertificateCommonName]
2744    :param x509_store_name: The local certificate store location. Possible values include:
2745     "AddressBook", "AuthRoot", "CertificateAuthority", "Disallowed", "My", "Root", "TrustedPeople",
2746     "TrustedPublisher".
2747    :type x509_store_name: str or ~azure.mgmt.servicefabric.models.StoreName
2748    """
2749
2750    _attribute_map = {
2751        'common_names': {'key': 'commonNames', 'type': '[ServerCertificateCommonName]'},
2752        'x509_store_name': {'key': 'x509StoreName', 'type': 'str'},
2753    }
2754
2755    def __init__(
2756        self,
2757        **kwargs
2758    ):
2759        super(ServerCertificateCommonNames, self).__init__(**kwargs)
2760        self.common_names = kwargs.get('common_names', None)
2761        self.x509_store_name = kwargs.get('x509_store_name', None)
2762
2763
2764class ServiceCorrelationDescription(msrest.serialization.Model):
2765    """Creates a particular correlation between services.
2766
2767    All required parameters must be populated in order to send to Azure.
2768
2769    :param scheme: Required. The ServiceCorrelationScheme which describes the relationship between
2770     this service and the service specified via ServiceName. Possible values include: "Invalid",
2771     "Affinity", "AlignedAffinity", "NonAlignedAffinity".
2772    :type scheme: str or ~azure.mgmt.servicefabric.models.ServiceCorrelationScheme
2773    :param service_name: Required. The name of the service that the correlation relationship is
2774     established with.
2775    :type service_name: str
2776    """
2777
2778    _validation = {
2779        'scheme': {'required': True},
2780        'service_name': {'required': True},
2781    }
2782
2783    _attribute_map = {
2784        'scheme': {'key': 'scheme', 'type': 'str'},
2785        'service_name': {'key': 'serviceName', 'type': 'str'},
2786    }
2787
2788    def __init__(
2789        self,
2790        **kwargs
2791    ):
2792        super(ServiceCorrelationDescription, self).__init__(**kwargs)
2793        self.scheme = kwargs['scheme']
2794        self.service_name = kwargs['service_name']
2795
2796
2797class ServiceLoadMetricDescription(msrest.serialization.Model):
2798    """Specifies a metric to load balance a service during runtime.
2799
2800    All required parameters must be populated in order to send to Azure.
2801
2802    :param name: Required. The name of the metric. If the service chooses to report load during
2803     runtime, the load metric name should match the name that is specified in Name exactly. Note
2804     that metric names are case sensitive.
2805    :type name: str
2806    :param weight: The service load metric relative weight, compared to other metrics configured
2807     for this service, as a number. Possible values include: "Zero", "Low", "Medium", "High".
2808    :type weight: str or ~azure.mgmt.servicefabric.models.ServiceLoadMetricWeight
2809    :param primary_default_load: Used only for Stateful services. The default amount of load, as a
2810     number, that this service creates for this metric when it is a Primary replica.
2811    :type primary_default_load: int
2812    :param secondary_default_load: Used only for Stateful services. The default amount of load, as
2813     a number, that this service creates for this metric when it is a Secondary replica.
2814    :type secondary_default_load: int
2815    :param default_load: Used only for Stateless services. The default amount of load, as a number,
2816     that this service creates for this metric.
2817    :type default_load: int
2818    """
2819
2820    _validation = {
2821        'name': {'required': True},
2822    }
2823
2824    _attribute_map = {
2825        'name': {'key': 'name', 'type': 'str'},
2826        'weight': {'key': 'weight', 'type': 'str'},
2827        'primary_default_load': {'key': 'primaryDefaultLoad', 'type': 'int'},
2828        'secondary_default_load': {'key': 'secondaryDefaultLoad', 'type': 'int'},
2829        'default_load': {'key': 'defaultLoad', 'type': 'int'},
2830    }
2831
2832    def __init__(
2833        self,
2834        **kwargs
2835    ):
2836        super(ServiceLoadMetricDescription, self).__init__(**kwargs)
2837        self.name = kwargs['name']
2838        self.weight = kwargs.get('weight', None)
2839        self.primary_default_load = kwargs.get('primary_default_load', None)
2840        self.secondary_default_load = kwargs.get('secondary_default_load', None)
2841        self.default_load = kwargs.get('default_load', None)
2842
2843
2844class ServicePlacementPolicyDescription(msrest.serialization.Model):
2845    """Describes the policy to be used for placement of a Service Fabric service.
2846
2847    You probably want to use the sub-classes and not this class directly. Known
2848    sub-classes are: .
2849
2850    All required parameters must be populated in order to send to Azure.
2851
2852    :param type: Required. The type of placement policy for a service fabric service. Following are
2853     the possible values.Constant filled by server.  Possible values include: "Invalid",
2854     "InvalidDomain", "RequiredDomain", "PreferredPrimaryDomain", "RequiredDomainDistribution",
2855     "NonPartiallyPlaceService".
2856    :type type: str or ~azure.mgmt.servicefabric.models.ServicePlacementPolicyType
2857    """
2858
2859    _validation = {
2860        'type': {'required': True},
2861    }
2862
2863    _attribute_map = {
2864        'type': {'key': 'type', 'type': 'str'},
2865    }
2866
2867    _subtype_map = {
2868        'type': {}
2869    }
2870
2871    def __init__(
2872        self,
2873        **kwargs
2874    ):
2875        super(ServicePlacementPolicyDescription, self).__init__(**kwargs)
2876        self.type = None  # type: Optional[str]
2877
2878
2879class ServiceResource(ProxyResource):
2880    """The service resource.
2881
2882    Variables are only populated by the server, and will be ignored when sending a request.
2883
2884    :ivar id: Azure resource identifier.
2885    :vartype id: str
2886    :ivar name: Azure resource name.
2887    :vartype name: str
2888    :ivar type: Azure resource type.
2889    :vartype type: str
2890    :param location: It will be deprecated in New API, resource location depends on the parent
2891     resource.
2892    :type location: str
2893    :param tags: A set of tags. Azure resource tags.
2894    :type tags: dict[str, str]
2895    :ivar etag: Azure resource etag.
2896    :vartype etag: str
2897    :param placement_constraints: The placement constraints as a string. Placement constraints are
2898     boolean expressions on node properties and allow for restricting a service to particular nodes
2899     based on the service requirements. For example, to place a service on nodes where NodeType is
2900     blue specify the following: "NodeColor == blue)".
2901    :type placement_constraints: str
2902    :param correlation_scheme: A list that describes the correlation of the service with other
2903     services.
2904    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
2905    :param service_load_metrics: The service load metrics is given as an array of
2906     ServiceLoadMetricDescription objects.
2907    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
2908    :param service_placement_policies: A list that describes the correlation of the service with
2909     other services.
2910    :type service_placement_policies:
2911     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
2912    :param default_move_cost: Specifies the move cost for the service. Possible values include:
2913     "Zero", "Low", "Medium", "High".
2914    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
2915    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
2916     the response.
2917    :vartype provisioning_state: str
2918    :param service_kind: The kind of service (Stateless or Stateful).Constant filled by server.
2919     Possible values include: "Invalid", "Stateless", "Stateful".
2920    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
2921    :param service_type_name: The name of the service type.
2922    :type service_type_name: str
2923    :param partition_description: Describes how the service is partitioned.
2924    :type partition_description: ~azure.mgmt.servicefabric.models.PartitionSchemeDescription
2925    :param service_package_activation_mode: The activation Mode of the service package. Possible
2926     values include: "SharedProcess", "ExclusiveProcess".
2927    :type service_package_activation_mode: str or
2928     ~azure.mgmt.servicefabric.models.ArmServicePackageActivationMode
2929    :param service_dns_name: Dns name used for the service. If this is specified, then the service
2930     can be accessed via its DNS name instead of service name.
2931    :type service_dns_name: str
2932    """
2933
2934    _validation = {
2935        'id': {'readonly': True},
2936        'name': {'readonly': True},
2937        'type': {'readonly': True},
2938        'etag': {'readonly': True},
2939        'provisioning_state': {'readonly': True},
2940    }
2941
2942    _attribute_map = {
2943        'id': {'key': 'id', 'type': 'str'},
2944        'name': {'key': 'name', 'type': 'str'},
2945        'type': {'key': 'type', 'type': 'str'},
2946        'location': {'key': 'location', 'type': 'str'},
2947        'tags': {'key': 'tags', 'type': '{str}'},
2948        'etag': {'key': 'etag', 'type': 'str'},
2949        'placement_constraints': {'key': 'properties.placementConstraints', 'type': 'str'},
2950        'correlation_scheme': {'key': 'properties.correlationScheme', 'type': '[ServiceCorrelationDescription]'},
2951        'service_load_metrics': {'key': 'properties.serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
2952        'service_placement_policies': {'key': 'properties.servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
2953        'default_move_cost': {'key': 'properties.defaultMoveCost', 'type': 'str'},
2954        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
2955        'service_kind': {'key': 'properties.serviceKind', 'type': 'str'},
2956        'service_type_name': {'key': 'properties.serviceTypeName', 'type': 'str'},
2957        'partition_description': {'key': 'properties.partitionDescription', 'type': 'PartitionSchemeDescription'},
2958        'service_package_activation_mode': {'key': 'properties.servicePackageActivationMode', 'type': 'str'},
2959        'service_dns_name': {'key': 'properties.serviceDnsName', 'type': 'str'},
2960    }
2961
2962    def __init__(
2963        self,
2964        **kwargs
2965    ):
2966        super(ServiceResource, self).__init__(**kwargs)
2967        self.placement_constraints = kwargs.get('placement_constraints', None)
2968        self.correlation_scheme = kwargs.get('correlation_scheme', None)
2969        self.service_load_metrics = kwargs.get('service_load_metrics', None)
2970        self.service_placement_policies = kwargs.get('service_placement_policies', None)
2971        self.default_move_cost = kwargs.get('default_move_cost', None)
2972        self.provisioning_state = None
2973        self.service_kind = None  # type: Optional[str]
2974        self.service_type_name = kwargs.get('service_type_name', None)
2975        self.partition_description = kwargs.get('partition_description', None)
2976        self.service_package_activation_mode = kwargs.get('service_package_activation_mode', None)
2977        self.service_dns_name = kwargs.get('service_dns_name', None)
2978
2979
2980class ServiceResourceList(msrest.serialization.Model):
2981    """The list of service resources.
2982
2983    Variables are only populated by the server, and will be ignored when sending a request.
2984
2985    :param value:
2986    :type value: list[~azure.mgmt.servicefabric.models.ServiceResource]
2987    :ivar next_link: URL to get the next set of service list results if there are any.
2988    :vartype next_link: str
2989    """
2990
2991    _validation = {
2992        'next_link': {'readonly': True},
2993    }
2994
2995    _attribute_map = {
2996        'value': {'key': 'value', 'type': '[ServiceResource]'},
2997        'next_link': {'key': 'nextLink', 'type': 'str'},
2998    }
2999
3000    def __init__(
3001        self,
3002        **kwargs
3003    ):
3004        super(ServiceResourceList, self).__init__(**kwargs)
3005        self.value = kwargs.get('value', None)
3006        self.next_link = None
3007
3008
3009class ServiceResourcePropertiesBase(msrest.serialization.Model):
3010    """The common service resource properties.
3011
3012    :param placement_constraints: The placement constraints as a string. Placement constraints are
3013     boolean expressions on node properties and allow for restricting a service to particular nodes
3014     based on the service requirements. For example, to place a service on nodes where NodeType is
3015     blue specify the following: "NodeColor == blue)".
3016    :type placement_constraints: str
3017    :param correlation_scheme: A list that describes the correlation of the service with other
3018     services.
3019    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3020    :param service_load_metrics: The service load metrics is given as an array of
3021     ServiceLoadMetricDescription objects.
3022    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3023    :param service_placement_policies: A list that describes the correlation of the service with
3024     other services.
3025    :type service_placement_policies:
3026     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3027    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3028     "Zero", "Low", "Medium", "High".
3029    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3030    """
3031
3032    _attribute_map = {
3033        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3034        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3035        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3036        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3037        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3038    }
3039
3040    def __init__(
3041        self,
3042        **kwargs
3043    ):
3044        super(ServiceResourcePropertiesBase, self).__init__(**kwargs)
3045        self.placement_constraints = kwargs.get('placement_constraints', None)
3046        self.correlation_scheme = kwargs.get('correlation_scheme', None)
3047        self.service_load_metrics = kwargs.get('service_load_metrics', None)
3048        self.service_placement_policies = kwargs.get('service_placement_policies', None)
3049        self.default_move_cost = kwargs.get('default_move_cost', None)
3050
3051
3052class ServiceResourceProperties(ServiceResourcePropertiesBase):
3053    """The service resource properties.
3054
3055    You probably want to use the sub-classes and not this class directly. Known
3056    sub-classes are: StatefulServiceProperties, StatelessServiceProperties.
3057
3058    Variables are only populated by the server, and will be ignored when sending a request.
3059
3060    All required parameters must be populated in order to send to Azure.
3061
3062    :param placement_constraints: The placement constraints as a string. Placement constraints are
3063     boolean expressions on node properties and allow for restricting a service to particular nodes
3064     based on the service requirements. For example, to place a service on nodes where NodeType is
3065     blue specify the following: "NodeColor == blue)".
3066    :type placement_constraints: str
3067    :param correlation_scheme: A list that describes the correlation of the service with other
3068     services.
3069    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3070    :param service_load_metrics: The service load metrics is given as an array of
3071     ServiceLoadMetricDescription objects.
3072    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3073    :param service_placement_policies: A list that describes the correlation of the service with
3074     other services.
3075    :type service_placement_policies:
3076     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3077    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3078     "Zero", "Low", "Medium", "High".
3079    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3080    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
3081     the response.
3082    :vartype provisioning_state: str
3083    :param service_kind: Required. The kind of service (Stateless or Stateful).Constant filled by
3084     server.  Possible values include: "Invalid", "Stateless", "Stateful".
3085    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3086    :param service_type_name: The name of the service type.
3087    :type service_type_name: str
3088    :param partition_description: Describes how the service is partitioned.
3089    :type partition_description: ~azure.mgmt.servicefabric.models.PartitionSchemeDescription
3090    :param service_package_activation_mode: The activation Mode of the service package. Possible
3091     values include: "SharedProcess", "ExclusiveProcess".
3092    :type service_package_activation_mode: str or
3093     ~azure.mgmt.servicefabric.models.ArmServicePackageActivationMode
3094    :param service_dns_name: Dns name used for the service. If this is specified, then the service
3095     can be accessed via its DNS name instead of service name.
3096    :type service_dns_name: str
3097    """
3098
3099    _validation = {
3100        'provisioning_state': {'readonly': True},
3101        'service_kind': {'required': True},
3102    }
3103
3104    _attribute_map = {
3105        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3106        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3107        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3108        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3109        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3110        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
3111        'service_kind': {'key': 'serviceKind', 'type': 'str'},
3112        'service_type_name': {'key': 'serviceTypeName', 'type': 'str'},
3113        'partition_description': {'key': 'partitionDescription', 'type': 'PartitionSchemeDescription'},
3114        'service_package_activation_mode': {'key': 'servicePackageActivationMode', 'type': 'str'},
3115        'service_dns_name': {'key': 'serviceDnsName', 'type': 'str'},
3116    }
3117
3118    _subtype_map = {
3119        'service_kind': {'Stateful': 'StatefulServiceProperties', 'Stateless': 'StatelessServiceProperties'}
3120    }
3121
3122    def __init__(
3123        self,
3124        **kwargs
3125    ):
3126        super(ServiceResourceProperties, self).__init__(**kwargs)
3127        self.provisioning_state = None
3128        self.service_kind = 'ServiceResourceProperties'  # type: str
3129        self.service_type_name = kwargs.get('service_type_name', None)
3130        self.partition_description = kwargs.get('partition_description', None)
3131        self.service_package_activation_mode = kwargs.get('service_package_activation_mode', None)
3132        self.service_dns_name = kwargs.get('service_dns_name', None)
3133
3134
3135class ServiceResourceUpdate(ProxyResource):
3136    """The service resource for patch operations.
3137
3138    Variables are only populated by the server, and will be ignored when sending a request.
3139
3140    :ivar id: Azure resource identifier.
3141    :vartype id: str
3142    :ivar name: Azure resource name.
3143    :vartype name: str
3144    :ivar type: Azure resource type.
3145    :vartype type: str
3146    :param location: It will be deprecated in New API, resource location depends on the parent
3147     resource.
3148    :type location: str
3149    :param tags: A set of tags. Azure resource tags.
3150    :type tags: dict[str, str]
3151    :ivar etag: Azure resource etag.
3152    :vartype etag: str
3153    :param placement_constraints: The placement constraints as a string. Placement constraints are
3154     boolean expressions on node properties and allow for restricting a service to particular nodes
3155     based on the service requirements. For example, to place a service on nodes where NodeType is
3156     blue specify the following: "NodeColor == blue)".
3157    :type placement_constraints: str
3158    :param correlation_scheme: A list that describes the correlation of the service with other
3159     services.
3160    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3161    :param service_load_metrics: The service load metrics is given as an array of
3162     ServiceLoadMetricDescription objects.
3163    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3164    :param service_placement_policies: A list that describes the correlation of the service with
3165     other services.
3166    :type service_placement_policies:
3167     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3168    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3169     "Zero", "Low", "Medium", "High".
3170    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3171    :param service_kind: The kind of service (Stateless or Stateful).Constant filled by server.
3172     Possible values include: "Invalid", "Stateless", "Stateful".
3173    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3174    """
3175
3176    _validation = {
3177        'id': {'readonly': True},
3178        'name': {'readonly': True},
3179        'type': {'readonly': True},
3180        'etag': {'readonly': True},
3181    }
3182
3183    _attribute_map = {
3184        'id': {'key': 'id', 'type': 'str'},
3185        'name': {'key': 'name', 'type': 'str'},
3186        'type': {'key': 'type', 'type': 'str'},
3187        'location': {'key': 'location', 'type': 'str'},
3188        'tags': {'key': 'tags', 'type': '{str}'},
3189        'etag': {'key': 'etag', 'type': 'str'},
3190        'placement_constraints': {'key': 'properties.placementConstraints', 'type': 'str'},
3191        'correlation_scheme': {'key': 'properties.correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3192        'service_load_metrics': {'key': 'properties.serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3193        'service_placement_policies': {'key': 'properties.servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3194        'default_move_cost': {'key': 'properties.defaultMoveCost', 'type': 'str'},
3195        'service_kind': {'key': 'properties.serviceKind', 'type': 'str'},
3196    }
3197
3198    def __init__(
3199        self,
3200        **kwargs
3201    ):
3202        super(ServiceResourceUpdate, self).__init__(**kwargs)
3203        self.placement_constraints = kwargs.get('placement_constraints', None)
3204        self.correlation_scheme = kwargs.get('correlation_scheme', None)
3205        self.service_load_metrics = kwargs.get('service_load_metrics', None)
3206        self.service_placement_policies = kwargs.get('service_placement_policies', None)
3207        self.default_move_cost = kwargs.get('default_move_cost', None)
3208        self.service_kind = None  # type: Optional[str]
3209
3210
3211class ServiceResourceUpdateProperties(ServiceResourcePropertiesBase):
3212    """The service resource properties for patch operations.
3213
3214    You probably want to use the sub-classes and not this class directly. Known
3215    sub-classes are: StatefulServiceUpdateProperties, StatelessServiceUpdateProperties.
3216
3217    All required parameters must be populated in order to send to Azure.
3218
3219    :param placement_constraints: The placement constraints as a string. Placement constraints are
3220     boolean expressions on node properties and allow for restricting a service to particular nodes
3221     based on the service requirements. For example, to place a service on nodes where NodeType is
3222     blue specify the following: "NodeColor == blue)".
3223    :type placement_constraints: str
3224    :param correlation_scheme: A list that describes the correlation of the service with other
3225     services.
3226    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3227    :param service_load_metrics: The service load metrics is given as an array of
3228     ServiceLoadMetricDescription objects.
3229    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3230    :param service_placement_policies: A list that describes the correlation of the service with
3231     other services.
3232    :type service_placement_policies:
3233     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3234    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3235     "Zero", "Low", "Medium", "High".
3236    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3237    :param service_kind: Required. The kind of service (Stateless or Stateful).Constant filled by
3238     server.  Possible values include: "Invalid", "Stateless", "Stateful".
3239    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3240    """
3241
3242    _validation = {
3243        'service_kind': {'required': True},
3244    }
3245
3246    _attribute_map = {
3247        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3248        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3249        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3250        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3251        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3252        'service_kind': {'key': 'serviceKind', 'type': 'str'},
3253    }
3254
3255    _subtype_map = {
3256        'service_kind': {'Stateful': 'StatefulServiceUpdateProperties', 'Stateless': 'StatelessServiceUpdateProperties'}
3257    }
3258
3259    def __init__(
3260        self,
3261        **kwargs
3262    ):
3263        super(ServiceResourceUpdateProperties, self).__init__(**kwargs)
3264        self.service_kind = 'ServiceResourceUpdateProperties'  # type: str
3265
3266
3267class ServiceTypeDeltaHealthPolicy(msrest.serialization.Model):
3268    """Represents the delta health policy used to evaluate the health of services belonging to a service type when upgrading the cluster.
3269
3270    :param max_percent_delta_unhealthy_services: The maximum allowed percentage of services health
3271     degradation allowed during cluster upgrades.
3272     The delta is measured between the state of the services at the beginning of upgrade and the
3273     state of the services at the time of the health evaluation.
3274     The check is performed after every upgrade domain upgrade completion to make sure the global
3275     state of the cluster is within tolerated limits.
3276    :type max_percent_delta_unhealthy_services: int
3277    """
3278
3279    _validation = {
3280        'max_percent_delta_unhealthy_services': {'maximum': 100, 'minimum': 0},
3281    }
3282
3283    _attribute_map = {
3284        'max_percent_delta_unhealthy_services': {'key': 'maxPercentDeltaUnhealthyServices', 'type': 'int'},
3285    }
3286
3287    def __init__(
3288        self,
3289        **kwargs
3290    ):
3291        super(ServiceTypeDeltaHealthPolicy, self).__init__(**kwargs)
3292        self.max_percent_delta_unhealthy_services = kwargs.get('max_percent_delta_unhealthy_services', 0)
3293
3294
3295class ServiceTypeHealthPolicy(msrest.serialization.Model):
3296    """Represents the health policy used to evaluate the health of services belonging to a service type.
3297
3298    :param max_percent_unhealthy_services: The maximum percentage of services allowed to be
3299     unhealthy before your application is considered in error.
3300    :type max_percent_unhealthy_services: int
3301    """
3302
3303    _validation = {
3304        'max_percent_unhealthy_services': {'maximum': 100, 'minimum': 0},
3305    }
3306
3307    _attribute_map = {
3308        'max_percent_unhealthy_services': {'key': 'maxPercentUnhealthyServices', 'type': 'int'},
3309    }
3310
3311    def __init__(
3312        self,
3313        **kwargs
3314    ):
3315        super(ServiceTypeHealthPolicy, self).__init__(**kwargs)
3316        self.max_percent_unhealthy_services = kwargs.get('max_percent_unhealthy_services', 0)
3317
3318
3319class SettingsParameterDescription(msrest.serialization.Model):
3320    """Describes a parameter in fabric settings of the cluster.
3321
3322    All required parameters must be populated in order to send to Azure.
3323
3324    :param name: Required. The parameter name of fabric setting.
3325    :type name: str
3326    :param value: Required. The parameter value of fabric setting.
3327    :type value: str
3328    """
3329
3330    _validation = {
3331        'name': {'required': True},
3332        'value': {'required': True},
3333    }
3334
3335    _attribute_map = {
3336        'name': {'key': 'name', 'type': 'str'},
3337        'value': {'key': 'value', 'type': 'str'},
3338    }
3339
3340    def __init__(
3341        self,
3342        **kwargs
3343    ):
3344        super(SettingsParameterDescription, self).__init__(**kwargs)
3345        self.name = kwargs['name']
3346        self.value = kwargs['value']
3347
3348
3349class SettingsSectionDescription(msrest.serialization.Model):
3350    """Describes a section in the fabric settings of the cluster.
3351
3352    All required parameters must be populated in order to send to Azure.
3353
3354    :param name: Required. The section name of the fabric settings.
3355    :type name: str
3356    :param parameters: Required. The collection of parameters in the section.
3357    :type parameters: list[~azure.mgmt.servicefabric.models.SettingsParameterDescription]
3358    """
3359
3360    _validation = {
3361        'name': {'required': True},
3362        'parameters': {'required': True},
3363    }
3364
3365    _attribute_map = {
3366        'name': {'key': 'name', 'type': 'str'},
3367        'parameters': {'key': 'parameters', 'type': '[SettingsParameterDescription]'},
3368    }
3369
3370    def __init__(
3371        self,
3372        **kwargs
3373    ):
3374        super(SettingsSectionDescription, self).__init__(**kwargs)
3375        self.name = kwargs['name']
3376        self.parameters = kwargs['parameters']
3377
3378
3379class SingletonPartitionSchemeDescription(PartitionSchemeDescription):
3380    """SingletonPartitionSchemeDescription.
3381
3382    All required parameters must be populated in order to send to Azure.
3383
3384    :param partition_scheme: Required. Specifies how the service is partitioned.Constant filled by
3385     server.  Possible values include: "Invalid", "Singleton", "UniformInt64Range", "Named".
3386    :type partition_scheme: str or ~azure.mgmt.servicefabric.models.PartitionScheme
3387    """
3388
3389    _validation = {
3390        'partition_scheme': {'required': True},
3391    }
3392
3393    _attribute_map = {
3394        'partition_scheme': {'key': 'partitionScheme', 'type': 'str'},
3395    }
3396
3397    def __init__(
3398        self,
3399        **kwargs
3400    ):
3401        super(SingletonPartitionSchemeDescription, self).__init__(**kwargs)
3402        self.partition_scheme = 'Singleton'  # type: str
3403
3404
3405class Sku(msrest.serialization.Model):
3406    """Sku definition.
3407
3408    All required parameters must be populated in order to send to Azure.
3409
3410    :param name: Required. Sku Name. Possible values include: "Basic", "Standard".
3411    :type name: str or ~azure.mgmt.servicefabric.models.SkuName
3412    """
3413
3414    _validation = {
3415        'name': {'required': True},
3416    }
3417
3418    _attribute_map = {
3419        'name': {'key': 'name', 'type': 'str'},
3420    }
3421
3422    def __init__(
3423        self,
3424        **kwargs
3425    ):
3426        super(Sku, self).__init__(**kwargs)
3427        self.name = kwargs['name']
3428
3429
3430class StatefulServiceProperties(ServiceResourceProperties):
3431    """The properties of a stateful service resource.
3432
3433    Variables are only populated by the server, and will be ignored when sending a request.
3434
3435    All required parameters must be populated in order to send to Azure.
3436
3437    :param placement_constraints: The placement constraints as a string. Placement constraints are
3438     boolean expressions on node properties and allow for restricting a service to particular nodes
3439     based on the service requirements. For example, to place a service on nodes where NodeType is
3440     blue specify the following: "NodeColor == blue)".
3441    :type placement_constraints: str
3442    :param correlation_scheme: A list that describes the correlation of the service with other
3443     services.
3444    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3445    :param service_load_metrics: The service load metrics is given as an array of
3446     ServiceLoadMetricDescription objects.
3447    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3448    :param service_placement_policies: A list that describes the correlation of the service with
3449     other services.
3450    :type service_placement_policies:
3451     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3452    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3453     "Zero", "Low", "Medium", "High".
3454    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3455    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
3456     the response.
3457    :vartype provisioning_state: str
3458    :param service_kind: Required. The kind of service (Stateless or Stateful).Constant filled by
3459     server.  Possible values include: "Invalid", "Stateless", "Stateful".
3460    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3461    :param service_type_name: The name of the service type.
3462    :type service_type_name: str
3463    :param partition_description: Describes how the service is partitioned.
3464    :type partition_description: ~azure.mgmt.servicefabric.models.PartitionSchemeDescription
3465    :param service_package_activation_mode: The activation Mode of the service package. Possible
3466     values include: "SharedProcess", "ExclusiveProcess".
3467    :type service_package_activation_mode: str or
3468     ~azure.mgmt.servicefabric.models.ArmServicePackageActivationMode
3469    :param service_dns_name: Dns name used for the service. If this is specified, then the service
3470     can be accessed via its DNS name instead of service name.
3471    :type service_dns_name: str
3472    :param has_persisted_state: A flag indicating whether this is a persistent service which stores
3473     states on the local disk. If it is then the value of this property is true, if not it is false.
3474    :type has_persisted_state: bool
3475    :param target_replica_set_size: The target replica set size as a number.
3476    :type target_replica_set_size: int
3477    :param min_replica_set_size: The minimum replica set size as a number.
3478    :type min_replica_set_size: int
3479    :param replica_restart_wait_duration: The duration between when a replica goes down and when a
3480     new replica is created, represented in ISO 8601 format (hh:mm:ss.s).
3481    :type replica_restart_wait_duration: ~datetime.datetime
3482    :param quorum_loss_wait_duration: The maximum duration for which a partition is allowed to be
3483     in a state of quorum loss, represented in ISO 8601 format (hh:mm:ss.s).
3484    :type quorum_loss_wait_duration: ~datetime.datetime
3485    :param stand_by_replica_keep_duration: The definition on how long StandBy replicas should be
3486     maintained before being removed, represented in ISO 8601 format (hh:mm:ss.s).
3487    :type stand_by_replica_keep_duration: ~datetime.datetime
3488    """
3489
3490    _validation = {
3491        'provisioning_state': {'readonly': True},
3492        'service_kind': {'required': True},
3493        'target_replica_set_size': {'minimum': 1},
3494        'min_replica_set_size': {'minimum': 1},
3495    }
3496
3497    _attribute_map = {
3498        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3499        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3500        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3501        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3502        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3503        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
3504        'service_kind': {'key': 'serviceKind', 'type': 'str'},
3505        'service_type_name': {'key': 'serviceTypeName', 'type': 'str'},
3506        'partition_description': {'key': 'partitionDescription', 'type': 'PartitionSchemeDescription'},
3507        'service_package_activation_mode': {'key': 'servicePackageActivationMode', 'type': 'str'},
3508        'service_dns_name': {'key': 'serviceDnsName', 'type': 'str'},
3509        'has_persisted_state': {'key': 'hasPersistedState', 'type': 'bool'},
3510        'target_replica_set_size': {'key': 'targetReplicaSetSize', 'type': 'int'},
3511        'min_replica_set_size': {'key': 'minReplicaSetSize', 'type': 'int'},
3512        'replica_restart_wait_duration': {'key': 'replicaRestartWaitDuration', 'type': 'iso-8601'},
3513        'quorum_loss_wait_duration': {'key': 'quorumLossWaitDuration', 'type': 'iso-8601'},
3514        'stand_by_replica_keep_duration': {'key': 'standByReplicaKeepDuration', 'type': 'iso-8601'},
3515    }
3516
3517    def __init__(
3518        self,
3519        **kwargs
3520    ):
3521        super(StatefulServiceProperties, self).__init__(**kwargs)
3522        self.service_kind = 'Stateful'  # type: str
3523        self.has_persisted_state = kwargs.get('has_persisted_state', None)
3524        self.target_replica_set_size = kwargs.get('target_replica_set_size', None)
3525        self.min_replica_set_size = kwargs.get('min_replica_set_size', None)
3526        self.replica_restart_wait_duration = kwargs.get('replica_restart_wait_duration', None)
3527        self.quorum_loss_wait_duration = kwargs.get('quorum_loss_wait_duration', None)
3528        self.stand_by_replica_keep_duration = kwargs.get('stand_by_replica_keep_duration', None)
3529
3530
3531class StatefulServiceUpdateProperties(ServiceResourceUpdateProperties):
3532    """The properties of a stateful service resource for patch operations.
3533
3534    All required parameters must be populated in order to send to Azure.
3535
3536    :param placement_constraints: The placement constraints as a string. Placement constraints are
3537     boolean expressions on node properties and allow for restricting a service to particular nodes
3538     based on the service requirements. For example, to place a service on nodes where NodeType is
3539     blue specify the following: "NodeColor == blue)".
3540    :type placement_constraints: str
3541    :param correlation_scheme: A list that describes the correlation of the service with other
3542     services.
3543    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3544    :param service_load_metrics: The service load metrics is given as an array of
3545     ServiceLoadMetricDescription objects.
3546    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3547    :param service_placement_policies: A list that describes the correlation of the service with
3548     other services.
3549    :type service_placement_policies:
3550     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3551    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3552     "Zero", "Low", "Medium", "High".
3553    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3554    :param service_kind: Required. The kind of service (Stateless or Stateful).Constant filled by
3555     server.  Possible values include: "Invalid", "Stateless", "Stateful".
3556    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3557    :param target_replica_set_size: The target replica set size as a number.
3558    :type target_replica_set_size: int
3559    :param min_replica_set_size: The minimum replica set size as a number.
3560    :type min_replica_set_size: int
3561    :param replica_restart_wait_duration: The duration between when a replica goes down and when a
3562     new replica is created, represented in ISO 8601 format (hh:mm:ss.s).
3563    :type replica_restart_wait_duration: ~datetime.datetime
3564    :param quorum_loss_wait_duration: The maximum duration for which a partition is allowed to be
3565     in a state of quorum loss, represented in ISO 8601 format (hh:mm:ss.s).
3566    :type quorum_loss_wait_duration: ~datetime.datetime
3567    :param stand_by_replica_keep_duration: The definition on how long StandBy replicas should be
3568     maintained before being removed, represented in ISO 8601 format (hh:mm:ss.s).
3569    :type stand_by_replica_keep_duration: ~datetime.datetime
3570    """
3571
3572    _validation = {
3573        'service_kind': {'required': True},
3574        'target_replica_set_size': {'minimum': 1},
3575        'min_replica_set_size': {'minimum': 1},
3576    }
3577
3578    _attribute_map = {
3579        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3580        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3581        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3582        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3583        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3584        'service_kind': {'key': 'serviceKind', 'type': 'str'},
3585        'target_replica_set_size': {'key': 'targetReplicaSetSize', 'type': 'int'},
3586        'min_replica_set_size': {'key': 'minReplicaSetSize', 'type': 'int'},
3587        'replica_restart_wait_duration': {'key': 'replicaRestartWaitDuration', 'type': 'iso-8601'},
3588        'quorum_loss_wait_duration': {'key': 'quorumLossWaitDuration', 'type': 'iso-8601'},
3589        'stand_by_replica_keep_duration': {'key': 'standByReplicaKeepDuration', 'type': 'iso-8601'},
3590    }
3591
3592    def __init__(
3593        self,
3594        **kwargs
3595    ):
3596        super(StatefulServiceUpdateProperties, self).__init__(**kwargs)
3597        self.service_kind = 'Stateful'  # type: str
3598        self.target_replica_set_size = kwargs.get('target_replica_set_size', None)
3599        self.min_replica_set_size = kwargs.get('min_replica_set_size', None)
3600        self.replica_restart_wait_duration = kwargs.get('replica_restart_wait_duration', None)
3601        self.quorum_loss_wait_duration = kwargs.get('quorum_loss_wait_duration', None)
3602        self.stand_by_replica_keep_duration = kwargs.get('stand_by_replica_keep_duration', None)
3603
3604
3605class StatelessServiceProperties(ServiceResourceProperties):
3606    """The properties of a stateless service resource.
3607
3608    Variables are only populated by the server, and will be ignored when sending a request.
3609
3610    All required parameters must be populated in order to send to Azure.
3611
3612    :param placement_constraints: The placement constraints as a string. Placement constraints are
3613     boolean expressions on node properties and allow for restricting a service to particular nodes
3614     based on the service requirements. For example, to place a service on nodes where NodeType is
3615     blue specify the following: "NodeColor == blue)".
3616    :type placement_constraints: str
3617    :param correlation_scheme: A list that describes the correlation of the service with other
3618     services.
3619    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3620    :param service_load_metrics: The service load metrics is given as an array of
3621     ServiceLoadMetricDescription objects.
3622    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3623    :param service_placement_policies: A list that describes the correlation of the service with
3624     other services.
3625    :type service_placement_policies:
3626     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3627    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3628     "Zero", "Low", "Medium", "High".
3629    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3630    :ivar provisioning_state: The current deployment or provisioning state, which only appears in
3631     the response.
3632    :vartype provisioning_state: str
3633    :param service_kind: Required. The kind of service (Stateless or Stateful).Constant filled by
3634     server.  Possible values include: "Invalid", "Stateless", "Stateful".
3635    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3636    :param service_type_name: The name of the service type.
3637    :type service_type_name: str
3638    :param partition_description: Describes how the service is partitioned.
3639    :type partition_description: ~azure.mgmt.servicefabric.models.PartitionSchemeDescription
3640    :param service_package_activation_mode: The activation Mode of the service package. Possible
3641     values include: "SharedProcess", "ExclusiveProcess".
3642    :type service_package_activation_mode: str or
3643     ~azure.mgmt.servicefabric.models.ArmServicePackageActivationMode
3644    :param service_dns_name: Dns name used for the service. If this is specified, then the service
3645     can be accessed via its DNS name instead of service name.
3646    :type service_dns_name: str
3647    :param instance_count: The instance count.
3648    :type instance_count: int
3649    :param instance_close_delay_duration: Delay duration for RequestDrain feature to ensures that
3650     the endpoint advertised by the stateless instance is removed before the delay starts prior to
3651     closing the instance. This delay enables existing requests to drain gracefully before the
3652     instance actually goes down
3653     (https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-application-upgrade-advanced#avoid-connection-drops-during-stateless-service-planned-downtime-preview).
3654     It is first interpreted as a string representing an ISO 8601 duration. If that fails, then it
3655     is interpreted as a number representing the total number of milliseconds.
3656    :type instance_close_delay_duration: str
3657    """
3658
3659    _validation = {
3660        'provisioning_state': {'readonly': True},
3661        'service_kind': {'required': True},
3662        'instance_count': {'minimum': -1},
3663    }
3664
3665    _attribute_map = {
3666        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3667        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3668        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3669        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3670        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3671        'provisioning_state': {'key': 'provisioningState', 'type': 'str'},
3672        'service_kind': {'key': 'serviceKind', 'type': 'str'},
3673        'service_type_name': {'key': 'serviceTypeName', 'type': 'str'},
3674        'partition_description': {'key': 'partitionDescription', 'type': 'PartitionSchemeDescription'},
3675        'service_package_activation_mode': {'key': 'servicePackageActivationMode', 'type': 'str'},
3676        'service_dns_name': {'key': 'serviceDnsName', 'type': 'str'},
3677        'instance_count': {'key': 'instanceCount', 'type': 'int'},
3678        'instance_close_delay_duration': {'key': 'instanceCloseDelayDuration', 'type': 'str'},
3679    }
3680
3681    def __init__(
3682        self,
3683        **kwargs
3684    ):
3685        super(StatelessServiceProperties, self).__init__(**kwargs)
3686        self.service_kind = 'Stateless'  # type: str
3687        self.instance_count = kwargs.get('instance_count', None)
3688        self.instance_close_delay_duration = kwargs.get('instance_close_delay_duration', None)
3689
3690
3691class StatelessServiceUpdateProperties(ServiceResourceUpdateProperties):
3692    """The properties of a stateless service resource for patch operations.
3693
3694    All required parameters must be populated in order to send to Azure.
3695
3696    :param placement_constraints: The placement constraints as a string. Placement constraints are
3697     boolean expressions on node properties and allow for restricting a service to particular nodes
3698     based on the service requirements. For example, to place a service on nodes where NodeType is
3699     blue specify the following: "NodeColor == blue)".
3700    :type placement_constraints: str
3701    :param correlation_scheme: A list that describes the correlation of the service with other
3702     services.
3703    :type correlation_scheme: list[~azure.mgmt.servicefabric.models.ServiceCorrelationDescription]
3704    :param service_load_metrics: The service load metrics is given as an array of
3705     ServiceLoadMetricDescription objects.
3706    :type service_load_metrics: list[~azure.mgmt.servicefabric.models.ServiceLoadMetricDescription]
3707    :param service_placement_policies: A list that describes the correlation of the service with
3708     other services.
3709    :type service_placement_policies:
3710     list[~azure.mgmt.servicefabric.models.ServicePlacementPolicyDescription]
3711    :param default_move_cost: Specifies the move cost for the service. Possible values include:
3712     "Zero", "Low", "Medium", "High".
3713    :type default_move_cost: str or ~azure.mgmt.servicefabric.models.MoveCost
3714    :param service_kind: Required. The kind of service (Stateless or Stateful).Constant filled by
3715     server.  Possible values include: "Invalid", "Stateless", "Stateful".
3716    :type service_kind: str or ~azure.mgmt.servicefabric.models.ServiceKind
3717    :param instance_count: The instance count.
3718    :type instance_count: int
3719    :param instance_close_delay_duration: Delay duration for RequestDrain feature to ensures that
3720     the endpoint advertised by the stateless instance is removed before the delay starts prior to
3721     closing the instance. This delay enables existing requests to drain gracefully before the
3722     instance actually goes down
3723     (https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-application-upgrade-advanced#avoid-connection-drops-during-stateless-service-planned-downtime-preview).
3724     It is first interpreted as a string representing an ISO 8601 duration. If that fails, then it
3725     is interpreted as a number representing the total number of milliseconds.
3726    :type instance_close_delay_duration: str
3727    """
3728
3729    _validation = {
3730        'service_kind': {'required': True},
3731        'instance_count': {'minimum': -1},
3732    }
3733
3734    _attribute_map = {
3735        'placement_constraints': {'key': 'placementConstraints', 'type': 'str'},
3736        'correlation_scheme': {'key': 'correlationScheme', 'type': '[ServiceCorrelationDescription]'},
3737        'service_load_metrics': {'key': 'serviceLoadMetrics', 'type': '[ServiceLoadMetricDescription]'},
3738        'service_placement_policies': {'key': 'servicePlacementPolicies', 'type': '[ServicePlacementPolicyDescription]'},
3739        'default_move_cost': {'key': 'defaultMoveCost', 'type': 'str'},
3740        'service_kind': {'key': 'serviceKind', 'type': 'str'},
3741        'instance_count': {'key': 'instanceCount', 'type': 'int'},
3742        'instance_close_delay_duration': {'key': 'instanceCloseDelayDuration', 'type': 'str'},
3743    }
3744
3745    def __init__(
3746        self,
3747        **kwargs
3748    ):
3749        super(StatelessServiceUpdateProperties, self).__init__(**kwargs)
3750        self.service_kind = 'Stateless'  # type: str
3751        self.instance_count = kwargs.get('instance_count', None)
3752        self.instance_close_delay_duration = kwargs.get('instance_close_delay_duration', None)
3753
3754
3755class SubResource(msrest.serialization.Model):
3756    """Azure resource identifier.
3757
3758    :param id: Azure resource identifier.
3759    :type id: str
3760    """
3761
3762    _attribute_map = {
3763        'id': {'key': 'id', 'type': 'str'},
3764    }
3765
3766    def __init__(
3767        self,
3768        **kwargs
3769    ):
3770        super(SubResource, self).__init__(**kwargs)
3771        self.id = kwargs.get('id', None)
3772
3773
3774class UniformInt64RangePartitionSchemeDescription(PartitionSchemeDescription):
3775    """Describes a partitioning scheme where an integer range is allocated evenly across a number of partitions.
3776
3777    All required parameters must be populated in order to send to Azure.
3778
3779    :param partition_scheme: Required. Specifies how the service is partitioned.Constant filled by
3780     server.  Possible values include: "Invalid", "Singleton", "UniformInt64Range", "Named".
3781    :type partition_scheme: str or ~azure.mgmt.servicefabric.models.PartitionScheme
3782    :param count: Required. The number of partitions.
3783    :type count: int
3784    :param low_key: Required. String indicating the lower bound of the partition key range that
3785     should be split between the partition ‘count’.
3786    :type low_key: str
3787    :param high_key: Required. String indicating the upper bound of the partition key range that
3788     should be split between the partition ‘count’.
3789    :type high_key: str
3790    """
3791
3792    _validation = {
3793        'partition_scheme': {'required': True},
3794        'count': {'required': True},
3795        'low_key': {'required': True},
3796        'high_key': {'required': True},
3797    }
3798
3799    _attribute_map = {
3800        'partition_scheme': {'key': 'partitionScheme', 'type': 'str'},
3801        'count': {'key': 'count', 'type': 'int'},
3802        'low_key': {'key': 'lowKey', 'type': 'str'},
3803        'high_key': {'key': 'highKey', 'type': 'str'},
3804    }
3805
3806    def __init__(
3807        self,
3808        **kwargs
3809    ):
3810        super(UniformInt64RangePartitionSchemeDescription, self).__init__(**kwargs)
3811        self.partition_scheme = 'UniformInt64Range'  # type: str
3812        self.count = kwargs['count']
3813        self.low_key = kwargs['low_key']
3814        self.high_key = kwargs['high_key']
3815
3816
3817class UserAssignedIdentity(msrest.serialization.Model):
3818    """UserAssignedIdentity.
3819
3820    Variables are only populated by the server, and will be ignored when sending a request.
3821
3822    :ivar principal_id: The principal id of user assigned identity.
3823    :vartype principal_id: str
3824    :ivar client_id: The client id of user assigned identity.
3825    :vartype client_id: str
3826    """
3827
3828    _validation = {
3829        'principal_id': {'readonly': True},
3830        'client_id': {'readonly': True},
3831    }
3832
3833    _attribute_map = {
3834        'principal_id': {'key': 'principalId', 'type': 'str'},
3835        'client_id': {'key': 'clientId', 'type': 'str'},
3836    }
3837
3838    def __init__(
3839        self,
3840        **kwargs
3841    ):
3842        super(UserAssignedIdentity, self).__init__(**kwargs)
3843        self.principal_id = None
3844        self.client_id = None
3845
3846
3847class VaultCertificate(msrest.serialization.Model):
3848    """Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.
3849
3850    All required parameters must be populated in order to send to Azure.
3851
3852    :param certificate_url: Required. This is the URL of a certificate that has been uploaded to
3853     Key Vault as a secret. For adding a secret to the Key Vault, see `Add a key or secret to the
3854     key vault <https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add>`_. In this
3855     case, your certificate needs to be It is the Base64 encoding of the following JSON Object which
3856     is encoded in UTF-8: :code:`<br>`:code:`<br>` {:code:`<br>`
3857     "data":":code:`<Base64-encoded-certificate>`",:code:`<br>`  "dataType":"pfx",:code:`<br>`
3858     "password":":code:`<pfx-file-password>`":code:`<br>`}.
3859    :type certificate_url: str
3860    :param certificate_store: Required. For Windows VMs, specifies the certificate store on the
3861     Virtual Machine to which the certificate should be added. The specified certificate store is
3862     implicitly in the LocalMachine account. :code:`<br>`:code:`<br>`For Linux VMs, the certificate
3863     file is placed under the /var/lib/waagent directory, with the file name
3864     :code:`<UppercaseThumbprint>`.crt for the X509 certificate file and
3865     :code:`<UppercaseThumbprint>`.prv for private key. Both of these files are .pem formatted.
3866    :type certificate_store: str
3867    """
3868
3869    _validation = {
3870        'certificate_url': {'required': True},
3871        'certificate_store': {'required': True},
3872    }
3873
3874    _attribute_map = {
3875        'certificate_url': {'key': 'certificateUrl', 'type': 'str'},
3876        'certificate_store': {'key': 'certificateStore', 'type': 'str'},
3877    }
3878
3879    def __init__(
3880        self,
3881        **kwargs
3882    ):
3883        super(VaultCertificate, self).__init__(**kwargs)
3884        self.certificate_url = kwargs['certificate_url']
3885        self.certificate_store = kwargs['certificate_store']
3886
3887
3888class VaultSecretGroup(msrest.serialization.Model):
3889    """Specifies set of certificates that should be installed onto the virtual machines.
3890
3891    All required parameters must be populated in order to send to Azure.
3892
3893    :param source_vault: Required. The relative URL of the Key Vault containing all of the
3894     certificates in VaultCertificates.
3895    :type source_vault: ~azure.mgmt.servicefabric.models.SubResource
3896    :param vault_certificates: Required. The list of key vault references in SourceVault which
3897     contain certificates.
3898    :type vault_certificates: list[~azure.mgmt.servicefabric.models.VaultCertificate]
3899    """
3900
3901    _validation = {
3902        'source_vault': {'required': True},
3903        'vault_certificates': {'required': True},
3904    }
3905
3906    _attribute_map = {
3907        'source_vault': {'key': 'sourceVault', 'type': 'SubResource'},
3908        'vault_certificates': {'key': 'vaultCertificates', 'type': '[VaultCertificate]'},
3909    }
3910
3911    def __init__(
3912        self,
3913        **kwargs
3914    ):
3915        super(VaultSecretGroup, self).__init__(**kwargs)
3916        self.source_vault = kwargs['source_vault']
3917        self.vault_certificates = kwargs['vault_certificates']
3918
3919
3920class VMSSExtension(msrest.serialization.Model):
3921    """Specifies set of extensions that should be installed onto the virtual machines.
3922
3923    Variables are only populated by the server, and will be ignored when sending a request.
3924
3925    All required parameters must be populated in order to send to Azure.
3926
3927    :param name: Required. The name of the extension.
3928    :type name: str
3929    :param publisher: Required. The name of the extension handler publisher.
3930    :type publisher: str
3931    :param type: Required. Specifies the type of the extension; an example is
3932     "CustomScriptExtension".
3933    :type type: str
3934    :param type_handler_version: Required. Specifies the version of the script handler.
3935    :type type_handler_version: str
3936    :param auto_upgrade_minor_version: Indicates whether the extension should use a newer minor
3937     version if one is available at deployment time. Once deployed, however, the extension will not
3938     upgrade minor versions unless redeployed, even with this property set to true.
3939    :type auto_upgrade_minor_version: bool
3940    :param settings: Json formatted public settings for the extension.
3941    :type settings: any
3942    :param protected_settings: The extension can contain either protectedSettings or
3943     protectedSettingsFromKeyVault or no protected settings at all.
3944    :type protected_settings: any
3945    :param force_update_tag: If a value is provided and is different from the previous value, the
3946     extension handler will be forced to update even if the extension configuration has not changed.
3947    :type force_update_tag: str
3948    :param provision_after_extensions: Collection of extension names after which this extension
3949     needs to be provisioned.
3950    :type provision_after_extensions: list[str]
3951    :ivar provisioning_state: The provisioning state, which only appears in the response.
3952    :vartype provisioning_state: str
3953    """
3954
3955    _validation = {
3956        'name': {'required': True},
3957        'publisher': {'required': True},
3958        'type': {'required': True},
3959        'type_handler_version': {'required': True},
3960        'provisioning_state': {'readonly': True},
3961    }
3962
3963    _attribute_map = {
3964        'name': {'key': 'name', 'type': 'str'},
3965        'publisher': {'key': 'properties.publisher', 'type': 'str'},
3966        'type': {'key': 'properties.type', 'type': 'str'},
3967        'type_handler_version': {'key': 'properties.typeHandlerVersion', 'type': 'str'},
3968        'auto_upgrade_minor_version': {'key': 'properties.autoUpgradeMinorVersion', 'type': 'bool'},
3969        'settings': {'key': 'properties.settings', 'type': 'object'},
3970        'protected_settings': {'key': 'properties.protectedSettings', 'type': 'object'},
3971        'force_update_tag': {'key': 'properties.forceUpdateTag', 'type': 'str'},
3972        'provision_after_extensions': {'key': 'properties.provisionAfterExtensions', 'type': '[str]'},
3973        'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'},
3974    }
3975
3976    def __init__(
3977        self,
3978        **kwargs
3979    ):
3980        super(VMSSExtension, self).__init__(**kwargs)
3981        self.name = kwargs['name']
3982        self.publisher = kwargs['publisher']
3983        self.type = kwargs['type']
3984        self.type_handler_version = kwargs['type_handler_version']
3985        self.auto_upgrade_minor_version = kwargs.get('auto_upgrade_minor_version', None)
3986        self.settings = kwargs.get('settings', None)
3987        self.protected_settings = kwargs.get('protected_settings', None)
3988        self.force_update_tag = kwargs.get('force_update_tag', None)
3989        self.provision_after_extensions = kwargs.get('provision_after_extensions', None)
3990        self.provisioning_state = None
3991