|
|
|
|
|
|
|
|
|
|
|
from enum import Enum |
|
|
|
class ProfileDefinition(object): |
|
"""Allow to define a custom Profile definition. |
|
|
|
Note:: |
|
|
|
The dict format taken as input is yet to be confirmed and should |
|
*not* be considered as stable in the current implementation. |
|
|
|
:param dict profile_dict: A profile dictionnary |
|
:param str label: A label for pretty printing |
|
""" |
|
def __init__(self, profile_dict, label=None): |
|
self._profile_dict = profile_dict |
|
self._label = label |
|
|
|
@property |
|
def label(self): |
|
"""The label associated to this profile definition. |
|
""" |
|
return self._label |
|
|
|
def __repr__(self): |
|
return self._label if self._label else self._profile_dict.__repr__() |
|
|
|
def get_profile_dict(self): |
|
"""Return the current profile dict. |
|
|
|
This is internal information, and content should not be considered stable. |
|
""" |
|
return self._profile_dict |
|
|
|
|
|
class DefaultProfile(object): |
|
"""Store a default profile. |
|
|
|
:var ProfileDefinition profile: The default profile as class attribute |
|
""" |
|
profile = None |
|
|
|
def use(self, profile): |
|
"""Define a new default profile.""" |
|
if not isinstance(profile, (KnownProfiles, ProfileDefinition)): |
|
raise ValueError("Can only set as default a ProfileDefinition or a KnownProfiles") |
|
type(self).profile = profile |
|
|
|
def definition(self): |
|
return type(self).profile |
|
|
|
class KnownProfiles(Enum): |
|
"""This defines known Azure Profiles. |
|
|
|
There is two meta-profiles: |
|
|
|
- latest : will always use latest available api-version on each package |
|
- default : mutable, will define profile automatically for all packages |
|
|
|
If you change default, this changes all created packages on the fly to |
|
this profile. This can be used to switch a complete set of API Version |
|
without re-creating all clients. |
|
""" |
|
|
|
|
|
default = DefaultProfile() |
|
|
|
latest = ProfileDefinition(None, "latest") |
|
v2017_03_09_profile = ProfileDefinition( |
|
{ |
|
"azure.keyvault.KeyVaultClient":{ |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.authorization.AuthorizationManagementClient": { |
|
None: "2015-07-01" |
|
}, |
|
"azure.mgmt.compute.ComputeManagementClient": { |
|
None: "2016-03-30" |
|
}, |
|
"azure.mgmt.keyvault.KeyVaultManagementClient":{ |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.network.NetworkManagementClient": { |
|
None: "2015-06-15" |
|
}, |
|
"azure.mgmt.storage.StorageManagementClient": { |
|
None: "2016-01-01" |
|
}, |
|
"azure.mgmt.resource.policy.PolicyClient": { |
|
None: "2015-10-01-preview" |
|
}, |
|
"azure.mgmt.resource.locks.ManagementLockClient": { |
|
None: "2015-01-01" |
|
}, |
|
"azure.mgmt.resource.links.ManagementLinkClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.resources.ResourceManagementClient": { |
|
None: "2016-02-01" |
|
}, |
|
"azure.mgmt.resource.subscriptions.SubscriptionClient": { |
|
None: "2016-06-01" |
|
} |
|
}, |
|
"2017-03-09-profile" |
|
) |
|
v2018_03_01_hybrid = ProfileDefinition( |
|
{ |
|
"azure.keyvault.KeyVaultClient":{ |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.authorization.AuthorizationManagementClient": { |
|
None: "2015-07-01" |
|
}, |
|
"azure.mgmt.compute.ComputeManagementClient": { |
|
None: "2017-03-30" |
|
}, |
|
"azure.mgmt.keyvault.KeyVaultManagementClient":{ |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.network.NetworkManagementClient": { |
|
None: "2017-10-01" |
|
}, |
|
"azure.mgmt.storage.StorageManagementClient": { |
|
None: "2016-01-01" |
|
}, |
|
"azure.mgmt.resource.policy.PolicyClient": { |
|
None: "2016-12-01" |
|
}, |
|
"azure.mgmt.resource.locks.ManagementLockClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.links.ManagementLinkClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.resources.ResourceManagementClient": { |
|
None: "2018-02-01" |
|
}, |
|
"azure.mgmt.resource.subscriptions.SubscriptionClient": { |
|
None: "2016-06-01" |
|
}, |
|
"azure.mgmt.dns.DnsManagementClient": { |
|
None: "2016-04-01" |
|
} |
|
}, |
|
"2018-03-01-hybrid" |
|
) |
|
v2019_03_01_hybrid = ProfileDefinition( |
|
{ |
|
"azure.keyvault.KeyVaultClient": { |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.authorization.AuthorizationManagementClient": { |
|
None: "2015-07-01" |
|
}, |
|
"azure.mgmt.compute.ComputeManagementClient": { |
|
None: "2017-12-01", |
|
'resource_skus': '2017-09-01', |
|
'disks': '2017-03-30', |
|
'snapshots': '2017-03-30' |
|
}, |
|
"azure.mgmt.keyvault.KeyVaultManagementClient":{ |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.monitor.MonitorManagementClient": { |
|
'metric_definitions': '2018-01-01', |
|
'metrics': '2018-01-01', |
|
'diagnostic_settings': '2017-05-01-preview', |
|
'diagnostic_settings_category': '2017-05-01-preview', |
|
'event_categories': '2015-04-01', |
|
'operations': '2015-04-01', |
|
}, |
|
"azure.mgmt.network.NetworkManagementClient": { |
|
None: "2017-10-01" |
|
}, |
|
"azure.mgmt.storage.StorageManagementClient": { |
|
None: "2017-10-01" |
|
}, |
|
"azure.mgmt.resource.policy.PolicyClient": { |
|
None: "2016-12-01" |
|
}, |
|
"azure.mgmt.resource.locks.ManagementLockClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.links.ManagementLinkClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.resources.ResourceManagementClient": { |
|
None: "2018-05-01" |
|
}, |
|
"azure.mgmt.resource.subscriptions.SubscriptionClient": { |
|
None: "2016-06-01" |
|
}, |
|
"azure.mgmt.dns.DnsManagementClient": { |
|
None: "2016-04-01" |
|
} |
|
}, |
|
"2019-03-01-hybrid" |
|
) |
|
v2020_09_01_hybrid = ProfileDefinition( |
|
{ |
|
"azure.keyvault.KeyVaultClient": { |
|
None: "2016-10-01" |
|
}, |
|
"azure.mgmt.authorization.AuthorizationManagementClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.compute.ComputeManagementClient": { |
|
None: "2020-06-01", |
|
'resource_skus': '2019-04-01', |
|
'disks': '2019-07-01', |
|
'snapshots': '2019-07-01' |
|
}, |
|
"azure.mgmt.keyvault.KeyVaultManagementClient":{ |
|
None: "2019-09-01" |
|
}, |
|
"azure.mgmt.monitor.MonitorManagementClient": { |
|
'metric_definitions': '2018-01-01', |
|
'metrics': '2018-01-01', |
|
'diagnostic_settings': '2017-05-01-preview', |
|
'diagnostic_settings_category': '2017-05-01-preview', |
|
'event_categories': '2015-04-01', |
|
'operations': '2015-04-01', |
|
}, |
|
"azure.mgmt.network.NetworkManagementClient": { |
|
None: "2018-11-01" |
|
}, |
|
"azure.mgmt.storage.StorageManagementClient": { |
|
None: "2019-06-01" |
|
}, |
|
"azure.mgmt.resource.policy.PolicyClient": { |
|
None: "2016-12-01" |
|
}, |
|
"azure.mgmt.resource.locks.ManagementLockClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.links.ManagementLinkClient": { |
|
None: "2016-09-01" |
|
}, |
|
"azure.mgmt.resource.resources.ResourceManagementClient": { |
|
None: "2019-10-01" |
|
}, |
|
"azure.mgmt.resource.subscriptions.SubscriptionClient": { |
|
None: "2016-06-01" |
|
}, |
|
"azure.mgmt.dns.DnsManagementClient": { |
|
None: "2016-04-01" |
|
} |
|
}, |
|
"2020-09-01-hybrid" |
|
) |
|
|
|
|
|
def __init__(self, profile_definition): |
|
self._profile_definition = profile_definition |
|
|
|
def use(self, profile): |
|
if self is not type(self).default: |
|
raise ValueError("use can only be used for `default` profile") |
|
self.value.use(profile) |
|
|
|
def definition(self): |
|
if self is not type(self).default: |
|
raise ValueError("use can only be used for `default` profile") |
|
return self.value.definition() |
|
|
|
@classmethod |
|
def from_name(cls, profile_name): |
|
if profile_name == "default": |
|
return cls.default |
|
for profile in cls: |
|
if isinstance(profile.value, ProfileDefinition) and profile.value.label == profile_name: |
|
return profile |
|
raise ValueError("No profile called {}".format(profile_name)) |
|
|
|
|
|
|
|
KnownProfiles.default.use(KnownProfiles.latest) |
|
|