diff --git a/sdk/security/azure-mgmt-security/CHANGELOG.md b/sdk/security/azure-mgmt-security/CHANGELOG.md index 4ce328428f62..54dd9b82cef0 100644 --- a/sdk/security/azure-mgmt-security/CHANGELOG.md +++ b/sdk/security/azure-mgmt-security/CHANGELOG.md @@ -1,5 +1,142 @@ # Release History +## 1.0.0b1 (2020-11-02) + +This is beta preview version. + +This version uses a next-generation code generator that introduces important breaking changes, but also important new features (like unified authentication and async programming). + +**General breaking changes** + +- Credential system has been completly revamped: + + - `azure.common.credentials` or `msrestazure.azure_active_directory` instances are no longer supported, use the `azure-identity` classes instead: https://pypi.org/project/azure-identity/ + - `credentials` parameter has been renamed `credential` + +- The `config` attribute no longer exists on a client, configuration should be passed as kwarg. Example: `MyClient(credential, subscription_id, enable_logging=True)`. For a complete set of + supported options, see the [parameters accept in init documentation of azure-core](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#available-policies) +- You can't import a `version` module anymore, use `__version__` instead +- Operations that used to return a `msrest.polling.LROPoller` now returns a `azure.core.polling.LROPoller` and are prefixed with `begin_`. +- Exceptions tree have been simplified and most exceptions are now `azure.core.exceptions.HttpResponseError` (`CloudError` has been removed). +- Most of the operation kwarg have changed. Some of the most noticeable: + + - `raw` has been removed. Equivalent feature can be found using `cls`, a callback that will give access to internal HTTP response for advanced user + - For a complete set of + supported options, see the [parameters accept in Request documentation of azure-core](https://github.com/Azure/azure-sdk-for-python/blob/master/sdk/core/azure-core/CLIENT_LIBRARY_DEVELOPER.md#available-policies) + +**General new features** + +- Type annotations support using `typing`. SDKs are mypy ready. +- This client has now stable and official support for async. Check the `aio` namespace of your package to find the async client. +- This client now support natively tracing library like OpenCensus or OpenTelemetry. See this [tracing quickstart](https://github.com/Azure/azure-sdk-for-python/tree/master/sdk/core/azure-core-tracing-opentelemetry) for an overview. + +## 0.5.0 (2020-10-29) + +**Features** + + - Model SecureScoreControlDetails has a new parameter weight + - Model SecureScoreControlDetails has a new parameter percentage + - Model SecureScoreItem has a new parameter weight + - Model SecureScoreItem has a new parameter percentage + - Model SecureScoreControlScore has a new parameter percentage + - Added operation AlertsOperations.get_resource_group_level + - Added operation AlertsOperations.get_subscription_level + - Added operation AlertsOperations.update_resource_group_level_state_to_resolve + - Added operation AlertsOperations.list_subscription_level_by_region + - Added operation AlertsOperations.list_resource_group_level_by_region + - Added operation AlertsOperations.update_subscription_level_state_to_resolve + - Added operation AlertsOperations.update_subscription_level_state_to_dismiss + - Added operation AlertsOperations.update_resource_group_level_state_to_dismiss + - Added operation AlertsOperations.update_subscription_level_state_to_activate + - Added operation AlertsOperations.update_resource_group_level_state_to_activate + - Added operation group IotRecommendationTypesOperations + - Added operation group ConnectorsOperations + - Added operation group DeviceOperations + - Added operation group DevicesForSubscriptionOperations + - Added operation group IotDefenderSettingsOperations + - Added operation group IotAlertsOperations + - Added operation group DevicesForHubOperations + - Added operation group IotSensorsOperations + - Added operation group IotRecommendationsOperations + - Added operation group SecuritySolutionsOperations + - Added operation group SecuritySolutionsReferenceDataOperations + - Added operation group OnPremiseIotSensorsOperations + - Added operation group IotAlertTypesOperations + +**Breaking changes** + + - Model Alert has a new signature + - Removed operation AlertsOperations.list_subscription_level_alerts_by_region + - Removed operation AlertsOperations.update_resource_group_level_alert_state_to_dismiss + - Removed operation AlertsOperations.get_resource_group_level_alerts + - Removed operation AlertsOperations.update_subscription_level_alert_state_to_reactivate + - Removed operation AlertsOperations.get_subscription_level_alert + - Removed operation AlertsOperations.list_resource_group_level_alerts_by_region + - Removed operation AlertsOperations.update_resource_group_level_alert_state_to_reactivate + - Removed operation AlertsOperations.update_subscription_level_alert_state_to_dismiss + +## 0.4.1 (2020-06-12) + +**Bugfixes** + + - skip url-encoding for resource id + +## 0.4.0 (2020-06-05) + +**Features** + + - Model IoTSecuritySolutionModel has a new parameter unmasked_ip_logging_status + - Model InformationProtectionPolicy has a new parameter version + - Model JitNetworkAccessRequest has a new parameter justification + - Model SensitivityLabel has a new parameter description + - Model SensitivityLabel has a new parameter rank + - Model InformationType has a new parameter description + - Model AppWhitelistingGroup has a new parameter protection_mode + - Model JitNetworkAccessPolicyInitiateRequest has a new parameter justification + - Model VmRecommendation has a new parameter enforcement_support + - Model IoTSecurityAggregatedAlert has a new parameter top_devices_list + - Added operation AdaptiveApplicationControlsOperations.delete + - Added operation AlertsOperations.update_resource_group_level_alert_state_to_dismiss + - Added operation AlertsOperations.update_subscription_level_alert_state_to_dismiss + - Added operation AlertsOperations.update_subscription_level_alert_state_to_reactivate + - Added operation AlertsOperations.update_resource_group_level_alert_state_to_reactivate + - Added operation IotSecuritySolutionOperations.list_by_subscription + - Added operation IotSecuritySolutionOperations.list_by_resource_group + - Added operation IotSecuritySolutionOperations.create_or_update + - Added operation group SecureScoreControlDefinitionsOperations + - Added operation group AssessmentsMetadataOperations + - Added operation group SecureScoreControlsOperations + - Added operation group AlertsSuppressionRulesOperations + - Added operation group IotSecuritySolutionsAnalyticsAggregatedAlertOperations + - Added operation group SubAssessmentsOperations + - Added operation group AutomationsOperations + - Added operation group IotSecuritySolutionsAnalyticsRecommendationOperations + - Added operation group SecureScoresOperations + - Added operation group IotSecuritySolutionAnalyticsOperations + - Added operation group AdaptiveNetworkHardeningsOperations + - Added operation group AssessmentsOperations + - Added operation group DeviceSecurityGroupsOperations + +**Breaking changes** + + - Operation SettingsOperations.update has a new signature + - Operation AlertsOperations.list has a new signature + - Operation AlertsOperations.list_by_resource_group has a new signature + - Operation AlertsOperations.list_resource_group_level_alerts_by_region has a new signature + - Operation AlertsOperations.list_subscription_level_alerts_by_region has a new signature + - Operation JitNetworkAccessPoliciesOperations.initiate has a new signature + - Operation InformationProtectionPoliciesOperations.create_or_update has a new signature + - Removed operation AlertsOperations.update_resource_group_level_alert_state + - Removed operation AlertsOperations.update_subscription_level_alert_state + - Removed operation IotSecuritySolutionOperations.create + - Removed operation group IoTSecuritySolutionsResourceGroupOperations + - Removed operation group IoTSecuritySolutionsAnalyticsRecommendationsOperations + - Removed operation group IoTSecuritySolutionsAnalyticsRecommendationOperations + - Removed operation group IoTSecuritySolutionsOperations + - Removed operation group IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations + - Removed operation group IoTSecuritySolutionsAnalyticsAggregatedAlertOperations + - Removed operation group IoTSecuritySolutionsAnalyticsOperations + ## 0.3.0 (2019-08-01) **Features** diff --git a/sdk/security/azure-mgmt-security/README.md b/sdk/security/azure-mgmt-security/README.md index 8e6b91bad68f..f02de9ebde38 100644 --- a/sdk/security/azure-mgmt-security/README.md +++ b/sdk/security/azure-mgmt-security/README.md @@ -16,9 +16,15 @@ For a more complete set of Azure libraries, see the ## Usage -For code examples, see [Security Center -Management](https://docs.microsoft.com/python/api/overview/azure/) on -docs.microsoft.com. + +To learn how to use this package, see the [quickstart guide](https://aka.ms/azsdk/python/mgmt) + + + +For docs and references, see [Python SDK References](https://docs.microsoft.com/python/api/overview/azure/) +Code samples for this package can be found at [Security Center Management](https://docs.microsoft.com/samples/browse/?languages=python&term=Getting%20started%20-%20Managing&terms=Getting%20started%20-%20Managing) on docs.microsoft.com. +Additional code samples for different Azure services are available at [Samples Repo](https://aka.ms/azsdk/python/mgmt/samples) + ## Provide Feedback diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/__init__.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/__init__.py index 905fe754f6b2..48195ae40f80 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/__init__.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/__init__.py @@ -1,19 +1,19 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from ._configuration import SecurityCenterConfiguration from ._security_center import SecurityCenter -__all__ = ['SecurityCenter', 'SecurityCenterConfiguration'] - -from .version import VERSION +from ._version import VERSION __version__ = VERSION +__all__ = ['SecurityCenter'] +try: + from ._patch import patch_sdk # type: ignore + patch_sdk() +except ImportError: + pass diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/_configuration.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/_configuration.py index 9aa2b7aa11ce..9e9ac18611d0 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/_configuration.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/_configuration.py @@ -1,54 +1,76 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from msrestazure import AzureConfiguration -from .version import VERSION +from typing import TYPE_CHECKING +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy + +from ._version import VERSION + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any + + from azure.core.credentials import TokenCredential + + +class SecurityCenterConfiguration(Configuration): + """Configuration for SecurityCenter. -class SecurityCenterConfiguration(AzureConfiguration): - """Configuration for SecurityCenter Note that all parameters used to create this instance are saved as instance attributes. - :param credentials: Credentials needed for the client to connect to Azure. - :type credentials: :mod:`A msrestazure Credentials - object` - :param subscription_id: Azure subscription ID + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: Azure subscription ID. :type subscription_id: str - :param asc_location: The location where ASC stores the data of the - subscription. can be retrieved from Get locations + :param asc_location: The location where ASC stores the data of the subscription. can be retrieved from Get locations. :type asc_location: str - :param str base_url: Service URL """ def __init__( - self, credentials, subscription_id, asc_location, base_url=None): - - if credentials is None: - raise ValueError("Parameter 'credentials' must not be None.") + self, + credential, # type: "TokenCredential" + subscription_id, # type: str + asc_location, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") if subscription_id is None: raise ValueError("Parameter 'subscription_id' must not be None.") if asc_location is None: raise ValueError("Parameter 'asc_location' must not be None.") - if not base_url: - base_url = 'https://management.azure.com' - - super(SecurityCenterConfiguration, self).__init__(base_url) - - # Starting Autorest.Python 4.0.64, make connection pool activated by default - self.keep_alive = True + super(SecurityCenterConfiguration, self).__init__(**kwargs) - self.add_user_agent('azure-mgmt-security/{}'.format(VERSION)) - self.add_user_agent('Azure-SDK-For-Python') - - self.credentials = credentials + self.credential = credential self.subscription_id = subscription_id self.asc_location = asc_location + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-security/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/_security_center.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/_security_center.py index 342c5d61f0e1..3529d0b17678 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/_security_center.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/_security_center.py @@ -1,40 +1,39 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from msrest.service_client import SDKClient -from msrest import Serializer, Deserializer +from typing import TYPE_CHECKING + +from azure.mgmt.core import ARMPipelineClient +from msrest import Deserializer, Serializer + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Optional + + from azure.core.credentials import TokenCredential from ._configuration import SecurityCenterConfiguration from .operations import ComplianceResultsOperations from .operations import PricingsOperations -from .operations import AlertsOperations from .operations import SettingsOperations -from .operations import IoTSecuritySolutionsOperations -from .operations import IoTSecuritySolutionsResourceGroupOperations +from .operations import AdvancedThreatProtectionOperations +from .operations import DeviceSecurityGroupsOperations from .operations import IotSecuritySolutionOperations -from .operations import IoTSecuritySolutionsAnalyticsOperations -from .operations import IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations -from .operations import IoTSecuritySolutionsAnalyticsAggregatedAlertOperations -from .operations import IoTSecuritySolutionsAnalyticsRecommendationOperations -from .operations import IoTSecuritySolutionsAnalyticsRecommendationsOperations -from .operations import AllowedConnectionsOperations -from .operations import DiscoveredSecuritySolutionsOperations -from .operations import ExternalSecuritySolutionsOperations -from .operations import JitNetworkAccessPoliciesOperations -from .operations import AdaptiveApplicationControlsOperations +from .operations import IotSecuritySolutionAnalyticsOperations +from .operations import IotSecuritySolutionsAnalyticsAggregatedAlertOperations +from .operations import IotSecuritySolutionsAnalyticsRecommendationOperations +from .operations import IotAlertTypesOperations +from .operations import IotAlertsOperations +from .operations import IotRecommendationTypesOperations +from .operations import IotRecommendationsOperations from .operations import LocationsOperations from .operations import Operations from .operations import TasksOperations -from .operations import TopologyOperations -from .operations import AdvancedThreatProtectionOperations from .operations import AutoProvisioningSettingsOperations from .operations import CompliancesOperations from .operations import InformationProtectionPoliciesOperations @@ -43,159 +42,277 @@ from .operations import RegulatoryComplianceStandardsOperations from .operations import RegulatoryComplianceControlsOperations from .operations import RegulatoryComplianceAssessmentsOperations +from .operations import SubAssessmentsOperations +from .operations import AutomationsOperations +from .operations import AlertsSuppressionRulesOperations from .operations import ServerVulnerabilityAssessmentOperations +from .operations import AssessmentsMetadataOperations +from .operations import AssessmentsOperations +from .operations import AdaptiveApplicationControlsOperations +from .operations import AdaptiveNetworkHardeningsOperations +from .operations import AllowedConnectionsOperations +from .operations import TopologyOperations +from .operations import AlertsOperations +from .operations import JitNetworkAccessPoliciesOperations +from .operations import DiscoveredSecuritySolutionsOperations +from .operations import SecuritySolutionsReferenceDataOperations +from .operations import ExternalSecuritySolutionsOperations +from .operations import SecureScoresOperations +from .operations import SecureScoreControlsOperations +from .operations import SecureScoreControlDefinitionsOperations +from .operations import SecuritySolutionsOperations +from .operations import ConnectorsOperations +from .operations import IotDefenderSettingsOperations +from .operations import IotSensorsOperations +from .operations import DevicesForSubscriptionOperations +from .operations import DevicesForHubOperations +from .operations import DeviceOperations +from .operations import OnPremiseIotSensorsOperations from . import models -class SecurityCenter(SDKClient): - """API spec for Microsoft.Security (Azure Security Center) resource provider +class SecurityCenter(object): + """API spec for Microsoft.Security (Azure Security Center) resource provider. - :ivar config: Configuration for client. - :vartype config: SecurityCenterConfiguration - - :ivar compliance_results: ComplianceResults operations + :ivar compliance_results: ComplianceResultsOperations operations :vartype compliance_results: azure.mgmt.security.operations.ComplianceResultsOperations - :ivar pricings: Pricings operations + :ivar pricings: PricingsOperations operations :vartype pricings: azure.mgmt.security.operations.PricingsOperations - :ivar alerts: Alerts operations - :vartype alerts: azure.mgmt.security.operations.AlertsOperations - :ivar settings: Settings operations + :ivar settings: SettingsOperations operations :vartype settings: azure.mgmt.security.operations.SettingsOperations - :ivar io_tsecurity_solutions: IoTSecuritySolutions operations - :vartype io_tsecurity_solutions: azure.mgmt.security.operations.IoTSecuritySolutionsOperations - :ivar io_tsecurity_solutions_resource_group: IoTSecuritySolutionsResourceGroup operations - :vartype io_tsecurity_solutions_resource_group: azure.mgmt.security.operations.IoTSecuritySolutionsResourceGroupOperations - :ivar iot_security_solution: IotSecuritySolution operations + :ivar advanced_threat_protection: AdvancedThreatProtectionOperations operations + :vartype advanced_threat_protection: azure.mgmt.security.operations.AdvancedThreatProtectionOperations + :ivar device_security_groups: DeviceSecurityGroupsOperations operations + :vartype device_security_groups: azure.mgmt.security.operations.DeviceSecurityGroupsOperations + :ivar iot_security_solution: IotSecuritySolutionOperations operations :vartype iot_security_solution: azure.mgmt.security.operations.IotSecuritySolutionOperations - :ivar io_tsecurity_solutions_analytics: IoTSecuritySolutionsAnalytics operations - :vartype io_tsecurity_solutions_analytics: azure.mgmt.security.operations.IoTSecuritySolutionsAnalyticsOperations - :ivar io_tsecurity_solutions_analytics_aggregated_alerts: IoTSecuritySolutionsAnalyticsAggregatedAlerts operations - :vartype io_tsecurity_solutions_analytics_aggregated_alerts: azure.mgmt.security.operations.IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations - :ivar io_tsecurity_solutions_analytics_aggregated_alert: IoTSecuritySolutionsAnalyticsAggregatedAlert operations - :vartype io_tsecurity_solutions_analytics_aggregated_alert: azure.mgmt.security.operations.IoTSecuritySolutionsAnalyticsAggregatedAlertOperations - :ivar io_tsecurity_solutions_analytics_recommendation: IoTSecuritySolutionsAnalyticsRecommendation operations - :vartype io_tsecurity_solutions_analytics_recommendation: azure.mgmt.security.operations.IoTSecuritySolutionsAnalyticsRecommendationOperations - :ivar io_tsecurity_solutions_analytics_recommendations: IoTSecuritySolutionsAnalyticsRecommendations operations - :vartype io_tsecurity_solutions_analytics_recommendations: azure.mgmt.security.operations.IoTSecuritySolutionsAnalyticsRecommendationsOperations - :ivar allowed_connections: AllowedConnections operations - :vartype allowed_connections: azure.mgmt.security.operations.AllowedConnectionsOperations - :ivar discovered_security_solutions: DiscoveredSecuritySolutions operations - :vartype discovered_security_solutions: azure.mgmt.security.operations.DiscoveredSecuritySolutionsOperations - :ivar external_security_solutions: ExternalSecuritySolutions operations - :vartype external_security_solutions: azure.mgmt.security.operations.ExternalSecuritySolutionsOperations - :ivar jit_network_access_policies: JitNetworkAccessPolicies operations - :vartype jit_network_access_policies: azure.mgmt.security.operations.JitNetworkAccessPoliciesOperations - :ivar adaptive_application_controls: AdaptiveApplicationControls operations - :vartype adaptive_application_controls: azure.mgmt.security.operations.AdaptiveApplicationControlsOperations - :ivar locations: Locations operations + :ivar iot_security_solution_analytics: IotSecuritySolutionAnalyticsOperations operations + :vartype iot_security_solution_analytics: azure.mgmt.security.operations.IotSecuritySolutionAnalyticsOperations + :ivar iot_security_solutions_analytics_aggregated_alert: IotSecuritySolutionsAnalyticsAggregatedAlertOperations operations + :vartype iot_security_solutions_analytics_aggregated_alert: azure.mgmt.security.operations.IotSecuritySolutionsAnalyticsAggregatedAlertOperations + :ivar iot_security_solutions_analytics_recommendation: IotSecuritySolutionsAnalyticsRecommendationOperations operations + :vartype iot_security_solutions_analytics_recommendation: azure.mgmt.security.operations.IotSecuritySolutionsAnalyticsRecommendationOperations + :ivar iot_alert_types: IotAlertTypesOperations operations + :vartype iot_alert_types: azure.mgmt.security.operations.IotAlertTypesOperations + :ivar iot_alerts: IotAlertsOperations operations + :vartype iot_alerts: azure.mgmt.security.operations.IotAlertsOperations + :ivar iot_recommendation_types: IotRecommendationTypesOperations operations + :vartype iot_recommendation_types: azure.mgmt.security.operations.IotRecommendationTypesOperations + :ivar iot_recommendations: IotRecommendationsOperations operations + :vartype iot_recommendations: azure.mgmt.security.operations.IotRecommendationsOperations + :ivar locations: LocationsOperations operations :vartype locations: azure.mgmt.security.operations.LocationsOperations :ivar operations: Operations operations :vartype operations: azure.mgmt.security.operations.Operations - :ivar tasks: Tasks operations + :ivar tasks: TasksOperations operations :vartype tasks: azure.mgmt.security.operations.TasksOperations - :ivar topology: Topology operations - :vartype topology: azure.mgmt.security.operations.TopologyOperations - :ivar advanced_threat_protection: AdvancedThreatProtection operations - :vartype advanced_threat_protection: azure.mgmt.security.operations.AdvancedThreatProtectionOperations - :ivar auto_provisioning_settings: AutoProvisioningSettings operations + :ivar auto_provisioning_settings: AutoProvisioningSettingsOperations operations :vartype auto_provisioning_settings: azure.mgmt.security.operations.AutoProvisioningSettingsOperations - :ivar compliances: Compliances operations + :ivar compliances: CompliancesOperations operations :vartype compliances: azure.mgmt.security.operations.CompliancesOperations - :ivar information_protection_policies: InformationProtectionPolicies operations + :ivar information_protection_policies: InformationProtectionPoliciesOperations operations :vartype information_protection_policies: azure.mgmt.security.operations.InformationProtectionPoliciesOperations - :ivar security_contacts: SecurityContacts operations + :ivar security_contacts: SecurityContactsOperations operations :vartype security_contacts: azure.mgmt.security.operations.SecurityContactsOperations - :ivar workspace_settings: WorkspaceSettings operations + :ivar workspace_settings: WorkspaceSettingsOperations operations :vartype workspace_settings: azure.mgmt.security.operations.WorkspaceSettingsOperations - :ivar regulatory_compliance_standards: RegulatoryComplianceStandards operations + :ivar regulatory_compliance_standards: RegulatoryComplianceStandardsOperations operations :vartype regulatory_compliance_standards: azure.mgmt.security.operations.RegulatoryComplianceStandardsOperations - :ivar regulatory_compliance_controls: RegulatoryComplianceControls operations + :ivar regulatory_compliance_controls: RegulatoryComplianceControlsOperations operations :vartype regulatory_compliance_controls: azure.mgmt.security.operations.RegulatoryComplianceControlsOperations - :ivar regulatory_compliance_assessments: RegulatoryComplianceAssessments operations + :ivar regulatory_compliance_assessments: RegulatoryComplianceAssessmentsOperations operations :vartype regulatory_compliance_assessments: azure.mgmt.security.operations.RegulatoryComplianceAssessmentsOperations - :ivar server_vulnerability_assessment: ServerVulnerabilityAssessment operations + :ivar sub_assessments: SubAssessmentsOperations operations + :vartype sub_assessments: azure.mgmt.security.operations.SubAssessmentsOperations + :ivar automations: AutomationsOperations operations + :vartype automations: azure.mgmt.security.operations.AutomationsOperations + :ivar alerts_suppression_rules: AlertsSuppressionRulesOperations operations + :vartype alerts_suppression_rules: azure.mgmt.security.operations.AlertsSuppressionRulesOperations + :ivar server_vulnerability_assessment: ServerVulnerabilityAssessmentOperations operations :vartype server_vulnerability_assessment: azure.mgmt.security.operations.ServerVulnerabilityAssessmentOperations - - :param credentials: Credentials needed for the client to connect to Azure. - :type credentials: :mod:`A msrestazure Credentials - object` - :param subscription_id: Azure subscription ID + :ivar assessments_metadata: AssessmentsMetadataOperations operations + :vartype assessments_metadata: azure.mgmt.security.operations.AssessmentsMetadataOperations + :ivar assessments: AssessmentsOperations operations + :vartype assessments: azure.mgmt.security.operations.AssessmentsOperations + :ivar adaptive_application_controls: AdaptiveApplicationControlsOperations operations + :vartype adaptive_application_controls: azure.mgmt.security.operations.AdaptiveApplicationControlsOperations + :ivar adaptive_network_hardenings: AdaptiveNetworkHardeningsOperations operations + :vartype adaptive_network_hardenings: azure.mgmt.security.operations.AdaptiveNetworkHardeningsOperations + :ivar allowed_connections: AllowedConnectionsOperations operations + :vartype allowed_connections: azure.mgmt.security.operations.AllowedConnectionsOperations + :ivar topology: TopologyOperations operations + :vartype topology: azure.mgmt.security.operations.TopologyOperations + :ivar alerts: AlertsOperations operations + :vartype alerts: azure.mgmt.security.operations.AlertsOperations + :ivar jit_network_access_policies: JitNetworkAccessPoliciesOperations operations + :vartype jit_network_access_policies: azure.mgmt.security.operations.JitNetworkAccessPoliciesOperations + :ivar discovered_security_solutions: DiscoveredSecuritySolutionsOperations operations + :vartype discovered_security_solutions: azure.mgmt.security.operations.DiscoveredSecuritySolutionsOperations + :ivar security_solutions_reference_data: SecuritySolutionsReferenceDataOperations operations + :vartype security_solutions_reference_data: azure.mgmt.security.operations.SecuritySolutionsReferenceDataOperations + :ivar external_security_solutions: ExternalSecuritySolutionsOperations operations + :vartype external_security_solutions: azure.mgmt.security.operations.ExternalSecuritySolutionsOperations + :ivar secure_scores: SecureScoresOperations operations + :vartype secure_scores: azure.mgmt.security.operations.SecureScoresOperations + :ivar secure_score_controls: SecureScoreControlsOperations operations + :vartype secure_score_controls: azure.mgmt.security.operations.SecureScoreControlsOperations + :ivar secure_score_control_definitions: SecureScoreControlDefinitionsOperations operations + :vartype secure_score_control_definitions: azure.mgmt.security.operations.SecureScoreControlDefinitionsOperations + :ivar security_solutions: SecuritySolutionsOperations operations + :vartype security_solutions: azure.mgmt.security.operations.SecuritySolutionsOperations + :ivar connectors: ConnectorsOperations operations + :vartype connectors: azure.mgmt.security.operations.ConnectorsOperations + :ivar iot_defender_settings: IotDefenderSettingsOperations operations + :vartype iot_defender_settings: azure.mgmt.security.operations.IotDefenderSettingsOperations + :ivar iot_sensors: IotSensorsOperations operations + :vartype iot_sensors: azure.mgmt.security.operations.IotSensorsOperations + :ivar devices_for_subscription: DevicesForSubscriptionOperations operations + :vartype devices_for_subscription: azure.mgmt.security.operations.DevicesForSubscriptionOperations + :ivar devices_for_hub: DevicesForHubOperations operations + :vartype devices_for_hub: azure.mgmt.security.operations.DevicesForHubOperations + :ivar device: DeviceOperations operations + :vartype device: azure.mgmt.security.operations.DeviceOperations + :ivar on_premise_iot_sensors: OnPremiseIotSensorsOperations operations + :vartype on_premise_iot_sensors: azure.mgmt.security.operations.OnPremiseIotSensorsOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: Azure subscription ID. :type subscription_id: str - :param asc_location: The location where ASC stores the data of the - subscription. can be retrieved from Get locations + :param asc_location: The location where ASC stores the data of the subscription. can be retrieved from Get locations. :type asc_location: str :param str base_url: Service URL + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ def __init__( - self, credentials, subscription_id, asc_location, base_url=None): - - self.config = SecurityCenterConfiguration(credentials, subscription_id, asc_location, base_url) - super(SecurityCenter, self).__init__(self.config.credentials, self.config) + self, + credential, # type: "TokenCredential" + subscription_id, # type: str + asc_location, # type: str + base_url=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> None + if not base_url: + base_url = 'https://management.azure.com' + self._config = SecurityCenterConfiguration(credential, subscription_id, asc_location, **kwargs) + self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} self._serialize = Serializer(client_models) + self._serialize.client_side_validation = False self._deserialize = Deserializer(client_models) self.compliance_results = ComplianceResultsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.pricings = PricingsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.alerts = AlertsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.settings = SettingsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions = IoTSecuritySolutionsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions_resource_group = IoTSecuritySolutionsResourceGroupOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) + self.advanced_threat_protection = AdvancedThreatProtectionOperations( + self._client, self._config, self._serialize, self._deserialize) + self.device_security_groups = DeviceSecurityGroupsOperations( + self._client, self._config, self._serialize, self._deserialize) self.iot_security_solution = IotSecuritySolutionOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions_analytics = IoTSecuritySolutionsAnalyticsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions_analytics_aggregated_alerts = IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions_analytics_aggregated_alert = IoTSecuritySolutionsAnalyticsAggregatedAlertOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions_analytics_recommendation = IoTSecuritySolutionsAnalyticsRecommendationOperations( - self._client, self.config, self._serialize, self._deserialize) - self.io_tsecurity_solutions_analytics_recommendations = IoTSecuritySolutionsAnalyticsRecommendationsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.allowed_connections = AllowedConnectionsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.discovered_security_solutions = DiscoveredSecuritySolutionsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.external_security_solutions = ExternalSecuritySolutionsOperations( - self._client, self.config, self._serialize, self._deserialize) - self.jit_network_access_policies = JitNetworkAccessPoliciesOperations( - self._client, self.config, self._serialize, self._deserialize) - self.adaptive_application_controls = AdaptiveApplicationControlsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solution_analytics = IotSecuritySolutionAnalyticsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solutions_analytics_aggregated_alert = IotSecuritySolutionsAnalyticsAggregatedAlertOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solutions_analytics_recommendation = IotSecuritySolutionsAnalyticsRecommendationOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_alert_types = IotAlertTypesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_alerts = IotAlertsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_recommendation_types = IotRecommendationTypesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_recommendations = IotRecommendationsOperations( + self._client, self._config, self._serialize, self._deserialize) self.locations = LocationsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.operations = Operations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.tasks = TasksOperations( - self._client, self.config, self._serialize, self._deserialize) - self.topology = TopologyOperations( - self._client, self.config, self._serialize, self._deserialize) - self.advanced_threat_protection = AdvancedThreatProtectionOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.auto_provisioning_settings = AutoProvisioningSettingsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.compliances = CompliancesOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.information_protection_policies = InformationProtectionPoliciesOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.security_contacts = SecurityContactsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.workspace_settings = WorkspaceSettingsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.regulatory_compliance_standards = RegulatoryComplianceStandardsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.regulatory_compliance_controls = RegulatoryComplianceControlsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) self.regulatory_compliance_assessments = RegulatoryComplianceAssessmentsOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) + self.sub_assessments = SubAssessmentsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.automations = AutomationsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.alerts_suppression_rules = AlertsSuppressionRulesOperations( + self._client, self._config, self._serialize, self._deserialize) self.server_vulnerability_assessment = ServerVulnerabilityAssessmentOperations( - self._client, self.config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize) + self.assessments_metadata = AssessmentsMetadataOperations( + self._client, self._config, self._serialize, self._deserialize) + self.assessments = AssessmentsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.adaptive_application_controls = AdaptiveApplicationControlsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.adaptive_network_hardenings = AdaptiveNetworkHardeningsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.allowed_connections = AllowedConnectionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.topology = TopologyOperations( + self._client, self._config, self._serialize, self._deserialize) + self.alerts = AlertsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.jit_network_access_policies = JitNetworkAccessPoliciesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.discovered_security_solutions = DiscoveredSecuritySolutionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.security_solutions_reference_data = SecuritySolutionsReferenceDataOperations( + self._client, self._config, self._serialize, self._deserialize) + self.external_security_solutions = ExternalSecuritySolutionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.secure_scores = SecureScoresOperations( + self._client, self._config, self._serialize, self._deserialize) + self.secure_score_controls = SecureScoreControlsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.secure_score_control_definitions = SecureScoreControlDefinitionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.security_solutions = SecuritySolutionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.connectors = ConnectorsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_defender_settings = IotDefenderSettingsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_sensors = IotSensorsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.devices_for_subscription = DevicesForSubscriptionOperations( + self._client, self._config, self._serialize, self._deserialize) + self.devices_for_hub = DevicesForHubOperations( + self._client, self._config, self._serialize, self._deserialize) + self.device = DeviceOperations( + self._client, self._config, self._serialize, self._deserialize) + self.on_premise_iot_sensors = OnPremiseIotSensorsOperations( + self._client, self._config, self._serialize, self._deserialize) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> SecurityCenter + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/version.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/_version.py similarity index 84% rename from sdk/security/azure-mgmt-security/azure/mgmt/security/version.py rename to sdk/security/azure-mgmt-security/azure/mgmt/security/_version.py index 3e682bbd5fb1..e5754a47ce68 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/version.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/_version.py @@ -1,13 +1,9 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "0.3.0" - +VERSION = "1.0.0b1" diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/__init__.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/__init__.py new file mode 100644 index 000000000000..caee127a8081 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/__init__.py @@ -0,0 +1,10 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._security_center import SecurityCenter +__all__ = ['SecurityCenter'] diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/_configuration.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/_configuration.py new file mode 100644 index 000000000000..133510e3bace --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/_configuration.py @@ -0,0 +1,72 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy + +from .._version import VERSION + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + + +class SecurityCenterConfiguration(Configuration): + """Configuration for SecurityCenter. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: Azure subscription ID. + :type subscription_id: str + :param asc_location: The location where ASC stores the data of the subscription. can be retrieved from Get locations. + :type asc_location: str + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + asc_location: str, + **kwargs: Any + ) -> None: + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + if asc_location is None: + raise ValueError("Parameter 'asc_location' must not be None.") + super(SecurityCenterConfiguration, self).__init__(**kwargs) + + self.credential = credential + self.subscription_id = subscription_id + self.asc_location = asc_location + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-security/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/_security_center.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/_security_center.py new file mode 100644 index 000000000000..63584a59e78e --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/_security_center.py @@ -0,0 +1,312 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, Optional, TYPE_CHECKING + +from azure.mgmt.core import AsyncARMPipelineClient +from msrest import Deserializer, Serializer + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +from ._configuration import SecurityCenterConfiguration +from .operations import ComplianceResultsOperations +from .operations import PricingsOperations +from .operations import SettingsOperations +from .operations import AdvancedThreatProtectionOperations +from .operations import DeviceSecurityGroupsOperations +from .operations import IotSecuritySolutionOperations +from .operations import IotSecuritySolutionAnalyticsOperations +from .operations import IotSecuritySolutionsAnalyticsAggregatedAlertOperations +from .operations import IotSecuritySolutionsAnalyticsRecommendationOperations +from .operations import IotAlertTypesOperations +from .operations import IotAlertsOperations +from .operations import IotRecommendationTypesOperations +from .operations import IotRecommendationsOperations +from .operations import LocationsOperations +from .operations import Operations +from .operations import TasksOperations +from .operations import AutoProvisioningSettingsOperations +from .operations import CompliancesOperations +from .operations import InformationProtectionPoliciesOperations +from .operations import SecurityContactsOperations +from .operations import WorkspaceSettingsOperations +from .operations import RegulatoryComplianceStandardsOperations +from .operations import RegulatoryComplianceControlsOperations +from .operations import RegulatoryComplianceAssessmentsOperations +from .operations import SubAssessmentsOperations +from .operations import AutomationsOperations +from .operations import AlertsSuppressionRulesOperations +from .operations import ServerVulnerabilityAssessmentOperations +from .operations import AssessmentsMetadataOperations +from .operations import AssessmentsOperations +from .operations import AdaptiveApplicationControlsOperations +from .operations import AdaptiveNetworkHardeningsOperations +from .operations import AllowedConnectionsOperations +from .operations import TopologyOperations +from .operations import AlertsOperations +from .operations import JitNetworkAccessPoliciesOperations +from .operations import DiscoveredSecuritySolutionsOperations +from .operations import SecuritySolutionsReferenceDataOperations +from .operations import ExternalSecuritySolutionsOperations +from .operations import SecureScoresOperations +from .operations import SecureScoreControlsOperations +from .operations import SecureScoreControlDefinitionsOperations +from .operations import SecuritySolutionsOperations +from .operations import ConnectorsOperations +from .operations import IotDefenderSettingsOperations +from .operations import IotSensorsOperations +from .operations import DevicesForSubscriptionOperations +from .operations import DevicesForHubOperations +from .operations import DeviceOperations +from .operations import OnPremiseIotSensorsOperations +from .. import models + + +class SecurityCenter(object): + """API spec for Microsoft.Security (Azure Security Center) resource provider. + + :ivar compliance_results: ComplianceResultsOperations operations + :vartype compliance_results: azure.mgmt.security.aio.operations.ComplianceResultsOperations + :ivar pricings: PricingsOperations operations + :vartype pricings: azure.mgmt.security.aio.operations.PricingsOperations + :ivar settings: SettingsOperations operations + :vartype settings: azure.mgmt.security.aio.operations.SettingsOperations + :ivar advanced_threat_protection: AdvancedThreatProtectionOperations operations + :vartype advanced_threat_protection: azure.mgmt.security.aio.operations.AdvancedThreatProtectionOperations + :ivar device_security_groups: DeviceSecurityGroupsOperations operations + :vartype device_security_groups: azure.mgmt.security.aio.operations.DeviceSecurityGroupsOperations + :ivar iot_security_solution: IotSecuritySolutionOperations operations + :vartype iot_security_solution: azure.mgmt.security.aio.operations.IotSecuritySolutionOperations + :ivar iot_security_solution_analytics: IotSecuritySolutionAnalyticsOperations operations + :vartype iot_security_solution_analytics: azure.mgmt.security.aio.operations.IotSecuritySolutionAnalyticsOperations + :ivar iot_security_solutions_analytics_aggregated_alert: IotSecuritySolutionsAnalyticsAggregatedAlertOperations operations + :vartype iot_security_solutions_analytics_aggregated_alert: azure.mgmt.security.aio.operations.IotSecuritySolutionsAnalyticsAggregatedAlertOperations + :ivar iot_security_solutions_analytics_recommendation: IotSecuritySolutionsAnalyticsRecommendationOperations operations + :vartype iot_security_solutions_analytics_recommendation: azure.mgmt.security.aio.operations.IotSecuritySolutionsAnalyticsRecommendationOperations + :ivar iot_alert_types: IotAlertTypesOperations operations + :vartype iot_alert_types: azure.mgmt.security.aio.operations.IotAlertTypesOperations + :ivar iot_alerts: IotAlertsOperations operations + :vartype iot_alerts: azure.mgmt.security.aio.operations.IotAlertsOperations + :ivar iot_recommendation_types: IotRecommendationTypesOperations operations + :vartype iot_recommendation_types: azure.mgmt.security.aio.operations.IotRecommendationTypesOperations + :ivar iot_recommendations: IotRecommendationsOperations operations + :vartype iot_recommendations: azure.mgmt.security.aio.operations.IotRecommendationsOperations + :ivar locations: LocationsOperations operations + :vartype locations: azure.mgmt.security.aio.operations.LocationsOperations + :ivar operations: Operations operations + :vartype operations: azure.mgmt.security.aio.operations.Operations + :ivar tasks: TasksOperations operations + :vartype tasks: azure.mgmt.security.aio.operations.TasksOperations + :ivar auto_provisioning_settings: AutoProvisioningSettingsOperations operations + :vartype auto_provisioning_settings: azure.mgmt.security.aio.operations.AutoProvisioningSettingsOperations + :ivar compliances: CompliancesOperations operations + :vartype compliances: azure.mgmt.security.aio.operations.CompliancesOperations + :ivar information_protection_policies: InformationProtectionPoliciesOperations operations + :vartype information_protection_policies: azure.mgmt.security.aio.operations.InformationProtectionPoliciesOperations + :ivar security_contacts: SecurityContactsOperations operations + :vartype security_contacts: azure.mgmt.security.aio.operations.SecurityContactsOperations + :ivar workspace_settings: WorkspaceSettingsOperations operations + :vartype workspace_settings: azure.mgmt.security.aio.operations.WorkspaceSettingsOperations + :ivar regulatory_compliance_standards: RegulatoryComplianceStandardsOperations operations + :vartype regulatory_compliance_standards: azure.mgmt.security.aio.operations.RegulatoryComplianceStandardsOperations + :ivar regulatory_compliance_controls: RegulatoryComplianceControlsOperations operations + :vartype regulatory_compliance_controls: azure.mgmt.security.aio.operations.RegulatoryComplianceControlsOperations + :ivar regulatory_compliance_assessments: RegulatoryComplianceAssessmentsOperations operations + :vartype regulatory_compliance_assessments: azure.mgmt.security.aio.operations.RegulatoryComplianceAssessmentsOperations + :ivar sub_assessments: SubAssessmentsOperations operations + :vartype sub_assessments: azure.mgmt.security.aio.operations.SubAssessmentsOperations + :ivar automations: AutomationsOperations operations + :vartype automations: azure.mgmt.security.aio.operations.AutomationsOperations + :ivar alerts_suppression_rules: AlertsSuppressionRulesOperations operations + :vartype alerts_suppression_rules: azure.mgmt.security.aio.operations.AlertsSuppressionRulesOperations + :ivar server_vulnerability_assessment: ServerVulnerabilityAssessmentOperations operations + :vartype server_vulnerability_assessment: azure.mgmt.security.aio.operations.ServerVulnerabilityAssessmentOperations + :ivar assessments_metadata: AssessmentsMetadataOperations operations + :vartype assessments_metadata: azure.mgmt.security.aio.operations.AssessmentsMetadataOperations + :ivar assessments: AssessmentsOperations operations + :vartype assessments: azure.mgmt.security.aio.operations.AssessmentsOperations + :ivar adaptive_application_controls: AdaptiveApplicationControlsOperations operations + :vartype adaptive_application_controls: azure.mgmt.security.aio.operations.AdaptiveApplicationControlsOperations + :ivar adaptive_network_hardenings: AdaptiveNetworkHardeningsOperations operations + :vartype adaptive_network_hardenings: azure.mgmt.security.aio.operations.AdaptiveNetworkHardeningsOperations + :ivar allowed_connections: AllowedConnectionsOperations operations + :vartype allowed_connections: azure.mgmt.security.aio.operations.AllowedConnectionsOperations + :ivar topology: TopologyOperations operations + :vartype topology: azure.mgmt.security.aio.operations.TopologyOperations + :ivar alerts: AlertsOperations operations + :vartype alerts: azure.mgmt.security.aio.operations.AlertsOperations + :ivar jit_network_access_policies: JitNetworkAccessPoliciesOperations operations + :vartype jit_network_access_policies: azure.mgmt.security.aio.operations.JitNetworkAccessPoliciesOperations + :ivar discovered_security_solutions: DiscoveredSecuritySolutionsOperations operations + :vartype discovered_security_solutions: azure.mgmt.security.aio.operations.DiscoveredSecuritySolutionsOperations + :ivar security_solutions_reference_data: SecuritySolutionsReferenceDataOperations operations + :vartype security_solutions_reference_data: azure.mgmt.security.aio.operations.SecuritySolutionsReferenceDataOperations + :ivar external_security_solutions: ExternalSecuritySolutionsOperations operations + :vartype external_security_solutions: azure.mgmt.security.aio.operations.ExternalSecuritySolutionsOperations + :ivar secure_scores: SecureScoresOperations operations + :vartype secure_scores: azure.mgmt.security.aio.operations.SecureScoresOperations + :ivar secure_score_controls: SecureScoreControlsOperations operations + :vartype secure_score_controls: azure.mgmt.security.aio.operations.SecureScoreControlsOperations + :ivar secure_score_control_definitions: SecureScoreControlDefinitionsOperations operations + :vartype secure_score_control_definitions: azure.mgmt.security.aio.operations.SecureScoreControlDefinitionsOperations + :ivar security_solutions: SecuritySolutionsOperations operations + :vartype security_solutions: azure.mgmt.security.aio.operations.SecuritySolutionsOperations + :ivar connectors: ConnectorsOperations operations + :vartype connectors: azure.mgmt.security.aio.operations.ConnectorsOperations + :ivar iot_defender_settings: IotDefenderSettingsOperations operations + :vartype iot_defender_settings: azure.mgmt.security.aio.operations.IotDefenderSettingsOperations + :ivar iot_sensors: IotSensorsOperations operations + :vartype iot_sensors: azure.mgmt.security.aio.operations.IotSensorsOperations + :ivar devices_for_subscription: DevicesForSubscriptionOperations operations + :vartype devices_for_subscription: azure.mgmt.security.aio.operations.DevicesForSubscriptionOperations + :ivar devices_for_hub: DevicesForHubOperations operations + :vartype devices_for_hub: azure.mgmt.security.aio.operations.DevicesForHubOperations + :ivar device: DeviceOperations operations + :vartype device: azure.mgmt.security.aio.operations.DeviceOperations + :ivar on_premise_iot_sensors: OnPremiseIotSensorsOperations operations + :vartype on_premise_iot_sensors: azure.mgmt.security.aio.operations.OnPremiseIotSensorsOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: Azure subscription ID. + :type subscription_id: str + :param asc_location: The location where ASC stores the data of the subscription. can be retrieved from Get locations. + :type asc_location: str + :param str base_url: Service URL + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + asc_location: str, + base_url: Optional[str] = None, + **kwargs: Any + ) -> None: + if not base_url: + base_url = 'https://management.azure.com' + self._config = SecurityCenterConfiguration(credential, subscription_id, asc_location, **kwargs) + self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._serialize.client_side_validation = False + self._deserialize = Deserializer(client_models) + + self.compliance_results = ComplianceResultsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.pricings = PricingsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.settings = SettingsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.advanced_threat_protection = AdvancedThreatProtectionOperations( + self._client, self._config, self._serialize, self._deserialize) + self.device_security_groups = DeviceSecurityGroupsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solution = IotSecuritySolutionOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solution_analytics = IotSecuritySolutionAnalyticsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solutions_analytics_aggregated_alert = IotSecuritySolutionsAnalyticsAggregatedAlertOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_security_solutions_analytics_recommendation = IotSecuritySolutionsAnalyticsRecommendationOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_alert_types = IotAlertTypesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_alerts = IotAlertsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_recommendation_types = IotRecommendationTypesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_recommendations = IotRecommendationsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.locations = LocationsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize) + self.tasks = TasksOperations( + self._client, self._config, self._serialize, self._deserialize) + self.auto_provisioning_settings = AutoProvisioningSettingsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.compliances = CompliancesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.information_protection_policies = InformationProtectionPoliciesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.security_contacts = SecurityContactsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.workspace_settings = WorkspaceSettingsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.regulatory_compliance_standards = RegulatoryComplianceStandardsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.regulatory_compliance_controls = RegulatoryComplianceControlsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.regulatory_compliance_assessments = RegulatoryComplianceAssessmentsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.sub_assessments = SubAssessmentsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.automations = AutomationsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.alerts_suppression_rules = AlertsSuppressionRulesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.server_vulnerability_assessment = ServerVulnerabilityAssessmentOperations( + self._client, self._config, self._serialize, self._deserialize) + self.assessments_metadata = AssessmentsMetadataOperations( + self._client, self._config, self._serialize, self._deserialize) + self.assessments = AssessmentsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.adaptive_application_controls = AdaptiveApplicationControlsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.adaptive_network_hardenings = AdaptiveNetworkHardeningsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.allowed_connections = AllowedConnectionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.topology = TopologyOperations( + self._client, self._config, self._serialize, self._deserialize) + self.alerts = AlertsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.jit_network_access_policies = JitNetworkAccessPoliciesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.discovered_security_solutions = DiscoveredSecuritySolutionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.security_solutions_reference_data = SecuritySolutionsReferenceDataOperations( + self._client, self._config, self._serialize, self._deserialize) + self.external_security_solutions = ExternalSecuritySolutionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.secure_scores = SecureScoresOperations( + self._client, self._config, self._serialize, self._deserialize) + self.secure_score_controls = SecureScoreControlsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.secure_score_control_definitions = SecureScoreControlDefinitionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.security_solutions = SecuritySolutionsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.connectors = ConnectorsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_defender_settings = IotDefenderSettingsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iot_sensors = IotSensorsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.devices_for_subscription = DevicesForSubscriptionOperations( + self._client, self._config, self._serialize, self._deserialize) + self.devices_for_hub = DevicesForHubOperations( + self._client, self._config, self._serialize, self._deserialize) + self.device = DeviceOperations( + self._client, self._config, self._serialize, self._deserialize) + self.on_premise_iot_sensors = OnPremiseIotSensorsOperations( + self._client, self._config, self._serialize, self._deserialize) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "SecurityCenter": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/__init__.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/__init__.py new file mode 100644 index 000000000000..2d9e9af2b353 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/__init__.py @@ -0,0 +1,111 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._compliance_results_operations import ComplianceResultsOperations +from ._pricings_operations import PricingsOperations +from ._settings_operations import SettingsOperations +from ._advanced_threat_protection_operations import AdvancedThreatProtectionOperations +from ._device_security_groups_operations import DeviceSecurityGroupsOperations +from ._iot_security_solution_operations import IotSecuritySolutionOperations +from ._iot_security_solution_analytics_operations import IotSecuritySolutionAnalyticsOperations +from ._iot_security_solutions_analytics_aggregated_alert_operations import IotSecuritySolutionsAnalyticsAggregatedAlertOperations +from ._iot_security_solutions_analytics_recommendation_operations import IotSecuritySolutionsAnalyticsRecommendationOperations +from ._iot_alert_types_operations import IotAlertTypesOperations +from ._iot_alerts_operations import IotAlertsOperations +from ._iot_recommendation_types_operations import IotRecommendationTypesOperations +from ._iot_recommendations_operations import IotRecommendationsOperations +from ._locations_operations import LocationsOperations +from ._operations import Operations +from ._tasks_operations import TasksOperations +from ._auto_provisioning_settings_operations import AutoProvisioningSettingsOperations +from ._compliances_operations import CompliancesOperations +from ._information_protection_policies_operations import InformationProtectionPoliciesOperations +from ._security_contacts_operations import SecurityContactsOperations +from ._workspace_settings_operations import WorkspaceSettingsOperations +from ._regulatory_compliance_standards_operations import RegulatoryComplianceStandardsOperations +from ._regulatory_compliance_controls_operations import RegulatoryComplianceControlsOperations +from ._regulatory_compliance_assessments_operations import RegulatoryComplianceAssessmentsOperations +from ._sub_assessments_operations import SubAssessmentsOperations +from ._automations_operations import AutomationsOperations +from ._alerts_suppression_rules_operations import AlertsSuppressionRulesOperations +from ._server_vulnerability_assessment_operations import ServerVulnerabilityAssessmentOperations +from ._assessments_metadata_operations import AssessmentsMetadataOperations +from ._assessments_operations import AssessmentsOperations +from ._adaptive_application_controls_operations import AdaptiveApplicationControlsOperations +from ._adaptive_network_hardenings_operations import AdaptiveNetworkHardeningsOperations +from ._allowed_connections_operations import AllowedConnectionsOperations +from ._topology_operations import TopologyOperations +from ._alerts_operations import AlertsOperations +from ._jit_network_access_policies_operations import JitNetworkAccessPoliciesOperations +from ._discovered_security_solutions_operations import DiscoveredSecuritySolutionsOperations +from ._security_solutions_reference_data_operations import SecuritySolutionsReferenceDataOperations +from ._external_security_solutions_operations import ExternalSecuritySolutionsOperations +from ._secure_scores_operations import SecureScoresOperations +from ._secure_score_controls_operations import SecureScoreControlsOperations +from ._secure_score_control_definitions_operations import SecureScoreControlDefinitionsOperations +from ._security_solutions_operations import SecuritySolutionsOperations +from ._connectors_operations import ConnectorsOperations +from ._iot_defender_settings_operations import IotDefenderSettingsOperations +from ._iot_sensors_operations import IotSensorsOperations +from ._devices_for_subscription_operations import DevicesForSubscriptionOperations +from ._devices_for_hub_operations import DevicesForHubOperations +from ._device_operations import DeviceOperations +from ._on_premise_iot_sensors_operations import OnPremiseIotSensorsOperations + +__all__ = [ + 'ComplianceResultsOperations', + 'PricingsOperations', + 'SettingsOperations', + 'AdvancedThreatProtectionOperations', + 'DeviceSecurityGroupsOperations', + 'IotSecuritySolutionOperations', + 'IotSecuritySolutionAnalyticsOperations', + 'IotSecuritySolutionsAnalyticsAggregatedAlertOperations', + 'IotSecuritySolutionsAnalyticsRecommendationOperations', + 'IotAlertTypesOperations', + 'IotAlertsOperations', + 'IotRecommendationTypesOperations', + 'IotRecommendationsOperations', + 'LocationsOperations', + 'Operations', + 'TasksOperations', + 'AutoProvisioningSettingsOperations', + 'CompliancesOperations', + 'InformationProtectionPoliciesOperations', + 'SecurityContactsOperations', + 'WorkspaceSettingsOperations', + 'RegulatoryComplianceStandardsOperations', + 'RegulatoryComplianceControlsOperations', + 'RegulatoryComplianceAssessmentsOperations', + 'SubAssessmentsOperations', + 'AutomationsOperations', + 'AlertsSuppressionRulesOperations', + 'ServerVulnerabilityAssessmentOperations', + 'AssessmentsMetadataOperations', + 'AssessmentsOperations', + 'AdaptiveApplicationControlsOperations', + 'AdaptiveNetworkHardeningsOperations', + 'AllowedConnectionsOperations', + 'TopologyOperations', + 'AlertsOperations', + 'JitNetworkAccessPoliciesOperations', + 'DiscoveredSecuritySolutionsOperations', + 'SecuritySolutionsReferenceDataOperations', + 'ExternalSecuritySolutionsOperations', + 'SecureScoresOperations', + 'SecureScoreControlsOperations', + 'SecureScoreControlDefinitionsOperations', + 'SecuritySolutionsOperations', + 'ConnectorsOperations', + 'IotDefenderSettingsOperations', + 'IotSensorsOperations', + 'DevicesForSubscriptionOperations', + 'DevicesForHubOperations', + 'DeviceOperations', + 'OnPremiseIotSensorsOperations', +] diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_adaptive_application_controls_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_adaptive_application_controls_operations.py new file mode 100644 index 000000000000..9eeb03e6d1ed --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_adaptive_application_controls_operations.py @@ -0,0 +1,271 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AdaptiveApplicationControlsOperations: + """AdaptiveApplicationControlsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + include_path_recommendations: Optional[Union[bool, "models.Enum37"]] = None, + summary: Optional[Union[bool, "models.Enum38"]] = None, + **kwargs + ) -> "models.AdaptiveApplicationControlGroups": + """Gets a list of application control machine groups for the subscription. + + :param include_path_recommendations: Include the policy rules. + :type include_path_recommendations: str or ~azure.mgmt.security.models.Enum37 + :param summary: Return output in a summarized form. + :type summary: str or ~azure.mgmt.security.models.Enum38 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveApplicationControlGroups, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveApplicationControlGroups + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveApplicationControlGroups"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if include_path_recommendations is not None: + query_parameters['includePathRecommendations'] = self._serialize.query("include_path_recommendations", include_path_recommendations, 'bool') + if summary is not None: + query_parameters['summary'] = self._serialize.query("summary", summary, 'bool') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdaptiveApplicationControlGroups', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/applicationWhitelistings'} # type: ignore + + async def get( + self, + group_name: str, + **kwargs + ) -> "models.AdaptiveApplicationControlGroup": + """Gets an application control VM/server group. + + :param group_name: Name of an application control machine group. + :type group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveApplicationControlGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveApplicationControlGroup + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveApplicationControlGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdaptiveApplicationControlGroup', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} # type: ignore + + async def put( + self, + group_name: str, + body: "models.AdaptiveApplicationControlGroup", + **kwargs + ) -> "models.AdaptiveApplicationControlGroup": + """Update an application control machine group. + + :param group_name: Name of an application control machine group. + :type group_name: str + :param body: + :type body: ~azure.mgmt.security.models.AdaptiveApplicationControlGroup + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveApplicationControlGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveApplicationControlGroup + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveApplicationControlGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.put.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'AdaptiveApplicationControlGroup') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdaptiveApplicationControlGroup', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + put.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} # type: ignore + + async def delete( + self, + group_name: str, + **kwargs + ) -> None: + """Delete an application control machine group. + + :param group_name: Name of an application control machine group. + :type group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_adaptive_network_hardenings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_adaptive_network_hardenings_operations.py new file mode 100644 index 000000000000..7316dfab175c --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_adaptive_network_hardenings_operations.py @@ -0,0 +1,333 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AdaptiveNetworkHardeningsOperations: + """AdaptiveNetworkHardeningsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_extended_resource( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + **kwargs + ) -> AsyncIterable["models.AdaptiveNetworkHardeningsList"]: + """Gets a list of Adaptive Network Hardenings resources in scope of an extended resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AdaptiveNetworkHardeningsList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AdaptiveNetworkHardeningsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveNetworkHardeningsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_extended_resource.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AdaptiveNetworkHardeningsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_extended_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings'} # type: ignore + + async def get( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + adaptive_network_hardening_resource_name: str, + **kwargs + ) -> "models.AdaptiveNetworkHardening": + """Gets a single Adaptive Network Hardening resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :param adaptive_network_hardening_resource_name: The name of the Adaptive Network Hardening + resource. + :type adaptive_network_hardening_resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveNetworkHardening, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveNetworkHardening + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveNetworkHardening"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'adaptiveNetworkHardeningResourceName': self._serialize.url("adaptive_network_hardening_resource_name", adaptive_network_hardening_resource_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdaptiveNetworkHardening', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}'} # type: ignore + + async def _enforce_initial( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + adaptive_network_hardening_resource_name: str, + body: "models.AdaptiveNetworkHardeningEnforceRequest", + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + adaptive_network_hardening_enforce_action = "enforce" + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._enforce_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'adaptiveNetworkHardeningResourceName': self._serialize.url("adaptive_network_hardening_resource_name", adaptive_network_hardening_resource_name, 'str'), + 'adaptiveNetworkHardeningEnforceAction': self._serialize.url("adaptive_network_hardening_enforce_action", adaptive_network_hardening_enforce_action, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'AdaptiveNetworkHardeningEnforceRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _enforce_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}/{adaptiveNetworkHardeningEnforceAction}'} # type: ignore + + async def begin_enforce( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + adaptive_network_hardening_resource_name: str, + body: "models.AdaptiveNetworkHardeningEnforceRequest", + **kwargs + ) -> AsyncLROPoller[None]: + """Enforces the given rules on the NSG(s) listed in the request. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :param adaptive_network_hardening_resource_name: The name of the Adaptive Network Hardening + resource. + :type adaptive_network_hardening_resource_name: str + :param body: + :type body: ~azure.mgmt.security.models.AdaptiveNetworkHardeningEnforceRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._enforce_initial( + resource_group_name=resource_group_name, + resource_namespace=resource_namespace, + resource_type=resource_type, + resource_name=resource_name, + adaptive_network_hardening_resource_name=adaptive_network_hardening_resource_name, + body=body, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = AsyncARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_enforce.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}/{adaptiveNetworkHardeningEnforceAction}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_advanced_threat_protection_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_advanced_threat_protection_operations.py new file mode 100644 index 000000000000..97c3525b47de --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_advanced_threat_protection_operations.py @@ -0,0 +1,159 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AdvancedThreatProtectionOperations: + """AdvancedThreatProtectionOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_id: str, + **kwargs + ) -> "models.AdvancedThreatProtectionSetting": + """Gets the Advanced Threat Protection settings for the specified resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdvancedThreatProtectionSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdvancedThreatProtectionSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + setting_name = "current" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdvancedThreatProtectionSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}'} # type: ignore + + async def create( + self, + resource_id: str, + advanced_threat_protection_setting: "models.AdvancedThreatProtectionSetting", + **kwargs + ) -> "models.AdvancedThreatProtectionSetting": + """Creates or updates the Advanced Threat Protection settings on a specified resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param advanced_threat_protection_setting: Advanced Threat Protection Settings. + :type advanced_threat_protection_setting: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdvancedThreatProtectionSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdvancedThreatProtectionSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + setting_name = "current" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(advanced_threat_protection_setting, 'AdvancedThreatProtectionSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdvancedThreatProtectionSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_alerts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_alerts_operations.py new file mode 100644 index 000000000000..737f1c1063ce --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_alerts_operations.py @@ -0,0 +1,762 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AlertsOperations: + """AlertsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.AlertList"]: + """List all the alerts that are associated with the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alerts'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.AlertList"]: + """List all the alerts that are associated with the resource group. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/alerts'} # type: ignore + + def list_subscription_level_alerts_by_region( + self, + **kwargs + ) -> AsyncIterable["models.AlertList"]: + """List all the alerts that are associated with the subscription that are stored in a specific + location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_subscription_level_alerts_by_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_subscription_level_alerts_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts'} # type: ignore + + def list_resource_group_level_alerts_by_region( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.AlertList"]: + """List all the alerts that are associated with the resource group that are stored in a specific + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_resource_group_level_alerts_by_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_resource_group_level_alerts_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts'} # type: ignore + + async def get_subscription_level_alert( + self, + alert_name: str, + **kwargs + ) -> "models.Alert": + """Get an alert that is associated with a subscription. + + :param alert_name: Name of the alert object. + :type alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Alert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Alert + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Alert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get_subscription_level_alert.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Alert', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_subscription_level_alert.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}'} # type: ignore + + async def get_resource_group_level_alerts( + self, + alert_name: str, + resource_group_name: str, + **kwargs + ) -> "models.Alert": + """Get an alert that is associated a resource group or a resource in a resource group. + + :param alert_name: Name of the alert object. + :type alert_name: str + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Alert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Alert + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Alert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get_resource_group_level_alerts.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Alert', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_resource_group_level_alerts.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}'} # type: ignore + + async def update_subscription_level_alert_state_to_dismiss( + self, + alert_name: str, + **kwargs + ) -> None: + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_subscription_level_alert_state_to_dismiss.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_subscription_level_alert_state_to_dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/dismiss'} # type: ignore + + async def update_subscription_level_state_to_resolve( + self, + alert_name: str, + **kwargs + ) -> None: + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_subscription_level_state_to_resolve.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_subscription_level_state_to_resolve.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/resolve'} # type: ignore + + async def update_subscription_level_alert_state_to_reactivate( + self, + alert_name: str, + **kwargs + ) -> None: + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_subscription_level_alert_state_to_reactivate.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_subscription_level_alert_state_to_reactivate.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/activate'} # type: ignore + + async def update_resource_group_level_state_to_resolve( + self, + alert_name: str, + resource_group_name: str, + **kwargs + ) -> None: + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_resource_group_level_state_to_resolve.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_state_to_resolve.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/resolve'} # type: ignore + + async def update_resource_group_level_alert_state_to_dismiss( + self, + alert_name: str, + resource_group_name: str, + **kwargs + ) -> None: + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_resource_group_level_alert_state_to_dismiss.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_alert_state_to_dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/dismiss'} # type: ignore + + async def update_resource_group_level_alert_state_to_reactivate( + self, + alert_name: str, + resource_group_name: str, + **kwargs + ) -> None: + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_resource_group_level_alert_state_to_reactivate.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_alert_state_to_reactivate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/activate'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_alerts_suppression_rules_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_alerts_suppression_rules_operations.py new file mode 100644 index 000000000000..d4b474911326 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_alerts_suppression_rules_operations.py @@ -0,0 +1,280 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AlertsSuppressionRulesOperations: + """AlertsSuppressionRulesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + alert_type: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.AlertsSuppressionRulesList"]: + """List of all the dismiss rules for the given subscription. + + :param alert_type: Type of the alert to get rules for. + :type alert_type: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertsSuppressionRulesList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AlertsSuppressionRulesList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertsSuppressionRulesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if alert_type is not None: + query_parameters['AlertType'] = self._serialize.query("alert_type", alert_type, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AlertsSuppressionRulesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules'} # type: ignore + + async def get( + self, + alerts_suppression_rule_name: str, + **kwargs + ) -> "models.AlertsSuppressionRule": + """Get dismiss rule, with name: {alertsSuppressionRuleName}, for the given subscription. + + :param alerts_suppression_rule_name: The unique name of the suppression alert rule. + :type alerts_suppression_rule_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AlertsSuppressionRule, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AlertsSuppressionRule + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertsSuppressionRule"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'alertsSuppressionRuleName': self._serialize.url("alerts_suppression_rule_name", alerts_suppression_rule_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AlertsSuppressionRule', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}'} # type: ignore + + async def update( + self, + alerts_suppression_rule_name: str, + alerts_suppression_rule: "models.AlertsSuppressionRule", + **kwargs + ) -> "models.AlertsSuppressionRule": + """Update existing rule or create new rule if it doesn't exist. + + :param alerts_suppression_rule_name: The unique name of the suppression alert rule. + :type alerts_suppression_rule_name: str + :param alerts_suppression_rule: Suppression rule object. + :type alerts_suppression_rule: ~azure.mgmt.security.models.AlertsSuppressionRule + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AlertsSuppressionRule, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AlertsSuppressionRule + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertsSuppressionRule"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'alertsSuppressionRuleName': self._serialize.url("alerts_suppression_rule_name", alerts_suppression_rule_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(alerts_suppression_rule, 'AlertsSuppressionRule') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AlertsSuppressionRule', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}'} # type: ignore + + async def delete( + self, + alerts_suppression_rule_name: str, + **kwargs + ) -> None: + """Delete dismiss alert rule for this subscription. + + :param alerts_suppression_rule_name: The unique name of the suppression alert rule. + :type alerts_suppression_rule_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'alertsSuppressionRuleName': self._serialize.url("alerts_suppression_rule_name", alerts_suppression_rule_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_allowed_connections_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_allowed_connections_operations.py new file mode 100644 index 000000000000..96d127c59499 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_allowed_connections_operations.py @@ -0,0 +1,236 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AllowedConnectionsOperations: + """AllowedConnectionsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.AllowedConnectionsList"]: + """Gets the list of all possible traffic between resources for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AllowedConnectionsList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AllowedConnectionsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AllowedConnectionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AllowedConnectionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/allowedConnections'} # type: ignore + + def list_by_home_region( + self, + **kwargs + ) -> AsyncIterable["models.AllowedConnectionsList"]: + """Gets the list of all possible traffic between resources for the subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AllowedConnectionsList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AllowedConnectionsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AllowedConnectionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AllowedConnectionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections'} # type: ignore + + async def get( + self, + resource_group_name: str, + connection_type: Union[str, "models.ConnectionType"], + **kwargs + ) -> "models.AllowedConnectionsResource": + """Gets the list of all possible traffic between resources for the subscription and location, + based on connection type. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param connection_type: The type of allowed connections (Internal, External). + :type connection_type: str or ~azure.mgmt.security.models.ConnectionType + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AllowedConnectionsResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AllowedConnectionsResource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AllowedConnectionsResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'connectionType': self._serialize.url("connection_type", connection_type, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AllowedConnectionsResource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections/{connectionType}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_assessments_metadata_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_assessments_metadata_operations.py new file mode 100644 index 000000000000..9c5075b7b5fd --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_assessments_metadata_operations.py @@ -0,0 +1,391 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AssessmentsMetadataOperations: + """AssessmentsMetadataOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.SecurityAssessmentMetadataList"]: + """Get metadata information on all assessment types. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityAssessmentMetadataList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityAssessmentMetadataList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityAssessmentMetadataList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.Security/assessmentMetadata'} # type: ignore + + async def get( + self, + assessment_metadata_name: str, + **kwargs + ) -> "models.SecurityAssessmentMetadata": + """Get metadata information on an assessment type. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessmentMetadata, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadata"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessmentMetadata', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore + + def list_by_subscription( + self, + **kwargs + ) -> AsyncIterable["models.SecurityAssessmentMetadataList"]: + """Get metadata information on all assessment types in a specific subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityAssessmentMetadataList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityAssessmentMetadataList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityAssessmentMetadataList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata'} # type: ignore + + async def get_in_subscription( + self, + assessment_metadata_name: str, + **kwargs + ) -> "models.SecurityAssessmentMetadata": + """Get metadata information on an assessment type in a specific subscription. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessmentMetadata, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadata"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get_in_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessmentMetadata', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore + + async def create_in_subscription( + self, + assessment_metadata_name: str, + assessment_metadata: "models.SecurityAssessmentMetadata", + **kwargs + ) -> "models.SecurityAssessmentMetadata": + """Create metadata information on an assessment type in a specific subscription. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :param assessment_metadata: AssessmentMetadata object. + :type assessment_metadata: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessmentMetadata, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadata"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_in_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(assessment_metadata, 'SecurityAssessmentMetadata') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessmentMetadata', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore + + async def delete_in_subscription( + self, + assessment_metadata_name: str, + **kwargs + ) -> None: + """Delete metadata information on an assessment type in a specific subscription, will cause the + deletion of all the assessments of that type in that subscription. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete_in_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_assessments_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_assessments_operations.py new file mode 100644 index 000000000000..25f188094cde --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_assessments_operations.py @@ -0,0 +1,300 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AssessmentsOperations: + """AssessmentsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + scope: str, + **kwargs + ) -> AsyncIterable["models.SecurityAssessmentList"]: + """Get security assessments on all your scanned resources inside a scope. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityAssessmentList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/assessments'} # type: ignore + + async def get( + self, + resource_id: str, + assessment_name: str, + expand: Optional[Union[str, "models.ExpandEnum"]] = None, + **kwargs + ) -> "models.SecurityAssessment": + """Get a security assessment on your scanned resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :param expand: OData expand. Optional. + :type expand: str or ~azure.mgmt.security.models.ExpandEnum + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if expand is not None: + query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}'} # type: ignore + + async def create_or_update( + self, + resource_id: str, + assessment_name: str, + assessment: "models.SecurityAssessment", + **kwargs + ) -> "models.SecurityAssessment": + """Create a security assessment on your resource. An assessment metadata that describes this + assessment must be predefined with the same name before inserting the assessment result. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :param assessment: Calculated assessment on a pre-defined assessment metadata. + :type assessment: ~azure.mgmt.security.models.SecurityAssessment + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(assessment, 'SecurityAssessment') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('SecurityAssessment', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('SecurityAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}'} # type: ignore + + async def delete( + self, + resource_id: str, + assessment_name: str, + **kwargs + ) -> None: + """Delete a security assessment on your resource. An assessment metadata that describes this + assessment must be predefined with the same name before inserting the assessment result. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_auto_provisioning_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_auto_provisioning_settings_operations.py new file mode 100644 index 000000000000..3a0e3ace183d --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_auto_provisioning_settings_operations.py @@ -0,0 +1,224 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AutoProvisioningSettingsOperations: + """AutoProvisioningSettingsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.AutoProvisioningSettingList"]: + """Exposes the auto provisioning settings of the subscriptions. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AutoProvisioningSettingList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AutoProvisioningSettingList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutoProvisioningSettingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AutoProvisioningSettingList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings'} # type: ignore + + async def get( + self, + setting_name: str, + **kwargs + ) -> "models.AutoProvisioningSetting": + """Details of a specific setting. + + :param setting_name: Auto provisioning setting key. + :type setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutoProvisioningSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AutoProvisioningSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutoProvisioningSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AutoProvisioningSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}'} # type: ignore + + async def create( + self, + setting_name: str, + setting: "models.AutoProvisioningSetting", + **kwargs + ) -> "models.AutoProvisioningSetting": + """Details of a specific setting. + + :param setting_name: Auto provisioning setting key. + :type setting_name: str + :param setting: Auto provisioning setting key. + :type setting: ~azure.mgmt.security.models.AutoProvisioningSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutoProvisioningSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AutoProvisioningSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutoProvisioningSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(setting, 'AutoProvisioningSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AutoProvisioningSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_automations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_automations_operations.py new file mode 100644 index 000000000000..7eff00481615 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_automations_operations.py @@ -0,0 +1,436 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AutomationsOperations: + """AutomationsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.AutomationList"]: + """Lists all the security automations in the specified subscription. Use the 'nextLink' property + in the response to get the next page of security automations for the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AutomationList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AutomationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutomationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AutomationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/automations'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.AutomationList"]: + """Lists all the security automations in the specified resource group. Use the 'nextLink' property + in the response to get the next page of security automations for the specified resource group. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AutomationList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AutomationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutomationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AutomationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations'} # type: ignore + + async def get( + self, + resource_group_name: str, + automation_name: str, + **kwargs + ) -> "models.Automation": + """Retrieves information about the model of a security automation. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Automation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Automation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Automation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Automation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}'} # type: ignore + + async def create_or_update( + self, + resource_group_name: str, + automation_name: str, + automation: "models.Automation", + **kwargs + ) -> "models.Automation": + """Creates or updates a security automation. If a security automation is already created and a + subsequent request is issued for the same automation id, then it will be updated. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :param automation: The security automation resource. + :type automation: ~azure.mgmt.security.models.Automation + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Automation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Automation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Automation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(automation, 'Automation') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Automation', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Automation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}'} # type: ignore + + async def delete( + self, + resource_group_name: str, + automation_name: str, + **kwargs + ) -> None: + """Deletes a security automation. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}'} # type: ignore + + async def validate( + self, + resource_group_name: str, + automation_name: str, + automation: "models.Automation", + **kwargs + ) -> "models.AutomationValidationStatus": + """Validates the security automation model before create or update. Any validation errors are + returned to the client. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :param automation: The security automation resource. + :type automation: ~azure.mgmt.security.models.Automation + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutomationValidationStatus, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AutomationValidationStatus + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutomationValidationStatus"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.validate.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(automation, 'Automation') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AutomationValidationStatus', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + validate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}/validate'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_compliance_results_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_compliance_results_operations.py new file mode 100644 index 000000000000..51048cc0bc6a --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_compliance_results_operations.py @@ -0,0 +1,170 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ComplianceResultsOperations: + """ComplianceResultsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + scope: str, + **kwargs + ) -> AsyncIterable["models.ComplianceResultList"]: + """Security compliance results in the subscription. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ComplianceResultList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.ComplianceResultList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ComplianceResultList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ComplianceResultList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/complianceResults'} # type: ignore + + async def get( + self, + resource_id: str, + compliance_result_name: str, + **kwargs + ) -> "models.ComplianceResult": + """Security Compliance Result. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param compliance_result_name: name of the desired assessment compliance result. + :type compliance_result_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ComplianceResult, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ComplianceResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ComplianceResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'complianceResultName': self._serialize.url("compliance_result_name", compliance_result_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ComplianceResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/complianceResults/{complianceResultName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_compliances_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_compliances_operations.py new file mode 100644 index 000000000000..53d084445481 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_compliances_operations.py @@ -0,0 +1,172 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class CompliancesOperations: + """CompliancesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + scope: str, + **kwargs + ) -> AsyncIterable["models.ComplianceList"]: + """The Compliance scores of the specific management group. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ComplianceList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.ComplianceList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ComplianceList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ComplianceList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/compliances'} # type: ignore + + async def get( + self, + scope: str, + compliance_name: str, + **kwargs + ) -> "models.Compliance": + """Details of a specific Compliance. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param compliance_name: name of the Compliance. + :type compliance_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Compliance, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Compliance + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Compliance"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'complianceName': self._serialize.url("compliance_name", compliance_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Compliance', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/compliances/{complianceName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_connectors_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_connectors_operations.py new file mode 100644 index 000000000000..35c611a99784 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_connectors_operations.py @@ -0,0 +1,276 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ConnectorsOperations: + """ConnectorsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.ConnectorSettingList"]: + """Cloud accounts connectors of a subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ConnectorSettingList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.ConnectorSettingList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ConnectorSettingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ConnectorSettingList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors'} # type: ignore + + async def get( + self, + connector_name: str, + **kwargs + ) -> "models.ConnectorSetting": + """Details of a specific cloud account connector. + + :param connector_name: Name of the cloud account connector. + :type connector_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ConnectorSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ConnectorSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ConnectorSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'connectorName': self._serialize.url("connector_name", connector_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ConnectorSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}'} # type: ignore + + async def create_or_update( + self, + connector_name: str, + connector_setting: "models.ConnectorSetting", + **kwargs + ) -> "models.ConnectorSetting": + """Create a cloud account connector or update an existing one. Connect to your AWS cloud account + using either account credentials or role-based authentication. + + :param connector_name: Name of the cloud account connector. + :type connector_name: str + :param connector_setting: Settings for the cloud account connector. + :type connector_setting: ~azure.mgmt.security.models.ConnectorSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ConnectorSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ConnectorSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ConnectorSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'connectorName': self._serialize.url("connector_name", connector_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(connector_setting, 'ConnectorSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ConnectorSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}'} # type: ignore + + async def delete( + self, + connector_name: str, + **kwargs + ) -> None: + """Delete a cloud account connector from a subscription. + + :param connector_name: Name of the cloud account connector. + :type connector_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'connectorName': self._serialize.url("connector_name", connector_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_device_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_device_operations.py new file mode 100644 index 000000000000..347050ce22f9 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_device_operations.py @@ -0,0 +1,98 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DeviceOperations: + """DeviceOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_id: str, + device_id: str, + **kwargs + ) -> "models.Device": + """Get device. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_id: Identifier of the device. + :type device_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Device, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Device + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Device"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceId': self._serialize.url("device_id", device_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Device', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/devices/{deviceId}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_device_security_groups_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_device_security_groups_operations.py new file mode 100644 index 000000000000..2a3cfee73477 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_device_security_groups_operations.py @@ -0,0 +1,295 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DeviceSecurityGroupsOperations: + """DeviceSecurityGroupsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_id: str, + **kwargs + ) -> AsyncIterable["models.DeviceSecurityGroupList"]: + """Use this method get the list of device security groups for the specified IoT Hub resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DeviceSecurityGroupList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.DeviceSecurityGroupList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceSecurityGroupList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DeviceSecurityGroupList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups'} # type: ignore + + async def get( + self, + resource_id: str, + device_security_group_name: str, + **kwargs + ) -> "models.DeviceSecurityGroup": + """Use this method to get the device security group for the specified IoT Hub resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_security_group_name: The name of the device security group. Note that the name of + the device security group is case insensitive. + :type device_security_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DeviceSecurityGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.DeviceSecurityGroup + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceSecurityGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceSecurityGroupName': self._serialize.url("device_security_group_name", device_security_group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('DeviceSecurityGroup', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}'} # type: ignore + + async def create_or_update( + self, + resource_id: str, + device_security_group_name: str, + device_security_group: "models.DeviceSecurityGroup", + **kwargs + ) -> "models.DeviceSecurityGroup": + """Use this method to creates or updates the device security group on a specified IoT Hub + resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_security_group_name: The name of the device security group. Note that the name of + the device security group is case insensitive. + :type device_security_group_name: str + :param device_security_group: Security group object. + :type device_security_group: ~azure.mgmt.security.models.DeviceSecurityGroup + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DeviceSecurityGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.DeviceSecurityGroup + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceSecurityGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceSecurityGroupName': self._serialize.url("device_security_group_name", device_security_group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(device_security_group, 'DeviceSecurityGroup') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('DeviceSecurityGroup', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('DeviceSecurityGroup', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}'} # type: ignore + + async def delete( + self, + resource_id: str, + device_security_group_name: str, + **kwargs + ) -> None: + """User this method to deletes the device security group. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_security_group_name: The name of the device security group. Note that the name of + the device security group is case insensitive. + :type device_security_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceSecurityGroupName': self._serialize.url("device_security_group_name", device_security_group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_devices_for_hub_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_devices_for_hub_operations.py new file mode 100644 index 000000000000..39bd41ff6217 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_devices_for_hub_operations.py @@ -0,0 +1,126 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DevicesForHubOperations: + """DevicesForHubOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_id: str, + limit: Optional[int] = None, + skip_token: Optional[str] = None, + device_management_type: Optional[Union[str, "models.ManagementState"]] = None, + **kwargs + ) -> AsyncIterable["models.DeviceList"]: + """Get list of the devices for the specified IoT Hub resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :param device_management_type: Get devices only from specific type, Managed or Unmanaged. + :type device_management_type: str or ~azure.mgmt.security.models.ManagementState + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DeviceList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.DeviceList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + if device_management_type is not None: + query_parameters['deviceManagementType'] = self._serialize.query("device_management_type", device_management_type, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DeviceList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/devices'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_devices_for_subscription_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_devices_for_subscription_operations.py new file mode 100644 index 000000000000..eb002e884cba --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_devices_for_subscription_operations.py @@ -0,0 +1,123 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DevicesForSubscriptionOperations: + """DevicesForSubscriptionOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + limit: Optional[int] = None, + skip_token: Optional[str] = None, + device_management_type: Optional[Union[str, "models.ManagementState"]] = None, + **kwargs + ) -> AsyncIterable["models.DeviceList"]: + """Get list of the devices by their subscription. + + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :param device_management_type: Get devices only from specific type, Managed or Unmanaged. + :type device_management_type: str or ~azure.mgmt.security.models.ManagementState + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DeviceList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.DeviceList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + if device_management_type is not None: + query_parameters['deviceManagementType'] = self._serialize.query("device_management_type", device_management_type, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DeviceList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/devices'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_discovered_security_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_discovered_security_solutions_operations.py new file mode 100644 index 000000000000..5f1c62c3c46b --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_discovered_security_solutions_operations.py @@ -0,0 +1,235 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DiscoveredSecuritySolutionsOperations: + """DiscoveredSecuritySolutionsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.DiscoveredSecuritySolutionList"]: + """Gets a list of discovered Security Solutions for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiscoveredSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.DiscoveredSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiscoveredSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DiscoveredSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/discoveredSecuritySolutions'} # type: ignore + + def list_by_home_region( + self, + **kwargs + ) -> AsyncIterable["models.DiscoveredSecuritySolutionList"]: + """Gets a list of discovered Security Solutions for the subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiscoveredSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.DiscoveredSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiscoveredSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DiscoveredSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions'} # type: ignore + + async def get( + self, + resource_group_name: str, + discovered_security_solution_name: str, + **kwargs + ) -> "models.DiscoveredSecuritySolution": + """Gets a specific discovered Security Solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param discovered_security_solution_name: Name of a discovered security solution. + :type discovered_security_solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DiscoveredSecuritySolution, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.DiscoveredSecuritySolution + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiscoveredSecuritySolution"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'discoveredSecuritySolutionName': self._serialize.url("discovered_security_solution_name", discovered_security_solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('DiscoveredSecuritySolution', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions/{discoveredSecuritySolutionName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_external_security_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_external_security_solutions_operations.py new file mode 100644 index 000000000000..2233575807f0 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_external_security_solutions_operations.py @@ -0,0 +1,235 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ExternalSecuritySolutionsOperations: + """ExternalSecuritySolutionsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.ExternalSecuritySolutionList"]: + """Gets a list of external security solutions for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ExternalSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.ExternalSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExternalSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ExternalSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/externalSecuritySolutions'} # type: ignore + + def list_by_home_region( + self, + **kwargs + ) -> AsyncIterable["models.ExternalSecuritySolutionList"]: + """Gets a list of external Security Solutions for the subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ExternalSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.ExternalSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExternalSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('ExternalSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions'} # type: ignore + + async def get( + self, + resource_group_name: str, + external_security_solutions_name: str, + **kwargs + ) -> "models.ExternalSecuritySolution": + """Gets a specific external Security Solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param external_security_solutions_name: Name of an external security solution. + :type external_security_solutions_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ExternalSecuritySolution, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ExternalSecuritySolution + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExternalSecuritySolution"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'externalSecuritySolutionsName': self._serialize.url("external_security_solutions_name", external_security_solutions_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ExternalSecuritySolution', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions/{externalSecuritySolutionsName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_information_protection_policies_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_information_protection_policies_operations.py new file mode 100644 index 000000000000..e6e2c168f93c --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_information_protection_policies_operations.py @@ -0,0 +1,243 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class InformationProtectionPoliciesOperations: + """InformationProtectionPoliciesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + scope: str, + information_protection_policy_name: Union[str, "models.Enum17"], + **kwargs + ) -> "models.InformationProtectionPolicy": + """Details of the information protection policy. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param information_protection_policy_name: Name of the information protection policy. + :type information_protection_policy_name: str or ~azure.mgmt.security.models.Enum17 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: InformationProtectionPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.InformationProtectionPolicy + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.InformationProtectionPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'informationProtectionPolicyName': self._serialize.url("information_protection_policy_name", information_protection_policy_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('InformationProtectionPolicy', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}'} # type: ignore + + async def create_or_update( + self, + scope: str, + information_protection_policy_name: Union[str, "models.Enum17"], + information_protection_policy: "models.InformationProtectionPolicy", + **kwargs + ) -> "models.InformationProtectionPolicy": + """Details of the information protection policy. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param information_protection_policy_name: Name of the information protection policy. + :type information_protection_policy_name: str or ~azure.mgmt.security.models.Enum17 + :param information_protection_policy: Information protection policy. + :type information_protection_policy: ~azure.mgmt.security.models.InformationProtectionPolicy + :keyword callable cls: A custom type or function that will be passed the direct response + :return: InformationProtectionPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.InformationProtectionPolicy + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.InformationProtectionPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'informationProtectionPolicyName': self._serialize.url("information_protection_policy_name", information_protection_policy_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(information_protection_policy, 'InformationProtectionPolicy') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('InformationProtectionPolicy', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('InformationProtectionPolicy', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}'} # type: ignore + + def list( + self, + scope: str, + **kwargs + ) -> AsyncIterable["models.InformationProtectionPolicyList"]: + """Information protection policies of a specific management group. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either InformationProtectionPolicyList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.InformationProtectionPolicyList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.InformationProtectionPolicyList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('InformationProtectionPolicyList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_alert_types_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_alert_types_operations.py new file mode 100644 index 000000000000..c65c3b178bf9 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_alert_types_operations.py @@ -0,0 +1,163 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotAlertTypesOperations: + """IotAlertTypesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + resource_group_name: str, + solution_name: str, + **kwargs + ) -> "models.IotAlertTypeList": + """List IoT alert types. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotAlertTypeList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotAlertTypeList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlertTypeList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotAlertTypeList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlertTypes'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + iot_alert_type_name: str, + **kwargs + ) -> "models.IotAlertType": + """Get IoT alert type. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_alert_type_name: Name of the alert type. + :type iot_alert_type_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotAlertType, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotAlertType + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlertType"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotAlertTypeName': self._serialize.url("iot_alert_type_name", iot_alert_type_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotAlertType', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlertTypes/{iotAlertTypeName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_alerts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_alerts_operations.py new file mode 100644 index 000000000000..e94bf88b8645 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_alerts_operations.py @@ -0,0 +1,210 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotAlertsOperations: + """IotAlertsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name: str, + solution_name: str, + min_start_time_utc: Optional[str] = None, + max_start_time_utc: Optional[str] = None, + alert_type: Optional[str] = None, + compromised_entity: Optional[str] = None, + limit: Optional[int] = None, + skip_token: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.IotAlertList"]: + """List IoT alerts. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param min_start_time_utc: Filter by minimum startTimeUtc (ISO 8601 format). + :type min_start_time_utc: str + :param max_start_time_utc: Filter by maximum startTimeUtc (ISO 8601 format). + :type max_start_time_utc: str + :param alert_type: Filter by alert type. + :type alert_type: str + :param compromised_entity: Filter by compromised device. + :type compromised_entity: str + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IotAlertList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.IotAlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if min_start_time_utc is not None: + query_parameters['startTimeUtc>'] = self._serialize.query("min_start_time_utc", min_start_time_utc, 'str') + if max_start_time_utc is not None: + query_parameters['startTimeUtc<'] = self._serialize.query("max_start_time_utc", max_start_time_utc, 'str') + if alert_type is not None: + query_parameters['alertType'] = self._serialize.query("alert_type", alert_type, 'str') + if compromised_entity is not None: + query_parameters['compromisedEntity'] = self._serialize.query("compromised_entity", compromised_entity, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IotAlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlerts'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + iot_alert_id: str, + **kwargs + ) -> "models.IotAlert": + """Get IoT alert. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_alert_id: Id of the alert. + :type iot_alert_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotAlert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotAlert + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotAlertId': self._serialize.url("iot_alert_id", iot_alert_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotAlert', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlerts/{iotAlertId}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_defender_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_defender_settings_operations.py new file mode 100644 index 000000000000..1a6009b3c0f6 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_defender_settings_operations.py @@ -0,0 +1,300 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotDefenderSettingsOperations: + """IotDefenderSettingsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + **kwargs + ) -> "models.IotDefenderSettingsList": + """List IoT Defender Settings. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotDefenderSettingsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotDefenderSettingsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotDefenderSettingsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotDefenderSettingsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings'} # type: ignore + + async def get( + self, + **kwargs + ) -> "models.IotDefenderSettingsModel": + """Get IoT Defender Settings. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotDefenderSettingsModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotDefenderSettingsModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotDefenderSettingsModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotDefenderSettingsModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default'} # type: ignore + + async def create_or_update( + self, + iot_defender_settings_model: "models.IotDefenderSettingsModel", + **kwargs + ) -> "models.IotDefenderSettingsModel": + """Create or update IoT Defender settings. + + :param iot_defender_settings_model: The IoT defender settings model. + :type iot_defender_settings_model: ~azure.mgmt.security.models.IotDefenderSettingsModel + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotDefenderSettingsModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotDefenderSettingsModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotDefenderSettingsModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iot_defender_settings_model, 'IotDefenderSettingsModel') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IotDefenderSettingsModel', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IotDefenderSettingsModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default'} # type: ignore + + async def delete( + self, + **kwargs + ) -> None: + """Delete IoT Defender settings. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default'} # type: ignore + + async def package_downloads( + self, + **kwargs + ) -> "models.PackageDownloads": + """Information about downloadable packages. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PackageDownloads, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.PackageDownloads + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PackageDownloads"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.package_downloads.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PackageDownloads', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + package_downloads.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default/packageDownloads'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_recommendation_types_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_recommendation_types_operations.py new file mode 100644 index 000000000000..c52f8b294fb1 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_recommendation_types_operations.py @@ -0,0 +1,163 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotRecommendationTypesOperations: + """IotRecommendationTypesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + resource_group_name: str, + solution_name: str, + **kwargs + ) -> "models.IotRecommendationTypeList": + """List IoT recommendation types. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotRecommendationTypeList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotRecommendationTypeList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendationTypeList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotRecommendationTypeList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendationTypes'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + iot_recommendation_type_name: str, + **kwargs + ) -> "models.IotRecommendationType": + """Get IoT recommendation type. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_recommendation_type_name: Name of the recommendation type. + :type iot_recommendation_type_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotRecommendationType, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotRecommendationType + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendationType"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotRecommendationTypeName': self._serialize.url("iot_recommendation_type_name", iot_recommendation_type_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotRecommendationType', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendationTypes/{iotRecommendationTypeName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_recommendations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_recommendations_operations.py new file mode 100644 index 000000000000..b0b9d8003e01 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_recommendations_operations.py @@ -0,0 +1,200 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotRecommendationsOperations: + """IotRecommendationsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name: str, + solution_name: str, + recommendation_type: Optional[str] = None, + device_id: Optional[str] = None, + limit: Optional[int] = None, + skip_token: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.IotRecommendationList"]: + """List IoT recommendations. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param recommendation_type: Filter by recommendation type. + :type recommendation_type: str + :param device_id: Filter by device id. + :type device_id: str + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IotRecommendationList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.IotRecommendationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if recommendation_type is not None: + query_parameters['recommendationType'] = self._serialize.query("recommendation_type", recommendation_type, 'str') + if device_id is not None: + query_parameters['deviceId'] = self._serialize.query("device_id", device_id, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IotRecommendationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendations'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + iot_recommendation_id: str, + **kwargs + ) -> "models.IotRecommendation": + """Get IoT recommendation. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_recommendation_id: Id of the recommendation. + :type iot_recommendation_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotRecommendation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotRecommendation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotRecommendationId': self._serialize.url("iot_recommendation_id", iot_recommendation_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotRecommendation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendations/{iotRecommendationId}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solution_analytics_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solution_analytics_operations.py new file mode 100644 index 000000000000..7055857a4e11 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solution_analytics_operations.py @@ -0,0 +1,159 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionAnalyticsOperations: + """IotSecuritySolutionAnalyticsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + resource_group_name: str, + solution_name: str, + **kwargs + ) -> "models.IoTSecuritySolutionAnalyticsModelList": + """Use this method to get IoT security Analytics metrics in an array. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionAnalyticsModelList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionAnalyticsModelList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecuritySolutionAnalyticsModelList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + **kwargs + ) -> "models.IoTSecuritySolutionAnalyticsModel": + """Use this method to get IoT Security Analytics metrics. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionAnalyticsModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionAnalyticsModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecuritySolutionAnalyticsModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solution_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solution_operations.py new file mode 100644 index 000000000000..6eda27ac815f --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solution_operations.py @@ -0,0 +1,445 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionOperations: + """IotSecuritySolutionOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_subscription( + self, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.IoTSecuritySolutionsList"]: + """Use this method to get the list of IoT Security solutions by subscription. + + :param filter: Filter the IoT Security solution with OData syntax. Supports filtering by + iotHubs. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecuritySolutionsList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.IoTSecuritySolutionsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecuritySolutionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotSecuritySolutions'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.IoTSecuritySolutionsList"]: + """Use this method to get the list IoT Security solutions organized by resource group. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param filter: Filter the IoT Security solution with OData syntax. Supports filtering by + iotHubs. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecuritySolutionsList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.IoTSecuritySolutionsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecuritySolutionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + **kwargs + ) -> "models.IoTSecuritySolutionModel": + """User this method to get details of a specific IoT Security solution based on solution name. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore + + async def create_or_update( + self, + resource_group_name: str, + solution_name: str, + iot_security_solution_data: "models.IoTSecuritySolutionModel", + **kwargs + ) -> "models.IoTSecuritySolutionModel": + """Use this method to create or update yours IoT Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_security_solution_data: The security solution data. + :type iot_security_solution_data: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iot_security_solution_data, 'IoTSecuritySolutionModel') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore + + async def update( + self, + resource_group_name: str, + solution_name: str, + update_iot_security_solution_data: "models.UpdateIotSecuritySolutionData", + **kwargs + ) -> "models.IoTSecuritySolutionModel": + """Use this method to update existing IoT Security solution tags or user defined resources. To + update other fields use the CreateOrUpdate method. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param update_iot_security_solution_data: The security solution data. + :type update_iot_security_solution_data: ~azure.mgmt.security.models.UpdateIotSecuritySolutionData + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(update_iot_security_solution_data, 'UpdateIotSecuritySolutionData') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore + + async def delete( + self, + resource_group_name: str, + solution_name: str, + **kwargs + ) -> None: + """Use this method to delete yours IoT Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solutions_analytics_aggregated_alert_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solutions_analytics_aggregated_alert_operations.py new file mode 100644 index 000000000000..58fbd5028106 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solutions_analytics_aggregated_alert_operations.py @@ -0,0 +1,246 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionsAnalyticsAggregatedAlertOperations: + """IotSecuritySolutionsAnalyticsAggregatedAlertOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name: str, + solution_name: str, + top: Optional[int] = None, + **kwargs + ) -> AsyncIterable["models.IoTSecurityAggregatedAlertList"]: + """Use this method to get the aggregated alert list of yours IoT Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param top: Number of results to retrieve. + :type top: int + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecurityAggregatedAlertList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.IoTSecurityAggregatedAlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedAlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if top is not None: + query_parameters['$top'] = self._serialize.query("top", top, 'int') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecurityAggregatedAlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts'} # type: ignore + + async def get( + self, + resource_group_name: str, + solution_name: str, + aggregated_alert_name: str, + **kwargs + ) -> "models.IoTSecurityAggregatedAlert": + """Use this method to get a single the aggregated alert of yours IoT Security solution. This + aggregation is performed by alert name. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param aggregated_alert_name: Identifier of the aggregated alert. + :type aggregated_alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecurityAggregatedAlert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecurityAggregatedAlert + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedAlert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'aggregatedAlertName': self._serialize.url("aggregated_alert_name", aggregated_alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecurityAggregatedAlert', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}'} # type: ignore + + async def dismiss( + self, + resource_group_name: str, + solution_name: str, + aggregated_alert_name: str, + **kwargs + ) -> None: + """Use this method to dismiss an aggregated IoT Security Solution Alert. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param aggregated_alert_name: Identifier of the aggregated alert. + :type aggregated_alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.dismiss.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'aggregatedAlertName': self._serialize.url("aggregated_alert_name", aggregated_alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}/dismiss'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solutions_analytics_recommendation_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solutions_analytics_recommendation_operations.py new file mode 100644 index 000000000000..a507441222c2 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_security_solutions_analytics_recommendation_operations.py @@ -0,0 +1,187 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionsAnalyticsRecommendationOperations: + """IotSecuritySolutionsAnalyticsRecommendationOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def get( + self, + resource_group_name: str, + solution_name: str, + aggregated_recommendation_name: str, + **kwargs + ) -> "models.IoTSecurityAggregatedRecommendation": + """Use this method to get the aggregated security analytics recommendation of yours IoT Security + solution. This aggregation is performed by recommendation name. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param aggregated_recommendation_name: Name of the recommendation aggregated for this query. + :type aggregated_recommendation_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecurityAggregatedRecommendation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecurityAggregatedRecommendation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedRecommendation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'aggregatedRecommendationName': self._serialize.url("aggregated_recommendation_name", aggregated_recommendation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecurityAggregatedRecommendation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations/{aggregatedRecommendationName}'} # type: ignore + + def list( + self, + resource_group_name: str, + solution_name: str, + top: Optional[int] = None, + **kwargs + ) -> AsyncIterable["models.IoTSecurityAggregatedRecommendationList"]: + """Use this method to get the list of aggregated security analytics recommendations of yours IoT + Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param top: Number of results to retrieve. + :type top: int + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecurityAggregatedRecommendationList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.IoTSecurityAggregatedRecommendationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedRecommendationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if top is not None: + query_parameters['$top'] = self._serialize.query("top", top, 'int') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecurityAggregatedRecommendationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_sensors_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_sensors_operations.py new file mode 100644 index 000000000000..798b6ffbfe9b --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_iot_sensors_operations.py @@ -0,0 +1,323 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, IO, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IotSensorsOperations: + """IotSensorsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + scope: str, + **kwargs + ) -> "models.IotSensorsList": + """List IoT sensors. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotSensorsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotSensorsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotSensorsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotSensorsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors'} # type: ignore + + async def get( + self, + scope: str, + iot_sensor_name: str, + **kwargs + ) -> "models.IotSensor": + """Get IoT sensor. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}'} # type: ignore + + async def create_or_update( + self, + scope: str, + iot_sensor_name: str, + **kwargs + ) -> "models.IotSensor": + """Create or update IoT sensor. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.put(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IotSensor', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}'} # type: ignore + + async def delete( + self, + scope: str, + iot_sensor_name: str, + **kwargs + ) -> None: + """Delete IoT sensor. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}'} # type: ignore + + async def download_activation( + self, + scope: str, + iot_sensor_name: str, + **kwargs + ) -> IO: + """Download sensor activation file. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IO, or the result of cls(response) + :rtype: IO + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[IO] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/zip" + + # Construct URL + url = self.download_activation.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=True, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = response.stream_download(self._client._pipeline) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + download_activation.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}/downloadActivation'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_jit_network_access_policies_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_jit_network_access_policies_operations.py new file mode 100644 index 000000000000..68c03934acd6 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_jit_network_access_policies_operations.py @@ -0,0 +1,577 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class JitNetworkAccessPoliciesOperations: + """JitNetworkAccessPoliciesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.JitNetworkAccessPoliciesList"]: + """Policies for protecting resources using Just-in-Time access control. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/jitNetworkAccessPolicies'} # type: ignore + + def list_by_region( + self, + **kwargs + ) -> AsyncIterable["models.JitNetworkAccessPoliciesList"]: + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.JitNetworkAccessPoliciesList"]: + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/jitNetworkAccessPolicies'} # type: ignore + + def list_by_resource_group_and_region( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.JitNetworkAccessPoliciesList"]: + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group_and_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group_and_region.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies'} # type: ignore + + async def get( + self, + resource_group_name: str, + jit_network_access_policy_name: str, + **kwargs + ) -> "models.JitNetworkAccessPolicy": + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. + :type jit_network_access_policy_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: JitNetworkAccessPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.JitNetworkAccessPolicy + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('JitNetworkAccessPolicy', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} # type: ignore + + async def create_or_update( + self, + resource_group_name: str, + jit_network_access_policy_name: str, + body: "models.JitNetworkAccessPolicy", + **kwargs + ) -> "models.JitNetworkAccessPolicy": + """Create a policy for protecting resources using Just-in-Time access control. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. + :type jit_network_access_policy_name: str + :param body: + :type body: ~azure.mgmt.security.models.JitNetworkAccessPolicy + :keyword callable cls: A custom type or function that will be passed the direct response + :return: JitNetworkAccessPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.JitNetworkAccessPolicy + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'JitNetworkAccessPolicy') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('JitNetworkAccessPolicy', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} # type: ignore + + async def delete( + self, + resource_group_name: str, + jit_network_access_policy_name: str, + **kwargs + ) -> None: + """Delete a Just-in-Time access control policy. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. + :type jit_network_access_policy_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} # type: ignore + + async def initiate( + self, + resource_group_name: str, + jit_network_access_policy_name: str, + body: "models.JitNetworkAccessPolicyInitiateRequest", + **kwargs + ) -> "models.JitNetworkAccessRequest": + """Initiate a JIT access from a specific Just-in-Time policy configuration. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. + :type jit_network_access_policy_name: str + :param body: + :type body: ~azure.mgmt.security.models.JitNetworkAccessPolicyInitiateRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :return: JitNetworkAccessRequest, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.JitNetworkAccessRequest + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessRequest"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + jit_network_access_policy_initiate_type = "initiate" + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.initiate.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), + 'jitNetworkAccessPolicyInitiateType': self._serialize.url("jit_network_access_policy_initiate_type", jit_network_access_policy_initiate_type, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'JitNetworkAccessPolicyInitiateRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('JitNetworkAccessRequest', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + initiate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}/{jitNetworkAccessPolicyInitiateType}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_locations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_locations_operations.py new file mode 100644 index 000000000000..ca2f6bfef065 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_locations_operations.py @@ -0,0 +1,161 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class LocationsOperations: + """LocationsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.AscLocationList"]: + """The location of the responsible ASC of the specific subscription (home region). For each + subscription there is only one responsible location. The location in the response should be + used to read or write other resources in ASC according to their ID. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AscLocationList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.AscLocationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AscLocationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('AscLocationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations'} # type: ignore + + async def get( + self, + **kwargs + ) -> "models.AscLocation": + """Details of a specific location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AscLocation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AscLocation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AscLocation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AscLocation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_on_premise_iot_sensors_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_on_premise_iot_sensors_operations.py new file mode 100644 index 000000000000..da6215826a81 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_on_premise_iot_sensors_operations.py @@ -0,0 +1,308 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, IO, Optional, TypeVar, Union +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class OnPremiseIotSensorsOperations: + """OnPremiseIotSensorsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + **kwargs + ) -> "models.OnPremiseIotSensorsList": + """List on-premise IoT sensors. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OnPremiseIotSensorsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.OnPremiseIotSensorsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OnPremiseIotSensorsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OnPremiseIotSensorsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors'} # type: ignore + + async def get( + self, + on_premise_iot_sensor_name: str, + **kwargs + ) -> "models.OnPremiseIotSensor": + """Get on-premise IoT sensor. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OnPremiseIotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.OnPremiseIotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OnPremiseIotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OnPremiseIotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}'} # type: ignore + + async def create_or_update( + self, + on_premise_iot_sensor_name: str, + **kwargs + ) -> "models.OnPremiseIotSensor": + """Create or update on-premise IoT sensor. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OnPremiseIotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.OnPremiseIotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OnPremiseIotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.put(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('OnPremiseIotSensor', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('OnPremiseIotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}'} # type: ignore + + async def delete( + self, + on_premise_iot_sensor_name: str, + **kwargs + ) -> None: + """Delete on-premise IoT sensor. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}'} # type: ignore + + async def download_activation( + self, + on_premise_iot_sensor_name: str, + **kwargs + ) -> IO: + """Download sensor activation file. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IO, or the result of cls(response) + :rtype: IO + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[IO] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/zip" + + # Construct URL + url = self.download_activation.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=True, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = response.stream_download(self._client._pipeline) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + download_activation.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}/downloadActivation'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_operations.py new file mode 100644 index 000000000000..55406a931ad9 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_operations.py @@ -0,0 +1,104 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class Operations: + """Operations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.OperationList"]: + """Exposes all available operations for discovery purposes. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OperationList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.OperationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OperationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('OperationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.Security/operations'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_pricings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_pricings_operations.py new file mode 100644 index 000000000000..58d4de7b793d --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_pricings_operations.py @@ -0,0 +1,207 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class PricingsOperations: + """PricingsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + **kwargs + ) -> "models.PricingList": + """Lists Security Center pricing configurations in the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PricingList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.PricingList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PricingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2018-06-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PricingList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings'} # type: ignore + + async def get( + self, + pricing_name: str, + **kwargs + ) -> "models.Pricing": + """Gets a provided Security Center pricing configuration in the subscription. + + :param pricing_name: name of the pricing configuration. + :type pricing_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Pricing, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Pricing + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Pricing"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2018-06-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'pricingName': self._serialize.url("pricing_name", pricing_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Pricing', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}'} # type: ignore + + async def update( + self, + pricing_name: str, + pricing: "models.Pricing", + **kwargs + ) -> "models.Pricing": + """Updates a provided Security Center pricing configuration in the subscription. + + :param pricing_name: name of the pricing configuration. + :type pricing_name: str + :param pricing: Pricing object. + :type pricing: ~azure.mgmt.security.models.Pricing + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Pricing, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Pricing + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Pricing"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2018-06-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'pricingName': self._serialize.url("pricing_name", pricing_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(pricing, 'Pricing') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Pricing', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_assessments_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_assessments_operations.py new file mode 100644 index 000000000000..11fd8ae6a461 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_assessments_operations.py @@ -0,0 +1,184 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class RegulatoryComplianceAssessmentsOperations: + """RegulatoryComplianceAssessmentsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + regulatory_compliance_standard_name: str, + regulatory_compliance_control_name: str, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.RegulatoryComplianceAssessmentList"]: + """Details and state of assessments mapped to selected regulatory compliance control. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. + :type regulatory_compliance_standard_name: str + :param regulatory_compliance_control_name: Name of the regulatory compliance control object. + :type regulatory_compliance_control_name: str + :param filter: OData filter. Optional. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegulatoryComplianceAssessmentList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.RegulatoryComplianceAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), + 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('RegulatoryComplianceAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments'} # type: ignore + + async def get( + self, + regulatory_compliance_standard_name: str, + regulatory_compliance_control_name: str, + regulatory_compliance_assessment_name: str, + **kwargs + ) -> "models.RegulatoryComplianceAssessment": + """Supported regulatory compliance details and state for selected assessment. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. + :type regulatory_compliance_standard_name: str + :param regulatory_compliance_control_name: Name of the regulatory compliance control object. + :type regulatory_compliance_control_name: str + :param regulatory_compliance_assessment_name: Name of the regulatory compliance assessment + object. + :type regulatory_compliance_assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegulatoryComplianceAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.RegulatoryComplianceAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), + 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str'), + 'regulatoryComplianceAssessmentName': self._serialize.url("regulatory_compliance_assessment_name", regulatory_compliance_assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegulatoryComplianceAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments/{regulatoryComplianceAssessmentName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_controls_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_controls_operations.py new file mode 100644 index 000000000000..bd68b515f1e2 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_controls_operations.py @@ -0,0 +1,175 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class RegulatoryComplianceControlsOperations: + """RegulatoryComplianceControlsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + regulatory_compliance_standard_name: str, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.RegulatoryComplianceControlList"]: + """All supported regulatory compliance controls details and state for selected standard. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. + :type regulatory_compliance_standard_name: str + :param filter: OData filter. Optional. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegulatoryComplianceControlList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.RegulatoryComplianceControlList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceControlList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('RegulatoryComplianceControlList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls'} # type: ignore + + async def get( + self, + regulatory_compliance_standard_name: str, + regulatory_compliance_control_name: str, + **kwargs + ) -> "models.RegulatoryComplianceControl": + """Selected regulatory compliance control details and state. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. + :type regulatory_compliance_standard_name: str + :param regulatory_compliance_control_name: Name of the regulatory compliance control object. + :type regulatory_compliance_control_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegulatoryComplianceControl, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.RegulatoryComplianceControl + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceControl"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), + 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegulatoryComplianceControl', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_standards_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_standards_operations.py new file mode 100644 index 000000000000..1b7ea47c0151 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_regulatory_compliance_standards_operations.py @@ -0,0 +1,167 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class RegulatoryComplianceStandardsOperations: + """RegulatoryComplianceStandardsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.RegulatoryComplianceStandardList"]: + """Supported regulatory compliance standards details and state. + + :param filter: OData filter. Optional. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegulatoryComplianceStandardList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.RegulatoryComplianceStandardList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceStandardList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('RegulatoryComplianceStandardList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards'} # type: ignore + + async def get( + self, + regulatory_compliance_standard_name: str, + **kwargs + ) -> "models.RegulatoryComplianceStandard": + """Supported regulatory compliance details state for selected standard. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. + :type regulatory_compliance_standard_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegulatoryComplianceStandard, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.RegulatoryComplianceStandard + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceStandard"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('RegulatoryComplianceStandard', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_score_control_definitions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_score_control_definitions_operations.py new file mode 100644 index 000000000000..ea3c55095481 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_score_control_definitions_operations.py @@ -0,0 +1,171 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SecureScoreControlDefinitionsOperations: + """SecureScoreControlDefinitionsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.SecureScoreControlDefinitionList"]: + """List the available security controls, their assessments, and the max score. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlDefinitionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecureScoreControlDefinitionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlDefinitionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlDefinitionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.Security/secureScoreControlDefinitions'} # type: ignore + + def list_by_subscription( + self, + **kwargs + ) -> AsyncIterable["models.SecureScoreControlDefinitionList"]: + """For a specified subscription, list the available security controls, their assessments, and the + max score. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlDefinitionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecureScoreControlDefinitionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlDefinitionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlDefinitionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScoreControlDefinitions'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_score_controls_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_score_controls_operations.py new file mode 100644 index 000000000000..886e2ca4397a --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_score_controls_operations.py @@ -0,0 +1,189 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SecureScoreControlsOperations: + """SecureScoreControlsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_secure_score( + self, + secure_score_name: str, + expand: Optional[Union[str, "models.ExpandControlsEnum"]] = None, + **kwargs + ) -> AsyncIterable["models.SecureScoreControlList"]: + """Get all security controls for a specific initiative within a scope. + + :param secure_score_name: The initiative name. For the ASC Default initiative, use 'ascScore' + as in the sample request below. + :type secure_score_name: str + :param expand: OData expand. Optional. + :type expand: str or ~azure.mgmt.security.models.ExpandControlsEnum + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecureScoreControlList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_secure_score.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'secureScoreName': self._serialize.url("secure_score_name", secure_score_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if expand is not None: + query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_secure_score.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores/{secureScoreName}/secureScoreControls'} # type: ignore + + def list( + self, + expand: Optional[Union[str, "models.ExpandControlsEnum"]] = None, + **kwargs + ) -> AsyncIterable["models.SecureScoreControlList"]: + """Get all security controls within a scope. + + :param expand: OData expand. Optional. + :type expand: str or ~azure.mgmt.security.models.ExpandControlsEnum + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecureScoreControlList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if expand is not None: + query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScoreControls'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_scores_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_scores_operations.py new file mode 100644 index 000000000000..89ae226d2508 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_secure_scores_operations.py @@ -0,0 +1,164 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SecureScoresOperations: + """SecureScoresOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.SecureScoresList"]: + """List secure scores for all your Security Center initiatives within your current scope. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoresList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecureScoresList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoresList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoresList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores'} # type: ignore + + async def get( + self, + secure_score_name: str, + **kwargs + ) -> "models.SecureScoreItem": + """Get secure score for a specific Security Center initiative within your current scope. For the + ASC Default initiative, use 'ascScore'. + + :param secure_score_name: The initiative name. For the ASC Default initiative, use 'ascScore' + as in the sample request below. + :type secure_score_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecureScoreItem, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecureScoreItem + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreItem"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'secureScoreName': self._serialize.url("secure_score_name", secure_score_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecureScoreItem', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores/{secureScoreName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_contacts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_contacts_operations.py new file mode 100644 index 000000000000..590496f7b06e --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_contacts_operations.py @@ -0,0 +1,337 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SecurityContactsOperations: + """SecurityContactsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.SecurityContactList"]: + """Security contact configurations for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityContactList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityContactList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContactList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityContactList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts'} # type: ignore + + async def get( + self, + security_contact_name: str, + **kwargs + ) -> "models.SecurityContact": + """Security contact configurations for the subscription. + + :param security_contact_name: Name of the security contact object. + :type security_contact_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityContact, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityContact + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContact"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityContact', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore + + async def create( + self, + security_contact_name: str, + security_contact: "models.SecurityContact", + **kwargs + ) -> "models.SecurityContact": + """Security contact configurations for the subscription. + + :param security_contact_name: Name of the security contact object. + :type security_contact_name: str + :param security_contact: Security contact object. + :type security_contact: ~azure.mgmt.security.models.SecurityContact + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityContact, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityContact + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContact"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(security_contact, 'SecurityContact') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityContact', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore + + async def delete( + self, + security_contact_name: str, + **kwargs + ) -> None: + """Security contact configurations for the subscription. + + :param security_contact_name: Name of the security contact object. + :type security_contact_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore + + async def update( + self, + security_contact_name: str, + security_contact: "models.SecurityContact", + **kwargs + ) -> "models.SecurityContact": + """Security contact configurations for the subscription. + + :param security_contact_name: Name of the security contact object. + :type security_contact_name: str + :param security_contact: Security contact object. + :type security_contact: ~azure.mgmt.security.models.SecurityContact + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityContact, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityContact + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContact"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(security_contact, 'SecurityContact') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityContact', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_solutions_operations.py new file mode 100644 index 000000000000..3f427d8e88ed --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_solutions_operations.py @@ -0,0 +1,168 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SecuritySolutionsOperations: + """SecuritySolutionsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.SecuritySolutionList"]: + """Gets a list of Security Solutions for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securitySolutions'} # type: ignore + + async def get( + self, + resource_group_name: str, + security_solution_name: str, + **kwargs + ) -> "models.SecuritySolution": + """Gets a specific Security Solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param security_solution_name: Name of security solution. + :type security_solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySolution, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySolution + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolution"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'securitySolutionName': self._serialize.url("security_solution_name", security_solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySolution', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/securitySolutions/{securitySolutionName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_solutions_reference_data_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_solutions_reference_data_operations.py new file mode 100644 index 000000000000..c732c12f87e3 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_security_solutions_reference_data_operations.py @@ -0,0 +1,142 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SecuritySolutionsReferenceDataOperations: + """SecuritySolutionsReferenceDataOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list( + self, + **kwargs + ) -> "models.SecuritySolutionsReferenceDataList": + """Gets a list of all supported Security Solutions for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySolutionsReferenceDataList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySolutionsReferenceDataList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolutionsReferenceDataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySolutionsReferenceDataList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securitySolutionsReferenceData'} # type: ignore + + async def list_by_home_region( + self, + **kwargs + ) -> "models.SecuritySolutionsReferenceDataList": + """Gets list of all supported Security Solutions for subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySolutionsReferenceDataList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySolutionsReferenceDataList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolutionsReferenceDataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySolutionsReferenceDataList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/securitySolutionsReferenceData'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_server_vulnerability_assessment_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_server_vulnerability_assessment_operations.py new file mode 100644 index 000000000000..fee853e90827 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_server_vulnerability_assessment_operations.py @@ -0,0 +1,313 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ServerVulnerabilityAssessmentOperations: + """ServerVulnerabilityAssessmentOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + async def list_by_extended_resource( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + **kwargs + ) -> "models.ServerVulnerabilityAssessmentsList": + """Gets a list of server vulnerability assessment onboarding statuses on a given resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServerVulnerabilityAssessmentsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessmentsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServerVulnerabilityAssessmentsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.list_by_extended_resource.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ServerVulnerabilityAssessmentsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_by_extended_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments'} # type: ignore + + async def get( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + **kwargs + ) -> "models.ServerVulnerabilityAssessment": + """Gets a server vulnerability assessment onboarding statuses on a given resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServerVulnerabilityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServerVulnerabilityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + server_vulnerability_assessment = "default" + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'serverVulnerabilityAssessment': self._serialize.url("server_vulnerability_assessment", server_vulnerability_assessment, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ServerVulnerabilityAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} # type: ignore + + async def create_or_update( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + **kwargs + ) -> "models.ServerVulnerabilityAssessment": + """Creating a server vulnerability assessment on a resource, which will onboard a resource for + having a vulnerability assessment on it. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServerVulnerabilityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServerVulnerabilityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + server_vulnerability_assessment = "default" + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'serverVulnerabilityAssessment': self._serialize.url("server_vulnerability_assessment", server_vulnerability_assessment, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.put(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ServerVulnerabilityAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} # type: ignore + + async def delete( + self, + resource_group_name: str, + resource_namespace: str, + resource_type: str, + resource_name: str, + **kwargs + ) -> None: + """Removing server vulnerability assessment from a resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + server_vulnerability_assessment = "default" + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'serverVulnerabilityAssessment': self._serialize.url("server_vulnerability_assessment", server_vulnerability_assessment, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_settings_operations.py new file mode 100644 index 000000000000..a5af9849522b --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_settings_operations.py @@ -0,0 +1,224 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SettingsOperations: + """SettingsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.SettingsList"]: + """Settings about different configurations in security center. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SettingsList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SettingsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SettingsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SettingsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings'} # type: ignore + + async def get( + self, + setting_name: Union[str, "models.Enum3"], + **kwargs + ) -> "models.SettingResource": + """Settings of different configurations in security center. + + :param setting_name: Name of setting: (MCAS/WDATP). + :type setting_name: str or ~azure.mgmt.security.models.Enum3 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SettingResource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SettingResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SettingResource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}'} # type: ignore + + async def update( + self, + setting_name: Union[str, "models.Enum3"], + setting: "models.SettingResource", + **kwargs + ) -> "models.SettingResource": + """updating settings about different configurations in security center. + + :param setting_name: Name of setting: (MCAS/WDATP). + :type setting_name: str or ~azure.mgmt.security.models.Enum3 + :param setting: Setting object. + :type setting: ~azure.mgmt.security.models.SettingResource + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SettingResource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SettingResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(setting, 'SettingResource') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SettingResource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_sub_assessments_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_sub_assessments_operations.py new file mode 100644 index 000000000000..070a538b918c --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_sub_assessments_operations.py @@ -0,0 +1,251 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SubAssessmentsOperations: + """SubAssessmentsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_all( + self, + scope: str, + **kwargs + ) -> AsyncIterable["models.SecuritySubAssessmentList"]: + """Get security sub-assessments on all your scanned resources inside a subscription scope. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecuritySubAssessmentList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecuritySubAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySubAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_all.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecuritySubAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_all.metadata = {'url': '/{scope}/providers/Microsoft.Security/subAssessments'} # type: ignore + + def list( + self, + scope: str, + assessment_name: str, + **kwargs + ) -> AsyncIterable["models.SecuritySubAssessmentList"]: + """Get security sub-assessments on all your scanned resources inside a scope. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecuritySubAssessmentList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecuritySubAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySubAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecuritySubAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/assessments/{assessmentName}/subAssessments'} # type: ignore + + async def get( + self, + scope: str, + assessment_name: str, + sub_assessment_name: str, + **kwargs + ) -> "models.SecuritySubAssessment": + """Get a security sub-assessment on your scanned resource. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :param sub_assessment_name: The Sub-Assessment Key - Unique key for the sub-assessment type. + :type sub_assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySubAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySubAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySubAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + 'subAssessmentName': self._serialize.url("sub_assessment_name", sub_assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySubAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/assessments/{assessmentName}/subAssessments/{subAssessmentName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_tasks_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_tasks_operations.py new file mode 100644 index 000000000000..994c80870488 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_tasks_operations.py @@ -0,0 +1,494 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TasksOperations: + """TasksOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.SecurityTaskList"]: + """Recommended tasks that will help improve the security of the subscription proactively. + + :param filter: OData filter. Optional. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityTaskList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityTaskList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTaskList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityTaskList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/tasks'} # type: ignore + + def list_by_home_region( + self, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.SecurityTaskList"]: + """Recommended tasks that will help improve the security of the subscription proactively. + + :param filter: OData filter. Optional. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityTaskList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityTaskList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTaskList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityTaskList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks'} # type: ignore + + async def get_subscription_level_task( + self, + task_name: str, + **kwargs + ) -> "models.SecurityTask": + """Recommended tasks that will help improve the security of the subscription proactively. + + :param task_name: Name of the task object, will be a GUID. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityTask, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityTask + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTask"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_subscription_level_task.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'taskName': self._serialize.url("task_name", task_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityTask', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_subscription_level_task.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}'} # type: ignore + + async def update_subscription_level_task_state( + self, + task_name: str, + task_update_action_type: Union[str, "models.Enum15"], + **kwargs + ) -> None: + """Recommended tasks that will help improve the security of the subscription proactively. + + :param task_name: Name of the task object, will be a GUID. + :type task_name: str + :param task_update_action_type: Type of the action to do on the task. + :type task_update_action_type: str or ~azure.mgmt.security.models.Enum15 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.update_subscription_level_task_state.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'taskName': self._serialize.url("task_name", task_name, 'str'), + 'taskUpdateActionType': self._serialize.url("task_update_action_type", task_update_action_type, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_subscription_level_task_state.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + filter: Optional[str] = None, + **kwargs + ) -> AsyncIterable["models.SecurityTaskList"]: + """Recommended tasks that will help improve the security of the subscription proactively. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param filter: OData filter. Optional. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityTaskList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.SecurityTaskList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTaskList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityTaskList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks'} # type: ignore + + async def get_resource_group_level_task( + self, + resource_group_name: str, + task_name: str, + **kwargs + ) -> "models.SecurityTask": + """Recommended tasks that will help improve the security of the subscription proactively. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param task_name: Name of the task object, will be a GUID. + :type task_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityTask, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityTask + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTask"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.get_resource_group_level_task.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'taskName': self._serialize.url("task_name", task_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityTask', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_resource_group_level_task.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}'} # type: ignore + + async def update_resource_group_level_task_state( + self, + resource_group_name: str, + task_name: str, + task_update_action_type: Union[str, "models.Enum15"], + **kwargs + ) -> None: + """Recommended tasks that will help improve the security of the subscription proactively. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param task_name: Name of the task object, will be a GUID. + :type task_name: str + :param task_update_action_type: Type of the action to do on the task. + :type task_update_action_type: str or ~azure.mgmt.security.models.Enum15 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + + # Construct URL + url = self.update_resource_group_level_task_state.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'taskName': self._serialize.url("task_name", task_name, 'str'), + 'taskUpdateActionType': self._serialize.url("task_update_action_type", task_update_action_type, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_task_state.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_topology_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_topology_operations.py new file mode 100644 index 000000000000..df49ed5f9a40 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_topology_operations.py @@ -0,0 +1,235 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TopologyOperations: + """TopologyOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.TopologyList"]: + """Gets a list that allows to build a topology view of a subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TopologyList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.TopologyList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TopologyList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('TopologyList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/topologies'} # type: ignore + + def list_by_home_region( + self, + **kwargs + ) -> AsyncIterable["models.TopologyList"]: + """Gets a list that allows to build a topology view of a subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TopologyList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.TopologyList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TopologyList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('TopologyList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/topologies'} # type: ignore + + async def get( + self, + resource_group_name: str, + topology_resource_name: str, + **kwargs + ) -> "models.TopologyResource": + """Gets a specific topology component. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param topology_resource_name: Name of a topology resources collection. + :type topology_resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TopologyResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.TopologyResource + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TopologyResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'topologyResourceName': self._serialize.url("topology_resource_name", topology_resource_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TopologyResource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/topologies/{topologyResourceName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_workspace_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_workspace_settings_operations.py new file mode 100644 index 000000000000..677854394a14 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/aio/operations/_workspace_settings_operations.py @@ -0,0 +1,340 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class WorkspaceSettingsOperations: + """WorkspaceSettingsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.WorkspaceSettingList"]: + """Settings about where we should store your security data and logs. If the result is empty, it + means that no custom-workspace configuration was set. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either WorkspaceSettingList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.security.models.WorkspaceSettingList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSettingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('WorkspaceSettingList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings'} # type: ignore + + async def get( + self, + workspace_setting_name: str, + **kwargs + ) -> "models.WorkspaceSetting": + """Settings about where we should store your security data and logs. If the result is empty, it + means that no custom-workspace configuration was set. + + :param workspace_setting_name: Name of the security setting. + :type workspace_setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: WorkspaceSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.WorkspaceSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('WorkspaceSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore + + async def create( + self, + workspace_setting_name: str, + workspace_setting: "models.WorkspaceSetting", + **kwargs + ) -> "models.WorkspaceSetting": + """creating settings about where we should store your security data and logs. + + :param workspace_setting_name: Name of the security setting. + :type workspace_setting_name: str + :param workspace_setting: Security data setting object. + :type workspace_setting: ~azure.mgmt.security.models.WorkspaceSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: WorkspaceSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.WorkspaceSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(workspace_setting, 'WorkspaceSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('WorkspaceSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore + + async def update( + self, + workspace_setting_name: str, + workspace_setting: "models.WorkspaceSetting", + **kwargs + ) -> "models.WorkspaceSetting": + """Settings about where we should store your security data and logs. + + :param workspace_setting_name: Name of the security setting. + :type workspace_setting_name: str + :param workspace_setting: Security data setting object. + :type workspace_setting: ~azure.mgmt.security.models.WorkspaceSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: WorkspaceSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.WorkspaceSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(workspace_setting, 'WorkspaceSetting') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('WorkspaceSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore + + async def delete( + self, + workspace_setting_name: str, + **kwargs + ) -> None: + """Deletes the custom workspace settings for this subscription. new VMs will report to the default + workspace. + + :param workspace_setting_name: Name of the security setting. + :type workspace_setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/__init__.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/__init__.py index b09be32d96b1..69511b360358 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/__init__.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/__init__.py @@ -1,60 +1,133 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- try: - from ._models_py3 import AadConnectivityState1 + from ._models_py3 import AadConnectivityState from ._models_py3 import AadExternalSecuritySolution from ._models_py3 import AadSolutionProperties + from ._models_py3 import ActiveConnectionsNotInAllowedRange + from ._models_py3 import AdaptiveApplicationControlGroup + from ._models_py3 import AdaptiveApplicationControlGroups + from ._models_py3 import AdaptiveApplicationControlIssueSummary + from ._models_py3 import AdaptiveNetworkHardening + from ._models_py3 import AdaptiveNetworkHardeningEnforceRequest + from ._models_py3 import AdaptiveNetworkHardeningsList + from ._models_py3 import AdditionalData from ._models_py3 import AdvancedThreatProtectionSetting from ._models_py3 import Alert - from ._models_py3 import AlertConfidenceReason from ._models_py3 import AlertEntity + from ._models_py3 import AlertList + from ._models_py3 import AlertsSuppressionRule + from ._models_py3 import AlertsSuppressionRulesList + from ._models_py3 import AllowedConnectionsList from ._models_py3 import AllowedConnectionsResource - from ._models_py3 import AppWhitelistingGroup - from ._models_py3 import AppWhitelistingGroups - from ._models_py3 import AppWhitelistingIssueSummary - from ._models_py3 import AppWhitelistingPutGroupData + from ._models_py3 import AllowlistCustomAlertRule + from ._models_py3 import AmqpC2DMessagesNotInAllowedRange + from ._models_py3 import AmqpC2DRejectedMessagesNotInAllowedRange + from ._models_py3 import AmqpD2CMessagesNotInAllowedRange from ._models_py3 import AscLocation + from ._models_py3 import AscLocationList + from ._models_py3 import AssessmentLinks + from ._models_py3 import AssessmentStatus from ._models_py3 import AtaExternalSecuritySolution from ._models_py3 import AtaSolutionProperties + from ._models_py3 import AuthenticationDetailsProperties from ._models_py3 import AutoProvisioningSetting + from ._models_py3 import AutoProvisioningSettingList + from ._models_py3 import Automation + from ._models_py3 import AutomationAction + from ._models_py3 import AutomationActionEventHub + from ._models_py3 import AutomationActionLogicApp + from ._models_py3 import AutomationActionWorkspace + from ._models_py3 import AutomationList + from ._models_py3 import AutomationRuleSet + from ._models_py3 import AutomationScope + from ._models_py3 import AutomationSource + from ._models_py3 import AutomationTriggeringRule + from ._models_py3 import AutomationValidationStatus + from ._models_py3 import AwAssumeRoleAuthenticationDetailsProperties + from ._models_py3 import AwsCredsAuthenticationDetailsProperties + from ._models_py3 import AzureResourceDetails + from ._models_py3 import AzureResourceIdentifier + from ._models_py3 import AzureResourceLink + from ._models_py3 import AzureTrackedResourceLocation + from ._models_py3 import CVE + from ._models_py3 import CVSS from ._models_py3 import CefExternalSecuritySolution from ._models_py3 import CefSolutionProperties from ._models_py3 import Compliance + from ._models_py3 import ComplianceList from ._models_py3 import ComplianceResult + from ._models_py3 import ComplianceResultList from ._models_py3 import ComplianceSegment from ._models_py3 import ConnectableResource from ._models_py3 import ConnectedResource from ._models_py3 import ConnectedWorkspace - from ._models_py3 import DataExportSetting + from ._models_py3 import ConnectionToIpNotAllowed + from ._models_py3 import ConnectorSetting + from ._models_py3 import ConnectorSettingList + from ._models_py3 import ContainerRegistryVulnerabilityProperties + from ._models_py3 import CustomAlertRule + from ._models_py3 import DataExportSettings + from ._models_py3 import DenylistCustomAlertRule + from ._models_py3 import Device + from ._models_py3 import DeviceList + from ._models_py3 import DeviceSecurityGroup + from ._models_py3 import DeviceSecurityGroupList + from ._models_py3 import DirectMethodInvokesNotInAllowedRange from ._models_py3 import DiscoveredSecuritySolution + from ._models_py3 import DiscoveredSecuritySolutionList + from ._models_py3 import ETag + from ._models_py3 import EffectiveNetworkSecurityGroups from ._models_py3 import ExternalSecuritySolution - from ._models_py3 import ExternalSecuritySolutionKind1 + from ._models_py3 import ExternalSecuritySolutionKind + from ._models_py3 import ExternalSecuritySolutionList from ._models_py3 import ExternalSecuritySolutionProperties + from ._models_py3 import FailedLocalLoginsNotInAllowedRange + from ._models_py3 import FileUploadsNotInAllowedRange + from ._models_py3 import Firmware + from ._models_py3 import GcpCredentialsDetailsProperties + from ._models_py3 import HttpC2DMessagesNotInAllowedRange + from ._models_py3 import HttpC2DRejectedMessagesNotInAllowedRange + from ._models_py3 import HttpD2CMessagesNotInAllowedRange + from ._models_py3 import HybridComputeSettingsProperties from ._models_py3 import InformationProtectionKeyword from ._models_py3 import InformationProtectionPolicy + from ._models_py3 import InformationProtectionPolicyList from ._models_py3 import InformationType from ._models_py3 import IoTSecurityAggregatedAlert + from ._models_py3 import IoTSecurityAggregatedAlertList + from ._models_py3 import IoTSecurityAggregatedAlertPropertiesTopDevicesListItem from ._models_py3 import IoTSecurityAggregatedRecommendation + from ._models_py3 import IoTSecurityAggregatedRecommendationList from ._models_py3 import IoTSecurityAlertedDevice - from ._models_py3 import IoTSecurityAlertedDevicesList from ._models_py3 import IoTSecurityDeviceAlert - from ._models_py3 import IoTSecurityDeviceAlertsList from ._models_py3 import IoTSecurityDeviceRecommendation - from ._models_py3 import IoTSecurityDeviceRecommendationsList from ._models_py3 import IoTSecuritySolutionAnalyticsModel from ._models_py3 import IoTSecuritySolutionAnalyticsModelList from ._models_py3 import IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem from ._models_py3 import IoTSecuritySolutionModel + from ._models_py3 import IoTSecuritySolutionsList from ._models_py3 import IoTSeverityMetrics + from ._models_py3 import IotAlert + from ._models_py3 import IotAlertList + from ._models_py3 import IotAlertType + from ._models_py3 import IotAlertTypeList + from ._models_py3 import IotDefenderSettingsList + from ._models_py3 import IotDefenderSettingsModel + from ._models_py3 import IotRecommendation + from ._models_py3 import IotRecommendationList + from ._models_py3 import IotRecommendationType + from ._models_py3 import IotRecommendationTypeList + from ._models_py3 import IotSensor + from ._models_py3 import IotSensorsList + from ._models_py3 import IpAddress + from ._models_py3 import JitNetworkAccessPoliciesList from ._models_py3 import JitNetworkAccessPolicy from ._models_py3 import JitNetworkAccessPolicyInitiatePort from ._models_py3 import JitNetworkAccessPolicyInitiateRequest @@ -65,213 +138,546 @@ from ._models_py3 import JitNetworkAccessRequestPort from ._models_py3 import JitNetworkAccessRequestVirtualMachine from ._models_py3 import Kind + from ._models_py3 import ListCustomAlertRule + from ._models_py3 import LocalUserNotAllowed from ._models_py3 import Location + from ._models_py3 import LogAnalyticsIdentifier + from ._models_py3 import MacAddress + from ._models_py3 import MqttC2DMessagesNotInAllowedRange + from ._models_py3 import MqttC2DRejectedMessagesNotInAllowedRange + from ._models_py3 import MqttD2CMessagesNotInAllowedRange + from ._models_py3 import NetworkInterface + from ._models_py3 import OnPremiseIotSensor + from ._models_py3 import OnPremiseIotSensorsList + from ._models_py3 import OnPremiseResourceDetails + from ._models_py3 import OnPremiseSqlResourceDetails from ._models_py3 import Operation from ._models_py3 import OperationDisplay + from ._models_py3 import OperationList + from ._models_py3 import PackageDownloadInfo + from ._models_py3 import PackageDownloads + from ._models_py3 import PackageDownloadsCentralManager + from ._models_py3 import PackageDownloadsCentralManagerFull + from ._models_py3 import PackageDownloadsCentralManagerFullOvf + from ._models_py3 import PackageDownloadsSensor + from ._models_py3 import PackageDownloadsSensorFull + from ._models_py3 import PackageDownloadsSensorFullOvf + from ._models_py3 import PackageDownloadsThreatIntelligence from ._models_py3 import PathRecommendation from ._models_py3 import Pricing from ._models_py3 import PricingList + from ._models_py3 import ProcessNotAllowed + from ._models_py3 import ProtectionMode + from ._models_py3 import Protocol + from ._models_py3 import ProxyServerProperties from ._models_py3 import PublisherInfo + from ._models_py3 import QueuePurgesNotInAllowedRange from ._models_py3 import RecommendationConfigurationProperties from ._models_py3 import RegulatoryComplianceAssessment + from ._models_py3 import RegulatoryComplianceAssessmentList from ._models_py3 import RegulatoryComplianceControl + from ._models_py3 import RegulatoryComplianceControlList from ._models_py3 import RegulatoryComplianceStandard + from ._models_py3 import RegulatoryComplianceStandardList from ._models_py3 import Resource + from ._models_py3 import ResourceDetails + from ._models_py3 import ResourceIdentifier + from ._models_py3 import Rule + from ._models_py3 import ScopeElement + from ._models_py3 import SecureScoreControlDefinitionItem + from ._models_py3 import SecureScoreControlDefinitionList + from ._models_py3 import SecureScoreControlDefinitionSource + from ._models_py3 import SecureScoreControlDetails + from ._models_py3 import SecureScoreControlList + from ._models_py3 import SecureScoreControlScore + from ._models_py3 import SecureScoreItem + from ._models_py3 import SecureScoresList + from ._models_py3 import SecurityAssessment + from ._models_py3 import SecurityAssessmentList + from ._models_py3 import SecurityAssessmentMetadata + from ._models_py3 import SecurityAssessmentMetadataList + from ._models_py3 import SecurityAssessmentMetadataPartnerData + from ._models_py3 import SecurityAssessmentMetadataProperties + from ._models_py3 import SecurityAssessmentPartnerData from ._models_py3 import SecurityContact + from ._models_py3 import SecurityContactList + from ._models_py3 import SecuritySolution + from ._models_py3 import SecuritySolutionList + from ._models_py3 import SecuritySolutionsReferenceData + from ._models_py3 import SecuritySolutionsReferenceDataList + from ._models_py3 import SecuritySubAssessment + from ._models_py3 import SecuritySubAssessmentList from ._models_py3 import SecurityTask + from ._models_py3 import SecurityTaskList from ._models_py3 import SecurityTaskParameters from ._models_py3 import SensitivityLabel from ._models_py3 import ServerVulnerabilityAssessment from ._models_py3 import ServerVulnerabilityAssessmentsList + from ._models_py3 import ServerVulnerabilityProperties + from ._models_py3 import ServicePrincipalProperties from ._models_py3 import Setting from ._models_py3 import SettingResource + from ._models_py3 import SettingsList + from ._models_py3 import SqlServerVulnerabilityProperties + from ._models_py3 import SubAssessmentStatus + from ._models_py3 import SuppressionAlertsScope + from ._models_py3 import Tags from ._models_py3 import TagsResource + from ._models_py3 import ThresholdCustomAlertRule + from ._models_py3 import TimeWindowCustomAlertRule + from ._models_py3 import TopologyList from ._models_py3 import TopologyResource from ._models_py3 import TopologySingleResource from ._models_py3 import TopologySingleResourceChild from ._models_py3 import TopologySingleResourceParent + from ._models_py3 import TrackedResource + from ._models_py3 import TwinUpdatesNotInAllowedRange + from ._models_py3 import UnauthorizedOperationsNotInAllowedRange from ._models_py3 import UpdateIotSecuritySolutionData from ._models_py3 import UserDefinedResourcesProperties from ._models_py3 import UserRecommendation + from ._models_py3 import VendorReference from ._models_py3 import VmRecommendation from ._models_py3 import WorkspaceSetting + from ._models_py3 import WorkspaceSettingList except (SyntaxError, ImportError): - from ._models import AadConnectivityState1 - from ._models import AadExternalSecuritySolution - from ._models import AadSolutionProperties - from ._models import AdvancedThreatProtectionSetting - from ._models import Alert - from ._models import AlertConfidenceReason - from ._models import AlertEntity - from ._models import AllowedConnectionsResource - from ._models import AppWhitelistingGroup - from ._models import AppWhitelistingGroups - from ._models import AppWhitelistingIssueSummary - from ._models import AppWhitelistingPutGroupData - from ._models import AscLocation - from ._models import AtaExternalSecuritySolution - from ._models import AtaSolutionProperties - from ._models import AutoProvisioningSetting - from ._models import CefExternalSecuritySolution - from ._models import CefSolutionProperties - from ._models import Compliance - from ._models import ComplianceResult - from ._models import ComplianceSegment - from ._models import ConnectableResource - from ._models import ConnectedResource - from ._models import ConnectedWorkspace - from ._models import DataExportSetting - from ._models import DiscoveredSecuritySolution - from ._models import ExternalSecuritySolution - from ._models import ExternalSecuritySolutionKind1 - from ._models import ExternalSecuritySolutionProperties - from ._models import InformationProtectionKeyword - from ._models import InformationProtectionPolicy - from ._models import InformationType - from ._models import IoTSecurityAggregatedAlert - from ._models import IoTSecurityAggregatedRecommendation - from ._models import IoTSecurityAlertedDevice - from ._models import IoTSecurityAlertedDevicesList - from ._models import IoTSecurityDeviceAlert - from ._models import IoTSecurityDeviceAlertsList - from ._models import IoTSecurityDeviceRecommendation - from ._models import IoTSecurityDeviceRecommendationsList - from ._models import IoTSecuritySolutionAnalyticsModel - from ._models import IoTSecuritySolutionAnalyticsModelList - from ._models import IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem - from ._models import IoTSecuritySolutionModel - from ._models import IoTSeverityMetrics - from ._models import JitNetworkAccessPolicy - from ._models import JitNetworkAccessPolicyInitiatePort - from ._models import JitNetworkAccessPolicyInitiateRequest - from ._models import JitNetworkAccessPolicyInitiateVirtualMachine - from ._models import JitNetworkAccessPolicyVirtualMachine - from ._models import JitNetworkAccessPortRule - from ._models import JitNetworkAccessRequest - from ._models import JitNetworkAccessRequestPort - from ._models import JitNetworkAccessRequestVirtualMachine - from ._models import Kind - from ._models import Location - from ._models import Operation - from ._models import OperationDisplay - from ._models import PathRecommendation - from ._models import Pricing - from ._models import PricingList - from ._models import PublisherInfo - from ._models import RecommendationConfigurationProperties - from ._models import RegulatoryComplianceAssessment - from ._models import RegulatoryComplianceControl - from ._models import RegulatoryComplianceStandard - from ._models import Resource - from ._models import SecurityContact - from ._models import SecurityTask - from ._models import SecurityTaskParameters - from ._models import SensitivityLabel - from ._models import ServerVulnerabilityAssessment - from ._models import ServerVulnerabilityAssessmentsList - from ._models import Setting - from ._models import SettingResource - from ._models import TagsResource - from ._models import TopologyResource - from ._models import TopologySingleResource - from ._models import TopologySingleResourceChild - from ._models import TopologySingleResourceParent - from ._models import UpdateIotSecuritySolutionData - from ._models import UserDefinedResourcesProperties - from ._models import UserRecommendation - from ._models import VmRecommendation - from ._models import WorkspaceSetting -from ._paged_models import AlertPaged -from ._paged_models import AllowedConnectionsResourcePaged -from ._paged_models import AscLocationPaged -from ._paged_models import AutoProvisioningSettingPaged -from ._paged_models import CompliancePaged -from ._paged_models import ComplianceResultPaged -from ._paged_models import DiscoveredSecuritySolutionPaged -from ._paged_models import ExternalSecuritySolutionPaged -from ._paged_models import InformationProtectionPolicyPaged -from ._paged_models import IoTSecurityAggregatedAlertPaged -from ._paged_models import IoTSecurityAggregatedRecommendationPaged -from ._paged_models import IoTSecuritySolutionModelPaged -from ._paged_models import JitNetworkAccessPolicyPaged -from ._paged_models import OperationPaged -from ._paged_models import RegulatoryComplianceAssessmentPaged -from ._paged_models import RegulatoryComplianceControlPaged -from ._paged_models import RegulatoryComplianceStandardPaged -from ._paged_models import SecurityContactPaged -from ._paged_models import SecurityTaskPaged -from ._paged_models import SettingPaged -from ._paged_models import TopologyResourcePaged -from ._paged_models import WorkspaceSettingPaged + from ._models import AadConnectivityState # type: ignore + from ._models import AadExternalSecuritySolution # type: ignore + from ._models import AadSolutionProperties # type: ignore + from ._models import ActiveConnectionsNotInAllowedRange # type: ignore + from ._models import AdaptiveApplicationControlGroup # type: ignore + from ._models import AdaptiveApplicationControlGroups # type: ignore + from ._models import AdaptiveApplicationControlIssueSummary # type: ignore + from ._models import AdaptiveNetworkHardening # type: ignore + from ._models import AdaptiveNetworkHardeningEnforceRequest # type: ignore + from ._models import AdaptiveNetworkHardeningsList # type: ignore + from ._models import AdditionalData # type: ignore + from ._models import AdvancedThreatProtectionSetting # type: ignore + from ._models import Alert # type: ignore + from ._models import AlertEntity # type: ignore + from ._models import AlertList # type: ignore + from ._models import AlertsSuppressionRule # type: ignore + from ._models import AlertsSuppressionRulesList # type: ignore + from ._models import AllowedConnectionsList # type: ignore + from ._models import AllowedConnectionsResource # type: ignore + from ._models import AllowlistCustomAlertRule # type: ignore + from ._models import AmqpC2DMessagesNotInAllowedRange # type: ignore + from ._models import AmqpC2DRejectedMessagesNotInAllowedRange # type: ignore + from ._models import AmqpD2CMessagesNotInAllowedRange # type: ignore + from ._models import AscLocation # type: ignore + from ._models import AscLocationList # type: ignore + from ._models import AssessmentLinks # type: ignore + from ._models import AssessmentStatus # type: ignore + from ._models import AtaExternalSecuritySolution # type: ignore + from ._models import AtaSolutionProperties # type: ignore + from ._models import AuthenticationDetailsProperties # type: ignore + from ._models import AutoProvisioningSetting # type: ignore + from ._models import AutoProvisioningSettingList # type: ignore + from ._models import Automation # type: ignore + from ._models import AutomationAction # type: ignore + from ._models import AutomationActionEventHub # type: ignore + from ._models import AutomationActionLogicApp # type: ignore + from ._models import AutomationActionWorkspace # type: ignore + from ._models import AutomationList # type: ignore + from ._models import AutomationRuleSet # type: ignore + from ._models import AutomationScope # type: ignore + from ._models import AutomationSource # type: ignore + from ._models import AutomationTriggeringRule # type: ignore + from ._models import AutomationValidationStatus # type: ignore + from ._models import AwAssumeRoleAuthenticationDetailsProperties # type: ignore + from ._models import AwsCredsAuthenticationDetailsProperties # type: ignore + from ._models import AzureResourceDetails # type: ignore + from ._models import AzureResourceIdentifier # type: ignore + from ._models import AzureResourceLink # type: ignore + from ._models import AzureTrackedResourceLocation # type: ignore + from ._models import CVE # type: ignore + from ._models import CVSS # type: ignore + from ._models import CefExternalSecuritySolution # type: ignore + from ._models import CefSolutionProperties # type: ignore + from ._models import Compliance # type: ignore + from ._models import ComplianceList # type: ignore + from ._models import ComplianceResult # type: ignore + from ._models import ComplianceResultList # type: ignore + from ._models import ComplianceSegment # type: ignore + from ._models import ConnectableResource # type: ignore + from ._models import ConnectedResource # type: ignore + from ._models import ConnectedWorkspace # type: ignore + from ._models import ConnectionToIpNotAllowed # type: ignore + from ._models import ConnectorSetting # type: ignore + from ._models import ConnectorSettingList # type: ignore + from ._models import ContainerRegistryVulnerabilityProperties # type: ignore + from ._models import CustomAlertRule # type: ignore + from ._models import DataExportSettings # type: ignore + from ._models import DenylistCustomAlertRule # type: ignore + from ._models import Device # type: ignore + from ._models import DeviceList # type: ignore + from ._models import DeviceSecurityGroup # type: ignore + from ._models import DeviceSecurityGroupList # type: ignore + from ._models import DirectMethodInvokesNotInAllowedRange # type: ignore + from ._models import DiscoveredSecuritySolution # type: ignore + from ._models import DiscoveredSecuritySolutionList # type: ignore + from ._models import ETag # type: ignore + from ._models import EffectiveNetworkSecurityGroups # type: ignore + from ._models import ExternalSecuritySolution # type: ignore + from ._models import ExternalSecuritySolutionKind # type: ignore + from ._models import ExternalSecuritySolutionList # type: ignore + from ._models import ExternalSecuritySolutionProperties # type: ignore + from ._models import FailedLocalLoginsNotInAllowedRange # type: ignore + from ._models import FileUploadsNotInAllowedRange # type: ignore + from ._models import Firmware # type: ignore + from ._models import GcpCredentialsDetailsProperties # type: ignore + from ._models import HttpC2DMessagesNotInAllowedRange # type: ignore + from ._models import HttpC2DRejectedMessagesNotInAllowedRange # type: ignore + from ._models import HttpD2CMessagesNotInAllowedRange # type: ignore + from ._models import HybridComputeSettingsProperties # type: ignore + from ._models import InformationProtectionKeyword # type: ignore + from ._models import InformationProtectionPolicy # type: ignore + from ._models import InformationProtectionPolicyList # type: ignore + from ._models import InformationType # type: ignore + from ._models import IoTSecurityAggregatedAlert # type: ignore + from ._models import IoTSecurityAggregatedAlertList # type: ignore + from ._models import IoTSecurityAggregatedAlertPropertiesTopDevicesListItem # type: ignore + from ._models import IoTSecurityAggregatedRecommendation # type: ignore + from ._models import IoTSecurityAggregatedRecommendationList # type: ignore + from ._models import IoTSecurityAlertedDevice # type: ignore + from ._models import IoTSecurityDeviceAlert # type: ignore + from ._models import IoTSecurityDeviceRecommendation # type: ignore + from ._models import IoTSecuritySolutionAnalyticsModel # type: ignore + from ._models import IoTSecuritySolutionAnalyticsModelList # type: ignore + from ._models import IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem # type: ignore + from ._models import IoTSecuritySolutionModel # type: ignore + from ._models import IoTSecuritySolutionsList # type: ignore + from ._models import IoTSeverityMetrics # type: ignore + from ._models import IotAlert # type: ignore + from ._models import IotAlertList # type: ignore + from ._models import IotAlertType # type: ignore + from ._models import IotAlertTypeList # type: ignore + from ._models import IotDefenderSettingsList # type: ignore + from ._models import IotDefenderSettingsModel # type: ignore + from ._models import IotRecommendation # type: ignore + from ._models import IotRecommendationList # type: ignore + from ._models import IotRecommendationType # type: ignore + from ._models import IotRecommendationTypeList # type: ignore + from ._models import IotSensor # type: ignore + from ._models import IotSensorsList # type: ignore + from ._models import IpAddress # type: ignore + from ._models import JitNetworkAccessPoliciesList # type: ignore + from ._models import JitNetworkAccessPolicy # type: ignore + from ._models import JitNetworkAccessPolicyInitiatePort # type: ignore + from ._models import JitNetworkAccessPolicyInitiateRequest # type: ignore + from ._models import JitNetworkAccessPolicyInitiateVirtualMachine # type: ignore + from ._models import JitNetworkAccessPolicyVirtualMachine # type: ignore + from ._models import JitNetworkAccessPortRule # type: ignore + from ._models import JitNetworkAccessRequest # type: ignore + from ._models import JitNetworkAccessRequestPort # type: ignore + from ._models import JitNetworkAccessRequestVirtualMachine # type: ignore + from ._models import Kind # type: ignore + from ._models import ListCustomAlertRule # type: ignore + from ._models import LocalUserNotAllowed # type: ignore + from ._models import Location # type: ignore + from ._models import LogAnalyticsIdentifier # type: ignore + from ._models import MacAddress # type: ignore + from ._models import MqttC2DMessagesNotInAllowedRange # type: ignore + from ._models import MqttC2DRejectedMessagesNotInAllowedRange # type: ignore + from ._models import MqttD2CMessagesNotInAllowedRange # type: ignore + from ._models import NetworkInterface # type: ignore + from ._models import OnPremiseIotSensor # type: ignore + from ._models import OnPremiseIotSensorsList # type: ignore + from ._models import OnPremiseResourceDetails # type: ignore + from ._models import OnPremiseSqlResourceDetails # type: ignore + from ._models import Operation # type: ignore + from ._models import OperationDisplay # type: ignore + from ._models import OperationList # type: ignore + from ._models import PackageDownloadInfo # type: ignore + from ._models import PackageDownloads # type: ignore + from ._models import PackageDownloadsCentralManager # type: ignore + from ._models import PackageDownloadsCentralManagerFull # type: ignore + from ._models import PackageDownloadsCentralManagerFullOvf # type: ignore + from ._models import PackageDownloadsSensor # type: ignore + from ._models import PackageDownloadsSensorFull # type: ignore + from ._models import PackageDownloadsSensorFullOvf # type: ignore + from ._models import PackageDownloadsThreatIntelligence # type: ignore + from ._models import PathRecommendation # type: ignore + from ._models import Pricing # type: ignore + from ._models import PricingList # type: ignore + from ._models import ProcessNotAllowed # type: ignore + from ._models import ProtectionMode # type: ignore + from ._models import Protocol # type: ignore + from ._models import ProxyServerProperties # type: ignore + from ._models import PublisherInfo # type: ignore + from ._models import QueuePurgesNotInAllowedRange # type: ignore + from ._models import RecommendationConfigurationProperties # type: ignore + from ._models import RegulatoryComplianceAssessment # type: ignore + from ._models import RegulatoryComplianceAssessmentList # type: ignore + from ._models import RegulatoryComplianceControl # type: ignore + from ._models import RegulatoryComplianceControlList # type: ignore + from ._models import RegulatoryComplianceStandard # type: ignore + from ._models import RegulatoryComplianceStandardList # type: ignore + from ._models import Resource # type: ignore + from ._models import ResourceDetails # type: ignore + from ._models import ResourceIdentifier # type: ignore + from ._models import Rule # type: ignore + from ._models import ScopeElement # type: ignore + from ._models import SecureScoreControlDefinitionItem # type: ignore + from ._models import SecureScoreControlDefinitionList # type: ignore + from ._models import SecureScoreControlDefinitionSource # type: ignore + from ._models import SecureScoreControlDetails # type: ignore + from ._models import SecureScoreControlList # type: ignore + from ._models import SecureScoreControlScore # type: ignore + from ._models import SecureScoreItem # type: ignore + from ._models import SecureScoresList # type: ignore + from ._models import SecurityAssessment # type: ignore + from ._models import SecurityAssessmentList # type: ignore + from ._models import SecurityAssessmentMetadata # type: ignore + from ._models import SecurityAssessmentMetadataList # type: ignore + from ._models import SecurityAssessmentMetadataPartnerData # type: ignore + from ._models import SecurityAssessmentMetadataProperties # type: ignore + from ._models import SecurityAssessmentPartnerData # type: ignore + from ._models import SecurityContact # type: ignore + from ._models import SecurityContactList # type: ignore + from ._models import SecuritySolution # type: ignore + from ._models import SecuritySolutionList # type: ignore + from ._models import SecuritySolutionsReferenceData # type: ignore + from ._models import SecuritySolutionsReferenceDataList # type: ignore + from ._models import SecuritySubAssessment # type: ignore + from ._models import SecuritySubAssessmentList # type: ignore + from ._models import SecurityTask # type: ignore + from ._models import SecurityTaskList # type: ignore + from ._models import SecurityTaskParameters # type: ignore + from ._models import SensitivityLabel # type: ignore + from ._models import ServerVulnerabilityAssessment # type: ignore + from ._models import ServerVulnerabilityAssessmentsList # type: ignore + from ._models import ServerVulnerabilityProperties # type: ignore + from ._models import ServicePrincipalProperties # type: ignore + from ._models import Setting # type: ignore + from ._models import SettingResource # type: ignore + from ._models import SettingsList # type: ignore + from ._models import SqlServerVulnerabilityProperties # type: ignore + from ._models import SubAssessmentStatus # type: ignore + from ._models import SuppressionAlertsScope # type: ignore + from ._models import Tags # type: ignore + from ._models import TagsResource # type: ignore + from ._models import ThresholdCustomAlertRule # type: ignore + from ._models import TimeWindowCustomAlertRule # type: ignore + from ._models import TopologyList # type: ignore + from ._models import TopologyResource # type: ignore + from ._models import TopologySingleResource # type: ignore + from ._models import TopologySingleResourceChild # type: ignore + from ._models import TopologySingleResourceParent # type: ignore + from ._models import TrackedResource # type: ignore + from ._models import TwinUpdatesNotInAllowedRange # type: ignore + from ._models import UnauthorizedOperationsNotInAllowedRange # type: ignore + from ._models import UpdateIotSecuritySolutionData # type: ignore + from ._models import UserDefinedResourcesProperties # type: ignore + from ._models import UserRecommendation # type: ignore + from ._models import VendorReference # type: ignore + from ._models import VmRecommendation # type: ignore + from ._models import WorkspaceSetting # type: ignore + from ._models import WorkspaceSettingList # type: ignore + from ._security_center_enums import ( - ResourceStatus, - PricingTier, - ReportedSeverity, - SettingKind, - SecuritySolutionStatus, - ExportData, + AadConnectivityStateEnum, + ActionType, + AdaptiveApplicationControlIssue, + AlertIntent, + AlertNotifications, + AlertSeverity, + AlertStatus, + AlertsToAdmins, + AssessedResourceType, + AssessmentStatusCode, + AssessmentType, + AuthenticationProvisioningState, + AuthenticationType, + AuthorizationState, + AutoProvision, + Category, + ConfigurationStatus, + ConnectionType, + ControlType, DataSource, - RecommendationType, + DeviceCriticality, + DeviceStatus, + Direction, + EnforcementMode, + EnforcementSupport, + Enum15, + Enum17, + Enum3, + Enum37, + Enum38, + EventSource, + ExpandControlsEnum, + ExpandEnum, + ExportData, + ExternalSecuritySolutionKindEnum, + FileType, + HybridComputeProvisioningState, + ImplementationEffort, + Intent, + MacSignificance, + ManagementState, + Operator, + PermissionProperty, + PricingTier, + ProgrammingState, + PropertyType, + ProtocolEnum, + ProvisioningState, + PurdueLevel, + Rank, + RecommendationAction, RecommendationConfigStatus, + RecommendationSeverity, + RecommendationStatus, + RecommendationType, + RelationToIpStatus, + ReportedSeverity, + ResourceIdentifierType, + ResourceStatus, + RuleState, + ScanningFunctionality, SecurityFamily, - AadConnectivityState, - ExternalSecuritySolutionKind, - Protocol, + SecuritySolutionStatus, + ServerVulnerabilityAssessmentPropertiesProvisioningState, + SettingKind, + Severity, + Source, + SourceSystem, + State, Status, StatusReason, - AutoProvision, - AlertNotifications, - AlertsToAdmins, - State, - ConnectionType, + SubAssessmentStatusCode, + Threats, + TransportProtocol, + UnmaskedIpLoggingStatus, + UserImpact, + ValueType, + VersionKind, ) __all__ = [ - 'AadConnectivityState1', + 'AadConnectivityState', 'AadExternalSecuritySolution', 'AadSolutionProperties', + 'ActiveConnectionsNotInAllowedRange', + 'AdaptiveApplicationControlGroup', + 'AdaptiveApplicationControlGroups', + 'AdaptiveApplicationControlIssueSummary', + 'AdaptiveNetworkHardening', + 'AdaptiveNetworkHardeningEnforceRequest', + 'AdaptiveNetworkHardeningsList', + 'AdditionalData', 'AdvancedThreatProtectionSetting', 'Alert', - 'AlertConfidenceReason', 'AlertEntity', + 'AlertList', + 'AlertsSuppressionRule', + 'AlertsSuppressionRulesList', + 'AllowedConnectionsList', 'AllowedConnectionsResource', - 'AppWhitelistingGroup', - 'AppWhitelistingGroups', - 'AppWhitelistingIssueSummary', - 'AppWhitelistingPutGroupData', + 'AllowlistCustomAlertRule', + 'AmqpC2DMessagesNotInAllowedRange', + 'AmqpC2DRejectedMessagesNotInAllowedRange', + 'AmqpD2CMessagesNotInAllowedRange', 'AscLocation', + 'AscLocationList', + 'AssessmentLinks', + 'AssessmentStatus', 'AtaExternalSecuritySolution', 'AtaSolutionProperties', + 'AuthenticationDetailsProperties', 'AutoProvisioningSetting', + 'AutoProvisioningSettingList', + 'Automation', + 'AutomationAction', + 'AutomationActionEventHub', + 'AutomationActionLogicApp', + 'AutomationActionWorkspace', + 'AutomationList', + 'AutomationRuleSet', + 'AutomationScope', + 'AutomationSource', + 'AutomationTriggeringRule', + 'AutomationValidationStatus', + 'AwAssumeRoleAuthenticationDetailsProperties', + 'AwsCredsAuthenticationDetailsProperties', + 'AzureResourceDetails', + 'AzureResourceIdentifier', + 'AzureResourceLink', + 'AzureTrackedResourceLocation', + 'CVE', + 'CVSS', 'CefExternalSecuritySolution', 'CefSolutionProperties', 'Compliance', + 'ComplianceList', 'ComplianceResult', + 'ComplianceResultList', 'ComplianceSegment', 'ConnectableResource', 'ConnectedResource', 'ConnectedWorkspace', - 'DataExportSetting', + 'ConnectionToIpNotAllowed', + 'ConnectorSetting', + 'ConnectorSettingList', + 'ContainerRegistryVulnerabilityProperties', + 'CustomAlertRule', + 'DataExportSettings', + 'DenylistCustomAlertRule', + 'Device', + 'DeviceList', + 'DeviceSecurityGroup', + 'DeviceSecurityGroupList', + 'DirectMethodInvokesNotInAllowedRange', 'DiscoveredSecuritySolution', + 'DiscoveredSecuritySolutionList', + 'ETag', + 'EffectiveNetworkSecurityGroups', 'ExternalSecuritySolution', - 'ExternalSecuritySolutionKind1', + 'ExternalSecuritySolutionKind', + 'ExternalSecuritySolutionList', 'ExternalSecuritySolutionProperties', + 'FailedLocalLoginsNotInAllowedRange', + 'FileUploadsNotInAllowedRange', + 'Firmware', + 'GcpCredentialsDetailsProperties', + 'HttpC2DMessagesNotInAllowedRange', + 'HttpC2DRejectedMessagesNotInAllowedRange', + 'HttpD2CMessagesNotInAllowedRange', + 'HybridComputeSettingsProperties', 'InformationProtectionKeyword', 'InformationProtectionPolicy', + 'InformationProtectionPolicyList', 'InformationType', 'IoTSecurityAggregatedAlert', + 'IoTSecurityAggregatedAlertList', + 'IoTSecurityAggregatedAlertPropertiesTopDevicesListItem', 'IoTSecurityAggregatedRecommendation', + 'IoTSecurityAggregatedRecommendationList', 'IoTSecurityAlertedDevice', - 'IoTSecurityAlertedDevicesList', 'IoTSecurityDeviceAlert', - 'IoTSecurityDeviceAlertsList', 'IoTSecurityDeviceRecommendation', - 'IoTSecurityDeviceRecommendationsList', 'IoTSecuritySolutionAnalyticsModel', 'IoTSecuritySolutionAnalyticsModelList', 'IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem', 'IoTSecuritySolutionModel', + 'IoTSecuritySolutionsList', 'IoTSeverityMetrics', + 'IotAlert', + 'IotAlertList', + 'IotAlertType', + 'IotAlertTypeList', + 'IotDefenderSettingsList', + 'IotDefenderSettingsModel', + 'IotRecommendation', + 'IotRecommendationList', + 'IotRecommendationType', + 'IotRecommendationTypeList', + 'IotSensor', + 'IotSensorsList', + 'IpAddress', + 'JitNetworkAccessPoliciesList', 'JitNetworkAccessPolicy', 'JitNetworkAccessPolicyInitiatePort', 'JitNetworkAccessPolicyInitiateRequest', @@ -282,76 +688,184 @@ 'JitNetworkAccessRequestPort', 'JitNetworkAccessRequestVirtualMachine', 'Kind', + 'ListCustomAlertRule', + 'LocalUserNotAllowed', 'Location', + 'LogAnalyticsIdentifier', + 'MacAddress', + 'MqttC2DMessagesNotInAllowedRange', + 'MqttC2DRejectedMessagesNotInAllowedRange', + 'MqttD2CMessagesNotInAllowedRange', + 'NetworkInterface', + 'OnPremiseIotSensor', + 'OnPremiseIotSensorsList', + 'OnPremiseResourceDetails', + 'OnPremiseSqlResourceDetails', 'Operation', 'OperationDisplay', + 'OperationList', + 'PackageDownloadInfo', + 'PackageDownloads', + 'PackageDownloadsCentralManager', + 'PackageDownloadsCentralManagerFull', + 'PackageDownloadsCentralManagerFullOvf', + 'PackageDownloadsSensor', + 'PackageDownloadsSensorFull', + 'PackageDownloadsSensorFullOvf', + 'PackageDownloadsThreatIntelligence', 'PathRecommendation', 'Pricing', 'PricingList', + 'ProcessNotAllowed', + 'ProtectionMode', + 'Protocol', + 'ProxyServerProperties', 'PublisherInfo', + 'QueuePurgesNotInAllowedRange', 'RecommendationConfigurationProperties', 'RegulatoryComplianceAssessment', + 'RegulatoryComplianceAssessmentList', 'RegulatoryComplianceControl', + 'RegulatoryComplianceControlList', 'RegulatoryComplianceStandard', + 'RegulatoryComplianceStandardList', 'Resource', + 'ResourceDetails', + 'ResourceIdentifier', + 'Rule', + 'ScopeElement', + 'SecureScoreControlDefinitionItem', + 'SecureScoreControlDefinitionList', + 'SecureScoreControlDefinitionSource', + 'SecureScoreControlDetails', + 'SecureScoreControlList', + 'SecureScoreControlScore', + 'SecureScoreItem', + 'SecureScoresList', + 'SecurityAssessment', + 'SecurityAssessmentList', + 'SecurityAssessmentMetadata', + 'SecurityAssessmentMetadataList', + 'SecurityAssessmentMetadataPartnerData', + 'SecurityAssessmentMetadataProperties', + 'SecurityAssessmentPartnerData', 'SecurityContact', + 'SecurityContactList', + 'SecuritySolution', + 'SecuritySolutionList', + 'SecuritySolutionsReferenceData', + 'SecuritySolutionsReferenceDataList', + 'SecuritySubAssessment', + 'SecuritySubAssessmentList', 'SecurityTask', + 'SecurityTaskList', 'SecurityTaskParameters', 'SensitivityLabel', 'ServerVulnerabilityAssessment', 'ServerVulnerabilityAssessmentsList', + 'ServerVulnerabilityProperties', + 'ServicePrincipalProperties', 'Setting', 'SettingResource', + 'SettingsList', + 'SqlServerVulnerabilityProperties', + 'SubAssessmentStatus', + 'SuppressionAlertsScope', + 'Tags', 'TagsResource', + 'ThresholdCustomAlertRule', + 'TimeWindowCustomAlertRule', + 'TopologyList', 'TopologyResource', 'TopologySingleResource', 'TopologySingleResourceChild', 'TopologySingleResourceParent', + 'TrackedResource', + 'TwinUpdatesNotInAllowedRange', + 'UnauthorizedOperationsNotInAllowedRange', 'UpdateIotSecuritySolutionData', 'UserDefinedResourcesProperties', 'UserRecommendation', + 'VendorReference', 'VmRecommendation', 'WorkspaceSetting', - 'ComplianceResultPaged', - 'AlertPaged', - 'SettingPaged', - 'IoTSecuritySolutionModelPaged', - 'IoTSecurityAggregatedAlertPaged', - 'IoTSecurityAggregatedRecommendationPaged', - 'AllowedConnectionsResourcePaged', - 'DiscoveredSecuritySolutionPaged', - 'ExternalSecuritySolutionPaged', - 'JitNetworkAccessPolicyPaged', - 'AscLocationPaged', - 'OperationPaged', - 'SecurityTaskPaged', - 'TopologyResourcePaged', - 'AutoProvisioningSettingPaged', - 'CompliancePaged', - 'InformationProtectionPolicyPaged', - 'SecurityContactPaged', - 'WorkspaceSettingPaged', - 'RegulatoryComplianceStandardPaged', - 'RegulatoryComplianceControlPaged', - 'RegulatoryComplianceAssessmentPaged', - 'ResourceStatus', - 'PricingTier', - 'ReportedSeverity', - 'SettingKind', - 'SecuritySolutionStatus', - 'ExportData', + 'WorkspaceSettingList', + 'AadConnectivityStateEnum', + 'ActionType', + 'AdaptiveApplicationControlIssue', + 'AlertIntent', + 'AlertNotifications', + 'AlertSeverity', + 'AlertStatus', + 'AlertsToAdmins', + 'AssessedResourceType', + 'AssessmentStatusCode', + 'AssessmentType', + 'AuthenticationProvisioningState', + 'AuthenticationType', + 'AuthorizationState', + 'AutoProvision', + 'Category', + 'ConfigurationStatus', + 'ConnectionType', + 'ControlType', 'DataSource', - 'RecommendationType', + 'DeviceCriticality', + 'DeviceStatus', + 'Direction', + 'EnforcementMode', + 'EnforcementSupport', + 'Enum15', + 'Enum17', + 'Enum3', + 'Enum37', + 'Enum38', + 'EventSource', + 'ExpandControlsEnum', + 'ExpandEnum', + 'ExportData', + 'ExternalSecuritySolutionKindEnum', + 'FileType', + 'HybridComputeProvisioningState', + 'ImplementationEffort', + 'Intent', + 'MacSignificance', + 'ManagementState', + 'Operator', + 'PermissionProperty', + 'PricingTier', + 'ProgrammingState', + 'PropertyType', + 'ProtocolEnum', + 'ProvisioningState', + 'PurdueLevel', + 'Rank', + 'RecommendationAction', 'RecommendationConfigStatus', + 'RecommendationSeverity', + 'RecommendationStatus', + 'RecommendationType', + 'RelationToIpStatus', + 'ReportedSeverity', + 'ResourceIdentifierType', + 'ResourceStatus', + 'RuleState', + 'ScanningFunctionality', 'SecurityFamily', - 'AadConnectivityState', - 'ExternalSecuritySolutionKind', - 'Protocol', + 'SecuritySolutionStatus', + 'ServerVulnerabilityAssessmentPropertiesProvisioningState', + 'SettingKind', + 'Severity', + 'Source', + 'SourceSystem', + 'State', 'Status', 'StatusReason', - 'AutoProvision', - 'AlertNotifications', - 'AlertsToAdmins', - 'State', - 'ConnectionType', + 'SubAssessmentStatusCode', + 'Threats', + 'TransportProtocol', + 'UnmaskedIpLoggingStatus', + 'UserImpact', + 'ValueType', + 'VersionKind', ] diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models.py index 814deff5ee6b..51fc012a259b 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models.py @@ -1,596 +1,622 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from msrest.serialization import Model -from msrest.exceptions import HttpOperationError +import msrest.serialization -class AadConnectivityState1(Model): +class AadConnectivityState(msrest.serialization.Model): """Describes an Azure resource with kind. - :param connectivity_state: The connectivity state of the external AAD - solution . Possible values include: 'Discovered', 'NotLicensed', - 'Connected' - :type connectivity_state: str or - ~azure.mgmt.security.models.AadConnectivityState + :param connectivity_state: The connectivity state of the external AAD solution. Possible values + include: "Discovered", "NotLicensed", "Connected". + :type connectivity_state: str or ~azure.mgmt.security.models.AadConnectivityStateEnum """ _attribute_map = { 'connectivity_state': {'key': 'connectivityState', 'type': 'str'}, } - def __init__(self, **kwargs): - super(AadConnectivityState1, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(AadConnectivityState, self).__init__(**kwargs) self.connectivity_state = kwargs.get('connectivity_state', None) -class ExternalSecuritySolution(Model): - """Represents a security solution external to Azure Security Center which - sends information to an OMS workspace and whose data is displayed by Azure - Security Center. +class ExternalSecuritySolutionKind(msrest.serialization.Model): + """Describes an Azure resource with kind. - You probably want to use the sub-classes and not this class directly. Known - sub-classes are: CefExternalSecuritySolution, AtaExternalSecuritySolution, - AadExternalSecuritySolution + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + """ - Variables are only populated by the server, and will be ignored when - sending a request. + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + } - All required parameters must be populated in order to send to Azure. + def __init__( + self, + **kwargs + ): + super(ExternalSecuritySolutionKind, self).__init__(**kwargs) + self.kind = kwargs.get('kind', None) + + +class Location(msrest.serialization.Model): + """Describes an Azure resource with location. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar location: Location where the resource is stored. + :vartype location: str + """ + + _validation = { + 'location': {'readonly': True}, + } + + _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Location, self).__init__(**kwargs) + self.location = None + + +class Resource(msrest.serialization.Model): + """Describes an Azure resource. + + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, } - _subtype_map = { - 'kind': {'CEF': 'CefExternalSecuritySolution', 'ATA': 'AtaExternalSecuritySolution', 'AAD': 'AadExternalSecuritySolution'} + def __init__( + self, + **kwargs + ): + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + + +class ExternalSecuritySolution(Resource, Location, ExternalSecuritySolutionKind): + """Represents a security solution external to Azure Security Center which sends information to an OMS workspace and whose data is displayed by Azure Security Center. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(ExternalSecuritySolution, self).__init__(**kwargs) + self.kind = kwargs.get('kind', None) + self.location = None + self.kind = kwargs.get('kind', None) self.id = None self.name = None self.type = None self.location = None - self.kind = None + self.id = None + self.name = None + self.type = None class AadExternalSecuritySolution(ExternalSecuritySolution): - """Represents an AAD identity protection solution which sends logs to an OMS - workspace. + """Represents an AAD identity protection solution which sends logs to an OMS workspace. - Variables are only populated by the server, and will be ignored when - sending a request. - - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str - :param properties: + :param properties: The external security solution properties for AAD solutions. :type properties: ~azure.mgmt.security.models.AadSolutionProperties """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, } _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, 'properties': {'key': 'properties', 'type': 'AadSolutionProperties'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(AadExternalSecuritySolution, self).__init__(**kwargs) self.properties = kwargs.get('properties', None) - self.kind = 'AAD' -class AadSolutionProperties(Model): - """The external security solution properties for AAD solutions. +class ExternalSecuritySolutionProperties(msrest.serialization.Model): + """The solution properties (correspond to the solution kind). + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] :param device_vendor: :type device_vendor: str :param device_type: :type device_type: str - :param workspace: + :param workspace: Represents an OMS workspace to which the solution is connected. :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace - :param connectivity_state: The connectivity state of the external AAD - solution . Possible values include: 'Discovered', 'NotLicensed', - 'Connected' - :type connectivity_state: str or - ~azure.mgmt.security.models.AadConnectivityState """ _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, 'device_type': {'key': 'deviceType', 'type': 'str'}, 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, - 'connectivity_state': {'key': 'connectivityState', 'type': 'str'}, } - def __init__(self, **kwargs): - super(AadSolutionProperties, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(ExternalSecuritySolutionProperties, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) self.device_vendor = kwargs.get('device_vendor', None) self.device_type = kwargs.get('device_type', None) self.workspace = kwargs.get('workspace', None) - self.connectivity_state = kwargs.get('connectivity_state', None) - -class Resource(Model): - """Describes an Azure resource. - Variables are only populated by the server, and will be ignored when - sending a request. +class AadSolutionProperties(ExternalSecuritySolutionProperties, AadConnectivityState): + """The external security solution properties for AAD solutions. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str + :param connectivity_state: The connectivity state of the external AAD solution. Possible values + include: "Discovered", "NotLicensed", "Connected". + :type connectivity_state: str or ~azure.mgmt.security.models.AadConnectivityStateEnum + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace """ - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - } - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, + 'connectivity_state': {'key': 'connectivityState', 'type': 'str'}, + 'additional_properties': {'key': '', 'type': '{object}'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, } - def __init__(self, **kwargs): - super(Resource, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None + def __init__( + self, + **kwargs + ): + super(AadSolutionProperties, self).__init__(**kwargs) + self.connectivity_state = kwargs.get('connectivity_state', None) + self.additional_properties = kwargs.get('additional_properties', None) + self.device_vendor = kwargs.get('device_vendor', None) + self.device_type = kwargs.get('device_type', None) + self.workspace = kwargs.get('workspace', None) -class AdvancedThreatProtectionSetting(Resource): - """The Advanced Threat Protection resource. +class CustomAlertRule(msrest.serialization.Model): + """A custom alert rule. - Variables are only populated by the server, and will be ignored when - sending a request. + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ListCustomAlertRule, ThresholdCustomAlertRule. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param is_enabled: Indicates whether Advanced Threat Protection is - enabled. + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'is_enabled': {'key': 'properties.isEnabled', 'type': 'bool'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, } - def __init__(self, **kwargs): - super(AdvancedThreatProtectionSetting, self).__init__(**kwargs) - self.is_enabled = kwargs.get('is_enabled', None) + _subtype_map = { + 'rule_type': {'ListCustomAlertRule': 'ListCustomAlertRule', 'ThresholdCustomAlertRule': 'ThresholdCustomAlertRule'} + } + def __init__( + self, + **kwargs + ): + super(CustomAlertRule, self).__init__(**kwargs) + self.display_name = None + self.description = None + self.is_enabled = kwargs['is_enabled'] + self.rule_type = None # type: Optional[str] -class Alert(Resource): - """Security alert. - Variables are only populated by the server, and will be ignored when - sending a request. +class ThresholdCustomAlertRule(CustomAlertRule): + """A custom alert rule that checks if a value (depends on the custom alert type) is within the given range. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar state: State of the alert (Active, Dismissed etc.) - :vartype state: str - :ivar reported_time_utc: The time the incident was reported to - Microsoft.Security in UTC - :vartype reported_time_utc: datetime - :ivar vendor_name: Name of the vendor that discovered the incident - :vartype vendor_name: str - :ivar alert_name: Name of the alert type - :vartype alert_name: str - :ivar alert_display_name: Display name of the alert type - :vartype alert_display_name: str - :ivar detected_time_utc: The time the incident was detected by the vendor - :vartype detected_time_utc: datetime - :ivar description: Description of the incident and what it means + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: TimeWindowCustomAlertRule. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. :vartype description: str - :ivar remediation_steps: Recommended steps to reradiate the incident - :vartype remediation_steps: str - :ivar action_taken: The action that was taken as a response to the alert - (Active, Blocked etc.) - :vartype action_taken: str - :ivar reported_severity: Estimated severity of this alert. Possible values - include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar compromised_entity: The entity that the incident happened on - :vartype compromised_entity: str - :ivar associated_resource: Azure resource ID of the associated resource - :vartype associated_resource: str - :param extended_properties: - :type extended_properties: dict[str, object] - :ivar system_source: The type of the alerted resource (Azure, Non-Azure) - :vartype system_source: str - :ivar can_be_investigated: Whether this alert can be investigated with - Azure Security Center - :vartype can_be_investigated: bool - :ivar is_incident: Whether this alert is for incident type or not - (otherwise - single alert) - :vartype is_incident: bool - :param entities: objects that are related to this alerts - :type entities: list[~azure.mgmt.security.models.AlertEntity] - :ivar confidence_score: level of confidence we have on the alert - :vartype confidence_score: float - :param confidence_reasons: reasons the alert got the confidenceScore value - :type confidence_reasons: - list[~azure.mgmt.security.models.AlertConfidenceReason] - :ivar subscription_id: Azure subscription ID of the resource that had the - security alert or the subscription ID of the workspace that this resource - reports to - :vartype subscription_id: str - :ivar instance_id: Instance ID of the alert. - :vartype instance_id: str - :ivar workspace_arm_id: Azure resource ID of the workspace that the alert - was reported to. - :vartype workspace_arm_id: str - :ivar correlation_key: Alerts with the same CorrelationKey will be grouped - together in Ibiza. - :vartype correlation_key: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'state': {'readonly': True}, - 'reported_time_utc': {'readonly': True}, - 'vendor_name': {'readonly': True}, - 'alert_name': {'readonly': True}, - 'alert_display_name': {'readonly': True}, - 'detected_time_utc': {'readonly': True}, + 'display_name': {'readonly': True}, 'description': {'readonly': True}, - 'remediation_steps': {'readonly': True}, - 'action_taken': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'compromised_entity': {'readonly': True}, - 'associated_resource': {'readonly': True}, - 'system_source': {'readonly': True}, - 'can_be_investigated': {'readonly': True}, - 'is_incident': {'readonly': True}, - 'confidence_score': {'readonly': True, 'maximum': 1, 'minimum': 0}, - 'subscription_id': {'readonly': True}, - 'instance_id': {'readonly': True}, - 'workspace_arm_id': {'readonly': True}, - 'correlation_key': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'reported_time_utc': {'key': 'properties.reportedTimeUtc', 'type': 'iso-8601'}, - 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, - 'alert_name': {'key': 'properties.alertName', 'type': 'str'}, - 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, - 'detected_time_utc': {'key': 'properties.detectedTimeUtc', 'type': 'iso-8601'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, - 'action_taken': {'key': 'properties.actionTaken', 'type': 'str'}, - 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, - 'compromised_entity': {'key': 'properties.compromisedEntity', 'type': 'str'}, - 'associated_resource': {'key': 'properties.associatedResource', 'type': 'str'}, - 'extended_properties': {'key': 'properties.extendedProperties', 'type': '{object}'}, - 'system_source': {'key': 'properties.systemSource', 'type': 'str'}, - 'can_be_investigated': {'key': 'properties.canBeInvestigated', 'type': 'bool'}, - 'is_incident': {'key': 'properties.isIncident', 'type': 'bool'}, - 'entities': {'key': 'properties.entities', 'type': '[AlertEntity]'}, - 'confidence_score': {'key': 'properties.confidenceScore', 'type': 'float'}, - 'confidence_reasons': {'key': 'properties.confidenceReasons', 'type': '[AlertConfidenceReason]'}, - 'subscription_id': {'key': 'properties.subscriptionId', 'type': 'str'}, - 'instance_id': {'key': 'properties.instanceId', 'type': 'str'}, - 'workspace_arm_id': {'key': 'properties.workspaceArmId', 'type': 'str'}, - 'correlation_key': {'key': 'properties.correlationKey', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, } - def __init__(self, **kwargs): - super(Alert, self).__init__(**kwargs) - self.state = None - self.reported_time_utc = None - self.vendor_name = None - self.alert_name = None - self.alert_display_name = None - self.detected_time_utc = None - self.description = None - self.remediation_steps = None - self.action_taken = None - self.reported_severity = None - self.compromised_entity = None - self.associated_resource = None - self.extended_properties = kwargs.get('extended_properties', None) - self.system_source = None - self.can_be_investigated = None - self.is_incident = None - self.entities = kwargs.get('entities', None) - self.confidence_score = None - self.confidence_reasons = kwargs.get('confidence_reasons', None) - self.subscription_id = None - self.instance_id = None - self.workspace_arm_id = None - self.correlation_key = None + _subtype_map = { + 'rule_type': {'TimeWindowCustomAlertRule': 'TimeWindowCustomAlertRule'} + } + def __init__( + self, + **kwargs + ): + super(ThresholdCustomAlertRule, self).__init__(**kwargs) + self.rule_type = 'ThresholdCustomAlertRule' # type: str + self.min_threshold = kwargs['min_threshold'] + self.max_threshold = kwargs['max_threshold'] -class AlertConfidenceReason(Model): - """Factors that increase our confidence that the alert is a true positive. - Variables are only populated by the server, and will be ignored when - sending a request. +class TimeWindowCustomAlertRule(ThresholdCustomAlertRule): + """A custom alert rule that checks if the number of activities (depends on the custom alert type) in a time window is within the given range. - :ivar type: Type of confidence factor - :vartype type: str - :ivar reason: description of the confidence reason - :vartype reason: str + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ActiveConnectionsNotInAllowedRange, AmqpC2DMessagesNotInAllowedRange, AmqpC2DRejectedMessagesNotInAllowedRange, AmqpD2CMessagesNotInAllowedRange, DirectMethodInvokesNotInAllowedRange, FailedLocalLoginsNotInAllowedRange, FileUploadsNotInAllowedRange, HttpC2DMessagesNotInAllowedRange, HttpC2DRejectedMessagesNotInAllowedRange, HttpD2CMessagesNotInAllowedRange, MqttC2DMessagesNotInAllowedRange, MqttC2DRejectedMessagesNotInAllowedRange, MqttD2CMessagesNotInAllowedRange, QueuePurgesNotInAllowedRange, TwinUpdatesNotInAllowedRange, UnauthorizedOperationsNotInAllowedRange. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'type': {'readonly': True}, - 'reason': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'type': {'key': 'type', 'type': 'str'}, - 'reason': {'key': 'reason', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(AlertConfidenceReason, self).__init__(**kwargs) - self.type = None - self.reason = None + _subtype_map = { + 'rule_type': {'ActiveConnectionsNotInAllowedRange': 'ActiveConnectionsNotInAllowedRange', 'AmqpC2DMessagesNotInAllowedRange': 'AmqpC2DMessagesNotInAllowedRange', 'AmqpC2DRejectedMessagesNotInAllowedRange': 'AmqpC2DRejectedMessagesNotInAllowedRange', 'AmqpD2CMessagesNotInAllowedRange': 'AmqpD2CMessagesNotInAllowedRange', 'DirectMethodInvokesNotInAllowedRange': 'DirectMethodInvokesNotInAllowedRange', 'FailedLocalLoginsNotInAllowedRange': 'FailedLocalLoginsNotInAllowedRange', 'FileUploadsNotInAllowedRange': 'FileUploadsNotInAllowedRange', 'HttpC2DMessagesNotInAllowedRange': 'HttpC2DMessagesNotInAllowedRange', 'HttpC2DRejectedMessagesNotInAllowedRange': 'HttpC2DRejectedMessagesNotInAllowedRange', 'HttpD2CMessagesNotInAllowedRange': 'HttpD2CMessagesNotInAllowedRange', 'MqttC2DMessagesNotInAllowedRange': 'MqttC2DMessagesNotInAllowedRange', 'MqttC2DRejectedMessagesNotInAllowedRange': 'MqttC2DRejectedMessagesNotInAllowedRange', 'MqttD2CMessagesNotInAllowedRange': 'MqttD2CMessagesNotInAllowedRange', 'QueuePurgesNotInAllowedRange': 'QueuePurgesNotInAllowedRange', 'TwinUpdatesNotInAllowedRange': 'TwinUpdatesNotInAllowedRange', 'UnauthorizedOperationsNotInAllowedRange': 'UnauthorizedOperationsNotInAllowedRange'} + } + def __init__( + self, + **kwargs + ): + super(TimeWindowCustomAlertRule, self).__init__(**kwargs) + self.rule_type = 'TimeWindowCustomAlertRule' # type: str + self.time_window_size = kwargs['time_window_size'] -class AlertEntity(Model): - """Changing set of properties depending on the entity type. - Variables are only populated by the server, and will be ignored when - sending a request. +class ActiveConnectionsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of active connections is not in allowed range. - :param additional_properties: Unmatched properties from the message are - deserialized this collection - :type additional_properties: dict[str, object] - :ivar type: Type of entity - :vartype type: str + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'additional_properties': {'key': '', 'type': '{object}'}, - 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(AlertEntity, self).__init__(**kwargs) - self.additional_properties = kwargs.get('additional_properties', None) - self.type = None + def __init__( + self, + **kwargs + ): + super(ActiveConnectionsNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'ActiveConnectionsNotInAllowedRange' # type: str + self.rule_type = 'ActiveConnectionsNotInAllowedRange' # type: str -class AllowedConnectionsResource(Model): - """The resource whose properties describes the allowed traffic between Azure - resources. +class AdaptiveApplicationControlGroup(Resource, Location): + """AdaptiveApplicationControlGroup. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored + :ivar location: Location where the resource is stored. :vartype location: str - :ivar calculated_date_time: The UTC time on which the allowed connections - resource was calculated - :vartype calculated_date_time: datetime - :ivar connectable_resources: List of connectable resources - :vartype connectable_resources: - list[~azure.mgmt.security.models.ConnectableResource] - """ - - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'calculated_date_time': {'readonly': True}, - 'connectable_resources': {'readonly': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'calculated_date_time': {'key': 'properties.calculatedDateTime', 'type': 'iso-8601'}, - 'connectable_resources': {'key': 'properties.connectableResources', 'type': '[ConnectableResource]'}, - } - - def __init__(self, **kwargs): - super(AllowedConnectionsResource, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.calculated_date_time = None - self.connectable_resources = None - - -class AppWhitelistingGroup(Model): - """AppWhitelistingGroup. - - Variables are only populated by the server, and will be ignored when - sending a request. - - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param enforcement_mode: Possible values include: 'Audit', 'Enforce' - :type enforcement_mode: str or ~azure.mgmt.security.models.enum - :param configuration_status: Possible values include: 'Configured', - 'NotConfigured', 'InProgress', 'Failed', 'NoStatus' - :type configuration_status: str or ~azure.mgmt.security.models.enum - :param recommendation_status: Possible values include: 'Recommended', - 'NotRecommended', 'NotAvailable', 'NoStatus' - :type recommendation_status: str or ~azure.mgmt.security.models.enum - :param issues: - :type issues: - list[~azure.mgmt.security.models.AppWhitelistingIssueSummary] - :param source_system: Possible values include: 'Azure_AppLocker', - 'Azure_AuditD', 'NonAzure_AppLocker', 'NonAzure_AuditD', 'None' - :type source_system: str or ~azure.mgmt.security.models.enum + :param enforcement_mode: The application control policy enforcement/protection mode of the + machine group. Possible values include: "Audit", "Enforce", "None". + :type enforcement_mode: str or ~azure.mgmt.security.models.EnforcementMode + :param protection_mode: The protection mode of the collection/file types. Exe/Msi/Script are + used for Windows, Executable is used for Linux. + :type protection_mode: ~azure.mgmt.security.models.ProtectionMode + :ivar configuration_status: The configuration status of the machines group or machine or rule. + Possible values include: "Configured", "NotConfigured", "InProgress", "Failed", "NoStatus". + :vartype configuration_status: str or ~azure.mgmt.security.models.ConfigurationStatus + :ivar recommendation_status: The initial recommendation status of the machine group or machine. + Possible values include: "Recommended", "NotRecommended", "NotAvailable", "NoStatus". + :vartype recommendation_status: str or ~azure.mgmt.security.models.RecommendationStatus + :ivar issues: + :vartype issues: list[~azure.mgmt.security.models.AdaptiveApplicationControlIssueSummary] + :ivar source_system: The source type of the machine group. Possible values include: + "Azure_AppLocker", "Azure_AuditD", "NonAzure_AppLocker", "NonAzure_AuditD", "None". + :vartype source_system: str or ~azure.mgmt.security.models.SourceSystem :param vm_recommendations: - :type vm_recommendations: - list[~azure.mgmt.security.models.VmRecommendation] + :type vm_recommendations: list[~azure.mgmt.security.models.VmRecommendation] :param path_recommendations: - :type path_recommendations: - list[~azure.mgmt.security.models.PathRecommendation] + :type path_recommendations: list[~azure.mgmt.security.models.PathRecommendation] """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, + 'configuration_status': {'readonly': True}, + 'recommendation_status': {'readonly': True}, + 'issues': {'readonly': True}, + 'source_system': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, 'enforcement_mode': {'key': 'properties.enforcementMode', 'type': 'str'}, + 'protection_mode': {'key': 'properties.protectionMode', 'type': 'ProtectionMode'}, 'configuration_status': {'key': 'properties.configurationStatus', 'type': 'str'}, 'recommendation_status': {'key': 'properties.recommendationStatus', 'type': 'str'}, - 'issues': {'key': 'properties.issues', 'type': '[AppWhitelistingIssueSummary]'}, + 'issues': {'key': 'properties.issues', 'type': '[AdaptiveApplicationControlIssueSummary]'}, 'source_system': {'key': 'properties.sourceSystem', 'type': 'str'}, 'vm_recommendations': {'key': 'properties.vmRecommendations', 'type': '[VmRecommendation]'}, 'path_recommendations': {'key': 'properties.pathRecommendations', 'type': '[PathRecommendation]'}, } - def __init__(self, **kwargs): - super(AppWhitelistingGroup, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(AdaptiveApplicationControlGroup, self).__init__(**kwargs) + self.location = None + self.enforcement_mode = kwargs.get('enforcement_mode', None) + self.protection_mode = kwargs.get('protection_mode', None) + self.configuration_status = None + self.recommendation_status = None + self.issues = None + self.source_system = None + self.vm_recommendations = kwargs.get('vm_recommendations', None) + self.path_recommendations = kwargs.get('path_recommendations', None) self.id = None self.name = None self.type = None - self.location = None self.enforcement_mode = kwargs.get('enforcement_mode', None) - self.configuration_status = kwargs.get('configuration_status', None) - self.recommendation_status = kwargs.get('recommendation_status', None) - self.issues = kwargs.get('issues', None) - self.source_system = kwargs.get('source_system', None) + self.protection_mode = kwargs.get('protection_mode', None) + self.configuration_status = None + self.recommendation_status = None + self.issues = None + self.source_system = None self.vm_recommendations = kwargs.get('vm_recommendations', None) self.path_recommendations = kwargs.get('path_recommendations', None) -class AppWhitelistingGroups(Model): - """Represents a list of VM/server groups and set of rules that are Recommended - by Azure Security Center to be allowed. +class AdaptiveApplicationControlGroups(msrest.serialization.Model): + """Represents a list of machine groups and set of rules that are recommended by Azure Security Center to be allowed. :param value: - :type value: list[~azure.mgmt.security.models.AppWhitelistingGroup] + :type value: list[~azure.mgmt.security.models.AdaptiveApplicationControlGroup] """ _attribute_map = { - 'value': {'key': 'value', 'type': '[AppWhitelistingGroup]'}, + 'value': {'key': 'value', 'type': '[AdaptiveApplicationControlGroup]'}, } - def __init__(self, **kwargs): - super(AppWhitelistingGroups, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(AdaptiveApplicationControlGroups, self).__init__(**kwargs) self.value = kwargs.get('value', None) -class AppWhitelistingIssueSummary(Model): - """Represents a summary of the alerts of the VM/server group. +class AdaptiveApplicationControlIssueSummary(msrest.serialization.Model): + """Represents a summary of the alerts of the machine group. - :param issue: Possible values include: 'ViolationsAudited', - 'ViolationsBlocked', 'MsiAndScriptViolationsAudited', - 'MsiAndScriptViolationsBlocked', 'ExecutableViolationsAudited', - 'RulesViolatedManually' - :type issue: str or ~azure.mgmt.security.models.enum - :param number_of_vms: The number of machines in the VM/server group that - have this alert + :param issue: An alert that machines within a group can have. Possible values include: + "ViolationsAudited", "ViolationsBlocked", "MsiAndScriptViolationsAudited", + "MsiAndScriptViolationsBlocked", "ExecutableViolationsAudited", "RulesViolatedManually". + :type issue: str or ~azure.mgmt.security.models.AdaptiveApplicationControlIssue + :param number_of_vms: The number of machines in the group that have this alert. :type number_of_vms: float """ @@ -599,52 +625,34 @@ class AppWhitelistingIssueSummary(Model): 'number_of_vms': {'key': 'numberOfVms', 'type': 'float'}, } - def __init__(self, **kwargs): - super(AppWhitelistingIssueSummary, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(AdaptiveApplicationControlIssueSummary, self).__init__(**kwargs) self.issue = kwargs.get('issue', None) self.number_of_vms = kwargs.get('number_of_vms', None) -class AppWhitelistingPutGroupData(Model): - """The altered data of the recommended VM/server group policy. - - :param enforcement_mode: Possible values include: 'Audit', 'Enforce' - :type enforcement_mode: str or ~azure.mgmt.security.models.enum - :param vm_recommendations: - :type vm_recommendations: - list[~azure.mgmt.security.models.VmRecommendation] - :param path_recommendations: - :type path_recommendations: - list[~azure.mgmt.security.models.PathRecommendation] - """ - - _attribute_map = { - 'enforcement_mode': {'key': 'enforcementMode', 'type': 'str'}, - 'vm_recommendations': {'key': 'vmRecommendations', 'type': '[VmRecommendation]'}, - 'path_recommendations': {'key': 'pathRecommendations', 'type': '[PathRecommendation]'}, - } - - def __init__(self, **kwargs): - super(AppWhitelistingPutGroupData, self).__init__(**kwargs) - self.enforcement_mode = kwargs.get('enforcement_mode', None) - self.vm_recommendations = kwargs.get('vm_recommendations', None) - self.path_recommendations = kwargs.get('path_recommendations', None) - - -class AscLocation(Resource): - """The ASC location of the subscription is in the "name" field. +class AdaptiveNetworkHardening(Resource): + """The resource whose properties describes the Adaptive Network Hardening settings for some Azure resource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param properties: - :type properties: object + :param rules: The security rules which are recommended to be effective on the VM. + :type rules: list[~azure.mgmt.security.models.Rule] + :param rules_calculation_time: The UTC time on which the rules were calculated. + :type rules_calculation_time: ~datetime.datetime + :param effective_network_security_groups: The Network Security Groups effective on the network + interfaces of the protected resource. + :type effective_network_security_groups: + list[~azure.mgmt.security.models.EffectiveNetworkSecurityGroups] """ _validation = { @@ -657,1239 +665,7046 @@ class AscLocation(Resource): 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'object'}, + 'rules': {'key': 'properties.rules', 'type': '[Rule]'}, + 'rules_calculation_time': {'key': 'properties.rulesCalculationTime', 'type': 'iso-8601'}, + 'effective_network_security_groups': {'key': 'properties.effectiveNetworkSecurityGroups', 'type': '[EffectiveNetworkSecurityGroups]'}, } - def __init__(self, **kwargs): - super(AscLocation, self).__init__(**kwargs) - self.properties = kwargs.get('properties', None) - + def __init__( + self, + **kwargs + ): + super(AdaptiveNetworkHardening, self).__init__(**kwargs) + self.rules = kwargs.get('rules', None) + self.rules_calculation_time = kwargs.get('rules_calculation_time', None) + self.effective_network_security_groups = kwargs.get('effective_network_security_groups', None) -class AtaExternalSecuritySolution(ExternalSecuritySolution): - """Represents an ATA security solution which sends logs to an OMS workspace. - Variables are only populated by the server, and will be ignored when - sending a request. +class AdaptiveNetworkHardeningEnforceRequest(msrest.serialization.Model): + """AdaptiveNetworkHardeningEnforceRequest. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str - :param properties: - :type properties: ~azure.mgmt.security.models.AtaSolutionProperties + :param rules: Required. The rules to enforce. + :type rules: list[~azure.mgmt.security.models.Rule] + :param network_security_groups: Required. The Azure resource IDs of the effective network + security groups that will be updated with the created security rules from the Adaptive Network + Hardening rules. + :type network_security_groups: list[str] """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, + 'rules': {'required': True}, + 'network_security_groups': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'AtaSolutionProperties'}, + 'rules': {'key': 'rules', 'type': '[Rule]'}, + 'network_security_groups': {'key': 'networkSecurityGroups', 'type': '[str]'}, } - def __init__(self, **kwargs): - super(AtaExternalSecuritySolution, self).__init__(**kwargs) - self.properties = kwargs.get('properties', None) - self.kind = 'ATA' + def __init__( + self, + **kwargs + ): + super(AdaptiveNetworkHardeningEnforceRequest, self).__init__(**kwargs) + self.rules = kwargs['rules'] + self.network_security_groups = kwargs['network_security_groups'] -class ExternalSecuritySolutionProperties(Model): - """The solution properties (correspond to the solution kind). +class AdaptiveNetworkHardeningsList(msrest.serialization.Model): + """Response for ListAdaptiveNetworkHardenings API service call. - :param additional_properties: Unmatched properties from the message are - deserialized this collection - :type additional_properties: dict[str, object] - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace + :param value: A list of Adaptive Network Hardenings resources. + :type value: list[~azure.mgmt.security.models.AdaptiveNetworkHardening] + :param next_link: The URL to get the next set of results. + :type next_link: str """ _attribute_map = { - 'additional_properties': {'key': '', 'type': '{object}'}, - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, + 'value': {'key': 'value', 'type': '[AdaptiveNetworkHardening]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(ExternalSecuritySolutionProperties, self).__init__(**kwargs) - self.additional_properties = kwargs.get('additional_properties', None) - self.device_vendor = kwargs.get('device_vendor', None) - self.device_type = kwargs.get('device_type', None) - self.workspace = kwargs.get('workspace', None) + def __init__( + self, + **kwargs + ): + super(AdaptiveNetworkHardeningsList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) -class AtaSolutionProperties(ExternalSecuritySolutionProperties): - """The external security solution properties for ATA solutions. +class AdditionalData(msrest.serialization.Model): + """Details of the sub-assessment. - :param additional_properties: Unmatched properties from the message are - deserialized this collection - :type additional_properties: dict[str, object] - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace - :param last_event_received: - :type last_event_received: str + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ContainerRegistryVulnerabilityProperties, ServerVulnerabilityProperties, SqlServerVulnerabilityProperties. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType """ + _validation = { + 'assessed_resource_type': {'required': True}, + } + _attribute_map = { - 'additional_properties': {'key': '', 'type': '{object}'}, - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, - 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, } - def __init__(self, **kwargs): - super(AtaSolutionProperties, self).__init__(**kwargs) - self.last_event_received = kwargs.get('last_event_received', None) + _subtype_map = { + 'assessed_resource_type': {'ContainerRegistryVulnerability': 'ContainerRegistryVulnerabilityProperties', 'ServerVulnerabilityAssessment': 'ServerVulnerabilityProperties', 'SqlServerVulnerability': 'SqlServerVulnerabilityProperties'} + } + def __init__( + self, + **kwargs + ): + super(AdditionalData, self).__init__(**kwargs) + self.assessed_resource_type = None # type: Optional[str] -class AutoProvisioningSetting(Resource): - """Auto provisioning setting. - Variables are only populated by the server, and will be ignored when - sending a request. +class AdvancedThreatProtectionSetting(Resource): + """The Advanced Threat Protection resource. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param auto_provision: Required. Describes what kind of security agent - provisioning action to take. Possible values include: 'On', 'Off' - :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision + :param is_enabled: Indicates whether Advanced Threat Protection is enabled. + :type is_enabled: bool """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'auto_provision': {'required': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'auto_provision': {'key': 'properties.autoProvision', 'type': 'str'}, + 'is_enabled': {'key': 'properties.isEnabled', 'type': 'bool'}, } - def __init__(self, **kwargs): - super(AutoProvisioningSetting, self).__init__(**kwargs) - self.auto_provision = kwargs.get('auto_provision', None) - + def __init__( + self, + **kwargs + ): + super(AdvancedThreatProtectionSetting, self).__init__(**kwargs) + self.is_enabled = kwargs.get('is_enabled', None) -class CefExternalSecuritySolution(ExternalSecuritySolution): - """Represents a security solution which sends CEF logs to an OMS workspace. - Variables are only populated by the server, and will be ignored when - sending a request. +class Alert(Resource): + """Security alert. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str - :param properties: - :type properties: ~azure.mgmt.security.models.CefSolutionProperties + :ivar alert_type: Unique identifier for the detection logic (all alert instances from the same + detection logic will have the same alertType). + :vartype alert_type: str + :ivar system_alert_id: Unique identifier for the alert. + :vartype system_alert_id: str + :ivar product_component_name: The name of Azure Security Center pricing tier which powering + this alert. Learn more: https://docs.microsoft.com/en-us/azure/security-center/security-center- + pricing. + :vartype product_component_name: str + :ivar alert_display_name: The display name of the alert. + :vartype alert_display_name: str + :ivar description: Description of the suspicious activity that was detected. + :vartype description: str + :ivar severity: The risk level of the threat that was detected. Learn more: + https://docs.microsoft.com/en-us/azure/security-center/security-center-alerts-overview#how-are- + alerts-classified. Possible values include: "Informational", "Low", "Medium", "High". + :vartype severity: str or ~azure.mgmt.security.models.AlertSeverity + :ivar intent: The kill chain related intent behind the alert. For list of supported values, and + explanations of Azure Security Center's supported kill chain intents. Possible values include: + "Unknown", "PreAttack", "InitialAccess", "Persistence", "PrivilegeEscalation", + "DefenseEvasion", "CredentialAccess", "Discovery", "LateralMovement", "Execution", + "Collection", "Exfiltration", "CommandAndControl", "Impact", "Probing", "Exploitation". + :vartype intent: str or ~azure.mgmt.security.models.Intent + :ivar start_time_utc: The UTC time of the first event or activity included in the alert in + ISO8601 format. + :vartype start_time_utc: ~datetime.datetime + :ivar end_time_utc: The UTC time of the last event or activity included in the alert in ISO8601 + format. + :vartype end_time_utc: ~datetime.datetime + :ivar resource_identifiers: The resource identifiers that can be used to direct the alert to + the right product exposure group (tenant, workspace, subscription etc.). There can be multiple + identifiers of different type per alert. + :vartype resource_identifiers: list[~azure.mgmt.security.models.ResourceIdentifier] + :ivar remediation_steps: Manual action items to take to remediate the alert. + :vartype remediation_steps: list[str] + :ivar vendor_name: The name of the vendor that raises the alert. + :vartype vendor_name: str + :ivar status: The life cycle status of the alert. Possible values include: "Active", + "Resolved", "Dismissed". + :vartype status: str or ~azure.mgmt.security.models.AlertStatus + :ivar extended_links: Links related to the alert. + :vartype extended_links: list[dict[str, str]] + :ivar alert_uri: A direct link to the alert page in Azure Portal. + :vartype alert_uri: str + :ivar time_generated_utc: The UTC time the alert was generated in ISO8601 format. + :vartype time_generated_utc: ~datetime.datetime + :ivar product_name: The name of the product which published this alert (Azure Security Center, + Azure ATP, Microsoft Defender ATP, O365 ATP, MCAS, and so on). + :vartype product_name: str + :ivar processing_end_time_utc: The UTC processing end time of the alert in ISO8601 format. + :vartype processing_end_time_utc: ~datetime.datetime + :ivar entities: A list of entities related to the alert. + :vartype entities: list[~azure.mgmt.security.models.AlertEntity] + :ivar is_incident: This field determines whether the alert is an incident (a compound grouping + of several alerts) or a single alert. + :vartype is_incident: bool + :ivar correlation_key: Key for corelating related alerts. Alerts with the same correlation key + considered to be related. + :vartype correlation_key: str + :param extended_properties: Custom properties for the alert. + :type extended_properties: dict[str, str] + :ivar compromised_entity: The display name of the resource most related to this alert. + :vartype compromised_entity: str """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, + 'alert_type': {'readonly': True}, + 'system_alert_id': {'readonly': True}, + 'product_component_name': {'readonly': True}, + 'alert_display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'severity': {'readonly': True}, + 'intent': {'readonly': True}, + 'start_time_utc': {'readonly': True}, + 'end_time_utc': {'readonly': True}, + 'resource_identifiers': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'status': {'readonly': True}, + 'extended_links': {'readonly': True}, + 'alert_uri': {'readonly': True}, + 'time_generated_utc': {'readonly': True}, + 'product_name': {'readonly': True}, + 'processing_end_time_utc': {'readonly': True}, + 'entities': {'readonly': True}, + 'is_incident': {'readonly': True}, + 'correlation_key': {'readonly': True}, + 'compromised_entity': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'CefSolutionProperties'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'system_alert_id': {'key': 'properties.systemAlertId', 'type': 'str'}, + 'product_component_name': {'key': 'properties.productComponentName', 'type': 'str'}, + 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'intent': {'key': 'properties.intent', 'type': 'str'}, + 'start_time_utc': {'key': 'properties.startTimeUtc', 'type': 'iso-8601'}, + 'end_time_utc': {'key': 'properties.endTimeUtc', 'type': 'iso-8601'}, + 'resource_identifiers': {'key': 'properties.resourceIdentifiers', 'type': '[ResourceIdentifier]'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': '[str]'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'extended_links': {'key': 'properties.extendedLinks', 'type': '[{str}]'}, + 'alert_uri': {'key': 'properties.alertUri', 'type': 'str'}, + 'time_generated_utc': {'key': 'properties.timeGeneratedUtc', 'type': 'iso-8601'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'processing_end_time_utc': {'key': 'properties.processingEndTimeUtc', 'type': 'iso-8601'}, + 'entities': {'key': 'properties.entities', 'type': '[AlertEntity]'}, + 'is_incident': {'key': 'properties.isIncident', 'type': 'bool'}, + 'correlation_key': {'key': 'properties.correlationKey', 'type': 'str'}, + 'extended_properties': {'key': 'properties.extendedProperties', 'type': '{str}'}, + 'compromised_entity': {'key': 'properties.compromisedEntity', 'type': 'str'}, } - def __init__(self, **kwargs): - super(CefExternalSecuritySolution, self).__init__(**kwargs) - self.properties = kwargs.get('properties', None) - self.kind = 'CEF' + def __init__( + self, + **kwargs + ): + super(Alert, self).__init__(**kwargs) + self.alert_type = None + self.system_alert_id = None + self.product_component_name = None + self.alert_display_name = None + self.description = None + self.severity = None + self.intent = None + self.start_time_utc = None + self.end_time_utc = None + self.resource_identifiers = None + self.remediation_steps = None + self.vendor_name = None + self.status = None + self.extended_links = None + self.alert_uri = None + self.time_generated_utc = None + self.product_name = None + self.processing_end_time_utc = None + self.entities = None + self.is_incident = None + self.correlation_key = None + self.extended_properties = kwargs.get('extended_properties', None) + self.compromised_entity = None -class CefSolutionProperties(ExternalSecuritySolutionProperties): - """The external security solution properties for CEF solutions. +class AlertEntity(msrest.serialization.Model): + """Changing set of properties depending on the entity type. + + Variables are only populated by the server, and will be ignored when sending a request. - :param additional_properties: Unmatched properties from the message are - deserialized this collection + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. :type additional_properties: dict[str, object] - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace - :param hostname: - :type hostname: str - :param agent: - :type agent: str - :param last_event_received: - :type last_event_received: str + :ivar type: Type of entity. + :vartype type: str """ + _validation = { + 'type': {'readonly': True}, + } + _attribute_map = { 'additional_properties': {'key': '', 'type': '{object}'}, - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, - 'hostname': {'key': 'hostname', 'type': 'str'}, - 'agent': {'key': 'agent', 'type': 'str'}, - 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, } - def __init__(self, **kwargs): - super(CefSolutionProperties, self).__init__(**kwargs) - self.hostname = kwargs.get('hostname', None) - self.agent = kwargs.get('agent', None) - self.last_event_received = kwargs.get('last_event_received', None) + def __init__( + self, + **kwargs + ): + super(AlertEntity, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) + self.type = None -class CloudError(Model): - """Error response structure. +class AlertList(msrest.serialization.Model): + """List of security alerts. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar code: An identifier for the error. Codes are invariant and are - intended to be consumed programmatically. - :vartype code: str - :ivar message: A message describing the error, intended to be suitable for - display in a user interface. - :vartype message: str + :param value: describes security alert properties. + :type value: list[~azure.mgmt.security.models.Alert] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'code': {'readonly': True}, - 'message': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'code': {'key': 'error.code', 'type': 'str'}, - 'message': {'key': 'error.message', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[Alert]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(CloudError, self).__init__(**kwargs) - self.code = None - self.message = None - - -class CloudErrorException(HttpOperationError): - """Server responsed with exception of type: 'CloudError'. - - :param deserialize: A deserializer - :param response: Server response to be deserialized. - """ - - def __init__(self, deserialize, response, *args): - - super(CloudErrorException, self).__init__(deserialize, response, 'CloudError', *args) + def __init__( + self, + **kwargs + ): + super(AlertList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None -class Compliance(Resource): - """Compliance of a scope. +class AlertsSuppressionRule(Resource): + """Describes the suppression rule. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar assessment_timestamp_utc_date: The timestamp when the Compliance - calculation was conducted. - :vartype assessment_timestamp_utc_date: datetime - :ivar resource_count: The resource count of the given subscription for - which the Compliance calculation was conducted (needed for Management - Group Compliance calculation). - :vartype resource_count: int - :ivar assessment_result: An array of segment, which is the actually the - compliance assessment. - :vartype assessment_result: - list[~azure.mgmt.security.models.ComplianceSegment] + :param alert_type: Type of the alert to automatically suppress. For all alert types, use '*'. + :type alert_type: str + :ivar last_modified_utc: The last time this rule was modified. + :vartype last_modified_utc: ~datetime.datetime + :param expiration_date_utc: Expiration date of the rule, if value is not provided or provided + as null this field will default to the maximum allowed expiration date. + :type expiration_date_utc: ~datetime.datetime + :param reason: The reason for dismissing the alert. + :type reason: str + :param state: Possible states of the rule. Possible values include: "Enabled", "Disabled", + "Expired". + :type state: str or ~azure.mgmt.security.models.RuleState + :param comment: Any comment regarding the rule. + :type comment: str + :param suppression_alerts_scope: The suppression conditions. + :type suppression_alerts_scope: ~azure.mgmt.security.models.SuppressionAlertsScope """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'assessment_timestamp_utc_date': {'readonly': True}, - 'resource_count': {'readonly': True}, - 'assessment_result': {'readonly': True}, + 'last_modified_utc': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'assessment_timestamp_utc_date': {'key': 'properties.assessmentTimestampUtcDate', 'type': 'iso-8601'}, - 'resource_count': {'key': 'properties.resourceCount', 'type': 'int'}, - 'assessment_result': {'key': 'properties.assessmentResult', 'type': '[ComplianceSegment]'}, - } - - def __init__(self, **kwargs): - super(Compliance, self).__init__(**kwargs) - self.assessment_timestamp_utc_date = None - self.resource_count = None - self.assessment_result = None + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'last_modified_utc': {'key': 'properties.lastModifiedUtc', 'type': 'iso-8601'}, + 'expiration_date_utc': {'key': 'properties.expirationDateUtc', 'type': 'iso-8601'}, + 'reason': {'key': 'properties.reason', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'comment': {'key': 'properties.comment', 'type': 'str'}, + 'suppression_alerts_scope': {'key': 'properties.suppressionAlertsScope', 'type': 'SuppressionAlertsScope'}, + } + def __init__( + self, + **kwargs + ): + super(AlertsSuppressionRule, self).__init__(**kwargs) + self.alert_type = kwargs.get('alert_type', None) + self.last_modified_utc = None + self.expiration_date_utc = kwargs.get('expiration_date_utc', None) + self.reason = kwargs.get('reason', None) + self.state = kwargs.get('state', None) + self.comment = kwargs.get('comment', None) + self.suppression_alerts_scope = kwargs.get('suppression_alerts_scope', None) -class ComplianceResult(Resource): - """a compliance result. - Variables are only populated by the server, and will be ignored when - sending a request. +class AlertsSuppressionRulesList(msrest.serialization.Model): + """Suppression rules list for subscription. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar resource_status: The status of the resource regarding a single - assessment. Possible values include: 'Healthy', 'NotApplicable', - 'OffByPolicy', 'NotHealthy' - :vartype resource_status: str or - ~azure.mgmt.security.models.ResourceStatus + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. + :type value: list[~azure.mgmt.security.models.AlertsSuppressionRule] + :ivar next_link: URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'resource_status': {'readonly': True}, + 'value': {'required': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'resource_status': {'key': 'properties.resourceStatus', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[AlertsSuppressionRule]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(ComplianceResult, self).__init__(**kwargs) - self.resource_status = None + def __init__( + self, + **kwargs + ): + super(AlertsSuppressionRulesList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None -class ComplianceSegment(Model): - """A segment of a compliance assessment. +class AllowedConnectionsList(msrest.serialization.Model): + """List of all possible traffic between Azure resources. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar segment_type: The segment type, e.g. compliant, non-compliance, - insufficient coverage, N/A, etc. - :vartype segment_type: str - :ivar percentage: The size (%) of the segment. - :vartype percentage: float + :ivar value: + :vartype value: list[~azure.mgmt.security.models.AllowedConnectionsResource] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'segment_type': {'readonly': True}, - 'percentage': {'readonly': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'segment_type': {'key': 'segmentType', 'type': 'str'}, - 'percentage': {'key': 'percentage', 'type': 'float'}, + 'value': {'key': 'value', 'type': '[AllowedConnectionsResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(ComplianceSegment, self).__init__(**kwargs) - self.segment_type = None - self.percentage = None + def __init__( + self, + **kwargs + ): + super(AllowedConnectionsList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class ConnectableResource(Model): - """Describes the allowed inbound and outbound traffic of an Azure resource. +class AllowedConnectionsResource(Resource, Location): + """The resource whose properties describes the allowed traffic between Azure resources. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The Azure resource id + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar inbound_connected_resources: The list of Azure resources that the - resource has inbound allowed connection from - :vartype inbound_connected_resources: - list[~azure.mgmt.security.models.ConnectedResource] - :ivar outbound_connected_resources: The list of Azure resources that the - resource has outbound allowed connection to - :vartype outbound_connected_resources: - list[~azure.mgmt.security.models.ConnectedResource] + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar calculated_date_time: The UTC time on which the allowed connections resource was + calculated. + :vartype calculated_date_time: ~datetime.datetime + :ivar connectable_resources: List of connectable resources. + :vartype connectable_resources: list[~azure.mgmt.security.models.ConnectableResource] """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, - 'inbound_connected_resources': {'readonly': True}, - 'outbound_connected_resources': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'calculated_date_time': {'readonly': True}, + 'connectable_resources': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, - 'inbound_connected_resources': {'key': 'inboundConnectedResources', 'type': '[ConnectedResource]'}, - 'outbound_connected_resources': {'key': 'outboundConnectedResources', 'type': '[ConnectedResource]'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'calculated_date_time': {'key': 'properties.calculatedDateTime', 'type': 'iso-8601'}, + 'connectable_resources': {'key': 'properties.connectableResources', 'type': '[ConnectableResource]'}, } - def __init__(self, **kwargs): - super(ConnectableResource, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(AllowedConnectionsResource, self).__init__(**kwargs) + self.location = None + self.calculated_date_time = None + self.connectable_resources = None self.id = None - self.inbound_connected_resources = None - self.outbound_connected_resources = None + self.name = None + self.type = None + self.calculated_date_time = None + self.connectable_resources = None -class ConnectedResource(Model): - """Describes properties of a connected resource. +class ListCustomAlertRule(CustomAlertRule): + """A List custom alert rule. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AllowlistCustomAlertRule, DenylistCustomAlertRule. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar connected_resource_id: The Azure resource id of the connected - resource - :vartype connected_resource_id: str - :ivar tcp_ports: The allowed tcp ports - :vartype tcp_ports: str - :ivar udp_ports: The allowed udp ports - :vartype udp_ports: str + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType """ _validation = { - 'connected_resource_id': {'readonly': True}, - 'tcp_ports': {'readonly': True}, - 'udp_ports': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, } _attribute_map = { - 'connected_resource_id': {'key': 'connectedResourceId', 'type': 'str'}, - 'tcp_ports': {'key': 'tcpPorts', 'type': 'str'}, - 'udp_ports': {'key': 'udpPorts', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, } - def __init__(self, **kwargs): - super(ConnectedResource, self).__init__(**kwargs) - self.connected_resource_id = None - self.tcp_ports = None - self.udp_ports = None + _subtype_map = { + 'rule_type': {'AllowlistCustomAlertRule': 'AllowlistCustomAlertRule', 'DenylistCustomAlertRule': 'DenylistCustomAlertRule'} + } + def __init__( + self, + **kwargs + ): + super(ListCustomAlertRule, self).__init__(**kwargs) + self.rule_type = 'ListCustomAlertRule' # type: str + self.value_type = None -class ConnectedWorkspace(Model): - """Represents an OMS workspace to which the solution is connected. - :param id: Azure resource ID of the connected OMS workspace - :type id: str +class AllowlistCustomAlertRule(ListCustomAlertRule): + """A custom alert rule that checks if a value (depends on the custom alert type) is allowed. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ConnectionToIpNotAllowed, LocalUserNotAllowed, ProcessNotAllowed. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] """ + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, + } + _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, } - def __init__(self, **kwargs): - super(ConnectedWorkspace, self).__init__(**kwargs) - self.id = kwargs.get('id', None) + _subtype_map = { + 'rule_type': {'ConnectionToIpNotAllowed': 'ConnectionToIpNotAllowed', 'LocalUserNotAllowed': 'LocalUserNotAllowed', 'ProcessNotAllowed': 'ProcessNotAllowed'} + } + def __init__( + self, + **kwargs + ): + super(AllowlistCustomAlertRule, self).__init__(**kwargs) + self.rule_type = 'AllowlistCustomAlertRule' # type: str + self.allowlist_values = kwargs['allowlist_values'] -class SettingResource(Resource): - """The kind of the security setting. - Variables are only populated by the server, and will be ignored when - sending a request. +class AmqpC2DMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of cloud to device messages (AMQP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param kind: Required. the kind of the settings string - (DataExportSetting). Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'kind': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(SettingResource, self).__init__(**kwargs) - self.kind = kwargs.get('kind', None) + def __init__( + self, + **kwargs + ): + super(AmqpC2DMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'AmqpC2DMessagesNotInAllowedRange' # type: str + self.rule_type = 'AmqpC2DMessagesNotInAllowedRange' # type: str -class Setting(SettingResource): - """Represents a security setting in Azure Security Center. +class AmqpC2DRejectedMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of rejected cloud to device messages (AMQP protocol) is not in allowed range. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param kind: Required. the kind of the settings string - (DataExportSetting). Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'kind': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(Setting, self).__init__(**kwargs) + def __init__( + self, + **kwargs + ): + super(AmqpC2DRejectedMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'AmqpC2DRejectedMessagesNotInAllowedRange' # type: str + self.rule_type = 'AmqpC2DRejectedMessagesNotInAllowedRange' # type: str -class DataExportSetting(Setting): - """Represents a data export setting. +class AmqpD2CMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device to cloud messages (AMQP protocol) is not in allowed range. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param kind: Required. the kind of the settings string - (DataExportSetting). Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind - :param enabled: Required. Is the data export setting is enabled - :type enabled: bool + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'kind': {'required': True}, - 'enabled': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'enabled': {'key': 'properties.enabled', 'type': 'bool'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(DataExportSetting, self).__init__(**kwargs) - self.enabled = kwargs.get('enabled', None) - + def __init__( + self, + **kwargs + ): + super(AmqpD2CMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'AmqpD2CMessagesNotInAllowedRange' # type: str + self.rule_type = 'AmqpD2CMessagesNotInAllowedRange' # type: str -class DiscoveredSecuritySolution(Model): - """DiscoveredSecuritySolution. - Variables are only populated by the server, and will be ignored when - sending a request. +class AscLocation(Resource): + """The ASC location of the subscription is in the "name" field. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param security_family: Required. The security family of the discovered - solution. Possible values include: 'Waf', 'Ngfw', 'SaasWaf', 'Va' - :type security_family: str or ~azure.mgmt.security.models.SecurityFamily - :param offer: Required. The security solutions' image offer - :type offer: str - :param publisher: Required. The security solutions' image publisher - :type publisher: str - :param sku: Required. The security solutions' image sku - :type sku: str + :param properties: Any object. + :type properties: object """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'security_family': {'required': True}, - 'offer': {'required': True}, - 'publisher': {'required': True}, - 'sku': {'required': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, - 'offer': {'key': 'properties.offer', 'type': 'str'}, - 'publisher': {'key': 'properties.publisher', 'type': 'str'}, - 'sku': {'key': 'properties.sku', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'object'}, } - def __init__(self, **kwargs): - super(DiscoveredSecuritySolution, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.security_family = kwargs.get('security_family', None) - self.offer = kwargs.get('offer', None) - self.publisher = kwargs.get('publisher', None) - self.sku = kwargs.get('sku', None) + def __init__( + self, + **kwargs + ): + super(AscLocation, self).__init__(**kwargs) + self.properties = kwargs.get('properties', None) -class ExternalSecuritySolutionKind1(Model): - """Describes an Azure resource with kind. +class AscLocationList(msrest.serialization.Model): + """List of locations where ASC saves your data. + + Variables are only populated by the server, and will be ignored when sending a request. - :param kind: The kind of the external solution. Possible values include: - 'CEF', 'ATA', 'AAD' - :type kind: str or - ~azure.mgmt.security.models.ExternalSecuritySolutionKind + :ivar value: + :vartype value: list[~azure.mgmt.security.models.AscLocation] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + _attribute_map = { - 'kind': {'key': 'kind', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[AscLocation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(ExternalSecuritySolutionKind1, self).__init__(**kwargs) - self.kind = kwargs.get('kind', None) + def __init__( + self, + **kwargs + ): + super(AscLocationList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class InformationProtectionKeyword(Model): - """The information type keyword. +class AssessmentLinks(msrest.serialization.Model): + """Links relevant to the assessment. - :param pattern: The keyword pattern. - :type pattern: str - :param custom: Indicates whether the keyword is custom or not. - :type custom: bool - :param can_be_numeric: Indicates whether the keyword can be applied on - numeric types or not. - :type can_be_numeric: bool - :param excluded: Indicates whether the keyword is excluded or not. - :type excluded: bool + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar azure_portal_uri: Link to assessment in Azure Portal. + :vartype azure_portal_uri: str """ + _validation = { + 'azure_portal_uri': {'readonly': True}, + } + _attribute_map = { - 'pattern': {'key': 'pattern', 'type': 'str'}, - 'custom': {'key': 'custom', 'type': 'bool'}, - 'can_be_numeric': {'key': 'canBeNumeric', 'type': 'bool'}, - 'excluded': {'key': 'excluded', 'type': 'bool'}, + 'azure_portal_uri': {'key': 'azurePortalUri', 'type': 'str'}, } - def __init__(self, **kwargs): - super(InformationProtectionKeyword, self).__init__(**kwargs) - self.pattern = kwargs.get('pattern', None) - self.custom = kwargs.get('custom', None) - self.can_be_numeric = kwargs.get('can_be_numeric', None) - self.excluded = kwargs.get('excluded', None) + def __init__( + self, + **kwargs + ): + super(AssessmentLinks, self).__init__(**kwargs) + self.azure_portal_uri = None -class InformationProtectionPolicy(Resource): - """Information protection policy. +class AssessmentStatus(msrest.serialization.Model): + """The result of the assessment. + + All required parameters must be populated in order to send to Azure. + + :param code: Required. Programmatic code for the status of the assessment. Possible values + include: "Healthy", "Unhealthy", "NotApplicable". + :type code: str or ~azure.mgmt.security.models.AssessmentStatusCode + :param cause: Programmatic code for the cause of the assessment status. + :type cause: str + :param description: Human readable description of the assessment status. + :type description: str + """ + + _validation = { + 'code': {'required': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'cause': {'key': 'cause', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AssessmentStatus, self).__init__(**kwargs) + self.code = kwargs['code'] + self.cause = kwargs.get('cause', None) + self.description = kwargs.get('description', None) + - Variables are only populated by the server, and will be ignored when - sending a request. +class AtaExternalSecuritySolution(ExternalSecuritySolution): + """Represents an ATA security solution which sends logs to an OMS workspace. - :ivar id: Resource Id + Variables are only populated by the server, and will be ignored when sending a request. + + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar last_modified_utc: Describes the last UTC time the policy was - modified. - :vartype last_modified_utc: datetime - :param labels: Dictionary of sensitivity labels. - :type labels: dict[str, ~azure.mgmt.security.models.SensitivityLabel] - :param information_types: The sensitivity information types. - :type information_types: dict[str, - ~azure.mgmt.security.models.InformationType] + :param properties: The external security solution properties for ATA solutions. + :type properties: ~azure.mgmt.security.models.AtaSolutionProperties """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'last_modified_utc': {'readonly': True}, } _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'last_modified_utc': {'key': 'properties.lastModifiedUtc', 'type': 'iso-8601'}, - 'labels': {'key': 'properties.labels', 'type': '{SensitivityLabel}'}, - 'information_types': {'key': 'properties.informationTypes', 'type': '{InformationType}'}, + 'properties': {'key': 'properties', 'type': 'AtaSolutionProperties'}, } - def __init__(self, **kwargs): - super(InformationProtectionPolicy, self).__init__(**kwargs) - self.last_modified_utc = None - self.labels = kwargs.get('labels', None) - self.information_types = kwargs.get('information_types', None) + def __init__( + self, + **kwargs + ): + super(AtaExternalSecuritySolution, self).__init__(**kwargs) + self.properties = kwargs.get('properties', None) -class InformationType(Model): - """The information type. +class AtaSolutionProperties(ExternalSecuritySolutionProperties): + """The external security solution properties for ATA solutions. - :param display_name: The name of the information type. - :type display_name: str - :param order: The order of the information type. - :type order: float - :param recommended_label_id: The recommended label id to be associated - with this information type. - :type recommended_label_id: str - :param enabled: Indicates whether the information type is enabled or not. - :type enabled: bool - :param custom: Indicates whether the information type is custom or not. - :type custom: bool - :param keywords: The information type keywords. - :type keywords: - list[~azure.mgmt.security.models.InformationProtectionKeyword] + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace + :param last_event_received: + :type last_event_received: str """ _attribute_map = { - 'display_name': {'key': 'displayName', 'type': 'str'}, - 'order': {'key': 'order', 'type': 'float'}, - 'recommended_label_id': {'key': 'recommendedLabelId', 'type': 'str'}, - 'enabled': {'key': 'enabled', 'type': 'bool'}, - 'custom': {'key': 'custom', 'type': 'bool'}, - 'keywords': {'key': 'keywords', 'type': '[InformationProtectionKeyword]'}, + 'additional_properties': {'key': '', 'type': '{object}'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, + 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, } - def __init__(self, **kwargs): - super(InformationType, self).__init__(**kwargs) - self.display_name = kwargs.get('display_name', None) - self.order = kwargs.get('order', None) - self.recommended_label_id = kwargs.get('recommended_label_id', None) - self.enabled = kwargs.get('enabled', None) - self.custom = kwargs.get('custom', None) - self.keywords = kwargs.get('keywords', None) + def __init__( + self, + **kwargs + ): + super(AtaSolutionProperties, self).__init__(**kwargs) + self.last_event_received = kwargs.get('last_event_received', None) -class IoTSecurityAggregatedAlert(Model): - """Security Solution Aggregated Alert information. +class AuthenticationDetailsProperties(msrest.serialization.Model): + """Settings for cloud authentication management. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AwAssumeRoleAuthenticationDetailsProperties, AwsCredsAuthenticationDetailsProperties, GcpCredentialsDetailsProperties. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + } + + _subtype_map = { + 'authentication_type': {'awsAssumeRole': 'AwAssumeRoleAuthenticationDetailsProperties', 'awsCreds': 'AwsCredsAuthenticationDetailsProperties', 'gcpCredentials': 'GcpCredentialsDetailsProperties'} + } + + def __init__( + self, + **kwargs + ): + super(AuthenticationDetailsProperties, self).__init__(**kwargs) + self.authentication_provisioning_state = None + self.granted_permissions = None + self.authentication_type = None # type: Optional[str] + + +class Tags(msrest.serialization.Model): + """A list of key value pairs that describe the resource. + + :param tags: A set of tags. A list of key value pairs that describe the resource. + :type tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + **kwargs + ): + super(Tags, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + + +class ETag(msrest.serialization.Model): + """Entity tag is used for comparing two or more entities from the same requested resource. + + :param etag: Entity tag is used for comparing two or more entities from the same requested + resource. + :type etag: str + """ + + _attribute_map = { + 'etag': {'key': 'etag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ETag, self).__init__(**kwargs) + self.etag = kwargs.get('etag', None) + + +class Kind(msrest.serialization.Model): + """Describes an Azure resource with kind. + + :param kind: Kind of the resource. + :type kind: str + """ - Variables are only populated by the server, and will be ignored when - sending a request. + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Kind, self).__init__(**kwargs) + self.kind = kwargs.get('kind', None) + + +class AzureTrackedResourceLocation(msrest.serialization.Model): + """Describes an Azure resource with location. + + :param location: Location where the resource is stored. + :type location: str + """ + + _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, + } - :ivar id: Resource Id + def __init__( + self, + **kwargs + ): + super(AzureTrackedResourceLocation, self).__init__(**kwargs) + self.location = kwargs.get('location', None) + + +class TrackedResource(Resource, AzureTrackedResourceLocation, Kind, ETag, Tags): + """Describes an Azure tracked resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. A list of key value pairs that describe the resource. + :type tags: dict[str, str] + :param etag: Entity tag is used for comparing two or more entities from the same requested + resource. + :type etag: str + :param kind: Kind of the resource. + :type kind: str + :param location: Location where the resource is stored. + :type location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param tags: Resource tags + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'etag': {'key': 'etag', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TrackedResource, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.etag = kwargs.get('etag', None) + self.kind = kwargs.get('kind', None) + self.location = kwargs.get('location', None) + self.tags = kwargs.get('tags', None) + self.etag = kwargs.get('etag', None) + self.kind = kwargs.get('kind', None) + self.id = None + self.name = None + self.type = None + self.tags = kwargs.get('tags', None) + self.etag = kwargs.get('etag', None) + self.location = kwargs.get('location', None) + self.id = None + self.name = None + self.type = None + self.tags = kwargs.get('tags', None) + self.kind = kwargs.get('kind', None) + self.location = kwargs.get('location', None) + self.id = None + self.name = None + self.type = None + self.etag = kwargs.get('etag', None) + self.kind = kwargs.get('kind', None) + self.location = kwargs.get('location', None) + self.id = None + self.name = None + self.type = None + + +class Automation(TrackedResource): + """The security automation resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. A list of key value pairs that describe the resource. :type tags: dict[str, str] - :ivar alert_type: Name of the alert type - :vartype alert_type: str - :ivar alert_display_name: Display name of the alert type - :vartype alert_display_name: str - :ivar aggregated_date_utc: The date the incidents were detected by the - vendor - :vartype aggregated_date_utc: date - :ivar vendor_name: Name of the vendor that discovered the incident - :vartype vendor_name: str - :ivar reported_severity: Estimated severity of this alert. Possible values - include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar remediation_steps: Recommended steps for remediation - :vartype remediation_steps: str - :ivar description: Description of the incident and what it means - :vartype description: str - :ivar count: Occurrence number of the alert within the aggregated date - :vartype count: int - :ivar effected_resource_type: Azure resource ID of the resource that got - the alerts - :vartype effected_resource_type: str - :ivar system_source: The type of the alerted resource (Azure, Non-Azure) - :vartype system_source: str - :ivar action_taken: The action that was taken as a response to the alert - (Active, Blocked etc.) - :vartype action_taken: str - :ivar log_analytics_query: query in log analytics to get the list of - affected devices/alerts - :vartype log_analytics_query: str + :param etag: Entity tag is used for comparing two or more entities from the same requested + resource. + :type etag: str + :param kind: Kind of the resource. + :type kind: str + :param location: Location where the resource is stored. + :type location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param description: The security automation description. + :type description: str + :param is_enabled: Indicates whether the security automation is enabled. + :type is_enabled: bool + :param scopes: A collection of scopes on which the security automations logic is applied. + Supported scopes are the subscription itself or a resource group under that subscription. The + automation will only apply on defined scopes. + :type scopes: list[~azure.mgmt.security.models.AutomationScope] + :param sources: A collection of the source event types which evaluate the security automation + set of rules. + :type sources: list[~azure.mgmt.security.models.AutomationSource] + :param actions: A collection of the actions which are triggered if all the configured rules + evaluations, within at least one rule set, are true. + :type actions: list[~azure.mgmt.security.models.AutomationAction] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'etag': {'key': 'etag', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'is_enabled': {'key': 'properties.isEnabled', 'type': 'bool'}, + 'scopes': {'key': 'properties.scopes', 'type': '[AutomationScope]'}, + 'sources': {'key': 'properties.sources', 'type': '[AutomationSource]'}, + 'actions': {'key': 'properties.actions', 'type': '[AutomationAction]'}, + } + + def __init__( + self, + **kwargs + ): + super(Automation, self).__init__(**kwargs) + self.description = kwargs.get('description', None) + self.is_enabled = kwargs.get('is_enabled', None) + self.scopes = kwargs.get('scopes', None) + self.sources = kwargs.get('sources', None) + self.actions = kwargs.get('actions', None) + + +class AutomationAction(msrest.serialization.Model): + """The action that should be triggered. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AutomationActionEventHub, AutomationActionLogicApp, AutomationActionWorkspace. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + """ + + _validation = { + 'action_type': {'required': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + } + + _subtype_map = { + 'action_type': {'EventHub': 'AutomationActionEventHub', 'LogicApp': 'AutomationActionLogicApp', 'Workspace': 'AutomationActionWorkspace'} + } + + def __init__( + self, + **kwargs + ): + super(AutomationAction, self).__init__(**kwargs) + self.action_type = None # type: Optional[str] + + +class AutomationActionEventHub(AutomationAction): + """The target Event Hub to which event data will be exported. To learn more about Security Center continuous export capabilities, visit https://aka.ms/ASCExportLearnMore. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + :param event_hub_resource_id: The target Event Hub Azure Resource ID. + :type event_hub_resource_id: str + :ivar sas_policy_name: The target Event Hub SAS policy name. + :vartype sas_policy_name: str + :param connection_string: The target Event Hub connection string (it will not be included in + any response). + :type connection_string: str + """ + + _validation = { + 'action_type': {'required': True}, + 'sas_policy_name': {'readonly': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'event_hub_resource_id': {'key': 'eventHubResourceId', 'type': 'str'}, + 'sas_policy_name': {'key': 'sasPolicyName', 'type': 'str'}, + 'connection_string': {'key': 'connectionString', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationActionEventHub, self).__init__(**kwargs) + self.action_type = 'EventHub' # type: str + self.event_hub_resource_id = kwargs.get('event_hub_resource_id', None) + self.sas_policy_name = None + self.connection_string = kwargs.get('connection_string', None) + + +class AutomationActionLogicApp(AutomationAction): + """The logic app action that should be triggered. To learn more about Security Center's Workflow Automation capabilities, visit https://aka.ms/ASCWorkflowAutomationLearnMore. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + :param logic_app_resource_id: The triggered Logic App Azure Resource ID. This can also reside + on other subscriptions, given that you have permissions to trigger the Logic App. + :type logic_app_resource_id: str + :param uri: The Logic App trigger URI endpoint (it will not be included in any response). + :type uri: str + """ + + _validation = { + 'action_type': {'required': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'logic_app_resource_id': {'key': 'logicAppResourceId', 'type': 'str'}, + 'uri': {'key': 'uri', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationActionLogicApp, self).__init__(**kwargs) + self.action_type = 'LogicApp' # type: str + self.logic_app_resource_id = kwargs.get('logic_app_resource_id', None) + self.uri = kwargs.get('uri', None) + + +class AutomationActionWorkspace(AutomationAction): + """The Log Analytics Workspace to which event data will be exported. Security alerts data will reside in the 'SecurityAlert' table and the assessments data will reside in the 'SecurityRecommendation' table (under the 'Security'/'SecurityCenterFree' solutions). Note that in order to view the data in the workspace, the Security Center Log Analytics free/standard solution needs to be enabled on that workspace. To learn more about Security Center continuous export capabilities, visit https://aka.ms/ASCExportLearnMore. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + :param workspace_resource_id: The fully qualified Log Analytics Workspace Azure Resource ID. + :type workspace_resource_id: str + """ + + _validation = { + 'action_type': {'required': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'workspace_resource_id': {'key': 'workspaceResourceId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationActionWorkspace, self).__init__(**kwargs) + self.action_type = 'Workspace' # type: str + self.workspace_resource_id = kwargs.get('workspace_resource_id', None) + + +class AutomationList(msrest.serialization.Model): + """List of security automations response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. The list of security automations under the given scope. + :type value: list[~azure.mgmt.security.models.Automation] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Automation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class AutomationRuleSet(msrest.serialization.Model): + """A rule set which evaluates all its rules upon an event interception. Only when all the included rules in the rule set will be evaluated as 'true', will the event trigger the defined actions. + + :param rules: + :type rules: list[~azure.mgmt.security.models.AutomationTriggeringRule] + """ + + _attribute_map = { + 'rules': {'key': 'rules', 'type': '[AutomationTriggeringRule]'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationRuleSet, self).__init__(**kwargs) + self.rules = kwargs.get('rules', None) + + +class AutomationScope(msrest.serialization.Model): + """A single automation scope. + + :param description: The resources scope description. + :type description: str + :param scope_path: The resources scope path. Can be the subscription on which the automation is + defined on or a resource group under that subscription (fully qualified Azure resource IDs). + :type scope_path: str + """ + + _attribute_map = { + 'description': {'key': 'description', 'type': 'str'}, + 'scope_path': {'key': 'scopePath', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationScope, self).__init__(**kwargs) + self.description = kwargs.get('description', None) + self.scope_path = kwargs.get('scope_path', None) + + +class AutomationSource(msrest.serialization.Model): + """The source event types which evaluate the security automation set of rules. For example - security alerts and security assessments. To learn more about the supported security events data models schemas - please visit https://aka.ms/ASCAutomationSchemas. + + :param event_source: A valid event source type. Possible values include: "Assessments", + "SubAssessments", "Alerts". + :type event_source: str or ~azure.mgmt.security.models.EventSource + :param rule_sets: A set of rules which evaluate upon event interception. A logical disjunction + is applied between defined rule sets (logical 'or'). + :type rule_sets: list[~azure.mgmt.security.models.AutomationRuleSet] + """ + + _attribute_map = { + 'event_source': {'key': 'eventSource', 'type': 'str'}, + 'rule_sets': {'key': 'ruleSets', 'type': '[AutomationRuleSet]'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationSource, self).__init__(**kwargs) + self.event_source = kwargs.get('event_source', None) + self.rule_sets = kwargs.get('rule_sets', None) + + +class AutomationTriggeringRule(msrest.serialization.Model): + """A rule which is evaluated upon event interception. The rule is configured by comparing a specific value from the event model to an expected value. This comparison is done by using one of the supported operators set. + + :param property_j_path: The JPath of the entity model property that should be checked. + :type property_j_path: str + :param property_type: The data type of the compared operands (string, integer, floating point + number or a boolean [true/false]]. Possible values include: "String", "Integer", "Number", + "Boolean". + :type property_type: str or ~azure.mgmt.security.models.PropertyType + :param expected_value: The expected value. + :type expected_value: str + :param operator: A valid comparer operator to use. A case-insensitive comparison will be + applied for String PropertyType. Possible values include: "Equals", "GreaterThan", + "GreaterThanOrEqualTo", "LesserThan", "LesserThanOrEqualTo", "NotEquals", "Contains", + "StartsWith", "EndsWith". + :type operator: str or ~azure.mgmt.security.models.Operator + """ + + _attribute_map = { + 'property_j_path': {'key': 'propertyJPath', 'type': 'str'}, + 'property_type': {'key': 'propertyType', 'type': 'str'}, + 'expected_value': {'key': 'expectedValue', 'type': 'str'}, + 'operator': {'key': 'operator', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationTriggeringRule, self).__init__(**kwargs) + self.property_j_path = kwargs.get('property_j_path', None) + self.property_type = kwargs.get('property_type', None) + self.expected_value = kwargs.get('expected_value', None) + self.operator = kwargs.get('operator', None) + + +class AutomationValidationStatus(msrest.serialization.Model): + """The security automation model state property bag. + + :param is_valid: Indicates whether the model is valid or not. + :type is_valid: bool + :param message: The validation message. + :type message: str + """ + + _attribute_map = { + 'is_valid': {'key': 'isValid', 'type': 'bool'}, + 'message': {'key': 'message', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutomationValidationStatus, self).__init__(**kwargs) + self.is_valid = kwargs.get('is_valid', None) + self.message = kwargs.get('message', None) + + +class AutoProvisioningSetting(Resource): + """Auto provisioning setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param auto_provision: Describes what kind of security agent provisioning action to take. + Possible values include: "On", "Off". + :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'auto_provision': {'key': 'properties.autoProvision', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutoProvisioningSetting, self).__init__(**kwargs) + self.auto_provision = kwargs.get('auto_provision', None) + + +class AutoProvisioningSettingList(msrest.serialization.Model): + """List of all the auto provisioning settings response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of all the auto provisioning settings. + :type value: list[~azure.mgmt.security.models.AutoProvisioningSetting] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[AutoProvisioningSetting]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AutoProvisioningSettingList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class AwAssumeRoleAuthenticationDetailsProperties(AuthenticationDetailsProperties): + """AWS cloud account connector based assume role, the role enables delegating access to your AWS resources. The role is composed of role arn and external id, for more details, refer to :code:`Creating a Role to Delegate Permissions to an IAM User (write only)`. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + :ivar account_id: The ID of the cloud account. + :vartype account_id: str + :param aws_assume_role_arn: Required. Assumed role ID is an identifier that you can use to + create temporary security credentials. + :type aws_assume_role_arn: str + :param aws_external_id: Required. A unique identifier that is required when you assume a role + in another account. + :type aws_external_id: str + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + 'account_id': {'readonly': True}, + 'aws_assume_role_arn': {'required': True}, + 'aws_external_id': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + 'account_id': {'key': 'accountId', 'type': 'str'}, + 'aws_assume_role_arn': {'key': 'awsAssumeRoleArn', 'type': 'str'}, + 'aws_external_id': {'key': 'awsExternalId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AwAssumeRoleAuthenticationDetailsProperties, self).__init__(**kwargs) + self.authentication_type = 'awsAssumeRole' # type: str + self.account_id = None + self.aws_assume_role_arn = kwargs['aws_assume_role_arn'] + self.aws_external_id = kwargs['aws_external_id'] + + +class AwsCredsAuthenticationDetailsProperties(AuthenticationDetailsProperties): + """AWS cloud account connector based credentials, the credentials is composed of access key id and secret key, for more details, refer to :code:`Creating an IAM User in Your AWS Account (write only)`. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + :ivar account_id: The ID of the cloud account. + :vartype account_id: str + :param aws_access_key_id: Required. Public key element of the AWS credential object (write + only). + :type aws_access_key_id: str + :param aws_secret_access_key: Required. Secret key element of the AWS credential object (write + only). + :type aws_secret_access_key: str + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + 'account_id': {'readonly': True}, + 'aws_access_key_id': {'required': True}, + 'aws_secret_access_key': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + 'account_id': {'key': 'accountId', 'type': 'str'}, + 'aws_access_key_id': {'key': 'awsAccessKeyId', 'type': 'str'}, + 'aws_secret_access_key': {'key': 'awsSecretAccessKey', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AwsCredsAuthenticationDetailsProperties, self).__init__(**kwargs) + self.authentication_type = 'awsCreds' # type: str + self.account_id = None + self.aws_access_key_id = kwargs['aws_access_key_id'] + self.aws_secret_access_key = kwargs['aws_secret_access_key'] + + +class ResourceDetails(msrest.serialization.Model): + """Details of the resource that was assessed. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AzureResourceDetails, OnPremiseResourceDetails. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + """ + + _validation = { + 'source': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + } + + _subtype_map = { + 'source': {'Azure': 'AzureResourceDetails', 'OnPremise': 'OnPremiseResourceDetails'} + } + + def __init__( + self, + **kwargs + ): + super(ResourceDetails, self).__init__(**kwargs) + self.source = None # type: Optional[str] + + +class AzureResourceDetails(ResourceDetails): + """Details of the Azure resource that was assessed. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + :ivar id: Azure resource Id of the assessed resource. + :vartype id: str + """ + + _validation = { + 'source': {'required': True}, + 'id': {'readonly': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureResourceDetails, self).__init__(**kwargs) + self.source = 'Azure' # type: str + self.id = None + + +class ResourceIdentifier(msrest.serialization.Model): + """A resource identifier for an alert which can be used to direct the alert to the right product exposure group (tenant, workspace, subscription etc.). + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AzureResourceIdentifier, LogAnalyticsIdentifier. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. There can be multiple identifiers of different type per alert, this + field specify the identifier type.Constant filled by server. Possible values include: + "AzureResource", "LogAnalytics". + :type type: str or ~azure.mgmt.security.models.ResourceIdentifierType + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'AzureResource': 'AzureResourceIdentifier', 'LogAnalytics': 'LogAnalyticsIdentifier'} + } + + def __init__( + self, + **kwargs + ): + super(ResourceIdentifier, self).__init__(**kwargs) + self.type = None # type: Optional[str] + + +class AzureResourceIdentifier(ResourceIdentifier): + """Azure resource identifier. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. There can be multiple identifiers of different type per alert, this + field specify the identifier type.Constant filled by server. Possible values include: + "AzureResource", "LogAnalytics". + :type type: str or ~azure.mgmt.security.models.ResourceIdentifierType + :ivar azure_resource_id: ARM resource identifier for the cloud resource being alerted on. + :vartype azure_resource_id: str + """ + + _validation = { + 'type': {'required': True}, + 'azure_resource_id': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'azure_resource_id': {'key': 'azureResourceId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureResourceIdentifier, self).__init__(**kwargs) + self.type = 'AzureResource' # type: str + self.azure_resource_id = None + + +class AzureResourceLink(msrest.serialization.Model): + """Describes an Azure resource with kind. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Azure resource Id. + :vartype id: str + """ + + _validation = { + 'id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureResourceLink, self).__init__(**kwargs) + self.id = None + + +class CefExternalSecuritySolution(ExternalSecuritySolution): + """Represents a security solution which sends CEF logs to an OMS workspace. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: The external security solution properties for CEF solutions. + :type properties: ~azure.mgmt.security.models.CefSolutionProperties + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'CefSolutionProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(CefExternalSecuritySolution, self).__init__(**kwargs) + self.properties = kwargs.get('properties', None) + + +class CefSolutionProperties(ExternalSecuritySolutionProperties): + """The external security solution properties for CEF solutions. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace + :param hostname: + :type hostname: str + :param agent: + :type agent: str + :param last_event_received: + :type last_event_received: str + """ + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, + 'hostname': {'key': 'hostname', 'type': 'str'}, + 'agent': {'key': 'agent', 'type': 'str'}, + 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(CefSolutionProperties, self).__init__(**kwargs) + self.hostname = kwargs.get('hostname', None) + self.agent = kwargs.get('agent', None) + self.last_event_received = kwargs.get('last_event_received', None) + + +class Compliance(Resource): + """Compliance of a scope. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar assessment_timestamp_utc_date: The timestamp when the Compliance calculation was + conducted. + :vartype assessment_timestamp_utc_date: ~datetime.datetime + :ivar resource_count: The resource count of the given subscription for which the Compliance + calculation was conducted (needed for Management Group Compliance calculation). + :vartype resource_count: int + :ivar assessment_result: An array of segment, which is the actually the compliance assessment. + :vartype assessment_result: list[~azure.mgmt.security.models.ComplianceSegment] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'assessment_timestamp_utc_date': {'readonly': True}, + 'resource_count': {'readonly': True}, + 'assessment_result': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'assessment_timestamp_utc_date': {'key': 'properties.assessmentTimestampUtcDate', 'type': 'iso-8601'}, + 'resource_count': {'key': 'properties.resourceCount', 'type': 'int'}, + 'assessment_result': {'key': 'properties.assessmentResult', 'type': '[ComplianceSegment]'}, + } + + def __init__( + self, + **kwargs + ): + super(Compliance, self).__init__(**kwargs) + self.assessment_timestamp_utc_date = None + self.resource_count = None + self.assessment_result = None + + +class ComplianceList(msrest.serialization.Model): + """List of Compliance objects response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of Compliance objects. + :type value: list[~azure.mgmt.security.models.Compliance] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Compliance]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ComplianceList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class ComplianceResult(Resource): + """a compliance result. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar resource_status: The status of the resource regarding a single assessment. Possible + values include: "Healthy", "NotApplicable", "OffByPolicy", "NotHealthy". + :vartype resource_status: str or ~azure.mgmt.security.models.ResourceStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'resource_status': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'resource_status': {'key': 'properties.resourceStatus', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ComplianceResult, self).__init__(**kwargs) + self.resource_status = None + + +class ComplianceResultList(msrest.serialization.Model): + """List of compliance results response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of compliance results. + :type value: list[~azure.mgmt.security.models.ComplianceResult] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ComplianceResult]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ComplianceResultList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class ComplianceSegment(msrest.serialization.Model): + """A segment of a compliance assessment. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar segment_type: The segment type, e.g. compliant, non-compliance, insufficient coverage, + N/A, etc. + :vartype segment_type: str + :ivar percentage: The size (%) of the segment. + :vartype percentage: float + """ + + _validation = { + 'segment_type': {'readonly': True}, + 'percentage': {'readonly': True}, + } + + _attribute_map = { + 'segment_type': {'key': 'segmentType', 'type': 'str'}, + 'percentage': {'key': 'percentage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(ComplianceSegment, self).__init__(**kwargs) + self.segment_type = None + self.percentage = None + + +class ConnectableResource(msrest.serialization.Model): + """Describes the allowed inbound and outbound traffic of an Azure resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The Azure resource id. + :vartype id: str + :ivar inbound_connected_resources: The list of Azure resources that the resource has inbound + allowed connection from. + :vartype inbound_connected_resources: list[~azure.mgmt.security.models.ConnectedResource] + :ivar outbound_connected_resources: The list of Azure resources that the resource has outbound + allowed connection to. + :vartype outbound_connected_resources: list[~azure.mgmt.security.models.ConnectedResource] + """ + + _validation = { + 'id': {'readonly': True}, + 'inbound_connected_resources': {'readonly': True}, + 'outbound_connected_resources': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'inbound_connected_resources': {'key': 'inboundConnectedResources', 'type': '[ConnectedResource]'}, + 'outbound_connected_resources': {'key': 'outboundConnectedResources', 'type': '[ConnectedResource]'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectableResource, self).__init__(**kwargs) + self.id = None + self.inbound_connected_resources = None + self.outbound_connected_resources = None + + +class ConnectedResource(msrest.serialization.Model): + """Describes properties of a connected resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar connected_resource_id: The Azure resource id of the connected resource. + :vartype connected_resource_id: str + :ivar tcp_ports: The allowed tcp ports. + :vartype tcp_ports: str + :ivar udp_ports: The allowed udp ports. + :vartype udp_ports: str + """ + + _validation = { + 'connected_resource_id': {'readonly': True}, + 'tcp_ports': {'readonly': True}, + 'udp_ports': {'readonly': True}, + } + + _attribute_map = { + 'connected_resource_id': {'key': 'connectedResourceId', 'type': 'str'}, + 'tcp_ports': {'key': 'tcpPorts', 'type': 'str'}, + 'udp_ports': {'key': 'udpPorts', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectedResource, self).__init__(**kwargs) + self.connected_resource_id = None + self.tcp_ports = None + self.udp_ports = None + + +class ConnectedWorkspace(msrest.serialization.Model): + """Represents an OMS workspace to which the solution is connected. + + :param id: Azure resource ID of the connected OMS workspace. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectedWorkspace, self).__init__(**kwargs) + self.id = kwargs.get('id', None) + + +class ConnectionToIpNotAllowed(AllowlistCustomAlertRule): + """Outbound connection to an ip that isn't allowed. Allow list consists of ipv4 or ipv6 range in CIDR notation. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectionToIpNotAllowed, self).__init__(**kwargs) + self.rule_type = 'ConnectionToIpNotAllowed' # type: str + self.rule_type = 'ConnectionToIpNotAllowed' # type: str + + +class ConnectorSetting(Resource): + """The connector setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param hybrid_compute_settings: Settings for hybrid compute management, these settings are + relevant only Arc autoProvision (Hybrid Compute). + :type hybrid_compute_settings: ~azure.mgmt.security.models.HybridComputeSettingsProperties + :param authentication_details: Settings for authentication management, these settings are + relevant only for the cloud connector. + :type authentication_details: ~azure.mgmt.security.models.AuthenticationDetailsProperties + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'hybrid_compute_settings': {'key': 'properties.hybridComputeSettings', 'type': 'HybridComputeSettingsProperties'}, + 'authentication_details': {'key': 'properties.authenticationDetails', 'type': 'AuthenticationDetailsProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectorSetting, self).__init__(**kwargs) + self.hybrid_compute_settings = kwargs.get('hybrid_compute_settings', None) + self.authentication_details = kwargs.get('authentication_details', None) + + +class ConnectorSettingList(msrest.serialization.Model): + """For a subscription, list of all cloud account connectors and their settings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of all the cloud account connector settings. + :type value: list[~azure.mgmt.security.models.ConnectorSetting] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ConnectorSetting]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectorSettingList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class ContainerRegistryVulnerabilityProperties(AdditionalData): + """Additional context fields for container registry Vulnerability assessment. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType + :ivar type: Vulnerability Type. e.g: Vulnerability, Potential Vulnerability, Information + Gathered, Vulnerability. + :vartype type: str + :ivar cvss: Dictionary from cvss version to cvss details object. + :vartype cvss: dict[str, ~azure.mgmt.security.models.CVSS] + :ivar patchable: Indicates whether a patch is available or not. + :vartype patchable: bool + :ivar cve: List of CVEs. + :vartype cve: list[~azure.mgmt.security.models.CVE] + :ivar published_time: Published time. + :vartype published_time: ~datetime.datetime + :ivar vendor_references: + :vartype vendor_references: list[~azure.mgmt.security.models.VendorReference] + :ivar repository_name: Name of the repository which the vulnerable image belongs to. + :vartype repository_name: str + :ivar image_digest: Digest of the vulnerable image. + :vartype image_digest: str + """ + + _validation = { + 'assessed_resource_type': {'required': True}, + 'type': {'readonly': True}, + 'cvss': {'readonly': True}, + 'patchable': {'readonly': True}, + 'cve': {'readonly': True}, + 'published_time': {'readonly': True}, + 'vendor_references': {'readonly': True}, + 'repository_name': {'readonly': True}, + 'image_digest': {'readonly': True}, + } + + _attribute_map = { + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'cvss': {'key': 'cvss', 'type': '{CVSS}'}, + 'patchable': {'key': 'patchable', 'type': 'bool'}, + 'cve': {'key': 'cve', 'type': '[CVE]'}, + 'published_time': {'key': 'publishedTime', 'type': 'iso-8601'}, + 'vendor_references': {'key': 'vendorReferences', 'type': '[VendorReference]'}, + 'repository_name': {'key': 'repositoryName', 'type': 'str'}, + 'image_digest': {'key': 'imageDigest', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ContainerRegistryVulnerabilityProperties, self).__init__(**kwargs) + self.assessed_resource_type = 'ContainerRegistryVulnerability' # type: str + self.type = None + self.cvss = None + self.patchable = None + self.cve = None + self.published_time = None + self.vendor_references = None + self.repository_name = None + self.image_digest = None + + +class CVE(msrest.serialization.Model): + """CVE details. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar title: CVE title. + :vartype title: str + :ivar link: Link url. + :vartype link: str + """ + + _validation = { + 'title': {'readonly': True}, + 'link': {'readonly': True}, + } + + _attribute_map = { + 'title': {'key': 'title', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(CVE, self).__init__(**kwargs) + self.title = None + self.link = None + + +class CVSS(msrest.serialization.Model): + """CVSS details. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar base: CVSS base. + :vartype base: float + """ + + _validation = { + 'base': {'readonly': True}, + } + + _attribute_map = { + 'base': {'key': 'base', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(CVSS, self).__init__(**kwargs) + self.base = None + + +class SettingResource(Resource): + """The kind of the security setting. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DataExportSettings, Setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param kind: Required. the kind of the settings string (DataExportSettings).Constant filled by + server. Possible values include: "DataExportSettings", "AlertSuppressionSetting". + :type kind: str or ~azure.mgmt.security.models.SettingKind + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'kind': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + } + + _subtype_map = { + 'kind': {'DataExportSettings': 'DataExportSettings', 'Setting': 'Setting'} + } + + def __init__( + self, + **kwargs + ): + super(SettingResource, self).__init__(**kwargs) + self.kind = 'SettingResource' # type: str + + +class DataExportSettings(SettingResource): + """Represents a data export setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param kind: Required. the kind of the settings string (DataExportSettings).Constant filled by + server. Possible values include: "DataExportSettings", "AlertSuppressionSetting". + :type kind: str or ~azure.mgmt.security.models.SettingKind + :param enabled: Is the data export setting is enabled. + :type enabled: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'kind': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'enabled': {'key': 'properties.enabled', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(DataExportSettings, self).__init__(**kwargs) + self.kind = 'DataExportSettings' # type: str + self.enabled = kwargs.get('enabled', None) + + +class DenylistCustomAlertRule(ListCustomAlertRule): + """A custom alert rule that checks if a value (depends on the custom alert type) is denied. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param denylist_values: Required. The values to deny. The format of the values depends on the + rule type. + :type denylist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'denylist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'denylist_values': {'key': 'denylistValues', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(DenylistCustomAlertRule, self).__init__(**kwargs) + self.rule_type = 'DenylistCustomAlertRule' # type: str + self.denylist_values = kwargs['denylist_values'] + + +class Device(Resource): + """Device model. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param display_name: Device display name given by the collector. + :type display_name: str + :param device_type: Device type. + :type device_type: str + :ivar source_name: The source that created the device. + :vartype source_name: str + :ivar network_interfaces: List of network interfaces. + :vartype network_interfaces: list[~azure.mgmt.security.models.NetworkInterface] + :ivar vendor: Device vendor. + :vartype vendor: str + :param os_name: Device operating system name. + :type os_name: str + :ivar protocols: List of protocols. + :vartype protocols: list[~azure.mgmt.security.models.Protocol] + :ivar last_active_time: last time the device was active in the network. + :vartype last_active_time: ~datetime.datetime + :ivar last_update_time: last time the device was updated. + :vartype last_update_time: ~datetime.datetime + :ivar management_state: Managed state of the device. Possible values include: "Managed", + "Unmanaged". + :vartype management_state: str or ~azure.mgmt.security.models.ManagementState + :param authorization_state: Authorized state of the device. Possible values include: + "Authorized", "Unauthorized". Default value: "Unauthorized". + :type authorization_state: str or ~azure.mgmt.security.models.AuthorizationState + :param device_criticality: Device criticality. Possible values include: "Important", + "Standard". Default value: "Standard". + :type device_criticality: str or ~azure.mgmt.security.models.DeviceCriticality + :param purdue_level: Purdue level of the device. Possible values include: "ProcessControl", + "Supervisory", "Enterprise". Default value: "ProcessControl". + :type purdue_level: str or ~azure.mgmt.security.models.PurdueLevel + :param notes: user notes for the device, up to 300 characters. + :type notes: str + :ivar firmwares: List of device firmwares. + :vartype firmwares: list[~azure.mgmt.security.models.Firmware] + :ivar discovery_time: Discovered time of the device. + :vartype discovery_time: ~datetime.datetime + :ivar programming_state: Indicates whether this device is programming. Possible values include: + "ProgrammingDevice", "NotProgrammingDevice". + :vartype programming_state: str or ~azure.mgmt.security.models.ProgrammingState + :ivar last_programming_time: last time the device was programming or programed. + :vartype last_programming_time: ~datetime.datetime + :ivar scanning_functionality: Indicates whether the device is a scanner. Possible values + include: "ScannerDevice", "NotScannerDevice". + :vartype scanning_functionality: str or ~azure.mgmt.security.models.ScanningFunctionality + :ivar last_scan_time: last time the device was scanning. + :vartype last_scan_time: ~datetime.datetime + :ivar risk_score: risk score of the device. + :vartype risk_score: int + :ivar sensor_name: When the device is unmanaged, the sensor that scanned this device. + :vartype sensor_name: str + :ivar site_name: The sensor site name. + :vartype site_name: str + :ivar zone_name: The sensor zone name. + :vartype zone_name: str + :ivar device_status: Device status. Possible values include: "Active", "Removed". + :vartype device_status: str or ~azure.mgmt.security.models.DeviceStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'source_name': {'readonly': True}, + 'network_interfaces': {'readonly': True}, + 'vendor': {'readonly': True}, + 'protocols': {'readonly': True}, + 'last_active_time': {'readonly': True}, + 'last_update_time': {'readonly': True}, + 'management_state': {'readonly': True}, + 'firmwares': {'readonly': True}, + 'discovery_time': {'readonly': True}, + 'programming_state': {'readonly': True}, + 'last_programming_time': {'readonly': True}, + 'scanning_functionality': {'readonly': True}, + 'last_scan_time': {'readonly': True}, + 'risk_score': {'readonly': True, 'maximum': 100, 'minimum': 0}, + 'sensor_name': {'readonly': True}, + 'site_name': {'readonly': True}, + 'zone_name': {'readonly': True}, + 'device_status': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'device_type': {'key': 'properties.deviceType', 'type': 'str'}, + 'source_name': {'key': 'properties.sourceName', 'type': 'str'}, + 'network_interfaces': {'key': 'properties.networkInterfaces', 'type': '[NetworkInterface]'}, + 'vendor': {'key': 'properties.vendor', 'type': 'str'}, + 'os_name': {'key': 'properties.osName', 'type': 'str'}, + 'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'}, + 'last_active_time': {'key': 'properties.lastActiveTime', 'type': 'iso-8601'}, + 'last_update_time': {'key': 'properties.lastUpdateTime', 'type': 'iso-8601'}, + 'management_state': {'key': 'properties.managementState', 'type': 'str'}, + 'authorization_state': {'key': 'properties.authorizationState', 'type': 'str'}, + 'device_criticality': {'key': 'properties.deviceCriticality', 'type': 'str'}, + 'purdue_level': {'key': 'properties.purdueLevel', 'type': 'str'}, + 'notes': {'key': 'properties.notes', 'type': 'str'}, + 'firmwares': {'key': 'properties.firmwares', 'type': '[Firmware]'}, + 'discovery_time': {'key': 'properties.discoveryTime', 'type': 'iso-8601'}, + 'programming_state': {'key': 'properties.programmingState', 'type': 'str'}, + 'last_programming_time': {'key': 'properties.lastProgrammingTime', 'type': 'iso-8601'}, + 'scanning_functionality': {'key': 'properties.scanningFunctionality', 'type': 'str'}, + 'last_scan_time': {'key': 'properties.lastScanTime', 'type': 'iso-8601'}, + 'risk_score': {'key': 'properties.riskScore', 'type': 'int'}, + 'sensor_name': {'key': 'properties.sensorName', 'type': 'str'}, + 'site_name': {'key': 'properties.siteName', 'type': 'str'}, + 'zone_name': {'key': 'properties.zoneName', 'type': 'str'}, + 'device_status': {'key': 'properties.deviceStatus', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Device, self).__init__(**kwargs) + self.display_name = kwargs.get('display_name', None) + self.device_type = kwargs.get('device_type', None) + self.source_name = None + self.network_interfaces = None + self.vendor = None + self.os_name = kwargs.get('os_name', None) + self.protocols = None + self.last_active_time = None + self.last_update_time = None + self.management_state = None + self.authorization_state = kwargs.get('authorization_state', "Unauthorized") + self.device_criticality = kwargs.get('device_criticality', "Standard") + self.purdue_level = kwargs.get('purdue_level', "ProcessControl") + self.notes = kwargs.get('notes', None) + self.firmwares = None + self.discovery_time = None + self.programming_state = None + self.last_programming_time = None + self.scanning_functionality = None + self.last_scan_time = None + self.risk_score = None + self.sensor_name = None + self.site_name = None + self.zone_name = None + self.device_status = None + + +class DeviceList(msrest.serialization.Model): + """List of Devices. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of devices. + :type value: list[~azure.mgmt.security.models.Device] + :ivar next_link: When there are too many devices for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Device]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DeviceList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class DeviceSecurityGroup(Resource): + """The device security group resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param threshold_rules: The list of custom alert threshold rules. + :type threshold_rules: list[~azure.mgmt.security.models.ThresholdCustomAlertRule] + :param time_window_rules: The list of custom alert time-window rules. + :type time_window_rules: list[~azure.mgmt.security.models.TimeWindowCustomAlertRule] + :param allowlist_rules: The allow-list custom alert rules. + :type allowlist_rules: list[~azure.mgmt.security.models.AllowlistCustomAlertRule] + :param denylist_rules: The deny-list custom alert rules. + :type denylist_rules: list[~azure.mgmt.security.models.DenylistCustomAlertRule] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'threshold_rules': {'key': 'properties.thresholdRules', 'type': '[ThresholdCustomAlertRule]'}, + 'time_window_rules': {'key': 'properties.timeWindowRules', 'type': '[TimeWindowCustomAlertRule]'}, + 'allowlist_rules': {'key': 'properties.allowlistRules', 'type': '[AllowlistCustomAlertRule]'}, + 'denylist_rules': {'key': 'properties.denylistRules', 'type': '[DenylistCustomAlertRule]'}, + } + + def __init__( + self, + **kwargs + ): + super(DeviceSecurityGroup, self).__init__(**kwargs) + self.threshold_rules = kwargs.get('threshold_rules', None) + self.time_window_rules = kwargs.get('time_window_rules', None) + self.allowlist_rules = kwargs.get('allowlist_rules', None) + self.denylist_rules = kwargs.get('denylist_rules', None) + + +class DeviceSecurityGroupList(msrest.serialization.Model): + """List of device security groups. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of device security group objects. + :type value: list[~azure.mgmt.security.models.DeviceSecurityGroup] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DeviceSecurityGroup]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DeviceSecurityGroupList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class DirectMethodInvokesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of direct method invokes is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(DirectMethodInvokesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'DirectMethodInvokesNotInAllowedRange' # type: str + self.rule_type = 'DirectMethodInvokesNotInAllowedRange' # type: str + + +class DiscoveredSecuritySolution(Resource, Location): + """DiscoveredSecuritySolution. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param security_family: Required. The security family of the discovered solution. Possible + values include: "Waf", "Ngfw", "SaasWaf", "Va". + :type security_family: str or ~azure.mgmt.security.models.SecurityFamily + :param offer: Required. The security solutions' image offer. + :type offer: str + :param publisher: Required. The security solutions' image publisher. + :type publisher: str + :param sku: Required. The security solutions' image sku. + :type sku: str + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'security_family': {'required': True}, + 'offer': {'required': True}, + 'publisher': {'required': True}, + 'sku': {'required': True}, + } + + _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, + 'offer': {'key': 'properties.offer', 'type': 'str'}, + 'publisher': {'key': 'properties.publisher', 'type': 'str'}, + 'sku': {'key': 'properties.sku', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DiscoveredSecuritySolution, self).__init__(**kwargs) + self.location = None + self.security_family = kwargs['security_family'] + self.offer = kwargs['offer'] + self.publisher = kwargs['publisher'] + self.sku = kwargs['sku'] + self.id = None + self.name = None + self.type = None + self.security_family = kwargs['security_family'] + self.offer = kwargs['offer'] + self.publisher = kwargs['publisher'] + self.sku = kwargs['sku'] + + +class DiscoveredSecuritySolutionList(msrest.serialization.Model): + """DiscoveredSecuritySolutionList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.DiscoveredSecuritySolution] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DiscoveredSecuritySolution]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DiscoveredSecuritySolutionList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class EffectiveNetworkSecurityGroups(msrest.serialization.Model): + """Describes the Network Security Groups effective on a network interface. + + :param network_interface: The Azure resource ID of the network interface. + :type network_interface: str + :param network_security_groups: The Network Security Groups effective on the network interface. + :type network_security_groups: list[str] + """ + + _attribute_map = { + 'network_interface': {'key': 'networkInterface', 'type': 'str'}, + 'network_security_groups': {'key': 'networkSecurityGroups', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(EffectiveNetworkSecurityGroups, self).__init__(**kwargs) + self.network_interface = kwargs.get('network_interface', None) + self.network_security_groups = kwargs.get('network_security_groups', None) + + +class ExternalSecuritySolutionList(msrest.serialization.Model): + """ExternalSecuritySolutionList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.ExternalSecuritySolution] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ExternalSecuritySolution]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ExternalSecuritySolutionList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class FailedLocalLoginsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of failed local logins is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(FailedLocalLoginsNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'FailedLocalLoginsNotInAllowedRange' # type: str + self.rule_type = 'FailedLocalLoginsNotInAllowedRange' # type: str + + +class FileUploadsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of file uploads is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(FileUploadsNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'FileUploadsNotInAllowedRange' # type: str + self.rule_type = 'FileUploadsNotInAllowedRange' # type: str + + +class Firmware(msrest.serialization.Model): + """Firmware information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar module_address: Address of the specific module a firmware is related to. + :vartype module_address: str + :ivar rack: Rack number of the module a firmware is related to. + :vartype rack: str + :ivar slot: Slot number in the rack of the module a firmware is related to. + :vartype slot: str + :ivar serial: Serial of the firmware. + :vartype serial: str + :ivar model: Firmware model. + :vartype model: str + :ivar version: Firmware version. + :vartype version: str + :ivar additional_data: A bag of fields which extends the firmware information. + :vartype additional_data: object + """ + + _validation = { + 'module_address': {'readonly': True}, + 'rack': {'readonly': True}, + 'slot': {'readonly': True}, + 'serial': {'readonly': True}, + 'model': {'readonly': True}, + 'version': {'readonly': True}, + 'additional_data': {'readonly': True}, + } + + _attribute_map = { + 'module_address': {'key': 'moduleAddress', 'type': 'str'}, + 'rack': {'key': 'rack', 'type': 'str'}, + 'slot': {'key': 'slot', 'type': 'str'}, + 'serial': {'key': 'serial', 'type': 'str'}, + 'model': {'key': 'model', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + 'additional_data': {'key': 'additionalData', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(Firmware, self).__init__(**kwargs) + self.module_address = None + self.rack = None + self.slot = None + self.serial = None + self.model = None + self.version = None + self.additional_data = None + + +class GcpCredentialsDetailsProperties(AuthenticationDetailsProperties): + """GCP cloud account connector based service to service credentials, the credentials is composed of organization id and json api key (write only). + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + :param organization_id: Required. The Organization ID of the GCP cloud account. + :type organization_id: str + :param type: Required. Type field of the API key (write only). + :type type: str + :param project_id: Required. Project Id field of the API key (write only). + :type project_id: str + :param private_key_id: Required. Private key Id field of the API key (write only). + :type private_key_id: str + :param private_key: Required. Private key field of the API key (write only). + :type private_key: str + :param client_email: Required. Client email field of the API key (write only). + :type client_email: str + :param client_id: Required. Client Id field of the API key (write only). + :type client_id: str + :param auth_uri: Required. Auth Uri field of the API key (write only). + :type auth_uri: str + :param token_uri: Required. Token Uri field of the API key (write only). + :type token_uri: str + :param auth_provider_x509_cert_url: Required. Auth provider x509 certificate url field of the + API key (write only). + :type auth_provider_x509_cert_url: str + :param client_x509_cert_url: Required. Client x509 certificate url field of the API key (write + only). + :type client_x509_cert_url: str + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + 'organization_id': {'required': True}, + 'type': {'required': True}, + 'project_id': {'required': True}, + 'private_key_id': {'required': True}, + 'private_key': {'required': True}, + 'client_email': {'required': True}, + 'client_id': {'required': True}, + 'auth_uri': {'required': True}, + 'token_uri': {'required': True}, + 'auth_provider_x509_cert_url': {'required': True}, + 'client_x509_cert_url': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + 'organization_id': {'key': 'organizationId', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'project_id': {'key': 'projectId', 'type': 'str'}, + 'private_key_id': {'key': 'privateKeyId', 'type': 'str'}, + 'private_key': {'key': 'privateKey', 'type': 'str'}, + 'client_email': {'key': 'clientEmail', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + 'auth_uri': {'key': 'authUri', 'type': 'str'}, + 'token_uri': {'key': 'tokenUri', 'type': 'str'}, + 'auth_provider_x509_cert_url': {'key': 'authProviderX509CertUrl', 'type': 'str'}, + 'client_x509_cert_url': {'key': 'clientX509CertUrl', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(GcpCredentialsDetailsProperties, self).__init__(**kwargs) + self.authentication_type = 'gcpCredentials' # type: str + self.organization_id = kwargs['organization_id'] + self.type = kwargs['type'] + self.project_id = kwargs['project_id'] + self.private_key_id = kwargs['private_key_id'] + self.private_key = kwargs['private_key'] + self.client_email = kwargs['client_email'] + self.client_id = kwargs['client_id'] + self.auth_uri = kwargs['auth_uri'] + self.token_uri = kwargs['token_uri'] + self.auth_provider_x509_cert_url = kwargs['auth_provider_x509_cert_url'] + self.client_x509_cert_url = kwargs['client_x509_cert_url'] + + +class HttpC2DMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of cloud to device messages (HTTP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(HttpC2DMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'HttpC2DMessagesNotInAllowedRange' # type: str + self.rule_type = 'HttpC2DMessagesNotInAllowedRange' # type: str + + +class HttpC2DRejectedMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of rejected cloud to device messages (HTTP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(HttpC2DRejectedMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'HttpC2DRejectedMessagesNotInAllowedRange' # type: str + self.rule_type = 'HttpC2DRejectedMessagesNotInAllowedRange' # type: str + + +class HttpD2CMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device to cloud messages (HTTP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(HttpD2CMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'HttpD2CMessagesNotInAllowedRange' # type: str + self.rule_type = 'HttpD2CMessagesNotInAllowedRange' # type: str + + +class HybridComputeSettingsProperties(msrest.serialization.Model): + """Settings for hybrid compute management. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar hybrid_compute_provisioning_state: State of the service principal and its secret. + Possible values include: "Valid", "Invalid", "Expired". + :vartype hybrid_compute_provisioning_state: str or + ~azure.mgmt.security.models.HybridComputeProvisioningState + :param auto_provision: Required. Whether or not to automatically install Azure Arc (hybrid + compute) agents on machines. Possible values include: "On", "Off". + :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision + :param resource_group_name: The name of the resource group where Arc (Hybrid Compute) + connectors are connected. + :type resource_group_name: str + :param region: The location where the meta data of machines will be stored. + :type region: str + :param proxy_server: For a non-Azure machine that is not connected directly to the internet, + specify a proxy server that the non-Azure machine can use. + :type proxy_server: ~azure.mgmt.security.models.ProxyServerProperties + :param service_principal: An object to access resources that are secured by an Azure AD tenant. + :type service_principal: ~azure.mgmt.security.models.ServicePrincipalProperties + """ + + _validation = { + 'hybrid_compute_provisioning_state': {'readonly': True}, + 'auto_provision': {'required': True}, + } + + _attribute_map = { + 'hybrid_compute_provisioning_state': {'key': 'hybridComputeProvisioningState', 'type': 'str'}, + 'auto_provision': {'key': 'autoProvision', 'type': 'str'}, + 'resource_group_name': {'key': 'resourceGroupName', 'type': 'str'}, + 'region': {'key': 'region', 'type': 'str'}, + 'proxy_server': {'key': 'proxyServer', 'type': 'ProxyServerProperties'}, + 'service_principal': {'key': 'servicePrincipal', 'type': 'ServicePrincipalProperties'}, + } + + def __init__( + self, + **kwargs + ): + super(HybridComputeSettingsProperties, self).__init__(**kwargs) + self.hybrid_compute_provisioning_state = None + self.auto_provision = kwargs['auto_provision'] + self.resource_group_name = kwargs.get('resource_group_name', None) + self.region = kwargs.get('region', None) + self.proxy_server = kwargs.get('proxy_server', None) + self.service_principal = kwargs.get('service_principal', None) + + +class InformationProtectionKeyword(msrest.serialization.Model): + """The information type keyword. + + :param pattern: The keyword pattern. + :type pattern: str + :param custom: Indicates whether the keyword is custom or not. + :type custom: bool + :param can_be_numeric: Indicates whether the keyword can be applied on numeric types or not. + :type can_be_numeric: bool + :param excluded: Indicates whether the keyword is excluded or not. + :type excluded: bool + """ + + _attribute_map = { + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'custom': {'key': 'custom', 'type': 'bool'}, + 'can_be_numeric': {'key': 'canBeNumeric', 'type': 'bool'}, + 'excluded': {'key': 'excluded', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(InformationProtectionKeyword, self).__init__(**kwargs) + self.pattern = kwargs.get('pattern', None) + self.custom = kwargs.get('custom', None) + self.can_be_numeric = kwargs.get('can_be_numeric', None) + self.excluded = kwargs.get('excluded', None) + + +class InformationProtectionPolicy(Resource): + """Information protection policy. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar last_modified_utc: Describes the last UTC time the policy was modified. + :vartype last_modified_utc: ~datetime.datetime + :ivar version: Describes the version of the policy. + :vartype version: str + :param labels: Dictionary of sensitivity labels. + :type labels: dict[str, ~azure.mgmt.security.models.SensitivityLabel] + :param information_types: The sensitivity information types. + :type information_types: dict[str, ~azure.mgmt.security.models.InformationType] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'last_modified_utc': {'readonly': True}, + 'version': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'last_modified_utc': {'key': 'properties.lastModifiedUtc', 'type': 'iso-8601'}, + 'version': {'key': 'properties.version', 'type': 'str'}, + 'labels': {'key': 'properties.labels', 'type': '{SensitivityLabel}'}, + 'information_types': {'key': 'properties.informationTypes', 'type': '{InformationType}'}, + } + + def __init__( + self, + **kwargs + ): + super(InformationProtectionPolicy, self).__init__(**kwargs) + self.last_modified_utc = None + self.version = None + self.labels = kwargs.get('labels', None) + self.information_types = kwargs.get('information_types', None) + + +class InformationProtectionPolicyList(msrest.serialization.Model): + """Information protection policies response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of information protection policies. + :type value: list[~azure.mgmt.security.models.InformationProtectionPolicy] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[InformationProtectionPolicy]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(InformationProtectionPolicyList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class InformationType(msrest.serialization.Model): + """The information type. + + :param display_name: The name of the information type. + :type display_name: str + :param description: The description of the information type. + :type description: str + :param order: The order of the information type. + :type order: int + :param recommended_label_id: The recommended label id to be associated with this information + type. + :type recommended_label_id: str + :param enabled: Indicates whether the information type is enabled or not. + :type enabled: bool + :param custom: Indicates whether the information type is custom or not. + :type custom: bool + :param keywords: The information type keywords. + :type keywords: list[~azure.mgmt.security.models.InformationProtectionKeyword] + """ + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'order': {'key': 'order', 'type': 'int'}, + 'recommended_label_id': {'key': 'recommendedLabelId', 'type': 'str'}, + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'custom': {'key': 'custom', 'type': 'bool'}, + 'keywords': {'key': 'keywords', 'type': '[InformationProtectionKeyword]'}, + } + + def __init__( + self, + **kwargs + ): + super(InformationType, self).__init__(**kwargs) + self.display_name = kwargs.get('display_name', None) + self.description = kwargs.get('description', None) + self.order = kwargs.get('order', None) + self.recommended_label_id = kwargs.get('recommended_label_id', None) + self.enabled = kwargs.get('enabled', None) + self.custom = kwargs.get('custom', None) + self.keywords = kwargs.get('keywords', None) + + +class IotAlert(msrest.serialization.Model): + """IoT alert. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar system_alert_id: Holds the product canonical identifier of the alert within the scope of + a product. + :vartype system_alert_id: str + :ivar compromised_entity: Display name of the main entity being reported on. + :vartype compromised_entity: str + :ivar alert_type: The type name of the alert. + :vartype alert_type: str + :ivar start_time_utc: The impact start time of the alert (the time of the first event or + activity included in the alert). + :vartype start_time_utc: str + :ivar end_time_utc: The impact end time of the alert (the time of the last event or activity + included in the alert). + :vartype end_time_utc: str + :param entities: A list of entities related to the alert. + :type entities: list[object] + :param extended_properties: A bag of fields which extends the alert information. + :type extended_properties: object + """ + + _validation = { + 'system_alert_id': {'readonly': True}, + 'compromised_entity': {'readonly': True}, + 'alert_type': {'readonly': True}, + 'start_time_utc': {'readonly': True}, + 'end_time_utc': {'readonly': True}, + } + + _attribute_map = { + 'system_alert_id': {'key': 'properties.systemAlertId', 'type': 'str'}, + 'compromised_entity': {'key': 'properties.compromisedEntity', 'type': 'str'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'start_time_utc': {'key': 'properties.startTimeUtc', 'type': 'str'}, + 'end_time_utc': {'key': 'properties.endTimeUtc', 'type': 'str'}, + 'entities': {'key': 'properties.entities', 'type': '[object]'}, + 'extended_properties': {'key': 'properties.extendedProperties', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(IotAlert, self).__init__(**kwargs) + self.system_alert_id = None + self.compromised_entity = None + self.alert_type = None + self.start_time_utc = None + self.end_time_utc = None + self.entities = kwargs.get('entities', None) + self.extended_properties = kwargs.get('extended_properties', None) + + +class IotAlertList(msrest.serialization.Model): + """List of IoT alerts. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotAlert] + :ivar next_link: When available, follow the URI to get the next page of data. + :vartype next_link: str + :ivar total_count: Total count of alerts that conforms with the given filter options (not + affected by page size). + :vartype total_count: int + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + 'total_count': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotAlert]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'total_count': {'key': 'totalCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IotAlertList, self).__init__(**kwargs) + self.value = None + self.next_link = None + self.total_count = None + + +class IotAlertType(Resource): + """IoT alert type. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar alert_display_name: The display name of the alert. + :vartype alert_display_name: str + :ivar severity: The severity of the alert. Possible values include: "Informational", "Low", + "Medium", "High". + :vartype severity: str or ~azure.mgmt.security.models.AlertSeverity + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar provider_name: The name of the alert provider or internal partner. + :vartype provider_name: str + :ivar product_name: The name of the product which published this alert. + :vartype product_name: str + :ivar product_component_name: The name of a component inside the product which generated the + alert. + :vartype product_component_name: str + :ivar vendor_name: The name of the vendor that raise the alert. + :vartype vendor_name: str + :ivar intent: Kill chain related intent behind the alert. Could contain multiple enum values + (separated by commas). Possible values include: "Unknown", "PreAttack", "InitialAccess", + "Persistence", "PrivilegeEscalation", "DefenseEvasion", "CredentialAccess", "Discovery", + "LateralMovement", "Execution", "Collection", "Exfiltration", "CommandAndControl", "Impact", + "Probing", "Exploitation". + :vartype intent: str or ~azure.mgmt.security.models.AlertIntent + :ivar remediation_steps: Manual action items to take to remediate the alert. + :vartype remediation_steps: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'alert_display_name': {'readonly': True}, + 'severity': {'readonly': True}, + 'description': {'readonly': True}, + 'provider_name': {'readonly': True}, + 'product_name': {'readonly': True}, + 'product_component_name': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'intent': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'provider_name': {'key': 'properties.providerName', 'type': 'str'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'product_component_name': {'key': 'properties.productComponentName', 'type': 'str'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'intent': {'key': 'properties.intent', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotAlertType, self).__init__(**kwargs) + self.alert_display_name = None + self.severity = None + self.description = None + self.provider_name = None + self.product_name = None + self.product_component_name = None + self.vendor_name = None + self.intent = None + self.remediation_steps = None + + +class IotAlertTypeList(msrest.serialization.Model): + """List of alert types. + + :param value: List data. + :type value: list[~azure.mgmt.security.models.IotAlertType] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotAlertType]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotAlertTypeList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + + +class IotDefenderSettingsList(msrest.serialization.Model): + """List of IoT Defender settings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotDefenderSettingsModel] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotDefenderSettingsModel]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotDefenderSettingsList, self).__init__(**kwargs) + self.value = None + + +class IotDefenderSettingsModel(Resource): + """IoT Defender settings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param device_quota: Size of the device quota (as a opposed to a Pay as You Go billing model). + Value is required to be in multiples of 1000. + :type device_quota: int + :param sentinel_workspace_resource_ids: Sentinel Workspace Resource Ids. + :type sentinel_workspace_resource_ids: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'device_quota': {'minimum': 1000}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'device_quota': {'key': 'properties.deviceQuota', 'type': 'int'}, + 'sentinel_workspace_resource_ids': {'key': 'properties.sentinelWorkspaceResourceIds', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotDefenderSettingsModel, self).__init__(**kwargs) + self.device_quota = kwargs.get('device_quota', None) + self.sentinel_workspace_resource_ids = kwargs.get('sentinel_workspace_resource_ids', None) + + +class IotRecommendation(Resource): + """IoT recommendation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar device_id: Identifier of the device being reported on. + :vartype device_id: str + :ivar recommendation_type: The type name of the recommendation. + :vartype recommendation_type: str + :ivar discovered_time_utc: The discovery time of the recommendation. + :vartype discovered_time_utc: str + :param recommendation_additional_data: A bag of fields which extends the recommendation + information. + :type recommendation_additional_data: object + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'device_id': {'readonly': True}, + 'recommendation_type': {'readonly': True}, + 'discovered_time_utc': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'device_id': {'key': 'properties.deviceId', 'type': 'str'}, + 'recommendation_type': {'key': 'properties.recommendationType', 'type': 'str'}, + 'discovered_time_utc': {'key': 'properties.discoveredTimeUtc', 'type': 'str'}, + 'recommendation_additional_data': {'key': 'properties.recommendationAdditionalData', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(IotRecommendation, self).__init__(**kwargs) + self.device_id = None + self.recommendation_type = None + self.discovered_time_utc = None + self.recommendation_additional_data = kwargs.get('recommendation_additional_data', None) + + +class IotRecommendationList(msrest.serialization.Model): + """List of IoT recommendations. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotRecommendation] + :ivar next_link: When available, follow the URI to get the next page of data. + :vartype next_link: str + :ivar total_count: Total count of recommendations that conforms with the given filter options + (not affected by page size). + :vartype total_count: int + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + 'total_count': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotRecommendation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'total_count': {'key': 'totalCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IotRecommendationList, self).__init__(**kwargs) + self.value = None + self.next_link = None + self.total_count = None + + +class IotRecommendationType(Resource): + """IoT recommendation type. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar recommendation_display_name: The display name of the recommendation. + :vartype recommendation_display_name: str + :ivar severity: The severity of the recommendation. Possible values include: "Unknown", + "NotApplicable", "Healthy", "OffByPolicy", "Low", "Medium", "High". + :vartype severity: str or ~azure.mgmt.security.models.RecommendationSeverity + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar product_name: The name of the product which published this recommendation. + :vartype product_name: str + :ivar product_component_name: The name of a component inside the product which generated the + recommendation. + :vartype product_component_name: str + :ivar vendor_name: The name of the vendor that raised the recommendation. + :vartype vendor_name: str + :ivar control: The name of the recommendation's control category. + :vartype control: str + :ivar remediation_steps: Manual action items to take to resolve the recommendation. + :vartype remediation_steps: list[str] + :ivar data_source: The alert's data source. + :vartype data_source: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'recommendation_display_name': {'readonly': True}, + 'severity': {'readonly': True}, + 'description': {'readonly': True}, + 'product_name': {'readonly': True}, + 'product_component_name': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'control': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'data_source': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'recommendation_display_name': {'key': 'properties.recommendationDisplayName', 'type': 'str'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'product_component_name': {'key': 'properties.productComponentName', 'type': 'str'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'control': {'key': 'properties.control', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': '[str]'}, + 'data_source': {'key': 'properties.dataSource', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IotRecommendationType, self).__init__(**kwargs) + self.recommendation_display_name = None + self.severity = None + self.description = None + self.product_name = None + self.product_component_name = None + self.vendor_name = None + self.control = None + self.remediation_steps = None + self.data_source = None + + +class IotRecommendationTypeList(msrest.serialization.Model): + """List of recommendation types. + + :param value: List data. + :type value: list[~azure.mgmt.security.models.IotRecommendationType] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotRecommendationType]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotRecommendationTypeList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + + +class TagsResource(msrest.serialization.Model): + """A container holding only the Tags for a resource, allowing the user to update the tags. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + **kwargs + ): + super(TagsResource, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + + +class IoTSecurityAggregatedAlert(Resource, TagsResource): + """Security Solution Aggregated Alert information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar alert_type: Name of the alert type. + :vartype alert_type: str + :ivar alert_display_name: Display name of the alert type. + :vartype alert_display_name: str + :ivar aggregated_date_utc: Date of detection. + :vartype aggregated_date_utc: ~datetime.date + :ivar vendor_name: Name of the organization that raised the alert. + :vartype vendor_name: str + :ivar reported_severity: Assessed alert severity. Possible values include: "Informational", + "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar remediation_steps: Recommended steps for remediation. + :vartype remediation_steps: str + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar count: Number of alerts occurrences within the aggregated time window. + :vartype count: int + :ivar effected_resource_type: Azure resource ID of the resource that received the alerts. + :vartype effected_resource_type: str + :ivar system_source: The type of the alerted resource (Azure, Non-Azure). + :vartype system_source: str + :ivar action_taken: IoT Security solution alert response. + :vartype action_taken: str + :ivar log_analytics_query: Log analytics query for getting the list of affected devices/alerts. + :vartype log_analytics_query: str + :ivar top_devices_list: 10 devices with the highest number of occurrences of this alert type, + on this day. + :vartype top_devices_list: + list[~azure.mgmt.security.models.IoTSecurityAggregatedAlertPropertiesTopDevicesListItem] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'alert_type': {'readonly': True}, + 'alert_display_name': {'readonly': True}, + 'aggregated_date_utc': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'description': {'readonly': True}, + 'count': {'readonly': True}, + 'effected_resource_type': {'readonly': True}, + 'system_source': {'readonly': True}, + 'action_taken': {'readonly': True}, + 'log_analytics_query': {'readonly': True}, + 'top_devices_list': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, + 'aggregated_date_utc': {'key': 'properties.aggregatedDateUtc', 'type': 'date'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + 'effected_resource_type': {'key': 'properties.effectedResourceType', 'type': 'str'}, + 'system_source': {'key': 'properties.systemSource', 'type': 'str'}, + 'action_taken': {'key': 'properties.actionTaken', 'type': 'str'}, + 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + 'top_devices_list': {'key': 'properties.topDevicesList', 'type': '[IoTSecurityAggregatedAlertPropertiesTopDevicesListItem]'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAggregatedAlert, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.alert_type = None + self.alert_display_name = None + self.aggregated_date_utc = None + self.vendor_name = None + self.reported_severity = None + self.remediation_steps = None + self.description = None + self.count = None + self.effected_resource_type = None + self.system_source = None + self.action_taken = None + self.log_analytics_query = None + self.top_devices_list = None + self.id = None + self.name = None + self.type = None + self.alert_type = None + self.alert_display_name = None + self.aggregated_date_utc = None + self.vendor_name = None + self.reported_severity = None + self.remediation_steps = None + self.description = None + self.count = None + self.effected_resource_type = None + self.system_source = None + self.action_taken = None + self.log_analytics_query = None + self.top_devices_list = None + + +class IoTSecurityAggregatedAlertList(msrest.serialization.Model): + """List of IoT Security solution aggregated alert data. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of aggregated alerts data. + :type value: list[~azure.mgmt.security.models.IoTSecurityAggregatedAlert] + :ivar next_link: When there is too much alert data for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecurityAggregatedAlert]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAggregatedAlertList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class IoTSecurityAggregatedAlertPropertiesTopDevicesListItem(msrest.serialization.Model): + """IoTSecurityAggregatedAlertPropertiesTopDevicesListItem. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar device_id: Name of the device. + :vartype device_id: str + :ivar alerts_count: Number of alerts raised for this device. + :vartype alerts_count: int + :ivar last_occurrence: Most recent time this alert was raised for this device, on this day. + :vartype last_occurrence: str + """ + + _validation = { + 'device_id': {'readonly': True}, + 'alerts_count': {'readonly': True}, + 'last_occurrence': {'readonly': True}, + } + + _attribute_map = { + 'device_id': {'key': 'deviceId', 'type': 'str'}, + 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + 'last_occurrence': {'key': 'lastOccurrence', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAggregatedAlertPropertiesTopDevicesListItem, self).__init__(**kwargs) + self.device_id = None + self.alerts_count = None + self.last_occurrence = None + + +class IoTSecurityAggregatedRecommendation(Resource, TagsResource): + """IoT Security solution recommendation information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param recommendation_name: Name of the recommendation. + :type recommendation_name: str + :ivar recommendation_display_name: Display name of the recommendation type. + :vartype recommendation_display_name: str + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar recommendation_type_id: Recommendation-type GUID. + :vartype recommendation_type_id: str + :ivar detected_by: Name of the organization that made the recommendation. + :vartype detected_by: str + :ivar remediation_steps: Recommended steps for remediation. + :vartype remediation_steps: str + :ivar reported_severity: Assessed recommendation severity. Possible values include: + "Informational", "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar healthy_devices: Number of healthy devices within the IoT Security solution. + :vartype healthy_devices: int + :ivar unhealthy_device_count: Number of unhealthy devices within the IoT Security solution. + :vartype unhealthy_device_count: int + :ivar log_analytics_query: Log analytics query for getting the list of affected devices/alerts. + :vartype log_analytics_query: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'recommendation_display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'recommendation_type_id': {'readonly': True}, + 'detected_by': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'healthy_devices': {'readonly': True}, + 'unhealthy_device_count': {'readonly': True}, + 'log_analytics_query': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'recommendation_name': {'key': 'properties.recommendationName', 'type': 'str'}, + 'recommendation_display_name': {'key': 'properties.recommendationDisplayName', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'recommendation_type_id': {'key': 'properties.recommendationTypeId', 'type': 'str'}, + 'detected_by': {'key': 'properties.detectedBy', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, + 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, + 'healthy_devices': {'key': 'properties.healthyDevices', 'type': 'int'}, + 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, + 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAggregatedRecommendation, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.recommendation_name = kwargs.get('recommendation_name', None) + self.recommendation_display_name = None + self.description = None + self.recommendation_type_id = None + self.detected_by = None + self.remediation_steps = None + self.reported_severity = None + self.healthy_devices = None + self.unhealthy_device_count = None + self.log_analytics_query = None + self.id = None + self.name = None + self.type = None + self.recommendation_name = kwargs.get('recommendation_name', None) + self.recommendation_display_name = None + self.description = None + self.recommendation_type_id = None + self.detected_by = None + self.remediation_steps = None + self.reported_severity = None + self.healthy_devices = None + self.unhealthy_device_count = None + self.log_analytics_query = None + + +class IoTSecurityAggregatedRecommendationList(msrest.serialization.Model): + """List of IoT Security solution aggregated recommendations. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of aggregated recommendations data. + :type value: list[~azure.mgmt.security.models.IoTSecurityAggregatedRecommendation] + :ivar next_link: When there is too much alert data for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecurityAggregatedRecommendation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAggregatedRecommendationList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class IoTSecurityAlertedDevice(msrest.serialization.Model): + """Statistical information about the number of alerts per device during last set number of days. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar device_id: Device identifier. + :vartype device_id: str + :ivar alerts_count: Number of alerts raised for this device. + :vartype alerts_count: int + """ + + _validation = { + 'device_id': {'readonly': True}, + 'alerts_count': {'readonly': True}, + } + + _attribute_map = { + 'device_id': {'key': 'deviceId', 'type': 'str'}, + 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAlertedDevice, self).__init__(**kwargs) + self.device_id = None + self.alerts_count = None + + +class IoTSecurityDeviceAlert(msrest.serialization.Model): + """Statistical information about the number of alerts per alert type during last set number of days. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar alert_display_name: Display name of the alert. + :vartype alert_display_name: str + :ivar reported_severity: Assessed Alert severity. Possible values include: "Informational", + "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar alerts_count: Number of alerts raised for this alert type. + :vartype alerts_count: int + """ + + _validation = { + 'alert_display_name': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'alerts_count': {'readonly': True}, + } + + _attribute_map = { + 'alert_display_name': {'key': 'alertDisplayName', 'type': 'str'}, + 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, + 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityDeviceAlert, self).__init__(**kwargs) + self.alert_display_name = None + self.reported_severity = None + self.alerts_count = None + + +class IoTSecurityDeviceRecommendation(msrest.serialization.Model): + """Statistical information about the number of recommendations per device, per recommendation type. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar recommendation_display_name: Display name of the recommendation. + :vartype recommendation_display_name: str + :ivar reported_severity: Assessed recommendation severity. Possible values include: + "Informational", "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar devices_count: Number of devices with this recommendation. + :vartype devices_count: int + """ + + _validation = { + 'recommendation_display_name': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'devices_count': {'readonly': True}, + } + + _attribute_map = { + 'recommendation_display_name': {'key': 'recommendationDisplayName', 'type': 'str'}, + 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, + 'devices_count': {'key': 'devicesCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityDeviceRecommendation, self).__init__(**kwargs) + self.recommendation_display_name = None + self.reported_severity = None + self.devices_count = None + + +class IoTSecuritySolutionAnalyticsModel(Resource): + """Security analytics of your IoT Security solution. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar metrics: Security analytics of your IoT Security solution. + :vartype metrics: ~azure.mgmt.security.models.IoTSeverityMetrics + :ivar unhealthy_device_count: Number of unhealthy devices within your IoT Security solution. + :vartype unhealthy_device_count: int + :ivar devices_metrics: List of device metrics by the aggregation date. + :vartype devices_metrics: + list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem] + :param top_alerted_devices: List of the 3 devices with the most alerts. + :type top_alerted_devices: list[~azure.mgmt.security.models.IoTSecurityAlertedDevice] + :param most_prevalent_device_alerts: List of the 3 most prevalent device alerts. + :type most_prevalent_device_alerts: list[~azure.mgmt.security.models.IoTSecurityDeviceAlert] + :param most_prevalent_device_recommendations: List of the 3 most prevalent device + recommendations. + :type most_prevalent_device_recommendations: + list[~azure.mgmt.security.models.IoTSecurityDeviceRecommendation] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'metrics': {'readonly': True}, + 'unhealthy_device_count': {'readonly': True}, + 'devices_metrics': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'metrics': {'key': 'properties.metrics', 'type': 'IoTSeverityMetrics'}, + 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, + 'devices_metrics': {'key': 'properties.devicesMetrics', 'type': '[IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem]'}, + 'top_alerted_devices': {'key': 'properties.topAlertedDevices', 'type': '[IoTSecurityAlertedDevice]'}, + 'most_prevalent_device_alerts': {'key': 'properties.mostPrevalentDeviceAlerts', 'type': '[IoTSecurityDeviceAlert]'}, + 'most_prevalent_device_recommendations': {'key': 'properties.mostPrevalentDeviceRecommendations', 'type': '[IoTSecurityDeviceRecommendation]'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecuritySolutionAnalyticsModel, self).__init__(**kwargs) + self.metrics = None + self.unhealthy_device_count = None + self.devices_metrics = None + self.top_alerted_devices = kwargs.get('top_alerted_devices', None) + self.most_prevalent_device_alerts = kwargs.get('most_prevalent_device_alerts', None) + self.most_prevalent_device_recommendations = kwargs.get('most_prevalent_device_recommendations', None) + + +class IoTSecuritySolutionAnalyticsModelList(msrest.serialization.Model): + """List of Security analytics of your IoT Security solution. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of Security analytics of your IoT Security solution. + :type value: list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel] + :ivar next_link: When there is too much alert data for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecuritySolutionAnalyticsModel]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecuritySolutionAnalyticsModelList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem(msrest.serialization.Model): + """IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem. + + :param date: Aggregation of IoT Security solution device alert metrics by date. + :type date: ~datetime.datetime + :param devices_metrics: Device alert count by severity. + :type devices_metrics: ~azure.mgmt.security.models.IoTSeverityMetrics + """ + + _attribute_map = { + 'date': {'key': 'date', 'type': 'iso-8601'}, + 'devices_metrics': {'key': 'devicesMetrics', 'type': 'IoTSeverityMetrics'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem, self).__init__(**kwargs) + self.date = kwargs.get('date', None) + self.devices_metrics = kwargs.get('devices_metrics', None) + + +class IoTSecuritySolutionModel(Resource, TagsResource): + """IoT Security solution configuration and resource information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param location: The resource location. + :type location: str + :param workspace: Workspace resource ID. + :type workspace: str + :param display_name: Resource display name. + :type display_name: str + :param status: Status of the IoT Security solution. Possible values include: "Enabled", + "Disabled". Default value: "Enabled". + :type status: str or ~azure.mgmt.security.models.SecuritySolutionStatus + :param export: List of additional options for exporting to workspace data. + :type export: list[str or ~azure.mgmt.security.models.ExportData] + :param disabled_data_sources: Disabled data sources. Disabling these data sources compromises + the system. + :type disabled_data_sources: list[str or ~azure.mgmt.security.models.DataSource] + :param iot_hubs: IoT Hub resource IDs. + :type iot_hubs: list[str] + :param user_defined_resources: Properties of the IoT Security solution's user defined + resources. + :type user_defined_resources: ~azure.mgmt.security.models.UserDefinedResourcesProperties + :ivar auto_discovered_resources: List of resources that were automatically discovered as + relevant to the security solution. + :vartype auto_discovered_resources: list[str] + :param recommendations_configuration: List of the configuration status for each recommendation + type. + :type recommendations_configuration: + list[~azure.mgmt.security.models.RecommendationConfigurationProperties] + :param unmasked_ip_logging_status: Unmasked IP address logging status. Possible values include: + "Disabled", "Enabled". Default value: "Disabled". + :type unmasked_ip_logging_status: str or ~azure.mgmt.security.models.UnmaskedIpLoggingStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'auto_discovered_resources': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'workspace': {'key': 'properties.workspace', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'export': {'key': 'properties.export', 'type': '[str]'}, + 'disabled_data_sources': {'key': 'properties.disabledDataSources', 'type': '[str]'}, + 'iot_hubs': {'key': 'properties.iotHubs', 'type': '[str]'}, + 'user_defined_resources': {'key': 'properties.userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, + 'auto_discovered_resources': {'key': 'properties.autoDiscoveredResources', 'type': '[str]'}, + 'recommendations_configuration': {'key': 'properties.recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, + 'unmasked_ip_logging_status': {'key': 'properties.unmaskedIpLoggingStatus', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecuritySolutionModel, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.location = kwargs.get('location', None) + self.workspace = kwargs.get('workspace', None) + self.display_name = kwargs.get('display_name', None) + self.status = kwargs.get('status', "Enabled") + self.export = kwargs.get('export', None) + self.disabled_data_sources = kwargs.get('disabled_data_sources', None) + self.iot_hubs = kwargs.get('iot_hubs', None) + self.user_defined_resources = kwargs.get('user_defined_resources', None) + self.auto_discovered_resources = None + self.recommendations_configuration = kwargs.get('recommendations_configuration', None) + self.unmasked_ip_logging_status = kwargs.get('unmasked_ip_logging_status', "Disabled") + self.id = None + self.name = None + self.type = None + self.location = kwargs.get('location', None) + self.workspace = kwargs.get('workspace', None) + self.display_name = kwargs.get('display_name', None) + self.status = kwargs.get('status', "Enabled") + self.export = kwargs.get('export', None) + self.disabled_data_sources = kwargs.get('disabled_data_sources', None) + self.iot_hubs = kwargs.get('iot_hubs', None) + self.user_defined_resources = kwargs.get('user_defined_resources', None) + self.auto_discovered_resources = None + self.recommendations_configuration = kwargs.get('recommendations_configuration', None) + self.unmasked_ip_logging_status = kwargs.get('unmasked_ip_logging_status', "Disabled") + + +class IoTSecuritySolutionsList(msrest.serialization.Model): + """List of IoT Security solutions. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of IoT Security solutions. + :type value: list[~azure.mgmt.security.models.IoTSecuritySolutionModel] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecuritySolutionModel]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecuritySolutionsList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class IotSensor(Resource): + """IoT sensor. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: IoT sensor properties. + :type properties: object + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(IotSensor, self).__init__(**kwargs) + self.properties = kwargs.get('properties', None) + + +class IotSensorsList(msrest.serialization.Model): + """List of IoT sensors. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotSensor] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotSensor]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotSensorsList, self).__init__(**kwargs) + self.value = None + + +class IoTSeverityMetrics(msrest.serialization.Model): + """IoT Security solution analytics severity metrics. + + :param high: Count of high severity alerts/recommendations. + :type high: int + :param medium: Count of medium severity alerts/recommendations. + :type medium: int + :param low: Count of low severity alerts/recommendations. + :type low: int + """ + + _attribute_map = { + 'high': {'key': 'high', 'type': 'int'}, + 'medium': {'key': 'medium', 'type': 'int'}, + 'low': {'key': 'low', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSeverityMetrics, self).__init__(**kwargs) + self.high = kwargs.get('high', None) + self.medium = kwargs.get('medium', None) + self.low = kwargs.get('low', None) + + +class IpAddress(msrest.serialization.Model): + """IP Address information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar v4_address: IPV4 address. + :vartype v4_address: str + :ivar detection_time: Detection time of the ip address. + :vartype detection_time: ~datetime.datetime + :ivar subnet_cidr: Subnet Classless Inter-Domain Routing. + :vartype subnet_cidr: str + :ivar fqdn: Fully qualified domain name. + :vartype fqdn: str + :ivar fqdn_last_lookup_time: FQDN last lookup time. + :vartype fqdn_last_lookup_time: ~datetime.datetime + """ + + _validation = { + 'v4_address': {'readonly': True}, + 'detection_time': {'readonly': True}, + 'subnet_cidr': {'readonly': True}, + 'fqdn': {'readonly': True}, + 'fqdn_last_lookup_time': {'readonly': True}, + } + + _attribute_map = { + 'v4_address': {'key': 'v4Address', 'type': 'str'}, + 'detection_time': {'key': 'detectionTime', 'type': 'iso-8601'}, + 'subnet_cidr': {'key': 'subnetCidr', 'type': 'str'}, + 'fqdn': {'key': 'fqdn', 'type': 'str'}, + 'fqdn_last_lookup_time': {'key': 'fqdnLastLookupTime', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(IpAddress, self).__init__(**kwargs) + self.v4_address = None + self.detection_time = None + self.subnet_cidr = None + self.fqdn = None + self.fqdn_last_lookup_time = None + + +class JitNetworkAccessPoliciesList(msrest.serialization.Model): + """JitNetworkAccessPoliciesList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.JitNetworkAccessPolicy] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[JitNetworkAccessPolicy]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPoliciesList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class JitNetworkAccessPolicy(Resource, Kind, Location): + """JitNetworkAccessPolicy. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar location: Location where the resource is stored. + :vartype location: str + :param kind: Kind of the resource. + :type kind: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param virtual_machines: Required. Configurations for Microsoft.Compute/virtualMachines + resource type. + :type virtual_machines: list[~azure.mgmt.security.models.JitNetworkAccessPolicyVirtualMachine] + :param requests: + :type requests: list[~azure.mgmt.security.models.JitNetworkAccessRequest] + :ivar provisioning_state: Gets the provisioning state of the Just-in-Time policy. + :vartype provisioning_state: str + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'virtual_machines': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[JitNetworkAccessPolicyVirtualMachine]'}, + 'requests': {'key': 'properties.requests', 'type': '[JitNetworkAccessRequest]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPolicy, self).__init__(**kwargs) + self.location = None + self.kind = kwargs.get('kind', None) + self.virtual_machines = kwargs['virtual_machines'] + self.requests = kwargs.get('requests', None) + self.provisioning_state = None + self.location = None + self.id = None + self.name = None + self.type = None + self.virtual_machines = kwargs['virtual_machines'] + self.requests = kwargs.get('requests', None) + self.provisioning_state = None + self.kind = kwargs.get('kind', None) + self.id = None + self.name = None + self.type = None + self.virtual_machines = kwargs['virtual_machines'] + self.requests = kwargs.get('requests', None) + self.provisioning_state = None + + +class JitNetworkAccessPolicyInitiatePort(msrest.serialization.Model): + """JitNetworkAccessPolicyInitiatePort. + + All required parameters must be populated in order to send to Azure. + + :param number: Required. + :type number: int + :param allowed_source_address_prefix: Source of the allowed traffic. If omitted, the request + will be for the source IP address of the initiate request. + :type allowed_source_address_prefix: str + :param end_time_utc: Required. The time to close the request in UTC. + :type end_time_utc: ~datetime.datetime + """ + + _validation = { + 'number': {'required': True, 'maximum': 65535, 'minimum': 0}, + 'end_time_utc': {'required': True}, + } + + _attribute_map = { + 'number': {'key': 'number', 'type': 'int'}, + 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, + 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPolicyInitiatePort, self).__init__(**kwargs) + self.number = kwargs['number'] + self.allowed_source_address_prefix = kwargs.get('allowed_source_address_prefix', None) + self.end_time_utc = kwargs['end_time_utc'] + + +class JitNetworkAccessPolicyInitiateRequest(msrest.serialization.Model): + """JitNetworkAccessPolicyInitiateRequest. + + All required parameters must be populated in order to send to Azure. + + :param virtual_machines: Required. A list of virtual machines & ports to open access for. + :type virtual_machines: + list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiateVirtualMachine] + :param justification: The justification for making the initiate request. + :type justification: str + """ + + _validation = { + 'virtual_machines': {'required': True}, + } + + _attribute_map = { + 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessPolicyInitiateVirtualMachine]'}, + 'justification': {'key': 'justification', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPolicyInitiateRequest, self).__init__(**kwargs) + self.virtual_machines = kwargs['virtual_machines'] + self.justification = kwargs.get('justification', None) + + +class JitNetworkAccessPolicyInitiateVirtualMachine(msrest.serialization.Model): + """JitNetworkAccessPolicyInitiateVirtualMachine. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Resource ID of the virtual machine that is linked to this policy. + :type id: str + :param ports: Required. The ports to open for the resource with the ``id``. + :type ports: list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiatePort] + """ + + _validation = { + 'id': {'required': True}, + 'ports': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPolicyInitiatePort]'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPolicyInitiateVirtualMachine, self).__init__(**kwargs) + self.id = kwargs['id'] + self.ports = kwargs['ports'] + + +class JitNetworkAccessPolicyVirtualMachine(msrest.serialization.Model): + """JitNetworkAccessPolicyVirtualMachine. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Resource ID of the virtual machine that is linked to this policy. + :type id: str + :param ports: Required. Port configurations for the virtual machine. + :type ports: list[~azure.mgmt.security.models.JitNetworkAccessPortRule] + :param public_ip_address: Public IP address of the Azure Firewall that is linked to this + policy, if applicable. + :type public_ip_address: str + """ + + _validation = { + 'id': {'required': True}, + 'ports': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPortRule]'}, + 'public_ip_address': {'key': 'publicIpAddress', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPolicyVirtualMachine, self).__init__(**kwargs) + self.id = kwargs['id'] + self.ports = kwargs['ports'] + self.public_ip_address = kwargs.get('public_ip_address', None) + + +class JitNetworkAccessPortRule(msrest.serialization.Model): + """JitNetworkAccessPortRule. + + All required parameters must be populated in order to send to Azure. + + :param number: Required. + :type number: int + :param protocol: Required. Possible values include: "TCP", "UDP", "*". + :type protocol: str or ~azure.mgmt.security.models.ProtocolEnum + :param allowed_source_address_prefix: Mutually exclusive with the + "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, for example + "192.168.0.3" or "192.168.0.0/16". + :type allowed_source_address_prefix: str + :param allowed_source_address_prefixes: Mutually exclusive with the + "allowedSourceAddressPrefix" parameter. + :type allowed_source_address_prefixes: list[str] + :param max_request_access_duration: Required. Maximum duration requests can be made for. In ISO + 8601 duration format. Minimum 5 minutes, maximum 1 day. + :type max_request_access_duration: str + """ + + _validation = { + 'number': {'required': True, 'maximum': 65535, 'minimum': 0}, + 'protocol': {'required': True}, + 'max_request_access_duration': {'required': True}, + } + + _attribute_map = { + 'number': {'key': 'number', 'type': 'int'}, + 'protocol': {'key': 'protocol', 'type': 'str'}, + 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, + 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, + 'max_request_access_duration': {'key': 'maxRequestAccessDuration', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessPortRule, self).__init__(**kwargs) + self.number = kwargs['number'] + self.protocol = kwargs['protocol'] + self.allowed_source_address_prefix = kwargs.get('allowed_source_address_prefix', None) + self.allowed_source_address_prefixes = kwargs.get('allowed_source_address_prefixes', None) + self.max_request_access_duration = kwargs['max_request_access_duration'] + + +class JitNetworkAccessRequest(msrest.serialization.Model): + """JitNetworkAccessRequest. + + All required parameters must be populated in order to send to Azure. + + :param virtual_machines: Required. + :type virtual_machines: list[~azure.mgmt.security.models.JitNetworkAccessRequestVirtualMachine] + :param start_time_utc: Required. The start time of the request in UTC. + :type start_time_utc: ~datetime.datetime + :param requestor: Required. The identity of the person who made the request. + :type requestor: str + :param justification: The justification for making the initiate request. + :type justification: str + """ + + _validation = { + 'virtual_machines': {'required': True}, + 'start_time_utc': {'required': True}, + 'requestor': {'required': True}, + } + + _attribute_map = { + 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessRequestVirtualMachine]'}, + 'start_time_utc': {'key': 'startTimeUtc', 'type': 'iso-8601'}, + 'requestor': {'key': 'requestor', 'type': 'str'}, + 'justification': {'key': 'justification', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessRequest, self).__init__(**kwargs) + self.virtual_machines = kwargs['virtual_machines'] + self.start_time_utc = kwargs['start_time_utc'] + self.requestor = kwargs['requestor'] + self.justification = kwargs.get('justification', None) + + +class JitNetworkAccessRequestPort(msrest.serialization.Model): + """JitNetworkAccessRequestPort. + + All required parameters must be populated in order to send to Azure. + + :param number: Required. + :type number: int + :param allowed_source_address_prefix: Mutually exclusive with the + "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, for example + "192.168.0.3" or "192.168.0.0/16". + :type allowed_source_address_prefix: str + :param allowed_source_address_prefixes: Mutually exclusive with the + "allowedSourceAddressPrefix" parameter. + :type allowed_source_address_prefixes: list[str] + :param end_time_utc: Required. The date & time at which the request ends in UTC. + :type end_time_utc: ~datetime.datetime + :param status: Required. The status of the port. Possible values include: "Revoked", + "Initiated". + :type status: str or ~azure.mgmt.security.models.Status + :param status_reason: Required. A description of why the ``status`` has its value. Possible + values include: "Expired", "UserRequested", "NewerRequestInitiated". + :type status_reason: str or ~azure.mgmt.security.models.StatusReason + :param mapped_port: The port which is mapped to this port's ``number`` in the Azure Firewall, + if applicable. + :type mapped_port: int + """ + + _validation = { + 'number': {'required': True, 'maximum': 65535, 'minimum': 0}, + 'end_time_utc': {'required': True}, + 'status': {'required': True}, + 'status_reason': {'required': True}, + } + + _attribute_map = { + 'number': {'key': 'number', 'type': 'int'}, + 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, + 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, + 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, + 'status': {'key': 'status', 'type': 'str'}, + 'status_reason': {'key': 'statusReason', 'type': 'str'}, + 'mapped_port': {'key': 'mappedPort', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessRequestPort, self).__init__(**kwargs) + self.number = kwargs['number'] + self.allowed_source_address_prefix = kwargs.get('allowed_source_address_prefix', None) + self.allowed_source_address_prefixes = kwargs.get('allowed_source_address_prefixes', None) + self.end_time_utc = kwargs['end_time_utc'] + self.status = kwargs['status'] + self.status_reason = kwargs['status_reason'] + self.mapped_port = kwargs.get('mapped_port', None) + + +class JitNetworkAccessRequestVirtualMachine(msrest.serialization.Model): + """JitNetworkAccessRequestVirtualMachine. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Resource ID of the virtual machine that is linked to this policy. + :type id: str + :param ports: Required. The ports that were opened for the virtual machine. + :type ports: list[~azure.mgmt.security.models.JitNetworkAccessRequestPort] + """ + + _validation = { + 'id': {'required': True}, + 'ports': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'ports': {'key': 'ports', 'type': '[JitNetworkAccessRequestPort]'}, + } + + def __init__( + self, + **kwargs + ): + super(JitNetworkAccessRequestVirtualMachine, self).__init__(**kwargs) + self.id = kwargs['id'] + self.ports = kwargs['ports'] + + +class LocalUserNotAllowed(AllowlistCustomAlertRule): + """Login by a local user that isn't allowed. Allow list consists of login names to allow. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(LocalUserNotAllowed, self).__init__(**kwargs) + self.rule_type = 'LocalUserNotAllowed' # type: str + self.rule_type = 'LocalUserNotAllowed' # type: str + + +class LogAnalyticsIdentifier(ResourceIdentifier): + """Represents a Log Analytics workspace scope identifier. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. There can be multiple identifiers of different type per alert, this + field specify the identifier type.Constant filled by server. Possible values include: + "AzureResource", "LogAnalytics". + :type type: str or ~azure.mgmt.security.models.ResourceIdentifierType + :ivar workspace_id: The LogAnalytics workspace id that stores this alert. + :vartype workspace_id: str + :ivar workspace_subscription_id: The azure subscription id for the LogAnalytics workspace + storing this alert. + :vartype workspace_subscription_id: str + :ivar workspace_resource_group: The azure resource group for the LogAnalytics workspace storing + this alert. + :vartype workspace_resource_group: str + :ivar agent_id: (optional) The LogAnalytics agent id reporting the event that this alert is + based on. + :vartype agent_id: str + """ + + _validation = { + 'type': {'required': True}, + 'workspace_id': {'readonly': True}, + 'workspace_subscription_id': {'readonly': True, 'pattern': r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'}, + 'workspace_resource_group': {'readonly': True}, + 'agent_id': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'workspace_id': {'key': 'workspaceId', 'type': 'str'}, + 'workspace_subscription_id': {'key': 'workspaceSubscriptionId', 'type': 'str'}, + 'workspace_resource_group': {'key': 'workspaceResourceGroup', 'type': 'str'}, + 'agent_id': {'key': 'agentId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(LogAnalyticsIdentifier, self).__init__(**kwargs) + self.type = 'LogAnalytics' # type: str + self.workspace_id = None + self.workspace_subscription_id = None + self.workspace_resource_group = None + self.agent_id = None + + +class MacAddress(msrest.serialization.Model): + """MAC Address information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar address: MAC address. + :vartype address: str + :ivar detection_time: Detection time of the mac address. + :vartype detection_time: ~datetime.datetime + :ivar significance: Indicates whether this is the primary secondary MAC address of the device. + Possible values include: "Primary", "Secondary". + :vartype significance: str or ~azure.mgmt.security.models.MacSignificance + :ivar relation_to_ip_status: Indicates whether the relation of the mac to the ip address is + certain or a guess. Possible values include: "Guess", "Certain". + :vartype relation_to_ip_status: str or ~azure.mgmt.security.models.RelationToIpStatus + """ + + _validation = { + 'address': {'readonly': True}, + 'detection_time': {'readonly': True}, + 'significance': {'readonly': True}, + 'relation_to_ip_status': {'readonly': True}, + } + + _attribute_map = { + 'address': {'key': 'address', 'type': 'str'}, + 'detection_time': {'key': 'detectionTime', 'type': 'iso-8601'}, + 'significance': {'key': 'significance', 'type': 'str'}, + 'relation_to_ip_status': {'key': 'relationToIpStatus', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(MacAddress, self).__init__(**kwargs) + self.address = None + self.detection_time = None + self.significance = None + self.relation_to_ip_status = None + + +class MqttC2DMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of cloud to device messages (MQTT protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(MqttC2DMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'MqttC2DMessagesNotInAllowedRange' # type: str + self.rule_type = 'MqttC2DMessagesNotInAllowedRange' # type: str + + +class MqttC2DRejectedMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of rejected cloud to device messages (MQTT protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(MqttC2DRejectedMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'MqttC2DRejectedMessagesNotInAllowedRange' # type: str + self.rule_type = 'MqttC2DRejectedMessagesNotInAllowedRange' # type: str + + +class MqttD2CMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device to cloud messages (MQTT protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(MqttD2CMessagesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'MqttD2CMessagesNotInAllowedRange' # type: str + self.rule_type = 'MqttD2CMessagesNotInAllowedRange' # type: str + + +class NetworkInterface(msrest.serialization.Model): + """Network interface. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param ip_address: IP Address information. + :type ip_address: ~azure.mgmt.security.models.IpAddress + :param mac_address: MAC Address information. + :type mac_address: ~azure.mgmt.security.models.MacAddress + :ivar vlans: List of device vlans. + :vartype vlans: list[str] + """ + + _validation = { + 'vlans': {'readonly': True}, + } + + _attribute_map = { + 'ip_address': {'key': 'ipAddress', 'type': 'IpAddress'}, + 'mac_address': {'key': 'macAddress', 'type': 'MacAddress'}, + 'vlans': {'key': 'vlans', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(NetworkInterface, self).__init__(**kwargs) + self.ip_address = kwargs.get('ip_address', None) + self.mac_address = kwargs.get('mac_address', None) + self.vlans = None + + +class OnPremiseIotSensor(Resource): + """On-premise IoT sensor. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: On-premise IoT sensor properties. + :type properties: object + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(OnPremiseIotSensor, self).__init__(**kwargs) + self.properties = kwargs.get('properties', None) + + +class OnPremiseIotSensorsList(msrest.serialization.Model): + """List of on-premise IoT sensors. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.OnPremiseIotSensor] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OnPremiseIotSensor]'}, + } + + def __init__( + self, + **kwargs + ): + super(OnPremiseIotSensorsList, self).__init__(**kwargs) + self.value = None + + +class OnPremiseResourceDetails(ResourceDetails): + """Details of the On Premise resource that was assessed. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: OnPremiseSqlResourceDetails. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + :param workspace_id: Required. Azure resource Id of the workspace the machine is attached to. + :type workspace_id: str + :param vmuuid: Required. The unique Id of the machine. + :type vmuuid: str + :param source_computer_id: Required. The oms agent Id installed on the machine. + :type source_computer_id: str + :param machine_name: Required. The name of the machine. + :type machine_name: str + """ + + _validation = { + 'source': {'required': True}, + 'workspace_id': {'required': True}, + 'vmuuid': {'required': True}, + 'source_computer_id': {'required': True}, + 'machine_name': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + 'workspace_id': {'key': 'workspaceId', 'type': 'str'}, + 'vmuuid': {'key': 'vmuuid', 'type': 'str'}, + 'source_computer_id': {'key': 'sourceComputerId', 'type': 'str'}, + 'machine_name': {'key': 'machineName', 'type': 'str'}, + } + + _subtype_map = { + 'source': {'OnPremiseSql': 'OnPremiseSqlResourceDetails'} + } + + def __init__( + self, + **kwargs + ): + super(OnPremiseResourceDetails, self).__init__(**kwargs) + self.source = 'OnPremise' # type: str + self.workspace_id = kwargs['workspace_id'] + self.vmuuid = kwargs['vmuuid'] + self.source_computer_id = kwargs['source_computer_id'] + self.machine_name = kwargs['machine_name'] + + +class OnPremiseSqlResourceDetails(OnPremiseResourceDetails): + """Details of the On Premise Sql resource that was assessed. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + :param workspace_id: Required. Azure resource Id of the workspace the machine is attached to. + :type workspace_id: str + :param vmuuid: Required. The unique Id of the machine. + :type vmuuid: str + :param source_computer_id: Required. The oms agent Id installed on the machine. + :type source_computer_id: str + :param machine_name: Required. The name of the machine. + :type machine_name: str + :param server_name: Required. The Sql server name installed on the machine. + :type server_name: str + :param database_name: Required. The Sql database name installed on the machine. + :type database_name: str + """ + + _validation = { + 'source': {'required': True}, + 'workspace_id': {'required': True}, + 'vmuuid': {'required': True}, + 'source_computer_id': {'required': True}, + 'machine_name': {'required': True}, + 'server_name': {'required': True}, + 'database_name': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + 'workspace_id': {'key': 'workspaceId', 'type': 'str'}, + 'vmuuid': {'key': 'vmuuid', 'type': 'str'}, + 'source_computer_id': {'key': 'sourceComputerId', 'type': 'str'}, + 'machine_name': {'key': 'machineName', 'type': 'str'}, + 'server_name': {'key': 'serverName', 'type': 'str'}, + 'database_name': {'key': 'databaseName', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OnPremiseSqlResourceDetails, self).__init__(**kwargs) + self.source = 'OnPremiseSql' # type: str + self.server_name = kwargs['server_name'] + self.database_name = kwargs['database_name'] + + +class Operation(msrest.serialization.Model): + """Possible operation in the REST API of Microsoft.Security. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: Name of the operation. + :vartype name: str + :ivar origin: Where the operation is originated. + :vartype origin: str + :param display: Security operation display. + :type display: ~azure.mgmt.security.models.OperationDisplay + """ + + _validation = { + 'name': {'readonly': True}, + 'origin': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'origin': {'key': 'origin', 'type': 'str'}, + 'display': {'key': 'display', 'type': 'OperationDisplay'}, + } + + def __init__( + self, + **kwargs + ): + super(Operation, self).__init__(**kwargs) + self.name = None + self.origin = None + self.display = kwargs.get('display', None) + + +class OperationDisplay(msrest.serialization.Model): + """Security operation display. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar provider: The resource provider for the operation. + :vartype provider: str + :ivar resource: The display name of the resource the operation applies to. + :vartype resource: str + :ivar operation: The display name of the security operation. + :vartype operation: str + :ivar description: The description of the operation. + :vartype description: str + """ + + _validation = { + 'provider': {'readonly': True}, + 'resource': {'readonly': True}, + 'operation': {'readonly': True}, + 'description': {'readonly': True}, + } + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'resource': {'key': 'resource', 'type': 'str'}, + 'operation': {'key': 'operation', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationDisplay, self).__init__(**kwargs) + self.provider = None + self.resource = None + self.operation = None + self.description = None + + +class OperationList(msrest.serialization.Model): + """List of possible operations for Microsoft.Security resource provider. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of Security operations. + :type value: list[~azure.mgmt.security.models.Operation] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Operation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class PackageDownloadInfo(msrest.serialization.Model): + """Information on a specific package download. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar version: Version number. + :vartype version: str + :ivar link: Download link. + :vartype link: str + :ivar version_kind: Kind of the version. Possible values include: "Latest", "Previous", + "Preview". + :vartype version_kind: str or ~azure.mgmt.security.models.VersionKind + """ + + _validation = { + 'version': {'readonly': True}, + 'link': {'readonly': True}, + 'version_kind': {'readonly': True}, + } + + _attribute_map = { + 'version': {'key': 'version', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + 'version_kind': {'key': 'versionKind', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadInfo, self).__init__(**kwargs) + self.version = None + self.link = None + self.version_kind = None + + +class PackageDownloads(msrest.serialization.Model): + """Information about package downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar sensor: Contains all Sensor binary downloads. + :vartype sensor: ~azure.mgmt.security.models.PackageDownloadsSensor + :ivar central_manager: All downloads for Central Manager. + :vartype central_manager: ~azure.mgmt.security.models.PackageDownloadsCentralManager + :ivar threat_intelligence: All downloads for threat intelligence. + :vartype threat_intelligence: ~azure.mgmt.security.models.PackageDownloadsThreatIntelligence + """ + + _validation = { + 'sensor': {'readonly': True}, + 'central_manager': {'readonly': True}, + 'threat_intelligence': {'readonly': True}, + } + + _attribute_map = { + 'sensor': {'key': 'sensor', 'type': 'PackageDownloadsSensor'}, + 'central_manager': {'key': 'centralManager', 'type': 'PackageDownloadsCentralManager'}, + 'threat_intelligence': {'key': 'threatIntelligence', 'type': 'PackageDownloadsThreatIntelligence'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloads, self).__init__(**kwargs) + self.sensor = None + self.central_manager = None + self.threat_intelligence = None + + +class PackageDownloadsCentralManager(msrest.serialization.Model): + """All downloads for Central Manager. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar full: Contains full package downloads. + :vartype full: ~azure.mgmt.security.models.PackageDownloadsCentralManagerFull + :ivar upgrade: Central Manager upgrade package downloads (on existing installations). + :vartype upgrade: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'full': {'readonly': True}, + 'upgrade': {'readonly': True}, + } + + _attribute_map = { + 'full': {'key': 'full', 'type': 'PackageDownloadsCentralManagerFull'}, + 'upgrade': {'key': 'upgrade', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsCentralManager, self).__init__(**kwargs) + self.full = None + self.upgrade = None + + +class PackageDownloadsCentralManagerFull(msrest.serialization.Model): + """Contains full package downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar iso: Contains all ISO full versions of the Central Manager. + :vartype iso: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar ovf: Contains all OVF (virtual machine) full versions of the Central Manager. + :vartype ovf: ~azure.mgmt.security.models.PackageDownloadsCentralManagerFullOvf + """ + + _validation = { + 'iso': {'readonly': True}, + 'ovf': {'readonly': True}, + } + + _attribute_map = { + 'iso': {'key': 'iso', 'type': '[PackageDownloadInfo]'}, + 'ovf': {'key': 'ovf', 'type': 'PackageDownloadsCentralManagerFullOvf'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsCentralManagerFull, self).__init__(**kwargs) + self.iso = None + self.ovf = None + + +class PackageDownloadsCentralManagerFullOvf(msrest.serialization.Model): + """Contains all OVF (virtual machine) full versions of the Central Manager. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar enterprise: The Enterprise package type. + :vartype enterprise: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar enterprise_high_availability: The EnterpriseHighAvailability package type. + :vartype enterprise_high_availability: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar medium: The Medium package type. + :vartype medium: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar medium_high_availability: The MediumHighAvailability package type. + :vartype medium_high_availability: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'enterprise': {'readonly': True}, + 'enterprise_high_availability': {'readonly': True}, + 'medium': {'readonly': True}, + 'medium_high_availability': {'readonly': True}, + } + + _attribute_map = { + 'enterprise': {'key': 'enterprise', 'type': '[PackageDownloadInfo]'}, + 'enterprise_high_availability': {'key': 'enterpriseHighAvailability', 'type': '[PackageDownloadInfo]'}, + 'medium': {'key': 'medium', 'type': '[PackageDownloadInfo]'}, + 'medium_high_availability': {'key': 'mediumHighAvailability', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsCentralManagerFullOvf, self).__init__(**kwargs) + self.enterprise = None + self.enterprise_high_availability = None + self.medium = None + self.medium_high_availability = None + + +class PackageDownloadsSensor(msrest.serialization.Model): + """Contains all Sensor binary downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar full: Contains full package downloads. + :vartype full: ~azure.mgmt.security.models.PackageDownloadsSensorFull + :param upgrade: Sensor upgrade package downloads (on existing installations). + :type upgrade: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'full': {'readonly': True}, + } + + _attribute_map = { + 'full': {'key': 'full', 'type': 'PackageDownloadsSensorFull'}, + 'upgrade': {'key': 'upgrade', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsSensor, self).__init__(**kwargs) + self.full = None + self.upgrade = kwargs.get('upgrade', None) + + +class PackageDownloadsSensorFull(msrest.serialization.Model): + """Contains full package downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar iso: Contains all ISO full versions for the sensor. + :vartype iso: list[~azure.mgmt.security.models.PackageDownloadInfo] + :param ovf: Contains all OVF (virtual machine) full versions for the sensor. + :type ovf: ~azure.mgmt.security.models.PackageDownloadsSensorFullOvf + """ + + _validation = { + 'iso': {'readonly': True}, + } + + _attribute_map = { + 'iso': {'key': 'iso', 'type': '[PackageDownloadInfo]'}, + 'ovf': {'key': 'ovf', 'type': 'PackageDownloadsSensorFullOvf'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsSensorFull, self).__init__(**kwargs) + self.iso = None + self.ovf = kwargs.get('ovf', None) + + +class PackageDownloadsSensorFullOvf(msrest.serialization.Model): + """Contains all OVF (virtual machine) full versions for the sensor. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar enterprise: Enterprise package type. + :vartype enterprise: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar medium: Medium package type. + :vartype medium: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar line: Line package type. + :vartype line: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'enterprise': {'readonly': True}, + 'medium': {'readonly': True}, + 'line': {'readonly': True}, + } + + _attribute_map = { + 'enterprise': {'key': 'enterprise', 'type': '[PackageDownloadInfo]'}, + 'medium': {'key': 'medium', 'type': '[PackageDownloadInfo]'}, + 'line': {'key': 'line', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsSensorFullOvf, self).__init__(**kwargs) + self.enterprise = None + self.medium = None + self.line = None + + +class PackageDownloadsThreatIntelligence(msrest.serialization.Model): + """All downloads for threat intelligence. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar link: Download link. + :vartype link: str """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'alert_type': {'readonly': True}, - 'alert_display_name': {'readonly': True}, - 'aggregated_date_utc': {'readonly': True}, - 'vendor_name': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'remediation_steps': {'readonly': True}, - 'description': {'readonly': True}, - 'count': {'readonly': True}, - 'effected_resource_type': {'readonly': True}, - 'system_source': {'readonly': True}, - 'action_taken': {'readonly': True}, - 'log_analytics_query': {'readonly': True}, + 'link': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsThreatIntelligence, self).__init__(**kwargs) + self.link = None + + +class PathRecommendation(msrest.serialization.Model): + """Represents a path that is recommended to be allowed and its properties. + + :param path: The full path of the file, or an identifier of the application. + :type path: str + :param action: The recommendation action of the machine or rule. Possible values include: + "Recommended", "Add", "Remove". + :type action: str or ~azure.mgmt.security.models.RecommendationAction + :param type: The type of IoT Security recommendation. Possible values include: + "IoT_ACRAuthentication", "IoT_AgentSendsUnutilizedMessages", "IoT_Baseline", + "IoT_EdgeHubMemOptimize", "IoT_EdgeLoggingOptions", "IoT_InconsistentModuleSettings", + "IoT_InstallAgent", "IoT_IPFilter_DenyAll", "IoT_IPFilter_PermissiveRule", "IoT_OpenPorts", + "IoT_PermissiveFirewallPolicy", "IoT_PermissiveInputFirewallRules", + "IoT_PermissiveOutputFirewallRules", "IoT_PrivilegedDockerOptions", "IoT_SharedCredentials", + "IoT_VulnerableTLSCipherSuite". + :type type: str or ~azure.mgmt.security.models.RecommendationType + :param publisher_info: Represents the publisher information of a process/rule. + :type publisher_info: ~azure.mgmt.security.models.PublisherInfo + :param common: Whether the application is commonly run on the machine. + :type common: bool + :param user_sids: + :type user_sids: list[str] + :param usernames: + :type usernames: list[~azure.mgmt.security.models.UserRecommendation] + :param file_type: The type of the file (for Linux files - Executable is used). Possible values + include: "Exe", "Dll", "Msi", "Script", "Executable", "Unknown". + :type file_type: str or ~azure.mgmt.security.models.FileType + :param configuration_status: The configuration status of the machines group or machine or rule. + Possible values include: "Configured", "NotConfigured", "InProgress", "Failed", "NoStatus". + :type configuration_status: str or ~azure.mgmt.security.models.ConfigurationStatus + """ + + _attribute_map = { + 'path': {'key': 'path', 'type': 'str'}, + 'action': {'key': 'action', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, - 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, - 'aggregated_date_utc': {'key': 'properties.aggregatedDateUtc', 'type': 'date'}, - 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, - 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, - 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'count': {'key': 'properties.count', 'type': 'int'}, - 'effected_resource_type': {'key': 'properties.effectedResourceType', 'type': 'str'}, - 'system_source': {'key': 'properties.systemSource', 'type': 'str'}, - 'action_taken': {'key': 'properties.actionTaken', 'type': 'str'}, - 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + 'publisher_info': {'key': 'publisherInfo', 'type': 'PublisherInfo'}, + 'common': {'key': 'common', 'type': 'bool'}, + 'user_sids': {'key': 'userSids', 'type': '[str]'}, + 'usernames': {'key': 'usernames', 'type': '[UserRecommendation]'}, + 'file_type': {'key': 'fileType', 'type': 'str'}, + 'configuration_status': {'key': 'configurationStatus', 'type': 'str'}, } - def __init__(self, **kwargs): - super(IoTSecurityAggregatedAlert, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.tags = kwargs.get('tags', None) - self.alert_type = None - self.alert_display_name = None - self.aggregated_date_utc = None - self.vendor_name = None - self.reported_severity = None - self.remediation_steps = None - self.description = None - self.count = None - self.effected_resource_type = None - self.system_source = None - self.action_taken = None - self.log_analytics_query = None + def __init__( + self, + **kwargs + ): + super(PathRecommendation, self).__init__(**kwargs) + self.path = kwargs.get('path', None) + self.action = kwargs.get('action', None) + self.type = kwargs.get('type', None) + self.publisher_info = kwargs.get('publisher_info', None) + self.common = kwargs.get('common', None) + self.user_sids = kwargs.get('user_sids', None) + self.usernames = kwargs.get('usernames', None) + self.file_type = kwargs.get('file_type', None) + self.configuration_status = kwargs.get('configuration_status', None) -class IoTSecurityAggregatedRecommendation(Model): - """Security Solution Recommendation Information. +class Pricing(Resource): + """Azure Security Center is provided in two pricing tiers: free and standard, with the standard tier available with a trial period. The standard tier offers advanced security capabilities, while the free tier offers basic security features. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param tags: Resource tags - :type tags: dict[str, str] - :param recommendation_name: Name of the recommendation - :type recommendation_name: str - :ivar recommendation_display_name: Display name of the recommendation - type. - :vartype recommendation_display_name: str - :ivar description: Description of the incident and what it means - :vartype description: str - :ivar recommendation_type_id: The recommendation-type GUID. - :vartype recommendation_type_id: str - :ivar detected_by: Name of the vendor that discovered the issue - :vartype detected_by: str - :ivar remediation_steps: Recommended steps for remediation - :vartype remediation_steps: str - :ivar reported_severity: Estimated severity of this recommendation. - Possible values include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar healthy_devices: the number of the healthy devices within the - solution - :vartype healthy_devices: int - :ivar unhealthy_device_count: the number of the unhealthy devices within - the solution - :vartype unhealthy_device_count: int - :ivar log_analytics_query: query in log analytics to get the list of - affected devices/alerts - :vartype log_analytics_query: str + :param pricing_tier: The pricing tier value. Azure Security Center is provided in two pricing + tiers: free and standard, with the standard tier available with a trial period. The standard + tier offers advanced security capabilities, while the free tier offers basic security features. + Possible values include: "Free", "Standard". + :type pricing_tier: str or ~azure.mgmt.security.models.PricingTier + :ivar free_trial_remaining_time: The duration left for the subscriptions free trial period - in + ISO 8601 format (e.g. P3Y6M4DT12H30M5S). + :vartype free_trial_remaining_time: ~datetime.timedelta """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'recommendation_display_name': {'readonly': True}, - 'description': {'readonly': True}, - 'recommendation_type_id': {'readonly': True}, - 'detected_by': {'readonly': True}, - 'remediation_steps': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'healthy_devices': {'readonly': True}, - 'unhealthy_device_count': {'readonly': True}, - 'log_analytics_query': {'readonly': True}, + 'free_trial_remaining_time': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'recommendation_name': {'key': 'properties.recommendationName', 'type': 'str'}, - 'recommendation_display_name': {'key': 'properties.recommendationDisplayName', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'recommendation_type_id': {'key': 'properties.recommendationTypeId', 'type': 'str'}, - 'detected_by': {'key': 'properties.detectedBy', 'type': 'str'}, - 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, - 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, - 'healthy_devices': {'key': 'properties.healthyDevices', 'type': 'int'}, - 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, - 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + 'pricing_tier': {'key': 'properties.pricingTier', 'type': 'str'}, + 'free_trial_remaining_time': {'key': 'properties.freeTrialRemainingTime', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(IoTSecurityAggregatedRecommendation, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.tags = kwargs.get('tags', None) - self.recommendation_name = kwargs.get('recommendation_name', None) - self.recommendation_display_name = None - self.description = None - self.recommendation_type_id = None - self.detected_by = None - self.remediation_steps = None - self.reported_severity = None - self.healthy_devices = None - self.unhealthy_device_count = None - self.log_analytics_query = None + def __init__( + self, + **kwargs + ): + super(Pricing, self).__init__(**kwargs) + self.pricing_tier = kwargs.get('pricing_tier', None) + self.free_trial_remaining_time = None -class IoTSecurityAlertedDevice(Model): - """Statistic information about the number of alerts per device during the last - period. +class PricingList(msrest.serialization.Model): + """List of pricing configurations response. - Variables are only populated by the server, and will be ignored when - sending a request. + All required parameters must be populated in order to send to Azure. - :ivar device_id: Name of the alert type - :vartype device_id: str - :ivar alerts_count: the number of alerts raised for this device - :vartype alerts_count: int + :param value: Required. List of pricing configurations. + :type value: list[~azure.mgmt.security.models.Pricing] """ _validation = { - 'device_id': {'readonly': True}, - 'alerts_count': {'readonly': True}, + 'value': {'required': True}, } _attribute_map = { - 'device_id': {'key': 'deviceId', 'type': 'str'}, - 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + 'value': {'key': 'value', 'type': '[Pricing]'}, } - def __init__(self, **kwargs): - super(IoTSecurityAlertedDevice, self).__init__(**kwargs) - self.device_id = None - self.alerts_count = None + def __init__( + self, + **kwargs + ): + super(PricingList, self).__init__(**kwargs) + self.value = kwargs['value'] -class IoTSecurityAlertedDevicesList(Model): - """List of devices with the count of raised alerts. +class ProcessNotAllowed(AllowlistCustomAlertRule): + """Execution of a process that isn't allowed. Allow list consists of process names to allow. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param value: Required. List of aggregated alerts data - :type value: list[~azure.mgmt.security.models.IoTSecurityAlertedDevice] + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] """ _validation = { - 'value': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, } _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecurityAlertedDevice]'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(ProcessNotAllowed, self).__init__(**kwargs) + self.rule_type = 'ProcessNotAllowed' # type: str + self.rule_type = 'ProcessNotAllowed' # type: str + + +class ProtectionMode(msrest.serialization.Model): + """The protection mode of the collection/file types. Exe/Msi/Script are used for Windows, Executable is used for Linux. + + :param exe: The application control policy enforcement/protection mode of the machine group. + Possible values include: "Audit", "Enforce", "None". + :type exe: str or ~azure.mgmt.security.models.EnforcementMode + :param msi: The application control policy enforcement/protection mode of the machine group. + Possible values include: "Audit", "Enforce", "None". + :type msi: str or ~azure.mgmt.security.models.EnforcementMode + :param script: The application control policy enforcement/protection mode of the machine group. + Possible values include: "Audit", "Enforce", "None". + :type script: str or ~azure.mgmt.security.models.EnforcementMode + :param executable: The application control policy enforcement/protection mode of the machine + group. Possible values include: "Audit", "Enforce", "None". + :type executable: str or ~azure.mgmt.security.models.EnforcementMode + """ + + _attribute_map = { + 'exe': {'key': 'exe', 'type': 'str'}, + 'msi': {'key': 'msi', 'type': 'str'}, + 'script': {'key': 'script', 'type': 'str'}, + 'executable': {'key': 'executable', 'type': 'str'}, } - def __init__(self, **kwargs): - super(IoTSecurityAlertedDevicesList, self).__init__(**kwargs) - self.value = kwargs.get('value', None) + def __init__( + self, + **kwargs + ): + super(ProtectionMode, self).__init__(**kwargs) + self.exe = kwargs.get('exe', None) + self.msi = kwargs.get('msi', None) + self.script = kwargs.get('script', None) + self.executable = kwargs.get('executable', None) -class IoTSecurityDeviceAlert(Model): - """Statistic information about the number of alerts per alert type during the - last period. +class Protocol(msrest.serialization.Model): + """Protocol data. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar alert_display_name: Display name of the alert - :vartype alert_display_name: str - :ivar reported_severity: Estimated severity of this alert. Possible values - include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar alerts_count: the number of alerts raised for this alert type - :vartype alerts_count: int + :ivar name: Protocol name. + :vartype name: str + :param identifiers: list of protocol identifiers. + :type identifiers: str """ _validation = { - 'alert_display_name': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'alerts_count': {'readonly': True}, + 'name': {'readonly': True}, } _attribute_map = { - 'alert_display_name': {'key': 'alertDisplayName', 'type': 'str'}, - 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, - 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + 'name': {'key': 'name', 'type': 'str'}, + 'identifiers': {'key': 'identifiers', 'type': 'str'}, } - def __init__(self, **kwargs): - super(IoTSecurityDeviceAlert, self).__init__(**kwargs) - self.alert_display_name = None - self.reported_severity = None - self.alerts_count = None - - -class IoTSecurityDeviceAlertsList(Model): - """List of alerts with the count of raised alerts. + def __init__( + self, + **kwargs + ): + super(Protocol, self).__init__(**kwargs) + self.name = None + self.identifiers = kwargs.get('identifiers', None) - Variables are only populated by the server, and will be ignored when - sending a request. - All required parameters must be populated in order to send to Azure. +class ProxyServerProperties(msrest.serialization.Model): + """For a non-Azure machine that is not connected directly to the internet, specify a proxy server that the non-Azure machine can use. - :param value: Required. List of top alerts data - :type value: list[~azure.mgmt.security.models.IoTSecurityDeviceAlert] - :ivar next_link: The URI to fetch the next page. - :vartype next_link: str + :param ip: Proxy server IP. + :type ip: str + :param port: Proxy server port. + :type port: str """ - _validation = { - 'value': {'required': True}, - 'next_link': {'readonly': True}, + _attribute_map = { + 'ip': {'key': 'ip', 'type': 'str'}, + 'port': {'key': 'port', 'type': 'str'}, } + def __init__( + self, + **kwargs + ): + super(ProxyServerProperties, self).__init__(**kwargs) + self.ip = kwargs.get('ip', None) + self.port = kwargs.get('port', None) + + +class PublisherInfo(msrest.serialization.Model): + """Represents the publisher information of a process/rule. + + :param publisher_name: The Subject field of the x.509 certificate used to sign the code, using + the following fields - O = Organization, L = Locality, S = State or Province, and C = Country. + :type publisher_name: str + :param product_name: The product name taken from the file's version resource. + :type product_name: str + :param binary_name: The "OriginalName" field taken from the file's version resource. + :type binary_name: str + :param version: The binary file version taken from the file's version resource. + :type version: str + """ + _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecurityDeviceAlert]'}, - 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'publisher_name': {'key': 'publisherName', 'type': 'str'}, + 'product_name': {'key': 'productName', 'type': 'str'}, + 'binary_name': {'key': 'binaryName', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, } - def __init__(self, **kwargs): - super(IoTSecurityDeviceAlertsList, self).__init__(**kwargs) - self.value = kwargs.get('value', None) - self.next_link = None + def __init__( + self, + **kwargs + ): + super(PublisherInfo, self).__init__(**kwargs) + self.publisher_name = kwargs.get('publisher_name', None) + self.product_name = kwargs.get('product_name', None) + self.binary_name = kwargs.get('binary_name', None) + self.version = kwargs.get('version', None) -class IoTSecurityDeviceRecommendation(Model): - """Statistic information about the number of recommendations per - recommendation type. +class QueuePurgesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device queue purges is not in allowed range. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar recommendation_display_name: Display name of the recommendation - :vartype recommendation_display_name: str - :ivar reported_severity: Estimated severity of this recommendation. - Possible values include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar devices_count: the number of device with this recommendation - :vartype devices_count: int + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'recommendation_display_name': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'devices_count': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'recommendation_display_name': {'key': 'recommendationDisplayName', 'type': 'str'}, - 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, - 'devices_count': {'key': 'devicesCount', 'type': 'int'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, **kwargs): - super(IoTSecurityDeviceRecommendation, self).__init__(**kwargs) - self.recommendation_display_name = None - self.reported_severity = None - self.devices_count = None + def __init__( + self, + **kwargs + ): + super(QueuePurgesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'QueuePurgesNotInAllowedRange' # type: str + self.rule_type = 'QueuePurgesNotInAllowedRange' # type: str + +class RecommendationConfigurationProperties(msrest.serialization.Model): + """The type of IoT Security recommendation. -class IoTSecurityDeviceRecommendationsList(Model): - """List of recommendations with the count of devices. + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param value: Required. List of aggregated recommendation data - :type value: - list[~azure.mgmt.security.models.IoTSecurityDeviceRecommendation] + :param recommendation_type: Required. The type of IoT Security recommendation. Possible values + include: "IoT_ACRAuthentication", "IoT_AgentSendsUnutilizedMessages", "IoT_Baseline", + "IoT_EdgeHubMemOptimize", "IoT_EdgeLoggingOptions", "IoT_InconsistentModuleSettings", + "IoT_InstallAgent", "IoT_IPFilter_DenyAll", "IoT_IPFilter_PermissiveRule", "IoT_OpenPorts", + "IoT_PermissiveFirewallPolicy", "IoT_PermissiveInputFirewallRules", + "IoT_PermissiveOutputFirewallRules", "IoT_PrivilegedDockerOptions", "IoT_SharedCredentials", + "IoT_VulnerableTLSCipherSuite". + :type recommendation_type: str or ~azure.mgmt.security.models.RecommendationType + :ivar name: + :vartype name: str + :param status: Required. Recommendation status. When the recommendation status is disabled + recommendations are not generated. Possible values include: "Disabled", "Enabled". Default + value: "Enabled". + :type status: str or ~azure.mgmt.security.models.RecommendationConfigStatus """ _validation = { - 'value': {'required': True}, + 'recommendation_type': {'required': True}, + 'name': {'readonly': True}, + 'status': {'required': True}, } _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecurityDeviceRecommendation]'}, + 'recommendation_type': {'key': 'recommendationType', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, } - def __init__(self, **kwargs): - super(IoTSecurityDeviceRecommendationsList, self).__init__(**kwargs) - self.value = kwargs.get('value', None) + def __init__( + self, + **kwargs + ): + super(RecommendationConfigurationProperties, self).__init__(**kwargs) + self.recommendation_type = kwargs['recommendation_type'] + self.name = None + self.status = kwargs.get('status', "Enabled") -class IoTSecuritySolutionAnalyticsModel(Resource): - """Security Analytics of a security solution. +class RegulatoryComplianceAssessment(Resource): + """Regulatory compliance assessment details and state. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar metrics: Security Analytics of a security solution - :vartype metrics: ~azure.mgmt.security.models.IoTSeverityMetrics - :ivar unhealthy_device_count: number of unhealthy devices - :vartype unhealthy_device_count: int - :ivar devices_metrics: The list of devices metrics by the aggregated date. - :vartype devices_metrics: - list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem] - :param top_alerted_devices: The list of top 3 devices with the most - attacked. - :type top_alerted_devices: - ~azure.mgmt.security.models.IoTSecurityAlertedDevicesList - :param most_prevalent_device_alerts: The list of most prevalent 3 alerts. - :type most_prevalent_device_alerts: - ~azure.mgmt.security.models.IoTSecurityDeviceAlertsList - :param most_prevalent_device_recommendations: The list of most prevalent 3 - recommendations. - :type most_prevalent_device_recommendations: - ~azure.mgmt.security.models.IoTSecurityDeviceRecommendationsList + :ivar description: The description of the regulatory compliance assessment. + :vartype description: str + :ivar assessment_type: The expected type of assessment contained in the AssessmentDetailsLink. + :vartype assessment_type: str + :ivar assessment_details_link: Link to more detailed assessment results data. The response type + will be according to the assessmentType field. + :vartype assessment_details_link: str + :param state: Aggregative state based on the assessment's scanned resources states. Possible + values include: "Passed", "Failed", "Skipped", "Unsupported". + :type state: str or ~azure.mgmt.security.models.State + :ivar passed_resources: The given assessment's related resources count with passed state. + :vartype passed_resources: int + :ivar failed_resources: The given assessment's related resources count with failed state. + :vartype failed_resources: int + :ivar skipped_resources: The given assessment's related resources count with skipped state. + :vartype skipped_resources: int + :ivar unsupported_resources: The given assessment's related resources count with unsupported + state. + :vartype unsupported_resources: int """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'metrics': {'readonly': True}, - 'unhealthy_device_count': {'readonly': True}, - 'devices_metrics': {'readonly': True}, + 'description': {'readonly': True}, + 'assessment_type': {'readonly': True}, + 'assessment_details_link': {'readonly': True}, + 'passed_resources': {'readonly': True}, + 'failed_resources': {'readonly': True}, + 'skipped_resources': {'readonly': True}, + 'unsupported_resources': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'metrics': {'key': 'properties.metrics', 'type': 'IoTSeverityMetrics'}, - 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, - 'devices_metrics': {'key': 'properties.devicesMetrics', 'type': '[IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem]'}, - 'top_alerted_devices': {'key': 'properties.topAlertedDevices', 'type': 'IoTSecurityAlertedDevicesList'}, - 'most_prevalent_device_alerts': {'key': 'properties.mostPrevalentDeviceAlerts', 'type': 'IoTSecurityDeviceAlertsList'}, - 'most_prevalent_device_recommendations': {'key': 'properties.mostPrevalentDeviceRecommendations', 'type': 'IoTSecurityDeviceRecommendationsList'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'assessment_type': {'key': 'properties.assessmentType', 'type': 'str'}, + 'assessment_details_link': {'key': 'properties.assessmentDetailsLink', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'passed_resources': {'key': 'properties.passedResources', 'type': 'int'}, + 'failed_resources': {'key': 'properties.failedResources', 'type': 'int'}, + 'skipped_resources': {'key': 'properties.skippedResources', 'type': 'int'}, + 'unsupported_resources': {'key': 'properties.unsupportedResources', 'type': 'int'}, } - def __init__(self, **kwargs): - super(IoTSecuritySolutionAnalyticsModel, self).__init__(**kwargs) - self.metrics = None - self.unhealthy_device_count = None - self.devices_metrics = None - self.top_alerted_devices = kwargs.get('top_alerted_devices', None) - self.most_prevalent_device_alerts = kwargs.get('most_prevalent_device_alerts', None) - self.most_prevalent_device_recommendations = kwargs.get('most_prevalent_device_recommendations', None) + def __init__( + self, + **kwargs + ): + super(RegulatoryComplianceAssessment, self).__init__(**kwargs) + self.description = None + self.assessment_type = None + self.assessment_details_link = None + self.state = kwargs.get('state', None) + self.passed_resources = None + self.failed_resources = None + self.skipped_resources = None + self.unsupported_resources = None -class IoTSecuritySolutionAnalyticsModelList(Model): - """List of Security Analytics of a security solution. +class RegulatoryComplianceAssessmentList(msrest.serialization.Model): + """List of regulatory compliance assessment response. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param value: Required. List of Security Analytics of a security solution - :type value: - list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel] + :param value: Required. + :type value: list[~azure.mgmt.security.models.RegulatoryComplianceAssessment] :ivar next_link: The URI to fetch the next page. :vartype next_link: str """ @@ -1900,1077 +7715,1371 @@ class IoTSecuritySolutionAnalyticsModelList(Model): } _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecuritySolutionAnalyticsModel]'}, + 'value': {'key': 'value', 'type': '[RegulatoryComplianceAssessment]'}, 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(IoTSecuritySolutionAnalyticsModelList, self).__init__(**kwargs) - self.value = kwargs.get('value', None) + def __init__( + self, + **kwargs + ): + super(RegulatoryComplianceAssessmentList, self).__init__(**kwargs) + self.value = kwargs['value'] self.next_link = None -class IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem(Model): - """IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem. - - :param date_property: the date of the metrics - :type date_property: datetime - :param devices_metrics: devices alerts count by severity. - :type devices_metrics: ~azure.mgmt.security.models.IoTSeverityMetrics - """ - - _attribute_map = { - 'date_property': {'key': 'date', 'type': 'iso-8601'}, - 'devices_metrics': {'key': 'devicesMetrics', 'type': 'IoTSeverityMetrics'}, - } - - def __init__(self, **kwargs): - super(IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem, self).__init__(**kwargs) - self.date_property = kwargs.get('date_property', None) - self.devices_metrics = kwargs.get('devices_metrics', None) - - -class IoTSecuritySolutionModel(Model): - """Security Solution. - - Variables are only populated by the server, and will be ignored when - sending a request. +class RegulatoryComplianceControl(Resource): + """Regulatory compliance control details and state. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param tags: Resource tags - :type tags: dict[str, str] - :param location: The resource location. - :type location: str - :param workspace: Required. Workspace resource ID - :type workspace: str - :param display_name: Required. Resource display name. - :type display_name: str - :param status: Security solution status. Possible values include: - 'Enabled', 'Disabled'. Default value: "Enabled" . - :type status: str or ~azure.mgmt.security.models.SecuritySolutionStatus - :param export: List of additional export to workspace data options - :type export: list[str or ~azure.mgmt.security.models.ExportData] - :param disabled_data_sources: Disabled data sources. Disabling these data - sources compromises the system. - :type disabled_data_sources: list[str or - ~azure.mgmt.security.models.DataSource] - :param iot_hubs: Required. IoT Hub resource IDs - :type iot_hubs: list[str] - :param user_defined_resources: - :type user_defined_resources: - ~azure.mgmt.security.models.UserDefinedResourcesProperties - :ivar auto_discovered_resources: List of resources that were automatically - discovered as relevant to the security solution. - :vartype auto_discovered_resources: list[str] - :param recommendations_configuration: - :type recommendations_configuration: - list[~azure.mgmt.security.models.RecommendationConfigurationProperties] + :ivar description: The description of the regulatory compliance control. + :vartype description: str + :param state: Aggregative state based on the control's supported assessments states. Possible + values include: "Passed", "Failed", "Skipped", "Unsupported". + :type state: str or ~azure.mgmt.security.models.State + :ivar passed_assessments: The number of supported regulatory compliance assessments of the + given control with a passed state. + :vartype passed_assessments: int + :ivar failed_assessments: The number of supported regulatory compliance assessments of the + given control with a failed state. + :vartype failed_assessments: int + :ivar skipped_assessments: The number of supported regulatory compliance assessments of the + given control with a skipped state. + :vartype skipped_assessments: int """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'workspace': {'required': True}, - 'display_name': {'required': True}, - 'iot_hubs': {'required': True}, - 'auto_discovered_resources': {'readonly': True}, + 'description': {'readonly': True}, + 'passed_assessments': {'readonly': True}, + 'failed_assessments': {'readonly': True}, + 'skipped_assessments': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'location': {'key': 'location', 'type': 'str'}, - 'workspace': {'key': 'properties.workspace', 'type': 'str'}, - 'display_name': {'key': 'properties.displayName', 'type': 'str'}, - 'status': {'key': 'properties.status', 'type': 'str'}, - 'export': {'key': 'properties.export', 'type': '[str]'}, - 'disabled_data_sources': {'key': 'properties.disabledDataSources', 'type': '[str]'}, - 'iot_hubs': {'key': 'properties.iotHubs', 'type': '[str]'}, - 'user_defined_resources': {'key': 'properties.userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, - 'auto_discovered_resources': {'key': 'properties.autoDiscoveredResources', 'type': '[str]'}, - 'recommendations_configuration': {'key': 'properties.recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'passed_assessments': {'key': 'properties.passedAssessments', 'type': 'int'}, + 'failed_assessments': {'key': 'properties.failedAssessments', 'type': 'int'}, + 'skipped_assessments': {'key': 'properties.skippedAssessments', 'type': 'int'}, } - def __init__(self, **kwargs): - super(IoTSecuritySolutionModel, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.tags = kwargs.get('tags', None) - self.location = kwargs.get('location', None) - self.workspace = kwargs.get('workspace', None) - self.display_name = kwargs.get('display_name', None) - self.status = kwargs.get('status', "Enabled") - self.export = kwargs.get('export', None) - self.disabled_data_sources = kwargs.get('disabled_data_sources', None) - self.iot_hubs = kwargs.get('iot_hubs', None) - self.user_defined_resources = kwargs.get('user_defined_resources', None) - self.auto_discovered_resources = None - self.recommendations_configuration = kwargs.get('recommendations_configuration', None) + def __init__( + self, + **kwargs + ): + super(RegulatoryComplianceControl, self).__init__(**kwargs) + self.description = None + self.state = kwargs.get('state', None) + self.passed_assessments = None + self.failed_assessments = None + self.skipped_assessments = None -class IoTSeverityMetrics(Model): - """Severity metrics. +class RegulatoryComplianceControlList(msrest.serialization.Model): + """List of regulatory compliance controls response. - :param high: count of high severity items - :type high: int - :param medium: count of medium severity items - :type medium: int - :param low: count of low severity items - :type low: int + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of regulatory compliance controls. + :type value: list[~azure.mgmt.security.models.RegulatoryComplianceControl] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ - _attribute_map = { - 'high': {'key': 'high', 'type': 'int'}, - 'medium': {'key': 'medium', 'type': 'int'}, - 'low': {'key': 'low', 'type': 'int'}, + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, } - def __init__(self, **kwargs): - super(IoTSeverityMetrics, self).__init__(**kwargs) - self.high = kwargs.get('high', None) - self.medium = kwargs.get('medium', None) - self.low = kwargs.get('low', None) + _attribute_map = { + 'value': {'key': 'value', 'type': '[RegulatoryComplianceControl]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + def __init__( + self, + **kwargs + ): + super(RegulatoryComplianceControlList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None -class JitNetworkAccessPolicy(Model): - """JitNetworkAccessPolicy. - Variables are only populated by the server, and will be ignored when - sending a request. +class RegulatoryComplianceStandard(Resource): + """Regulatory compliance standard details and state. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param kind: Kind of the resource - :type kind: str - :ivar location: Location where the resource is stored - :vartype location: str - :param virtual_machines: Required. Configurations for - Microsoft.Compute/virtualMachines resource type. - :type virtual_machines: - list[~azure.mgmt.security.models.JitNetworkAccessPolicyVirtualMachine] - :param requests: - :type requests: list[~azure.mgmt.security.models.JitNetworkAccessRequest] - :ivar provisioning_state: Gets the provisioning state of the Just-in-Time - policy. - :vartype provisioning_state: str + :param state: Aggregative state based on the standard's supported controls states. Possible + values include: "Passed", "Failed", "Skipped", "Unsupported". + :type state: str or ~azure.mgmt.security.models.State + :ivar passed_controls: The number of supported regulatory compliance controls of the given + standard with a passed state. + :vartype passed_controls: int + :ivar failed_controls: The number of supported regulatory compliance controls of the given + standard with a failed state. + :vartype failed_controls: int + :ivar skipped_controls: The number of supported regulatory compliance controls of the given + standard with a skipped state. + :vartype skipped_controls: int + :ivar unsupported_controls: The number of regulatory compliance controls of the given standard + which are unsupported by automated assessments. + :vartype unsupported_controls: int """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'virtual_machines': {'required': True}, - 'provisioning_state': {'readonly': True}, + 'passed_controls': {'readonly': True}, + 'failed_controls': {'readonly': True}, + 'skipped_controls': {'readonly': True}, + 'unsupported_controls': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[JitNetworkAccessPolicyVirtualMachine]'}, - 'requests': {'key': 'properties.requests', 'type': '[JitNetworkAccessRequest]'}, - 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'passed_controls': {'key': 'properties.passedControls', 'type': 'int'}, + 'failed_controls': {'key': 'properties.failedControls', 'type': 'int'}, + 'skipped_controls': {'key': 'properties.skippedControls', 'type': 'int'}, + 'unsupported_controls': {'key': 'properties.unsupportedControls', 'type': 'int'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessPolicy, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.kind = kwargs.get('kind', None) - self.location = None - self.virtual_machines = kwargs.get('virtual_machines', None) - self.requests = kwargs.get('requests', None) - self.provisioning_state = None + def __init__( + self, + **kwargs + ): + super(RegulatoryComplianceStandard, self).__init__(**kwargs) + self.state = kwargs.get('state', None) + self.passed_controls = None + self.failed_controls = None + self.skipped_controls = None + self.unsupported_controls = None -class JitNetworkAccessPolicyInitiatePort(Model): - """JitNetworkAccessPolicyInitiatePort. +class RegulatoryComplianceStandardList(msrest.serialization.Model): + """List of regulatory compliance standards response. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param number: Required. - :type number: int - :param allowed_source_address_prefix: Source of the allowed traffic. If - omitted, the request will be for the source IP address of the initiate - request. - :type allowed_source_address_prefix: str - :param end_time_utc: Required. The time to close the request in UTC - :type end_time_utc: datetime + :param value: Required. + :type value: list[~azure.mgmt.security.models.RegulatoryComplianceStandard] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'number': {'required': True}, - 'end_time_utc': {'required': True}, + 'value': {'required': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'number': {'key': 'number', 'type': 'int'}, - 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, - 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, + 'value': {'key': 'value', 'type': '[RegulatoryComplianceStandard]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessPolicyInitiatePort, self).__init__(**kwargs) - self.number = kwargs.get('number', None) - self.allowed_source_address_prefix = kwargs.get('allowed_source_address_prefix', None) - self.end_time_utc = kwargs.get('end_time_utc', None) - - -class JitNetworkAccessPolicyInitiateRequest(Model): - """JitNetworkAccessPolicyInitiateRequest. + def __init__( + self, + **kwargs + ): + super(RegulatoryComplianceStandardList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None - All required parameters must be populated in order to send to Azure. - :param virtual_machines: Required. A list of virtual machines & ports to - open access for - :type virtual_machines: - list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiateVirtualMachine] +class Rule(msrest.serialization.Model): + """Describes remote addresses that is recommended to communicate with the Azure resource on some (Protocol, Port, Direction). All other remote addresses are recommended to be blocked. + + :param name: The name of the rule. + :type name: str + :param direction: The rule's direction. Possible values include: "Inbound", "Outbound". + :type direction: str or ~azure.mgmt.security.models.Direction + :param destination_port: The rule's destination port. + :type destination_port: int + :param protocols: The rule's transport protocols. + :type protocols: list[str or ~azure.mgmt.security.models.TransportProtocol] + :param ip_addresses: The remote IP addresses that should be able to communicate with the Azure + resource on the rule's destination port and protocol. + :type ip_addresses: list[str] """ _validation = { - 'virtual_machines': {'required': True}, + 'destination_port': {'maximum': 65535, 'minimum': 0}, } _attribute_map = { - 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessPolicyInitiateVirtualMachine]'}, + 'name': {'key': 'name', 'type': 'str'}, + 'direction': {'key': 'direction', 'type': 'str'}, + 'destination_port': {'key': 'destinationPort', 'type': 'int'}, + 'protocols': {'key': 'protocols', 'type': '[str]'}, + 'ip_addresses': {'key': 'ipAddresses', 'type': '[str]'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessPolicyInitiateRequest, self).__init__(**kwargs) - self.virtual_machines = kwargs.get('virtual_machines', None) + def __init__( + self, + **kwargs + ): + super(Rule, self).__init__(**kwargs) + self.name = kwargs.get('name', None) + self.direction = kwargs.get('direction', None) + self.destination_port = kwargs.get('destination_port', None) + self.protocols = kwargs.get('protocols', None) + self.ip_addresses = kwargs.get('ip_addresses', None) -class JitNetworkAccessPolicyInitiateVirtualMachine(Model): - """JitNetworkAccessPolicyInitiateVirtualMachine. +class ScopeElement(msrest.serialization.Model): + """A more specific scope used to identify the alerts to suppress. - All required parameters must be populated in order to send to Azure. + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param field: The alert entity type to suppress by. + :type field: str + """ - :param id: Required. Resource ID of the virtual machine that is linked to - this policy - :type id: str - :param ports: Required. The ports to open for the resource with the `id` - :type ports: - list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiatePort] + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'field': {'key': 'field', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ScopeElement, self).__init__(**kwargs) + self.additional_properties = kwargs.get('additional_properties', None) + self.field = kwargs.get('field', None) + + +class SecureScoreControlDefinitionItem(Resource): + """Information about the security control. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar display_name: User friendly display name of the control. + :vartype display_name: str + :ivar description: User friendly description of the control. + :vartype description: str + :ivar max_score: Maximum control score (0..10). + :vartype max_score: int + :ivar source: Source object from which the control was created. + :vartype source: ~azure.mgmt.security.models.SecureScoreControlDefinitionSource + :ivar assessment_definitions: Array of assessments metadata IDs that are included in this + security control. + :vartype assessment_definitions: list[~azure.mgmt.security.models.AzureResourceLink] """ _validation = { - 'id': {'required': True}, - 'ports': {'required': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True, 'max_length': 256, 'min_length': 0}, + 'max_score': {'readonly': True, 'maximum': 10, 'minimum': 0}, + 'source': {'readonly': True}, + 'assessment_definitions': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPolicyInitiatePort]'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'max_score': {'key': 'properties.maxScore', 'type': 'int'}, + 'source': {'key': 'properties.source', 'type': 'SecureScoreControlDefinitionSource'}, + 'assessment_definitions': {'key': 'properties.assessmentDefinitions', 'type': '[AzureResourceLink]'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessPolicyInitiateVirtualMachine, self).__init__(**kwargs) - self.id = kwargs.get('id', None) - self.ports = kwargs.get('ports', None) + def __init__( + self, + **kwargs + ): + super(SecureScoreControlDefinitionItem, self).__init__(**kwargs) + self.display_name = None + self.description = None + self.max_score = None + self.source = None + self.assessment_definitions = None -class JitNetworkAccessPolicyVirtualMachine(Model): - """JitNetworkAccessPolicyVirtualMachine. +class SecureScoreControlDefinitionList(msrest.serialization.Model): + """List of security controls definition. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param id: Required. Resource ID of the virtual machine that is linked to - this policy - :type id: str - :param ports: Required. Port configurations for the virtual machine - :type ports: list[~azure.mgmt.security.models.JitNetworkAccessPortRule] - :param public_ip_address: Public IP address of the Azure Firewall that is - linked to this policy, if applicable - :type public_ip_address: str + :ivar value: Collection of security controls definition in this page. + :vartype value: list[~azure.mgmt.security.models.SecureScoreControlDefinitionItem] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'id': {'required': True}, - 'ports': {'required': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPortRule]'}, - 'public_ip_address': {'key': 'publicIpAddress', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[SecureScoreControlDefinitionItem]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessPolicyVirtualMachine, self).__init__(**kwargs) - self.id = kwargs.get('id', None) - self.ports = kwargs.get('ports', None) - self.public_ip_address = kwargs.get('public_ip_address', None) - + def __init__( + self, + **kwargs + ): + super(SecureScoreControlDefinitionList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class JitNetworkAccessPortRule(Model): - """JitNetworkAccessPortRule. - All required parameters must be populated in order to send to Azure. +class SecureScoreControlDefinitionSource(msrest.serialization.Model): + """The type of the security control (For example, BuiltIn). - :param number: Required. - :type number: int - :param protocol: Required. Possible values include: 'TCP', 'UDP', 'All' - :type protocol: str or ~azure.mgmt.security.models.Protocol - :param allowed_source_address_prefix: Mutually exclusive with the - "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, - for example "192.168.0.3" or "192.168.0.0/16". - :type allowed_source_address_prefix: str - :param allowed_source_address_prefixes: Mutually exclusive with the - "allowedSourceAddressPrefix" parameter. - :type allowed_source_address_prefixes: list[str] - :param max_request_access_duration: Required. Maximum duration requests - can be made for. In ISO 8601 duration format. Minimum 5 minutes, maximum 1 - day - :type max_request_access_duration: str + :param source_type: The type of security control (for example, BuiltIn). Possible values + include: "BuiltIn", "Custom". + :type source_type: str or ~azure.mgmt.security.models.ControlType """ - _validation = { - 'number': {'required': True}, - 'protocol': {'required': True}, - 'max_request_access_duration': {'required': True}, - } - _attribute_map = { - 'number': {'key': 'number', 'type': 'int'}, - 'protocol': {'key': 'protocol', 'type': 'str'}, - 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, - 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, - 'max_request_access_duration': {'key': 'maxRequestAccessDuration', 'type': 'str'}, + 'source_type': {'key': 'sourceType', 'type': 'str'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessPortRule, self).__init__(**kwargs) - self.number = kwargs.get('number', None) - self.protocol = kwargs.get('protocol', None) - self.allowed_source_address_prefix = kwargs.get('allowed_source_address_prefix', None) - self.allowed_source_address_prefixes = kwargs.get('allowed_source_address_prefixes', None) - self.max_request_access_duration = kwargs.get('max_request_access_duration', None) + def __init__( + self, + **kwargs + ): + super(SecureScoreControlDefinitionSource, self).__init__(**kwargs) + self.source_type = kwargs.get('source_type', None) -class JitNetworkAccessRequest(Model): - """JitNetworkAccessRequest. +class SecureScoreControlDetails(Resource): + """Details of the security control, its score, and the health status of the relevant resources. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param virtual_machines: Required. - :type virtual_machines: - list[~azure.mgmt.security.models.JitNetworkAccessRequestVirtualMachine] - :param start_time_utc: Required. The start time of the request in UTC - :type start_time_utc: datetime - :param requestor: Required. The identity of the person who made the - request - :type requestor: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar display_name: User friendly display name of the control. + :vartype display_name: str + :ivar healthy_resource_count: Number of healthy resources in the control. + :vartype healthy_resource_count: int + :ivar unhealthy_resource_count: Number of unhealthy resources in the control. + :vartype unhealthy_resource_count: int + :ivar not_applicable_resource_count: Number of not applicable resources in the control. + :vartype not_applicable_resource_count: int + :ivar weight: The relative weight for this specific control in each of your subscriptions. Used + when calculating an aggregated score for this control across all of your subscriptions. + :vartype weight: long + :param definition: Information about the security control. + :type definition: ~azure.mgmt.security.models.SecureScoreControlDefinitionItem + :ivar max: Maximum score available. + :vartype max: int + :ivar current: Current score. + :vartype current: float + :ivar percentage: Ratio of the current score divided by the maximum. Rounded to 4 digits after + the decimal point. + :vartype percentage: float """ _validation = { - 'virtual_machines': {'required': True}, - 'start_time_utc': {'required': True}, - 'requestor': {'required': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'healthy_resource_count': {'readonly': True}, + 'unhealthy_resource_count': {'readonly': True}, + 'not_applicable_resource_count': {'readonly': True}, + 'weight': {'readonly': True, 'minimum': 0}, + 'max': {'readonly': True, 'minimum': 0}, + 'current': {'readonly': True, 'minimum': 0}, + 'percentage': {'readonly': True, 'maximum': 1, 'minimum': 0}, } _attribute_map = { - 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessRequestVirtualMachine]'}, - 'start_time_utc': {'key': 'startTimeUtc', 'type': 'iso-8601'}, - 'requestor': {'key': 'requestor', 'type': 'str'}, - } - - def __init__(self, **kwargs): - super(JitNetworkAccessRequest, self).__init__(**kwargs) - self.virtual_machines = kwargs.get('virtual_machines', None) - self.start_time_utc = kwargs.get('start_time_utc', None) - self.requestor = kwargs.get('requestor', None) + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'healthy_resource_count': {'key': 'properties.healthyResourceCount', 'type': 'int'}, + 'unhealthy_resource_count': {'key': 'properties.unhealthyResourceCount', 'type': 'int'}, + 'not_applicable_resource_count': {'key': 'properties.notApplicableResourceCount', 'type': 'int'}, + 'weight': {'key': 'properties.weight', 'type': 'long'}, + 'definition': {'key': 'properties.definition', 'type': 'SecureScoreControlDefinitionItem'}, + 'max': {'key': 'properties.score.max', 'type': 'int'}, + 'current': {'key': 'properties.score.current', 'type': 'float'}, + 'percentage': {'key': 'properties.score.percentage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(SecureScoreControlDetails, self).__init__(**kwargs) + self.display_name = None + self.healthy_resource_count = None + self.unhealthy_resource_count = None + self.not_applicable_resource_count = None + self.weight = None + self.definition = kwargs.get('definition', None) + self.max = None + self.current = None + self.percentage = None -class JitNetworkAccessRequestPort(Model): - """JitNetworkAccessRequestPort. +class SecureScoreControlList(msrest.serialization.Model): + """List of security controls. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param number: Required. - :type number: int - :param allowed_source_address_prefix: Mutually exclusive with the - "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, - for example "192.168.0.3" or "192.168.0.0/16". - :type allowed_source_address_prefix: str - :param allowed_source_address_prefixes: Mutually exclusive with the - "allowedSourceAddressPrefix" parameter. - :type allowed_source_address_prefixes: list[str] - :param end_time_utc: Required. The date & time at which the request ends - in UTC - :type end_time_utc: datetime - :param status: Required. The status of the port. Possible values include: - 'Revoked', 'Initiated' - :type status: str or ~azure.mgmt.security.models.Status - :param status_reason: Required. A description of why the `status` has its - value. Possible values include: 'Expired', 'UserRequested', - 'NewerRequestInitiated' - :type status_reason: str or ~azure.mgmt.security.models.StatusReason - :param mapped_port: The port which is mapped to this port's `number` in - the Azure Firewall, if applicable - :type mapped_port: int + :ivar value: Collection of security controls in this page. + :vartype value: list[~azure.mgmt.security.models.SecureScoreControlDetails] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'number': {'required': True}, - 'end_time_utc': {'required': True}, - 'status': {'required': True}, - 'status_reason': {'required': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'number': {'key': 'number', 'type': 'int'}, - 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, - 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, - 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, - 'status': {'key': 'status', 'type': 'str'}, - 'status_reason': {'key': 'statusReason', 'type': 'str'}, - 'mapped_port': {'key': 'mappedPort', 'type': 'int'}, + 'value': {'key': 'value', 'type': '[SecureScoreControlDetails]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessRequestPort, self).__init__(**kwargs) - self.number = kwargs.get('number', None) - self.allowed_source_address_prefix = kwargs.get('allowed_source_address_prefix', None) - self.allowed_source_address_prefixes = kwargs.get('allowed_source_address_prefixes', None) - self.end_time_utc = kwargs.get('end_time_utc', None) - self.status = kwargs.get('status', None) - self.status_reason = kwargs.get('status_reason', None) - self.mapped_port = kwargs.get('mapped_port', None) + def __init__( + self, + **kwargs + ): + super(SecureScoreControlList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class JitNetworkAccessRequestVirtualMachine(Model): - """JitNetworkAccessRequestVirtualMachine. +class SecureScoreControlScore(msrest.serialization.Model): + """Calculation result data. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param id: Required. Resource ID of the virtual machine that is linked to - this policy - :type id: str - :param ports: Required. The ports that were opened for the virtual machine - :type ports: list[~azure.mgmt.security.models.JitNetworkAccessRequestPort] + :ivar max: Maximum control score (0..10). + :vartype max: int + :ivar current: Actual score for the control = (achieved points / total points) * max score. if + total points is zeroed, the return number is 0.00. + :vartype current: float + :ivar percentage: Ratio of the current score divided by the maximum. Rounded to 4 digits after + the decimal point. + :vartype percentage: float """ _validation = { - 'id': {'required': True}, - 'ports': {'required': True}, + 'max': {'readonly': True, 'maximum': 10, 'minimum': 0}, + 'current': {'readonly': True, 'maximum': 10, 'minimum': 0}, + 'percentage': {'readonly': True, 'maximum': 1, 'minimum': 0}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[JitNetworkAccessRequestPort]'}, + 'max': {'key': 'max', 'type': 'int'}, + 'current': {'key': 'current', 'type': 'float'}, + 'percentage': {'key': 'percentage', 'type': 'float'}, } - def __init__(self, **kwargs): - super(JitNetworkAccessRequestVirtualMachine, self).__init__(**kwargs) - self.id = kwargs.get('id', None) - self.ports = kwargs.get('ports', None) + def __init__( + self, + **kwargs + ): + super(SecureScoreControlScore, self).__init__(**kwargs) + self.max = None + self.current = None + self.percentage = None -class Kind(Model): - """Describes an Azure resource with kind. +class SecureScoreItem(Resource): + """Secure score item data model. - :param kind: Kind of the resource - :type kind: str + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar display_name: The initiative’s name. + :vartype display_name: str + :ivar weight: The relative weight for each subscription. Used when calculating an aggregated + secure score for multiple subscriptions. + :vartype weight: long + :ivar max: Maximum score available. + :vartype max: int + :ivar current: Current score. + :vartype current: float + :ivar percentage: Ratio of the current score divided by the maximum. Rounded to 4 digits after + the decimal point. + :vartype percentage: float """ - _attribute_map = { - 'kind': {'key': 'kind', 'type': 'str'}, + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'weight': {'readonly': True, 'minimum': 0}, + 'max': {'readonly': True, 'minimum': 0}, + 'current': {'readonly': True, 'minimum': 0}, + 'percentage': {'readonly': True, 'maximum': 1, 'minimum': 0}, } - def __init__(self, **kwargs): - super(Kind, self).__init__(**kwargs) - self.kind = kwargs.get('kind', None) + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'weight': {'key': 'properties.weight', 'type': 'long'}, + 'max': {'key': 'properties.score.max', 'type': 'int'}, + 'current': {'key': 'properties.score.current', 'type': 'float'}, + 'percentage': {'key': 'properties.score.percentage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(SecureScoreItem, self).__init__(**kwargs) + self.display_name = None + self.weight = None + self.max = None + self.current = None + self.percentage = None -class Location(Model): - """Describes an Azure resource with location. +class SecureScoresList(msrest.serialization.Model): + """List of secure scores. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar location: Location where the resource is stored - :vartype location: str + :ivar value: Collection of secure scores in this page. + :vartype value: list[~azure.mgmt.security.models.SecureScoreItem] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'location': {'readonly': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'location': {'key': 'location', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[SecureScoreItem]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(Location, self).__init__(**kwargs) - self.location = None + def __init__( + self, + **kwargs + ): + super(SecureScoresList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class Operation(Model): - """Possible operation in the REST API of Microsoft.Security. +class SecurityAssessment(Resource): + """Security assessment on a resource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar name: Name of the operation + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. :vartype name: str - :ivar origin: Where the operation is originated - :vartype origin: str - :param display: - :type display: ~azure.mgmt.security.models.OperationDisplay + :ivar type: Resource type. + :vartype type: str + :param resource_details: Details of the resource that was assessed. + :type resource_details: ~azure.mgmt.security.models.ResourceDetails + :ivar display_name: User friendly display name of the assessment. + :vartype display_name: str + :param status: The result of the assessment. + :type status: ~azure.mgmt.security.models.AssessmentStatus + :param additional_data: Additional data regarding the assessment. + :type additional_data: dict[str, str] + :ivar links: Links relevant to the assessment. + :vartype links: ~azure.mgmt.security.models.AssessmentLinks + :param metadata: Describes properties of an assessment metadata. + :type metadata: ~azure.mgmt.security.models.SecurityAssessmentMetadataProperties + :param partners_data: Data regarding 3rd party partner integration. + :type partners_data: ~azure.mgmt.security.models.SecurityAssessmentPartnerData """ _validation = { + 'id': {'readonly': True}, 'name': {'readonly': True}, - 'origin': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'links': {'readonly': True}, } _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, - 'origin': {'key': 'origin', 'type': 'str'}, - 'display': {'key': 'display', 'type': 'OperationDisplay'}, - } - - def __init__(self, **kwargs): - super(Operation, self).__init__(**kwargs) - self.name = None - self.origin = None - self.display = kwargs.get('display', None) + 'type': {'key': 'type', 'type': 'str'}, + 'resource_details': {'key': 'properties.resourceDetails', 'type': 'ResourceDetails'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'AssessmentStatus'}, + 'additional_data': {'key': 'properties.additionalData', 'type': '{str}'}, + 'links': {'key': 'properties.links', 'type': 'AssessmentLinks'}, + 'metadata': {'key': 'properties.metadata', 'type': 'SecurityAssessmentMetadataProperties'}, + 'partners_data': {'key': 'properties.partnersData', 'type': 'SecurityAssessmentPartnerData'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityAssessment, self).__init__(**kwargs) + self.resource_details = kwargs.get('resource_details', None) + self.display_name = None + self.status = kwargs.get('status', None) + self.additional_data = kwargs.get('additional_data', None) + self.links = None + self.metadata = kwargs.get('metadata', None) + self.partners_data = kwargs.get('partners_data', None) -class OperationDisplay(Model): - """Security operation display. +class SecurityAssessmentList(msrest.serialization.Model): + """Page of a security assessments list. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar provider: The resource provider for the operation. - :vartype provider: str - :ivar resource: The display name of the resource the operation applies to. - :vartype resource: str - :ivar operation: The display name of the security operation. - :vartype operation: str - :ivar description: The description of the operation. - :vartype description: str + :ivar value: Collection of security assessments in this page. + :vartype value: list[~azure.mgmt.security.models.SecurityAssessment] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'provider': {'readonly': True}, - 'resource': {'readonly': True}, - 'operation': {'readonly': True}, - 'description': {'readonly': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'provider': {'key': 'provider', 'type': 'str'}, - 'resource': {'key': 'resource', 'type': 'str'}, - 'operation': {'key': 'operation', 'type': 'str'}, - 'description': {'key': 'description', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[SecurityAssessment]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(OperationDisplay, self).__init__(**kwargs) - self.provider = None - self.resource = None - self.operation = None - self.description = None + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class PathRecommendation(Model): - """Represents a path that is recommended to be allowed and its properties. +class SecurityAssessmentMetadata(Resource): + """Security assessment metadata. - :param path: The full path to whitelist - :type path: str - :param action: Possible values include: 'Recommended', 'Add', 'Remove' - :type action: str or ~azure.mgmt.security.models.enum - :param type: Possible values include: 'File', 'FileHash', - 'PublisherSignature', 'ProductSignature', 'BinarySignature', - 'VersionAndAboveSignature' - :type type: str or ~azure.mgmt.security.models.enum - :param publisher_info: - :type publisher_info: ~azure.mgmt.security.models.PublisherInfo - :param common: Whether the path is commonly run on the machine - :type common: bool - :param user_sids: - :type user_sids: list[str] - :param usernames: - :type usernames: list[~azure.mgmt.security.models.UserRecommendation] - :param file_type: Possible values include: 'Exe', 'Dll', 'Msi', 'Script', - 'Executable', 'Unknown' - :type file_type: str or ~azure.mgmt.security.models.enum - :param configuration_status: Possible values include: 'Configured', - 'NotConfigured', 'InProgress', 'Failed', 'NoStatus' - :type configuration_status: str or ~azure.mgmt.security.models.enum + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param display_name: User friendly display name of the assessment. + :type display_name: str + :ivar policy_definition_id: Azure resource ID of the policy definition that turns this + assessment calculation on. + :vartype policy_definition_id: str + :param description: Human readable description of the assessment. + :type description: str + :param remediation_description: Human readable description of what you should do to mitigate + this security issue. + :type remediation_description: str + :param category: + :type category: list[str or ~azure.mgmt.security.models.Category] + :param severity: The severity level of the assessment. Possible values include: "Low", + "Medium", "High". + :type severity: str or ~azure.mgmt.security.models.Severity + :param user_impact: The user impact of the assessment. Possible values include: "Low", + "Moderate", "High". + :type user_impact: str or ~azure.mgmt.security.models.UserImpact + :param implementation_effort: The implementation effort required to remediate this assessment. + Possible values include: "Low", "Moderate", "High". + :type implementation_effort: str or ~azure.mgmt.security.models.ImplementationEffort + :param threats: + :type threats: list[str or ~azure.mgmt.security.models.Threats] + :param preview: True if this assessment is in preview release status. + :type preview: bool + :param assessment_type: BuiltIn if the assessment based on built-in Azure Policy definition, + Custom if the assessment based on custom Azure Policy definition. Possible values include: + "BuiltIn", "CustomPolicy", "CustomerManaged", "VerifiedPartner". + :type assessment_type: str or ~azure.mgmt.security.models.AssessmentType + :param partner_data: Describes the partner that created the assessment. + :type partner_data: ~azure.mgmt.security.models.SecurityAssessmentMetadataPartnerData """ + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'policy_definition_id': {'readonly': True}, + } + _attribute_map = { - 'path': {'key': 'path', 'type': 'str'}, - 'action': {'key': 'action', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'publisher_info': {'key': 'publisherInfo', 'type': 'PublisherInfo'}, - 'common': {'key': 'common', 'type': 'bool'}, - 'user_sids': {'key': 'userSids', 'type': '[str]'}, - 'usernames': {'key': 'usernames', 'type': '[UserRecommendation]'}, - 'file_type': {'key': 'fileType', 'type': 'str'}, - 'configuration_status': {'key': 'configurationStatus', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'policy_definition_id': {'key': 'properties.policyDefinitionId', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'remediation_description': {'key': 'properties.remediationDescription', 'type': 'str'}, + 'category': {'key': 'properties.category', 'type': '[str]'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'user_impact': {'key': 'properties.userImpact', 'type': 'str'}, + 'implementation_effort': {'key': 'properties.implementationEffort', 'type': 'str'}, + 'threats': {'key': 'properties.threats', 'type': '[str]'}, + 'preview': {'key': 'properties.preview', 'type': 'bool'}, + 'assessment_type': {'key': 'properties.assessmentType', 'type': 'str'}, + 'partner_data': {'key': 'properties.partnerData', 'type': 'SecurityAssessmentMetadataPartnerData'}, } - def __init__(self, **kwargs): - super(PathRecommendation, self).__init__(**kwargs) - self.path = kwargs.get('path', None) - self.action = kwargs.get('action', None) - self.type = kwargs.get('type', None) - self.publisher_info = kwargs.get('publisher_info', None) - self.common = kwargs.get('common', None) - self.user_sids = kwargs.get('user_sids', None) - self.usernames = kwargs.get('usernames', None) - self.file_type = kwargs.get('file_type', None) - self.configuration_status = kwargs.get('configuration_status', None) - - -class Pricing(Resource): - """Pricing tier will be applied for the scope based on the resource ID. - - Variables are only populated by the server, and will be ignored when - sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param pricing_tier: Required. The pricing tier value. Azure Security - Center is provided in two pricing tiers: free and standard, with the - standard tier available with a trial period. The standard tier offers - advanced security capabilities, while the free tier offers basic security - features. Possible values include: 'Free', 'Standard' - :type pricing_tier: str or ~azure.mgmt.security.models.PricingTier - :ivar free_trial_remaining_time: The duration left for the subscriptions - free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S). - :vartype free_trial_remaining_time: timedelta + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentMetadata, self).__init__(**kwargs) + self.display_name = kwargs.get('display_name', None) + self.policy_definition_id = None + self.description = kwargs.get('description', None) + self.remediation_description = kwargs.get('remediation_description', None) + self.category = kwargs.get('category', None) + self.severity = kwargs.get('severity', None) + self.user_impact = kwargs.get('user_impact', None) + self.implementation_effort = kwargs.get('implementation_effort', None) + self.threats = kwargs.get('threats', None) + self.preview = kwargs.get('preview', None) + self.assessment_type = kwargs.get('assessment_type', None) + self.partner_data = kwargs.get('partner_data', None) + + +class SecurityAssessmentMetadataList(msrest.serialization.Model): + """List of security assessment metadata. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.SecurityAssessmentMetadata] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'pricing_tier': {'required': True}, - 'free_trial_remaining_time': {'readonly': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'pricing_tier': {'key': 'properties.pricingTier', 'type': 'str'}, - 'free_trial_remaining_time': {'key': 'properties.freeTrialRemainingTime', 'type': 'duration'}, + 'value': {'key': 'value', 'type': '[SecurityAssessmentMetadata]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(Pricing, self).__init__(**kwargs) - self.pricing_tier = kwargs.get('pricing_tier', None) - self.free_trial_remaining_time = None + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentMetadataList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class PricingList(Model): - """List of pricing configurations response. +class SecurityAssessmentMetadataPartnerData(msrest.serialization.Model): + """Describes the partner that created the assessment. All required parameters must be populated in order to send to Azure. - :param value: Required. List of pricing configurations - :type value: list[~azure.mgmt.security.models.Pricing] + :param partner_name: Required. Name of the company of the partner. + :type partner_name: str + :param product_name: Name of the product of the partner that created the assessment. + :type product_name: str + :param secret: Required. Secret to authenticate the partner and verify it created the + assessment - write only. + :type secret: str """ _validation = { - 'value': {'required': True}, + 'partner_name': {'required': True}, + 'secret': {'required': True}, } _attribute_map = { - 'value': {'key': 'value', 'type': '[Pricing]'}, + 'partner_name': {'key': 'partnerName', 'type': 'str'}, + 'product_name': {'key': 'productName', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, } - def __init__(self, **kwargs): - super(PricingList, self).__init__(**kwargs) - self.value = kwargs.get('value', None) - + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentMetadataPartnerData, self).__init__(**kwargs) + self.partner_name = kwargs['partner_name'] + self.product_name = kwargs.get('product_name', None) + self.secret = kwargs['secret'] -class PublisherInfo(Model): - """Represents the publisher information of a process/rule. - :param publisher_name: The Subject field of the x.509 certificate used to - sign the code, using the following fields - O = Organization, L = - Locality, S = State or Province, and C = Country - :type publisher_name: str - :param product_name: The product name taken from the file's version - resource - :type product_name: str - :param binary_name: The "OriginalName" field taken from the file's version - resource - :type binary_name: str - :param version: The binary file version taken from the file's version - resource - :type version: str - """ +class SecurityAssessmentMetadataProperties(msrest.serialization.Model): + """Describes properties of an assessment metadata. - _attribute_map = { - 'publisher_name': {'key': 'publisherName', 'type': 'str'}, - 'product_name': {'key': 'productName', 'type': 'str'}, - 'binary_name': {'key': 'binaryName', 'type': 'str'}, - 'version': {'key': 'version', 'type': 'str'}, - } + Variables are only populated by the server, and will be ignored when sending a request. - def __init__(self, **kwargs): - super(PublisherInfo, self).__init__(**kwargs) - self.publisher_name = kwargs.get('publisher_name', None) - self.product_name = kwargs.get('product_name', None) - self.binary_name = kwargs.get('binary_name', None) - self.version = kwargs.get('version', None) + All required parameters must be populated in order to send to Azure. + :param display_name: Required. User friendly display name of the assessment. + :type display_name: str + :ivar policy_definition_id: Azure resource ID of the policy definition that turns this + assessment calculation on. + :vartype policy_definition_id: str + :param description: Human readable description of the assessment. + :type description: str + :param remediation_description: Human readable description of what you should do to mitigate + this security issue. + :type remediation_description: str + :param category: + :type category: list[str or ~azure.mgmt.security.models.Category] + :param severity: Required. The severity level of the assessment. Possible values include: + "Low", "Medium", "High". + :type severity: str or ~azure.mgmt.security.models.Severity + :param user_impact: The user impact of the assessment. Possible values include: "Low", + "Moderate", "High". + :type user_impact: str or ~azure.mgmt.security.models.UserImpact + :param implementation_effort: The implementation effort required to remediate this assessment. + Possible values include: "Low", "Moderate", "High". + :type implementation_effort: str or ~azure.mgmt.security.models.ImplementationEffort + :param threats: + :type threats: list[str or ~azure.mgmt.security.models.Threats] + :param preview: True if this assessment is in preview release status. + :type preview: bool + :param assessment_type: Required. BuiltIn if the assessment based on built-in Azure Policy + definition, Custom if the assessment based on custom Azure Policy definition. Possible values + include: "BuiltIn", "CustomPolicy", "CustomerManaged", "VerifiedPartner". + :type assessment_type: str or ~azure.mgmt.security.models.AssessmentType + :param partner_data: Describes the partner that created the assessment. + :type partner_data: ~azure.mgmt.security.models.SecurityAssessmentMetadataPartnerData + """ -class RecommendationConfigurationProperties(Model): - """Recommendation configuration. + _validation = { + 'display_name': {'required': True}, + 'policy_definition_id': {'readonly': True}, + 'severity': {'required': True}, + 'assessment_type': {'required': True}, + } - Variables are only populated by the server, and will be ignored when - sending a request. + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'policy_definition_id': {'key': 'policyDefinitionId', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'remediation_description': {'key': 'remediationDescription', 'type': 'str'}, + 'category': {'key': 'category', 'type': '[str]'}, + 'severity': {'key': 'severity', 'type': 'str'}, + 'user_impact': {'key': 'userImpact', 'type': 'str'}, + 'implementation_effort': {'key': 'implementationEffort', 'type': 'str'}, + 'threats': {'key': 'threats', 'type': '[str]'}, + 'preview': {'key': 'preview', 'type': 'bool'}, + 'assessment_type': {'key': 'assessmentType', 'type': 'str'}, + 'partner_data': {'key': 'partnerData', 'type': 'SecurityAssessmentMetadataPartnerData'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentMetadataProperties, self).__init__(**kwargs) + self.display_name = kwargs['display_name'] + self.policy_definition_id = None + self.description = kwargs.get('description', None) + self.remediation_description = kwargs.get('remediation_description', None) + self.category = kwargs.get('category', None) + self.severity = kwargs['severity'] + self.user_impact = kwargs.get('user_impact', None) + self.implementation_effort = kwargs.get('implementation_effort', None) + self.threats = kwargs.get('threats', None) + self.preview = kwargs.get('preview', None) + self.assessment_type = kwargs['assessment_type'] + self.partner_data = kwargs.get('partner_data', None) + + +class SecurityAssessmentPartnerData(msrest.serialization.Model): + """Data regarding 3rd party partner integration. All required parameters must be populated in order to send to Azure. - :param recommendation_type: Required. The recommendation type. Possible - values include: 'IoT_ACRAuthentication', - 'IoT_AgentSendsUnutilizedMessages', 'IoT_Baseline', - 'IoT_EdgeHubMemOptimize', 'IoT_EdgeLoggingOptions', - 'IoT_InconsistentModuleSettings', 'IoT_InstallAgent', - 'IoT_IPFilter_DenyAll', 'IoT_IPFilter_PermissiveRule', 'IoT_OpenPorts', - 'IoT_PermissiveFirewallPolicy', 'IoT_PermissiveInputFirewallRules', - 'IoT_PermissiveOutputFirewallRules', 'IoT_PrivilegedDockerOptions', - 'IoT_SharedCredentials', 'IoT_VulnerableTLSCipherSuite' - :type recommendation_type: str or - ~azure.mgmt.security.models.RecommendationType - :ivar name: - :vartype name: str - :param status: Required. Recommendation status. The recommendation is not - generated when the status is disabled. Possible values include: - 'Disabled', 'Enabled'. Default value: "Enabled" . - :type status: str or - ~azure.mgmt.security.models.RecommendationConfigStatus + :param partner_name: Required. Name of the company of the partner. + :type partner_name: str + :param secret: Required. secret to authenticate the partner - write only. + :type secret: str """ _validation = { - 'recommendation_type': {'required': True}, - 'name': {'readonly': True}, - 'status': {'required': True}, + 'partner_name': {'required': True}, + 'secret': {'required': True}, } _attribute_map = { - 'recommendation_type': {'key': 'recommendationType', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'status': {'key': 'status', 'type': 'str'}, + 'partner_name': {'key': 'partnerName', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, } - def __init__(self, **kwargs): - super(RecommendationConfigurationProperties, self).__init__(**kwargs) - self.recommendation_type = kwargs.get('recommendation_type', None) - self.name = None - self.status = kwargs.get('status', "Enabled") + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentPartnerData, self).__init__(**kwargs) + self.partner_name = kwargs['partner_name'] + self.secret = kwargs['secret'] -class RegulatoryComplianceAssessment(Resource): - """Regulatory compliance assessment details and state. +class SecurityContact(Resource): + """Contact details for security issues. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar description: The description of the regulatory compliance assessment - :vartype description: str - :ivar assessment_type: The expected type of assessment contained in the - AssessmentDetailsLink - :vartype assessment_type: str - :ivar assessment_details_link: Link to more detailed assessment results - data. The response type will be according to the assessmentType field - :vartype assessment_details_link: str - :param state: Aggregative state based on the assessment's scanned - resources states. Possible values include: 'Passed', 'Failed', 'Skipped', - 'Unsupported' - :type state: str or ~azure.mgmt.security.models.State - :ivar passed_resources: The given assessment's related resources count - with passed state. - :vartype passed_resources: int - :ivar failed_resources: The given assessment's related resources count - with failed state. - :vartype failed_resources: int - :ivar skipped_resources: The given assessment's related resources count - with skipped state. - :vartype skipped_resources: int - :ivar unsupported_resources: The given assessment's related resources - count with unsupported state. - :vartype unsupported_resources: int + :param email: The email of this security contact. + :type email: str + :param phone: The phone number of this security contact. + :type phone: str + :param alert_notifications: Whether to send security alerts notifications to the security + contact. Possible values include: "On", "Off". + :type alert_notifications: str or ~azure.mgmt.security.models.AlertNotifications + :param alerts_to_admins: Whether to send security alerts notifications to subscription admins. + Possible values include: "On", "Off". + :type alerts_to_admins: str or ~azure.mgmt.security.models.AlertsToAdmins """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'description': {'readonly': True}, - 'assessment_type': {'readonly': True}, - 'assessment_details_link': {'readonly': True}, - 'passed_resources': {'readonly': True}, - 'failed_resources': {'readonly': True}, - 'skipped_resources': {'readonly': True}, - 'unsupported_resources': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'assessment_type': {'key': 'properties.assessmentType', 'type': 'str'}, - 'assessment_details_link': {'key': 'properties.assessmentDetailsLink', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'passed_resources': {'key': 'properties.passedResources', 'type': 'int'}, - 'failed_resources': {'key': 'properties.failedResources', 'type': 'int'}, - 'skipped_resources': {'key': 'properties.skippedResources', 'type': 'int'}, - 'unsupported_resources': {'key': 'properties.unsupportedResources', 'type': 'int'}, + 'email': {'key': 'properties.email', 'type': 'str'}, + 'phone': {'key': 'properties.phone', 'type': 'str'}, + 'alert_notifications': {'key': 'properties.alertNotifications', 'type': 'str'}, + 'alerts_to_admins': {'key': 'properties.alertsToAdmins', 'type': 'str'}, } - def __init__(self, **kwargs): - super(RegulatoryComplianceAssessment, self).__init__(**kwargs) - self.description = None - self.assessment_type = None - self.assessment_details_link = None - self.state = kwargs.get('state', None) - self.passed_resources = None - self.failed_resources = None - self.skipped_resources = None - self.unsupported_resources = None + def __init__( + self, + **kwargs + ): + super(SecurityContact, self).__init__(**kwargs) + self.email = kwargs.get('email', None) + self.phone = kwargs.get('phone', None) + self.alert_notifications = kwargs.get('alert_notifications', None) + self.alerts_to_admins = kwargs.get('alerts_to_admins', None) -class RegulatoryComplianceControl(Resource): - """Regulatory compliance control details and state. +class SecurityContactList(msrest.serialization.Model): + """List of security contacts response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List of security contacts. + :vartype value: list[~azure.mgmt.security.models.SecurityContact] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecurityContact]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityContactList, self).__init__(**kwargs) + self.value = None + self.next_link = None - Variables are only populated by the server, and will be ignored when - sending a request. - :ivar id: Resource Id +class SecuritySolution(Resource, Location): + """SecuritySolution. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar description: The description of the regulatory compliance control - :vartype description: str - :param state: Aggregative state based on the control's supported - assessments states. Possible values include: 'Passed', 'Failed', - 'Skipped', 'Unsupported' - :type state: str or ~azure.mgmt.security.models.State - :ivar passed_assessments: The number of supported regulatory compliance - assessments of the given control with a passed state - :vartype passed_assessments: int - :ivar failed_assessments: The number of supported regulatory compliance - assessments of the given control with a failed state - :vartype failed_assessments: int - :ivar skipped_assessments: The number of supported regulatory compliance - assessments of the given control with a skipped state - :vartype skipped_assessments: int + :param security_family: The security family of the security solution. Possible values include: + "Waf", "Ngfw", "SaasWaf", "Va". + :type security_family: str or ~azure.mgmt.security.models.SecurityFamily + :param provisioning_state: The security family provisioning State. Possible values include: + "Succeeded", "Failed", "Updating". + :type provisioning_state: str or ~azure.mgmt.security.models.ProvisioningState + :param template: The security solutions' template. + :type template: str + :param protection_status: The security solutions' status. + :type protection_status: str """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'description': {'readonly': True}, - 'passed_assessments': {'readonly': True}, - 'failed_assessments': {'readonly': True}, - 'skipped_assessments': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'passed_assessments': {'key': 'properties.passedAssessments', 'type': 'int'}, - 'failed_assessments': {'key': 'properties.failedAssessments', 'type': 'int'}, - 'skipped_assessments': {'key': 'properties.skippedAssessments', 'type': 'int'}, + 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'template': {'key': 'properties.template', 'type': 'str'}, + 'protection_status': {'key': 'properties.protectionStatus', 'type': 'str'}, } - def __init__(self, **kwargs): - super(RegulatoryComplianceControl, self).__init__(**kwargs) - self.description = None - self.state = kwargs.get('state', None) - self.passed_assessments = None - self.failed_assessments = None - self.skipped_assessments = None + def __init__( + self, + **kwargs + ): + super(SecuritySolution, self).__init__(**kwargs) + self.location = None + self.security_family = kwargs.get('security_family', None) + self.provisioning_state = kwargs.get('provisioning_state', None) + self.template = kwargs.get('template', None) + self.protection_status = kwargs.get('protection_status', None) + self.id = None + self.name = None + self.type = None + self.security_family = kwargs.get('security_family', None) + self.provisioning_state = kwargs.get('provisioning_state', None) + self.template = kwargs.get('template', None) + self.protection_status = kwargs.get('protection_status', None) -class RegulatoryComplianceStandard(Resource): - """Regulatory compliance standard details and state. +class SecuritySolutionList(msrest.serialization.Model): + """SecuritySolutionList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.SecuritySolution] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecuritySolution]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecuritySolutionList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class SecuritySolutionsReferenceData(Resource, Location): + """SecuritySolutionsReferenceData. + + Variables are only populated by the server, and will be ignored when sending a request. - Variables are only populated by the server, and will be ignored when - sending a request. + All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param state: Aggregative state based on the standard's supported controls - states. Possible values include: 'Passed', 'Failed', 'Skipped', - 'Unsupported' - :type state: str or ~azure.mgmt.security.models.State - :ivar passed_controls: The number of supported regulatory compliance - controls of the given standard with a passed state - :vartype passed_controls: int - :ivar failed_controls: The number of supported regulatory compliance - controls of the given standard with a failed state - :vartype failed_controls: int - :ivar skipped_controls: The number of supported regulatory compliance - controls of the given standard with a skipped state - :vartype skipped_controls: int - :ivar unsupported_controls: The number of regulatory compliance controls - of the given standard which are unsupported by automated assessments - :vartype unsupported_controls: int + :param security_family: Required. The security family of the security solution. Possible values + include: "Waf", "Ngfw", "SaasWaf", "Va". + :type security_family: str or ~azure.mgmt.security.models.SecurityFamily + :param alert_vendor_name: Required. The security solutions' vendor name. + :type alert_vendor_name: str + :param package_info_url: Required. The security solutions' package info url. + :type package_info_url: str + :param product_name: Required. The security solutions' product name. + :type product_name: str + :param publisher: Required. The security solutions' publisher. + :type publisher: str + :param publisher_display_name: Required. The security solutions' publisher display name. + :type publisher_display_name: str + :param template: Required. The security solutions' template. + :type template: str """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'passed_controls': {'readonly': True}, - 'failed_controls': {'readonly': True}, - 'skipped_controls': {'readonly': True}, - 'unsupported_controls': {'readonly': True}, + 'security_family': {'required': True}, + 'alert_vendor_name': {'required': True}, + 'package_info_url': {'required': True}, + 'product_name': {'required': True}, + 'publisher': {'required': True}, + 'publisher_display_name': {'required': True}, + 'template': {'required': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'passed_controls': {'key': 'properties.passedControls', 'type': 'int'}, - 'failed_controls': {'key': 'properties.failedControls', 'type': 'int'}, - 'skipped_controls': {'key': 'properties.skippedControls', 'type': 'int'}, - 'unsupported_controls': {'key': 'properties.unsupportedControls', 'type': 'int'}, + 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, + 'alert_vendor_name': {'key': 'properties.alertVendorName', 'type': 'str'}, + 'package_info_url': {'key': 'properties.packageInfoUrl', 'type': 'str'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'publisher': {'key': 'properties.publisher', 'type': 'str'}, + 'publisher_display_name': {'key': 'properties.publisherDisplayName', 'type': 'str'}, + 'template': {'key': 'properties.template', 'type': 'str'}, } - def __init__(self, **kwargs): - super(RegulatoryComplianceStandard, self).__init__(**kwargs) - self.state = kwargs.get('state', None) - self.passed_controls = None - self.failed_controls = None - self.skipped_controls = None - self.unsupported_controls = None + def __init__( + self, + **kwargs + ): + super(SecuritySolutionsReferenceData, self).__init__(**kwargs) + self.location = None + self.security_family = kwargs['security_family'] + self.alert_vendor_name = kwargs['alert_vendor_name'] + self.package_info_url = kwargs['package_info_url'] + self.product_name = kwargs['product_name'] + self.publisher = kwargs['publisher'] + self.publisher_display_name = kwargs['publisher_display_name'] + self.template = kwargs['template'] + self.id = None + self.name = None + self.type = None + self.security_family = kwargs['security_family'] + self.alert_vendor_name = kwargs['alert_vendor_name'] + self.package_info_url = kwargs['package_info_url'] + self.product_name = kwargs['product_name'] + self.publisher = kwargs['publisher'] + self.publisher_display_name = kwargs['publisher_display_name'] + self.template = kwargs['template'] -class SecurityContact(Resource): - """Contact details for security issues. +class SecuritySolutionsReferenceDataList(msrest.serialization.Model): + """SecuritySolutionsReferenceDataList. - Variables are only populated by the server, and will be ignored when - sending a request. + :param value: + :type value: list[~azure.mgmt.security.models.SecuritySolutionsReferenceData] + """ - All required parameters must be populated in order to send to Azure. + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecuritySolutionsReferenceData]'}, + } + + def __init__( + self, + **kwargs + ): + super(SecuritySolutionsReferenceDataList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) - :ivar id: Resource Id + +class SecuritySubAssessment(Resource): + """Security sub-assessment on a resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param email: Required. The email of this security contact - :type email: str - :param phone: The phone number of this security contact - :type phone: str - :param alert_notifications: Required. Whether to send security alerts - notifications to the security contact. Possible values include: 'On', - 'Off' - :type alert_notifications: str or - ~azure.mgmt.security.models.AlertNotifications - :param alerts_to_admins: Required. Whether to send security alerts - notifications to subscription admins. Possible values include: 'On', 'Off' - :type alerts_to_admins: str or ~azure.mgmt.security.models.AlertsToAdmins + :ivar id_properties_id: Vulnerability ID. + :vartype id_properties_id: str + :ivar display_name: User friendly display name of the sub-assessment. + :vartype display_name: str + :param status: Status of the sub-assessment. + :type status: ~azure.mgmt.security.models.SubAssessmentStatus + :ivar remediation: Information on how to remediate this sub-assessment. + :vartype remediation: str + :ivar impact: Description of the impact of this sub-assessment. + :vartype impact: str + :ivar category: Category of the sub-assessment. + :vartype category: str + :ivar description: Human readable description of the assessment status. + :vartype description: str + :ivar time_generated: The date and time the sub-assessment was generated. + :vartype time_generated: ~datetime.datetime + :param resource_details: Details of the resource that was assessed. + :type resource_details: ~azure.mgmt.security.models.ResourceDetails + :param additional_data: Details of the sub-assessment. + :type additional_data: ~azure.mgmt.security.models.AdditionalData """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'email': {'required': True}, - 'alert_notifications': {'required': True}, - 'alerts_to_admins': {'required': True}, + 'id_properties_id': {'readonly': True}, + 'display_name': {'readonly': True}, + 'remediation': {'readonly': True}, + 'impact': {'readonly': True}, + 'category': {'readonly': True}, + 'description': {'readonly': True}, + 'time_generated': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'email': {'key': 'properties.email', 'type': 'str'}, - 'phone': {'key': 'properties.phone', 'type': 'str'}, - 'alert_notifications': {'key': 'properties.alertNotifications', 'type': 'str'}, - 'alerts_to_admins': {'key': 'properties.alertsToAdmins', 'type': 'str'}, + 'id_properties_id': {'key': 'properties.id', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'SubAssessmentStatus'}, + 'remediation': {'key': 'properties.remediation', 'type': 'str'}, + 'impact': {'key': 'properties.impact', 'type': 'str'}, + 'category': {'key': 'properties.category', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'time_generated': {'key': 'properties.timeGenerated', 'type': 'iso-8601'}, + 'resource_details': {'key': 'properties.resourceDetails', 'type': 'ResourceDetails'}, + 'additional_data': {'key': 'properties.additionalData', 'type': 'AdditionalData'}, + } + + def __init__( + self, + **kwargs + ): + super(SecuritySubAssessment, self).__init__(**kwargs) + self.id_properties_id = None + self.display_name = None + self.status = kwargs.get('status', None) + self.remediation = None + self.impact = None + self.category = None + self.description = None + self.time_generated = None + self.resource_details = kwargs.get('resource_details', None) + self.additional_data = kwargs.get('additional_data', None) + + +class SecuritySubAssessmentList(msrest.serialization.Model): + """List of security sub-assessments. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.SecuritySubAssessment] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecuritySubAssessment]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs): - super(SecurityContact, self).__init__(**kwargs) - self.email = kwargs.get('email', None) - self.phone = kwargs.get('phone', None) - self.alert_notifications = kwargs.get('alert_notifications', None) - self.alerts_to_admins = kwargs.get('alerts_to_admins', None) + def __init__( + self, + **kwargs + ): + super(SecuritySubAssessmentList, self).__init__(**kwargs) + self.value = None + self.next_link = None class SecurityTask(Resource): """Security task that we recommend to do in order to strengthen security. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar state: State of the task (Active, Resolved etc.) + :ivar state: State of the task (Active, Resolved etc.). :vartype state: str - :ivar creation_time_utc: The time this task was discovered in UTC - :vartype creation_time_utc: datetime - :param security_task_parameters: - :type security_task_parameters: - ~azure.mgmt.security.models.SecurityTaskParameters - :ivar last_state_change_time_utc: The time this task's details were last - changed in UTC - :vartype last_state_change_time_utc: datetime - :ivar sub_state: Additional data on the state of the task + :ivar creation_time_utc: The time this task was discovered in UTC. + :vartype creation_time_utc: ~datetime.datetime + :param security_task_parameters: Changing set of properties, depending on the task type that is + derived from the name field. + :type security_task_parameters: ~azure.mgmt.security.models.SecurityTaskParameters + :ivar last_state_change_time_utc: The time this task's details were last changed in UTC. + :vartype last_state_change_time_utc: ~datetime.datetime + :ivar sub_state: Additional data on the state of the task. :vartype sub_state: str """ @@ -2995,7 +9104,10 @@ class SecurityTask(Resource): 'sub_state': {'key': 'properties.subState', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(SecurityTask, self).__init__(**kwargs) self.state = None self.creation_time_utc = None @@ -3004,17 +9116,45 @@ def __init__(self, **kwargs): self.sub_state = None -class SecurityTaskParameters(Model): - """Changing set of properties, depending on the task type that is derived from - the name field. +class SecurityTaskList(msrest.serialization.Model): + """List of security task recommendations. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.SecurityTask] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecurityTask]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityTaskList, self).__init__(**kwargs) + self.value = None + self.next_link = None + + +class SecurityTaskParameters(msrest.serialization.Model): + """Changing set of properties, depending on the task type that is derived from the name field. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :param additional_properties: Unmatched properties from the message are - deserialized this collection + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. :type additional_properties: dict[str, object] - :ivar name: Name of the task type + :ivar name: Name of the task type. :vartype name: str """ @@ -3027,32 +9167,47 @@ class SecurityTaskParameters(Model): 'name': {'key': 'name', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(SecurityTaskParameters, self).__init__(**kwargs) self.additional_properties = kwargs.get('additional_properties', None) self.name = None -class SensitivityLabel(Model): +class SensitivityLabel(msrest.serialization.Model): """The sensitivity label. :param display_name: The name of the sensitivity label. :type display_name: str + :param description: The description of the sensitivity label. + :type description: str + :param rank: The rank of the sensitivity label. Possible values include: "None", "Low", + "Medium", "High", "Critical". + :type rank: str or ~azure.mgmt.security.models.Rank :param order: The order of the sensitivity label. - :type order: float + :type order: int :param enabled: Indicates whether the label is enabled or not. :type enabled: bool """ _attribute_map = { 'display_name': {'key': 'displayName', 'type': 'str'}, - 'order': {'key': 'order', 'type': 'float'}, + 'description': {'key': 'description', 'type': 'str'}, + 'rank': {'key': 'rank', 'type': 'str'}, + 'order': {'key': 'order', 'type': 'int'}, 'enabled': {'key': 'enabled', 'type': 'bool'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(SensitivityLabel, self).__init__(**kwargs) self.display_name = kwargs.get('display_name', None) + self.description = kwargs.get('description', None) + self.rank = kwargs.get('rank', None) self.order = kwargs.get('order', None) self.enabled = kwargs.get('enabled', None) @@ -3060,19 +9215,19 @@ def __init__(self, **kwargs): class ServerVulnerabilityAssessment(Resource): """Describes the server vulnerability assessment details on a resource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar provisioning_state: The provisioningState of the vulnerability - assessment capability on the VM. Possible values include: 'Succeeded', - 'Failed', 'Canceled', 'Provisioning', 'Deprovisioning' - :vartype provisioning_state: str or ~azure.mgmt.security.models.enum + :ivar provisioning_state: The provisioningState of the vulnerability assessment capability on + the VM. Possible values include: "Succeeded", "Failed", "Canceled", "Provisioning", + "Deprovisioning". + :vartype provisioning_state: str or + ~azure.mgmt.security.models.ServerVulnerabilityAssessmentPropertiesProvisioningState """ _validation = { @@ -3089,124 +9244,404 @@ class ServerVulnerabilityAssessment(Resource): 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(ServerVulnerabilityAssessment, self).__init__(**kwargs) self.provisioning_state = None -class ServerVulnerabilityAssessmentsList(Model): +class ServerVulnerabilityAssessmentsList(msrest.serialization.Model): """List of server vulnerability assessments. :param value: - :type value: - list[~azure.mgmt.security.models.ServerVulnerabilityAssessment] + :type value: list[~azure.mgmt.security.models.ServerVulnerabilityAssessment] """ _attribute_map = { 'value': {'key': 'value', 'type': '[ServerVulnerabilityAssessment]'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(ServerVulnerabilityAssessmentsList, self).__init__(**kwargs) self.value = kwargs.get('value', None) -class TagsResource(Model): - """A container holding only the Tags for a resource, allowing the user to - update the tags. +class ServerVulnerabilityProperties(AdditionalData): + """Additional context fields for server vulnerability assessment. - :param tags: Resource tags - :type tags: dict[str, str] + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType + :ivar type: Vulnerability Type. e.g: Vulnerability, Potential Vulnerability, Information + Gathered. + :vartype type: str + :ivar cvss: Dictionary from cvss version to cvss details object. + :vartype cvss: dict[str, ~azure.mgmt.security.models.CVSS] + :ivar patchable: Indicates whether a patch is available or not. + :vartype patchable: bool + :ivar cve: List of CVEs. + :vartype cve: list[~azure.mgmt.security.models.CVE] + :ivar threat: Threat name. + :vartype threat: str + :ivar published_time: Published time. + :vartype published_time: ~datetime.datetime + :ivar vendor_references: + :vartype vendor_references: list[~azure.mgmt.security.models.VendorReference] + """ + + _validation = { + 'assessed_resource_type': {'required': True}, + 'type': {'readonly': True}, + 'cvss': {'readonly': True}, + 'patchable': {'readonly': True}, + 'cve': {'readonly': True}, + 'threat': {'readonly': True}, + 'published_time': {'readonly': True}, + 'vendor_references': {'readonly': True}, + } + + _attribute_map = { + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'cvss': {'key': 'cvss', 'type': '{CVSS}'}, + 'patchable': {'key': 'patchable', 'type': 'bool'}, + 'cve': {'key': 'cve', 'type': '[CVE]'}, + 'threat': {'key': 'threat', 'type': 'str'}, + 'published_time': {'key': 'publishedTime', 'type': 'iso-8601'}, + 'vendor_references': {'key': 'vendorReferences', 'type': '[VendorReference]'}, + } + + def __init__( + self, + **kwargs + ): + super(ServerVulnerabilityProperties, self).__init__(**kwargs) + self.assessed_resource_type = 'ServerVulnerabilityAssessment' # type: str + self.type = None + self.cvss = None + self.patchable = None + self.cve = None + self.threat = None + self.published_time = None + self.vendor_references = None + + +class ServicePrincipalProperties(msrest.serialization.Model): + """Details of the service principal. + + :param application_id: Application id of service principal. + :type application_id: str + :param secret: A secret string that the application uses to prove its identity, also can be + referred to as application password (write only). + :type secret: str """ _attribute_map = { - 'tags': {'key': 'tags', 'type': '{str}'}, + 'application_id': {'key': 'applicationId', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, } - def __init__(self, **kwargs): - super(TagsResource, self).__init__(**kwargs) - self.tags = kwargs.get('tags', None) + def __init__( + self, + **kwargs + ): + super(ServicePrincipalProperties, self).__init__(**kwargs) + self.application_id = kwargs.get('application_id', None) + self.secret = kwargs.get('secret', None) -class TopologyResource(Model): - """TopologyResource. +class Setting(SettingResource): + """Represents a security setting in Azure Security Center. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :ivar calculated_date_time: The UTC time on which the topology was - calculated - :vartype calculated_date_time: datetime - :ivar topology_resources: Azure resources which are part of this topology - resource - :vartype topology_resources: - list[~azure.mgmt.security.models.TopologySingleResource] + :param kind: Required. the kind of the settings string (DataExportSettings).Constant filled by + server. Possible values include: "DataExportSettings", "AlertSuppressionSetting". + :type kind: str or ~azure.mgmt.security.models.SettingKind """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, + 'kind': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Setting, self).__init__(**kwargs) + self.kind = 'Setting' # type: str + + +class SettingsList(msrest.serialization.Model): + """Subscription settings list. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: The settings list. + :type value: list[~azure.mgmt.security.models.SettingResource] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SettingResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SettingsList, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = None + + +class SqlServerVulnerabilityProperties(AdditionalData): + """Details of the resource that was assessed. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType + :ivar type: The resource type the sub assessment refers to in its resource details. + :vartype type: str + :ivar query: The T-SQL query that runs on your SQL database to perform the particular check. + :vartype query: str + """ + + _validation = { + 'assessed_resource_type': {'required': True}, + 'type': {'readonly': True}, + 'query': {'readonly': True}, + } + + _attribute_map = { + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'query': {'key': 'query', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SqlServerVulnerabilityProperties, self).__init__(**kwargs) + self.assessed_resource_type = 'SqlServerVulnerability' # type: str + self.type = None + self.query = None + + +class SubAssessmentStatus(msrest.serialization.Model): + """Status of the sub-assessment. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar code: Programmatic code for the status of the assessment. Possible values include: + "Healthy", "Unhealthy", "NotApplicable". + :vartype code: str or ~azure.mgmt.security.models.SubAssessmentStatusCode + :ivar cause: Programmatic code for the cause of the assessment status. + :vartype cause: str + :ivar description: Human readable description of the assessment status. + :vartype description: str + :ivar severity: The sub-assessment severity level. Possible values include: "Low", "Medium", + "High". + :vartype severity: str or ~azure.mgmt.security.models.Severity + """ + + _validation = { + 'code': {'readonly': True}, + 'cause': {'readonly': True}, + 'description': {'readonly': True}, + 'severity': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'cause': {'key': 'cause', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'severity': {'key': 'severity', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SubAssessmentStatus, self).__init__(**kwargs) + self.code = None + self.cause = None + self.description = None + self.severity = None + + +class SuppressionAlertsScope(msrest.serialization.Model): + """SuppressionAlertsScope. + + All required parameters must be populated in order to send to Azure. + + :param all_of: Required. All the conditions inside need to be true in order to suppress the + alert. + :type all_of: list[~azure.mgmt.security.models.ScopeElement] + """ + + _validation = { + 'all_of': {'required': True}, + } + + _attribute_map = { + 'all_of': {'key': 'allOf', 'type': '[ScopeElement]'}, + } + + def __init__( + self, + **kwargs + ): + super(SuppressionAlertsScope, self).__init__(**kwargs) + self.all_of = kwargs['all_of'] + + +class TopologyList(msrest.serialization.Model): + """TopologyList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.TopologyResource] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[TopologyResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TopologyList, self).__init__(**kwargs) + self.value = None + self.next_link = None + + +class TopologyResource(Resource, Location): + """TopologyResource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar calculated_date_time: The UTC time on which the topology was calculated. + :vartype calculated_date_time: ~datetime.datetime + :ivar topology_resources: Azure resources which are part of this topology resource. + :vartype topology_resources: list[~azure.mgmt.security.models.TopologySingleResource] + """ + + _validation = { 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, 'calculated_date_time': {'readonly': True}, 'topology_resources': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, 'calculated_date_time': {'key': 'properties.calculatedDateTime', 'type': 'iso-8601'}, 'topology_resources': {'key': 'properties.topologyResources', 'type': '[TopologySingleResource]'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(TopologyResource, self).__init__(**kwargs) + self.location = None + self.calculated_date_time = None + self.topology_resources = None self.id = None self.name = None self.type = None - self.location = None self.calculated_date_time = None self.topology_resources = None -class TopologySingleResource(Model): +class TopologySingleResource(msrest.serialization.Model): """TopologySingleResource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar resource_id: Azure resource id + :ivar resource_id: Azure resource id. :vartype resource_id: str - :ivar severity: The security severity of the resource + :ivar severity: The security severity of the resource. :vartype severity: str - :ivar recommendations_exist: Indicates if the resource has security - recommendations + :ivar recommendations_exist: Indicates if the resource has security recommendations. :vartype recommendations_exist: bool - :ivar network_zones: Indicates the resource connectivity level to the - Internet (InternetFacing, Internal ,etc.) + :ivar network_zones: Indicates the resource connectivity level to the Internet (InternetFacing, + Internal ,etc.). :vartype network_zones: str - :ivar topology_score: Score of the resource based on its security severity + :ivar topology_score: Score of the resource based on its security severity. :vartype topology_score: int - :ivar location: The location of this resource + :ivar location: The location of this resource. :vartype location: str - :ivar parents: Azure resources connected to this resource which are in - higher level in the topology view - :vartype parents: - list[~azure.mgmt.security.models.TopologySingleResourceParent] - :ivar children: Azure resources connected to this resource which are in - lower level in the topology view - :vartype children: - list[~azure.mgmt.security.models.TopologySingleResourceChild] + :ivar parents: Azure resources connected to this resource which are in higher level in the + topology view. + :vartype parents: list[~azure.mgmt.security.models.TopologySingleResourceParent] + :ivar children: Azure resources connected to this resource which are in lower level in the + topology view. + :vartype children: list[~azure.mgmt.security.models.TopologySingleResourceChild] """ _validation = { @@ -3231,7 +9666,10 @@ class TopologySingleResource(Model): 'children': {'key': 'children', 'type': '[TopologySingleResourceChild]'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(TopologySingleResource, self).__init__(**kwargs) self.resource_id = None self.severity = None @@ -3243,14 +9681,12 @@ def __init__(self, **kwargs): self.children = None -class TopologySingleResourceChild(Model): +class TopologySingleResourceChild(msrest.serialization.Model): """TopologySingleResourceChild. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar resource_id: Azure resource id which serves as child resource in - topology view + :ivar resource_id: Azure resource id which serves as child resource in topology view. :vartype resource_id: str """ @@ -3262,19 +9698,20 @@ class TopologySingleResourceChild(Model): 'resource_id': {'key': 'resourceId', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(TopologySingleResourceChild, self).__init__(**kwargs) self.resource_id = None -class TopologySingleResourceParent(Model): +class TopologySingleResourceParent(msrest.serialization.Model): """TopologySingleResourceParent. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar resource_id: Azure resource id which serves as parent resource in - topology view + :ivar resource_id: Azure resource id which serves as parent resource in topology view. :vartype resource_id: str """ @@ -3286,47 +9723,189 @@ class TopologySingleResourceParent(Model): 'resource_id': {'key': 'resourceId', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(TopologySingleResourceParent, self).__init__(**kwargs) self.resource_id = None +class TwinUpdatesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of twin updates is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(TwinUpdatesNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'TwinUpdatesNotInAllowedRange' # type: str + self.rule_type = 'TwinUpdatesNotInAllowedRange' # type: str + + +class UnauthorizedOperationsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of unauthorized operations is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + **kwargs + ): + super(UnauthorizedOperationsNotInAllowedRange, self).__init__(**kwargs) + self.rule_type = 'UnauthorizedOperationsNotInAllowedRange' # type: str + self.rule_type = 'UnauthorizedOperationsNotInAllowedRange' # type: str + + class UpdateIotSecuritySolutionData(TagsResource): """UpdateIotSecuritySolutionData. - :param tags: Resource tags + :param tags: A set of tags. Resource tags. :type tags: dict[str, str] - :param user_defined_resources: - :type user_defined_resources: - ~azure.mgmt.security.models.UserDefinedResourcesProperties - :param recommendations_configuration: + :param user_defined_resources: Properties of the IoT Security solution's user defined + resources. + :type user_defined_resources: ~azure.mgmt.security.models.UserDefinedResourcesProperties + :param recommendations_configuration: List of the configuration status for each recommendation + type. :type recommendations_configuration: list[~azure.mgmt.security.models.RecommendationConfigurationProperties] """ _attribute_map = { 'tags': {'key': 'tags', 'type': '{str}'}, - 'user_defined_resources': {'key': 'userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, - 'recommendations_configuration': {'key': 'recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, + 'user_defined_resources': {'key': 'properties.userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, + 'recommendations_configuration': {'key': 'properties.recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(UpdateIotSecuritySolutionData, self).__init__(**kwargs) self.user_defined_resources = kwargs.get('user_defined_resources', None) self.recommendations_configuration = kwargs.get('recommendations_configuration', None) -class UserDefinedResourcesProperties(Model): - """Properties of the solution's user defined resources. +class UserDefinedResourcesProperties(msrest.serialization.Model): + """Properties of the IoT Security solution's user defined resources. All required parameters must be populated in order to send to Azure. - :param query: Required. Azure Resource Graph query which represents the - security solution's user defined resources. Required to start with "where - type != "Microsoft.Devices/IotHubs"" + :param query: Required. Azure Resource Graph query which represents the security solution's + user defined resources. Required to start with "where type != "Microsoft.Devices/IotHubs"". :type query: str - :param query_subscriptions: Required. List of Azure subscription ids on - which the user defined resources query should be executed. + :param query_subscriptions: Required. List of Azure subscription ids on which the user defined + resources query should be executed. :type query_subscriptions: list[str] """ @@ -3340,21 +9919,23 @@ class UserDefinedResourcesProperties(Model): 'query_subscriptions': {'key': 'querySubscriptions', 'type': '[str]'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(UserDefinedResourcesProperties, self).__init__(**kwargs) - self.query = kwargs.get('query', None) - self.query_subscriptions = kwargs.get('query_subscriptions', None) + self.query = kwargs['query'] + self.query_subscriptions = kwargs['query_subscriptions'] -class UserRecommendation(Model): +class UserRecommendation(msrest.serialization.Model): """Represents a user that is recommended to be allowed for a certain rule. - :param username: Represents a user that is recommended to be allowed for a - certain rule + :param username: Represents a user that is recommended to be allowed for a certain rule. :type username: str - :param recommendation_action: Possible values include: 'Recommended', - 'Add', 'Remove' - :type recommendation_action: str or ~azure.mgmt.security.models.enum + :param recommendation_action: The recommendation action of the machine or rule. Possible values + include: "Recommended", "Add", "Remove". + :type recommendation_action: str or ~azure.mgmt.security.models.RecommendationAction """ _attribute_map = { @@ -3362,58 +9943,94 @@ class UserRecommendation(Model): 'recommendation_action': {'key': 'recommendationAction', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(UserRecommendation, self).__init__(**kwargs) self.username = kwargs.get('username', None) self.recommendation_action = kwargs.get('recommendation_action', None) -class VmRecommendation(Model): - """Represents a machine that is part of a VM/server group. +class VendorReference(msrest.serialization.Model): + """Vendor reference. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar title: Link title. + :vartype title: str + :ivar link: Link url. + :vartype link: str + """ + + _validation = { + 'title': {'readonly': True}, + 'link': {'readonly': True}, + } + + _attribute_map = { + 'title': {'key': 'title', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(VendorReference, self).__init__(**kwargs) + self.title = None + self.link = None + - :param configuration_status: Possible values include: 'Configured', - 'NotConfigured', 'InProgress', 'Failed', 'NoStatus' - :type configuration_status: str or ~azure.mgmt.security.models.enum - :param recommendation_action: Possible values include: 'Recommended', - 'Add', 'Remove' - :type recommendation_action: str or ~azure.mgmt.security.models.enum - :param resource_id: +class VmRecommendation(msrest.serialization.Model): + """Represents a machine that is part of a machine group. + + :param configuration_status: The configuration status of the machines group or machine or rule. + Possible values include: "Configured", "NotConfigured", "InProgress", "Failed", "NoStatus". + :type configuration_status: str or ~azure.mgmt.security.models.ConfigurationStatus + :param recommendation_action: The recommendation action of the machine or rule. Possible values + include: "Recommended", "Add", "Remove". + :type recommendation_action: str or ~azure.mgmt.security.models.RecommendationAction + :param resource_id: The full resource id of the machine. :type resource_id: str + :param enforcement_support: The machine supportability of Enforce feature. Possible values + include: "Supported", "NotSupported", "Unknown". + :type enforcement_support: str or ~azure.mgmt.security.models.EnforcementSupport """ _attribute_map = { 'configuration_status': {'key': 'configurationStatus', 'type': 'str'}, 'recommendation_action': {'key': 'recommendationAction', 'type': 'str'}, 'resource_id': {'key': 'resourceId', 'type': 'str'}, + 'enforcement_support': {'key': 'enforcementSupport', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(VmRecommendation, self).__init__(**kwargs) self.configuration_status = kwargs.get('configuration_status', None) self.recommendation_action = kwargs.get('recommendation_action', None) self.resource_id = kwargs.get('resource_id', None) + self.enforcement_support = kwargs.get('enforcement_support', None) class WorkspaceSetting(Resource): """Configures where to store the OMS agent data for workspaces under a scope. - Variables are only populated by the server, and will be ignored when - sending a request. - - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param workspace_id: Required. The full Azure ID of the workspace to save - the data in + :param workspace_id: The full Azure ID of the workspace to save the data in. :type workspace_id: str - :param scope: Required. All the VMs in this scope will send their security - data to the mentioned workspace unless overridden by a setting with more - specific scope + :param scope: All the VMs in this scope will send their security data to the mentioned + workspace unless overridden by a setting with more specific scope. :type scope: str """ @@ -3421,8 +10038,6 @@ class WorkspaceSetting(Resource): 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'workspace_id': {'required': True}, - 'scope': {'required': True}, } _attribute_map = { @@ -3433,7 +10048,42 @@ class WorkspaceSetting(Resource): 'scope': {'key': 'properties.scope', 'type': 'str'}, } - def __init__(self, **kwargs): + def __init__( + self, + **kwargs + ): super(WorkspaceSetting, self).__init__(**kwargs) self.workspace_id = kwargs.get('workspace_id', None) self.scope = kwargs.get('scope', None) + + +class WorkspaceSettingList(msrest.serialization.Model): + """List of workspace settings response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of workspace settings. + :type value: list[~azure.mgmt.security.models.WorkspaceSetting] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[WorkspaceSetting]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(WorkspaceSettingList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models_py3.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models_py3.py index 55592fee92b4..3e58ff17f6a5 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models_py3.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_models_py3.py @@ -1,180 +1,97 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from msrest.serialization import Model -from msrest.exceptions import HttpOperationError +import datetime +from typing import Dict, List, Optional, Union +import msrest.serialization -class AadConnectivityState1(Model): +from ._security_center_enums import * + + +class AadConnectivityState(msrest.serialization.Model): """Describes an Azure resource with kind. - :param connectivity_state: The connectivity state of the external AAD - solution . Possible values include: 'Discovered', 'NotLicensed', - 'Connected' - :type connectivity_state: str or - ~azure.mgmt.security.models.AadConnectivityState + :param connectivity_state: The connectivity state of the external AAD solution. Possible values + include: "Discovered", "NotLicensed", "Connected". + :type connectivity_state: str or ~azure.mgmt.security.models.AadConnectivityStateEnum """ _attribute_map = { 'connectivity_state': {'key': 'connectivityState', 'type': 'str'}, } - def __init__(self, *, connectivity_state=None, **kwargs) -> None: - super(AadConnectivityState1, self).__init__(**kwargs) + def __init__( + self, + *, + connectivity_state: Optional[Union[str, "AadConnectivityStateEnum"]] = None, + **kwargs + ): + super(AadConnectivityState, self).__init__(**kwargs) self.connectivity_state = connectivity_state -class ExternalSecuritySolution(Model): - """Represents a security solution external to Azure Security Center which - sends information to an OMS workspace and whose data is displayed by Azure - Security Center. - - You probably want to use the sub-classes and not this class directly. Known - sub-classes are: CefExternalSecuritySolution, AtaExternalSecuritySolution, - AadExternalSecuritySolution - - Variables are only populated by the server, and will be ignored when - sending a request. - - All required parameters must be populated in order to send to Azure. +class ExternalSecuritySolutionKind(msrest.serialization.Model): + """Describes an Azure resource with kind. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum """ - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, - } - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, 'kind': {'key': 'kind', 'type': 'str'}, } - _subtype_map = { - 'kind': {'CEF': 'CefExternalSecuritySolution', 'ATA': 'AtaExternalSecuritySolution', 'AAD': 'AadExternalSecuritySolution'} - } - - def __init__(self, **kwargs) -> None: - super(ExternalSecuritySolution, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.kind = None - + def __init__( + self, + *, + kind: Optional[Union[str, "ExternalSecuritySolutionKindEnum"]] = None, + **kwargs + ): + super(ExternalSecuritySolutionKind, self).__init__(**kwargs) + self.kind = kind -class AadExternalSecuritySolution(ExternalSecuritySolution): - """Represents an AAD identity protection solution which sends logs to an OMS - workspace. - Variables are only populated by the server, and will be ignored when - sending a request. +class Location(msrest.serialization.Model): + """Describes an Azure resource with location. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored + :ivar location: Location where the resource is stored. :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str - :param properties: - :type properties: ~azure.mgmt.security.models.AadSolutionProperties """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, 'location': {'readonly': True}, - 'kind': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'AadSolutionProperties'}, - } - - def __init__(self, *, properties=None, **kwargs) -> None: - super(AadExternalSecuritySolution, self).__init__(**kwargs) - self.properties = properties - self.kind = 'AAD' - - -class AadSolutionProperties(Model): - """The external security solution properties for AAD solutions. - - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace - :param connectivity_state: The connectivity state of the external AAD - solution . Possible values include: 'Discovered', 'NotLicensed', - 'Connected' - :type connectivity_state: str or - ~azure.mgmt.security.models.AadConnectivityState - """ - - _attribute_map = { - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, - 'connectivity_state': {'key': 'connectivityState', 'type': 'str'}, } - def __init__(self, *, device_vendor: str=None, device_type: str=None, workspace=None, connectivity_state=None, **kwargs) -> None: - super(AadSolutionProperties, self).__init__(**kwargs) - self.device_vendor = device_vendor - self.device_type = device_type - self.workspace = workspace - self.connectivity_state = connectivity_state + def __init__( + self, + **kwargs + ): + super(Location, self).__init__(**kwargs) + self.location = None -class Resource(Model): +class Resource(msrest.serialization.Model): """Describes an Azure resource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str """ @@ -190,2787 +107,9558 @@ class Resource(Model): 'type': {'key': 'type', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: + def __init__( + self, + **kwargs + ): super(Resource, self).__init__(**kwargs) self.id = None self.name = None self.type = None -class AdvancedThreatProtectionSetting(Resource): - """The Advanced Threat Protection resource. +class ExternalSecuritySolution(Resource, Location, ExternalSecuritySolutionKind): + """Represents a security solution external to Azure Security Center which sends information to an OMS workspace and whose data is displayed by Azure Security Center. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param is_enabled: Indicates whether Advanced Threat Protection is - enabled. - :type is_enabled: bool """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, } _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'is_enabled': {'key': 'properties.isEnabled', 'type': 'bool'}, } - def __init__(self, *, is_enabled: bool=None, **kwargs) -> None: - super(AdvancedThreatProtectionSetting, self).__init__(**kwargs) - self.is_enabled = is_enabled + def __init__( + self, + *, + kind: Optional[Union[str, "ExternalSecuritySolutionKindEnum"]] = None, + **kwargs + ): + super(ExternalSecuritySolution, self).__init__(kind=kind, **kwargs) + self.kind = kind + self.location = None + self.kind = kind + self.id = None + self.name = None + self.type = None + self.location = None + self.id = None + self.name = None + self.type = None -class Alert(Resource): - """Security alert. +class AadExternalSecuritySolution(ExternalSecuritySolution): + """Represents an AAD identity protection solution which sends logs to an OMS workspace. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar state: State of the alert (Active, Dismissed etc.) - :vartype state: str - :ivar reported_time_utc: The time the incident was reported to - Microsoft.Security in UTC - :vartype reported_time_utc: datetime - :ivar vendor_name: Name of the vendor that discovered the incident - :vartype vendor_name: str - :ivar alert_name: Name of the alert type - :vartype alert_name: str - :ivar alert_display_name: Display name of the alert type - :vartype alert_display_name: str - :ivar detected_time_utc: The time the incident was detected by the vendor - :vartype detected_time_utc: datetime - :ivar description: Description of the incident and what it means - :vartype description: str - :ivar remediation_steps: Recommended steps to reradiate the incident - :vartype remediation_steps: str - :ivar action_taken: The action that was taken as a response to the alert - (Active, Blocked etc.) - :vartype action_taken: str - :ivar reported_severity: Estimated severity of this alert. Possible values - include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar compromised_entity: The entity that the incident happened on - :vartype compromised_entity: str - :ivar associated_resource: Azure resource ID of the associated resource - :vartype associated_resource: str - :param extended_properties: - :type extended_properties: dict[str, object] - :ivar system_source: The type of the alerted resource (Azure, Non-Azure) - :vartype system_source: str - :ivar can_be_investigated: Whether this alert can be investigated with - Azure Security Center - :vartype can_be_investigated: bool - :ivar is_incident: Whether this alert is for incident type or not - (otherwise - single alert) - :vartype is_incident: bool - :param entities: objects that are related to this alerts - :type entities: list[~azure.mgmt.security.models.AlertEntity] - :ivar confidence_score: level of confidence we have on the alert - :vartype confidence_score: float - :param confidence_reasons: reasons the alert got the confidenceScore value - :type confidence_reasons: - list[~azure.mgmt.security.models.AlertConfidenceReason] - :ivar subscription_id: Azure subscription ID of the resource that had the - security alert or the subscription ID of the workspace that this resource - reports to - :vartype subscription_id: str - :ivar instance_id: Instance ID of the alert. - :vartype instance_id: str - :ivar workspace_arm_id: Azure resource ID of the workspace that the alert - was reported to. - :vartype workspace_arm_id: str - :ivar correlation_key: Alerts with the same CorrelationKey will be grouped - together in Ibiza. - :vartype correlation_key: str + :param properties: The external security solution properties for AAD solutions. + :type properties: ~azure.mgmt.security.models.AadSolutionProperties """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'state': {'readonly': True}, - 'reported_time_utc': {'readonly': True}, - 'vendor_name': {'readonly': True}, - 'alert_name': {'readonly': True}, - 'alert_display_name': {'readonly': True}, - 'detected_time_utc': {'readonly': True}, - 'description': {'readonly': True}, - 'remediation_steps': {'readonly': True}, - 'action_taken': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'compromised_entity': {'readonly': True}, - 'associated_resource': {'readonly': True}, - 'system_source': {'readonly': True}, - 'can_be_investigated': {'readonly': True}, - 'is_incident': {'readonly': True}, - 'confidence_score': {'readonly': True, 'maximum': 1, 'minimum': 0}, - 'subscription_id': {'readonly': True}, - 'instance_id': {'readonly': True}, - 'workspace_arm_id': {'readonly': True}, - 'correlation_key': {'readonly': True}, } _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'reported_time_utc': {'key': 'properties.reportedTimeUtc', 'type': 'iso-8601'}, - 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, - 'alert_name': {'key': 'properties.alertName', 'type': 'str'}, - 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, - 'detected_time_utc': {'key': 'properties.detectedTimeUtc', 'type': 'iso-8601'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, - 'action_taken': {'key': 'properties.actionTaken', 'type': 'str'}, - 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, - 'compromised_entity': {'key': 'properties.compromisedEntity', 'type': 'str'}, - 'associated_resource': {'key': 'properties.associatedResource', 'type': 'str'}, - 'extended_properties': {'key': 'properties.extendedProperties', 'type': '{object}'}, - 'system_source': {'key': 'properties.systemSource', 'type': 'str'}, - 'can_be_investigated': {'key': 'properties.canBeInvestigated', 'type': 'bool'}, - 'is_incident': {'key': 'properties.isIncident', 'type': 'bool'}, - 'entities': {'key': 'properties.entities', 'type': '[AlertEntity]'}, - 'confidence_score': {'key': 'properties.confidenceScore', 'type': 'float'}, - 'confidence_reasons': {'key': 'properties.confidenceReasons', 'type': '[AlertConfidenceReason]'}, - 'subscription_id': {'key': 'properties.subscriptionId', 'type': 'str'}, - 'instance_id': {'key': 'properties.instanceId', 'type': 'str'}, - 'workspace_arm_id': {'key': 'properties.workspaceArmId', 'type': 'str'}, - 'correlation_key': {'key': 'properties.correlationKey', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'AadSolutionProperties'}, } - def __init__(self, *, extended_properties=None, entities=None, confidence_reasons=None, **kwargs) -> None: - super(Alert, self).__init__(**kwargs) - self.state = None - self.reported_time_utc = None - self.vendor_name = None - self.alert_name = None - self.alert_display_name = None - self.detected_time_utc = None - self.description = None - self.remediation_steps = None - self.action_taken = None - self.reported_severity = None - self.compromised_entity = None - self.associated_resource = None - self.extended_properties = extended_properties - self.system_source = None - self.can_be_investigated = None - self.is_incident = None - self.entities = entities - self.confidence_score = None - self.confidence_reasons = confidence_reasons - self.subscription_id = None - self.instance_id = None - self.workspace_arm_id = None - self.correlation_key = None - + def __init__( + self, + *, + kind: Optional[Union[str, "ExternalSecuritySolutionKindEnum"]] = None, + properties: Optional["AadSolutionProperties"] = None, + **kwargs + ): + super(AadExternalSecuritySolution, self).__init__(kind=kind, **kwargs) + self.properties = properties -class AlertConfidenceReason(Model): - """Factors that increase our confidence that the alert is a true positive. - Variables are only populated by the server, and will be ignored when - sending a request. +class ExternalSecuritySolutionProperties(msrest.serialization.Model): + """The solution properties (correspond to the solution kind). - :ivar type: Type of confidence factor - :vartype type: str - :ivar reason: description of the confidence reason - :vartype reason: str + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace """ - _validation = { - 'type': {'readonly': True}, - 'reason': {'readonly': True}, - } - _attribute_map = { - 'type': {'key': 'type', 'type': 'str'}, - 'reason': {'key': 'reason', 'type': 'str'}, + 'additional_properties': {'key': '', 'type': '{object}'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, } - def __init__(self, **kwargs) -> None: - super(AlertConfidenceReason, self).__init__(**kwargs) - self.type = None - self.reason = None - + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + device_vendor: Optional[str] = None, + device_type: Optional[str] = None, + workspace: Optional["ConnectedWorkspace"] = None, + **kwargs + ): + super(ExternalSecuritySolutionProperties, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.device_vendor = device_vendor + self.device_type = device_type + self.workspace = workspace -class AlertEntity(Model): - """Changing set of properties depending on the entity type. - Variables are only populated by the server, and will be ignored when - sending a request. +class AadSolutionProperties(ExternalSecuritySolutionProperties, AadConnectivityState): + """The external security solution properties for AAD solutions. - :param additional_properties: Unmatched properties from the message are - deserialized this collection + :param connectivity_state: The connectivity state of the external AAD solution. Possible values + include: "Discovered", "NotLicensed", "Connected". + :type connectivity_state: str or ~azure.mgmt.security.models.AadConnectivityStateEnum + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. :type additional_properties: dict[str, object] - :ivar type: Type of entity - :vartype type: str + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace """ - _validation = { - 'type': {'readonly': True}, - } - _attribute_map = { + 'connectivity_state': {'key': 'connectivityState', 'type': 'str'}, 'additional_properties': {'key': '', 'type': '{object}'}, - 'type': {'key': 'type', 'type': 'str'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, } - def __init__(self, *, additional_properties=None, **kwargs) -> None: - super(AlertEntity, self).__init__(**kwargs) + def __init__( + self, + *, + connectivity_state: Optional[Union[str, "AadConnectivityStateEnum"]] = None, + additional_properties: Optional[Dict[str, object]] = None, + device_vendor: Optional[str] = None, + device_type: Optional[str] = None, + workspace: Optional["ConnectedWorkspace"] = None, + **kwargs + ): + super(AadSolutionProperties, self).__init__(additional_properties=additional_properties, device_vendor=device_vendor, device_type=device_type, workspace=workspace, connectivity_state=connectivity_state, **kwargs) + self.connectivity_state = connectivity_state self.additional_properties = additional_properties - self.type = None + self.device_vendor = device_vendor + self.device_type = device_type + self.workspace = workspace -class AllowedConnectionsResource(Model): - """The resource whose properties describes the allowed traffic between Azure - resources. +class CustomAlertRule(msrest.serialization.Model): + """A custom alert rule. - Variables are only populated by the server, and will be ignored when - sending a request. + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ListCustomAlertRule, ThresholdCustomAlertRule. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :ivar calculated_date_time: The UTC time on which the allowed connections - resource was calculated - :vartype calculated_date_time: datetime - :ivar connectable_resources: List of connectable resources - :vartype connectable_resources: - list[~azure.mgmt.security.models.ConnectableResource] + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'calculated_date_time': {'readonly': True}, - 'connectable_resources': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'calculated_date_time': {'key': 'properties.calculatedDateTime', 'type': 'iso-8601'}, - 'connectable_resources': {'key': 'properties.connectableResources', 'type': '[ConnectableResource]'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(AllowedConnectionsResource, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.calculated_date_time = None - self.connectable_resources = None + _subtype_map = { + 'rule_type': {'ListCustomAlertRule': 'ListCustomAlertRule', 'ThresholdCustomAlertRule': 'ThresholdCustomAlertRule'} + } + def __init__( + self, + *, + is_enabled: bool, + **kwargs + ): + super(CustomAlertRule, self).__init__(**kwargs) + self.display_name = None + self.description = None + self.is_enabled = is_enabled + self.rule_type = None # type: Optional[str] -class AppWhitelistingGroup(Model): - """AppWhitelistingGroup. - Variables are only populated by the server, and will be ignored when - sending a request. +class ThresholdCustomAlertRule(CustomAlertRule): + """A custom alert rule that checks if a value (depends on the custom alert type) is within the given range. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param enforcement_mode: Possible values include: 'Audit', 'Enforce' - :type enforcement_mode: str or ~azure.mgmt.security.models.enum - :param configuration_status: Possible values include: 'Configured', - 'NotConfigured', 'InProgress', 'Failed', 'NoStatus' - :type configuration_status: str or ~azure.mgmt.security.models.enum - :param recommendation_status: Possible values include: 'Recommended', - 'NotRecommended', 'NotAvailable', 'NoStatus' - :type recommendation_status: str or ~azure.mgmt.security.models.enum - :param issues: - :type issues: - list[~azure.mgmt.security.models.AppWhitelistingIssueSummary] - :param source_system: Possible values include: 'Azure_AppLocker', - 'Azure_AuditD', 'NonAzure_AppLocker', 'NonAzure_AuditD', 'None' - :type source_system: str or ~azure.mgmt.security.models.enum - :param vm_recommendations: - :type vm_recommendations: - list[~azure.mgmt.security.models.VmRecommendation] - :param path_recommendations: - :type path_recommendations: - list[~azure.mgmt.security.models.PathRecommendation] + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: TimeWindowCustomAlertRule. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'enforcement_mode': {'key': 'properties.enforcementMode', 'type': 'str'}, - 'configuration_status': {'key': 'properties.configurationStatus', 'type': 'str'}, - 'recommendation_status': {'key': 'properties.recommendationStatus', 'type': 'str'}, - 'issues': {'key': 'properties.issues', 'type': '[AppWhitelistingIssueSummary]'}, - 'source_system': {'key': 'properties.sourceSystem', 'type': 'str'}, - 'vm_recommendations': {'key': 'properties.vmRecommendations', 'type': '[VmRecommendation]'}, - 'path_recommendations': {'key': 'properties.pathRecommendations', 'type': '[PathRecommendation]'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, } - def __init__(self, *, enforcement_mode=None, configuration_status=None, recommendation_status=None, issues=None, source_system=None, vm_recommendations=None, path_recommendations=None, **kwargs) -> None: - super(AppWhitelistingGroup, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.enforcement_mode = enforcement_mode - self.configuration_status = configuration_status - self.recommendation_status = recommendation_status - self.issues = issues - self.source_system = source_system - self.vm_recommendations = vm_recommendations - self.path_recommendations = path_recommendations - + _subtype_map = { + 'rule_type': {'TimeWindowCustomAlertRule': 'TimeWindowCustomAlertRule'} + } -class AppWhitelistingGroups(Model): - """Represents a list of VM/server groups and set of rules that are Recommended - by Azure Security Center to be allowed. + def __init__( + self, + *, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + **kwargs + ): + super(ThresholdCustomAlertRule, self).__init__(is_enabled=is_enabled, **kwargs) + self.rule_type = 'ThresholdCustomAlertRule' # type: str + self.min_threshold = min_threshold + self.max_threshold = max_threshold - :param value: - :type value: list[~azure.mgmt.security.models.AppWhitelistingGroup] - """ - _attribute_map = { - 'value': {'key': 'value', 'type': '[AppWhitelistingGroup]'}, - } +class TimeWindowCustomAlertRule(ThresholdCustomAlertRule): + """A custom alert rule that checks if the number of activities (depends on the custom alert type) in a time window is within the given range. - def __init__(self, *, value=None, **kwargs) -> None: - super(AppWhitelistingGroups, self).__init__(**kwargs) - self.value = value + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ActiveConnectionsNotInAllowedRange, AmqpC2DMessagesNotInAllowedRange, AmqpC2DRejectedMessagesNotInAllowedRange, AmqpD2CMessagesNotInAllowedRange, DirectMethodInvokesNotInAllowedRange, FailedLocalLoginsNotInAllowedRange, FileUploadsNotInAllowedRange, HttpC2DMessagesNotInAllowedRange, HttpC2DRejectedMessagesNotInAllowedRange, HttpD2CMessagesNotInAllowedRange, MqttC2DMessagesNotInAllowedRange, MqttC2DRejectedMessagesNotInAllowedRange, MqttD2CMessagesNotInAllowedRange, QueuePurgesNotInAllowedRange, TwinUpdatesNotInAllowedRange, UnauthorizedOperationsNotInAllowedRange. + Variables are only populated by the server, and will be ignored when sending a request. -class AppWhitelistingIssueSummary(Model): - """Represents a summary of the alerts of the VM/server group. + All required parameters must be populated in order to send to Azure. - :param issue: Possible values include: 'ViolationsAudited', - 'ViolationsBlocked', 'MsiAndScriptViolationsAudited', - 'MsiAndScriptViolationsBlocked', 'ExecutableViolationsAudited', - 'RulesViolatedManually' - :type issue: str or ~azure.mgmt.security.models.enum - :param number_of_vms: The number of machines in the VM/server group that - have this alert - :type number_of_vms: float + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ - _attribute_map = { - 'issue': {'key': 'issue', 'type': 'str'}, - 'number_of_vms': {'key': 'numberOfVms', 'type': 'float'}, + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } - def __init__(self, *, issue=None, number_of_vms: float=None, **kwargs) -> None: - super(AppWhitelistingIssueSummary, self).__init__(**kwargs) - self.issue = issue - self.number_of_vms = number_of_vms - - -class AppWhitelistingPutGroupData(Model): - """The altered data of the recommended VM/server group policy. - - :param enforcement_mode: Possible values include: 'Audit', 'Enforce' - :type enforcement_mode: str or ~azure.mgmt.security.models.enum - :param vm_recommendations: - :type vm_recommendations: - list[~azure.mgmt.security.models.VmRecommendation] - :param path_recommendations: - :type path_recommendations: - list[~azure.mgmt.security.models.PathRecommendation] - """ - _attribute_map = { - 'enforcement_mode': {'key': 'enforcementMode', 'type': 'str'}, - 'vm_recommendations': {'key': 'vmRecommendations', 'type': '[VmRecommendation]'}, - 'path_recommendations': {'key': 'pathRecommendations', 'type': '[PathRecommendation]'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, *, enforcement_mode=None, vm_recommendations=None, path_recommendations=None, **kwargs) -> None: - super(AppWhitelistingPutGroupData, self).__init__(**kwargs) - self.enforcement_mode = enforcement_mode - self.vm_recommendations = vm_recommendations - self.path_recommendations = path_recommendations + _subtype_map = { + 'rule_type': {'ActiveConnectionsNotInAllowedRange': 'ActiveConnectionsNotInAllowedRange', 'AmqpC2DMessagesNotInAllowedRange': 'AmqpC2DMessagesNotInAllowedRange', 'AmqpC2DRejectedMessagesNotInAllowedRange': 'AmqpC2DRejectedMessagesNotInAllowedRange', 'AmqpD2CMessagesNotInAllowedRange': 'AmqpD2CMessagesNotInAllowedRange', 'DirectMethodInvokesNotInAllowedRange': 'DirectMethodInvokesNotInAllowedRange', 'FailedLocalLoginsNotInAllowedRange': 'FailedLocalLoginsNotInAllowedRange', 'FileUploadsNotInAllowedRange': 'FileUploadsNotInAllowedRange', 'HttpC2DMessagesNotInAllowedRange': 'HttpC2DMessagesNotInAllowedRange', 'HttpC2DRejectedMessagesNotInAllowedRange': 'HttpC2DRejectedMessagesNotInAllowedRange', 'HttpD2CMessagesNotInAllowedRange': 'HttpD2CMessagesNotInAllowedRange', 'MqttC2DMessagesNotInAllowedRange': 'MqttC2DMessagesNotInAllowedRange', 'MqttC2DRejectedMessagesNotInAllowedRange': 'MqttC2DRejectedMessagesNotInAllowedRange', 'MqttD2CMessagesNotInAllowedRange': 'MqttD2CMessagesNotInAllowedRange', 'QueuePurgesNotInAllowedRange': 'QueuePurgesNotInAllowedRange', 'TwinUpdatesNotInAllowedRange': 'TwinUpdatesNotInAllowedRange', 'UnauthorizedOperationsNotInAllowedRange': 'UnauthorizedOperationsNotInAllowedRange'} + } + def __init__( + self, + *, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(TimeWindowCustomAlertRule, self).__init__(is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, **kwargs) + self.rule_type = 'TimeWindowCustomAlertRule' # type: str + self.time_window_size = time_window_size -class AscLocation(Resource): - """The ASC location of the subscription is in the "name" field. - Variables are only populated by the server, and will be ignored when - sending a request. +class ActiveConnectionsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of active connections is not in allowed range. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param properties: - :type properties: object + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'object'}, - } - - def __init__(self, *, properties=None, **kwargs) -> None: - super(AscLocation, self).__init__(**kwargs) - self.properties = properties - - -class AtaExternalSecuritySolution(ExternalSecuritySolution): - """Represents an ATA security solution which sends logs to an OMS workspace. - - Variables are only populated by the server, and will be ignored when - sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(ActiveConnectionsNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'ActiveConnectionsNotInAllowedRange' # type: str + self.rule_type = 'ActiveConnectionsNotInAllowedRange' # type: str + + +class AdaptiveApplicationControlGroup(Resource, Location): + """AdaptiveApplicationControlGroup. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str - :param properties: - :type properties: ~azure.mgmt.security.models.AtaSolutionProperties + :param enforcement_mode: The application control policy enforcement/protection mode of the + machine group. Possible values include: "Audit", "Enforce", "None". + :type enforcement_mode: str or ~azure.mgmt.security.models.EnforcementMode + :param protection_mode: The protection mode of the collection/file types. Exe/Msi/Script are + used for Windows, Executable is used for Linux. + :type protection_mode: ~azure.mgmt.security.models.ProtectionMode + :ivar configuration_status: The configuration status of the machines group or machine or rule. + Possible values include: "Configured", "NotConfigured", "InProgress", "Failed", "NoStatus". + :vartype configuration_status: str or ~azure.mgmt.security.models.ConfigurationStatus + :ivar recommendation_status: The initial recommendation status of the machine group or machine. + Possible values include: "Recommended", "NotRecommended", "NotAvailable", "NoStatus". + :vartype recommendation_status: str or ~azure.mgmt.security.models.RecommendationStatus + :ivar issues: + :vartype issues: list[~azure.mgmt.security.models.AdaptiveApplicationControlIssueSummary] + :ivar source_system: The source type of the machine group. Possible values include: + "Azure_AppLocker", "Azure_AuditD", "NonAzure_AppLocker", "NonAzure_AuditD", "None". + :vartype source_system: str or ~azure.mgmt.security.models.SourceSystem + :param vm_recommendations: + :type vm_recommendations: list[~azure.mgmt.security.models.VmRecommendation] + :param path_recommendations: + :type path_recommendations: list[~azure.mgmt.security.models.PathRecommendation] """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, + 'configuration_status': {'readonly': True}, + 'recommendation_status': {'readonly': True}, + 'issues': {'readonly': True}, + 'source_system': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'AtaSolutionProperties'}, + 'enforcement_mode': {'key': 'properties.enforcementMode', 'type': 'str'}, + 'protection_mode': {'key': 'properties.protectionMode', 'type': 'ProtectionMode'}, + 'configuration_status': {'key': 'properties.configurationStatus', 'type': 'str'}, + 'recommendation_status': {'key': 'properties.recommendationStatus', 'type': 'str'}, + 'issues': {'key': 'properties.issues', 'type': '[AdaptiveApplicationControlIssueSummary]'}, + 'source_system': {'key': 'properties.sourceSystem', 'type': 'str'}, + 'vm_recommendations': {'key': 'properties.vmRecommendations', 'type': '[VmRecommendation]'}, + 'path_recommendations': {'key': 'properties.pathRecommendations', 'type': '[PathRecommendation]'}, } - def __init__(self, *, properties=None, **kwargs) -> None: - super(AtaExternalSecuritySolution, self).__init__(**kwargs) - self.properties = properties - self.kind = 'ATA' + def __init__( + self, + *, + enforcement_mode: Optional[Union[str, "EnforcementMode"]] = None, + protection_mode: Optional["ProtectionMode"] = None, + vm_recommendations: Optional[List["VmRecommendation"]] = None, + path_recommendations: Optional[List["PathRecommendation"]] = None, + **kwargs + ): + super(AdaptiveApplicationControlGroup, self).__init__(**kwargs) + self.location = None + self.enforcement_mode = enforcement_mode + self.protection_mode = protection_mode + self.configuration_status = None + self.recommendation_status = None + self.issues = None + self.source_system = None + self.vm_recommendations = vm_recommendations + self.path_recommendations = path_recommendations + self.id = None + self.name = None + self.type = None + self.enforcement_mode = enforcement_mode + self.protection_mode = protection_mode + self.configuration_status = None + self.recommendation_status = None + self.issues = None + self.source_system = None + self.vm_recommendations = vm_recommendations + self.path_recommendations = path_recommendations -class ExternalSecuritySolutionProperties(Model): - """The solution properties (correspond to the solution kind). +class AdaptiveApplicationControlGroups(msrest.serialization.Model): + """Represents a list of machine groups and set of rules that are recommended by Azure Security Center to be allowed. - :param additional_properties: Unmatched properties from the message are - deserialized this collection - :type additional_properties: dict[str, object] - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace + :param value: + :type value: list[~azure.mgmt.security.models.AdaptiveApplicationControlGroup] """ _attribute_map = { - 'additional_properties': {'key': '', 'type': '{object}'}, - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, + 'value': {'key': 'value', 'type': '[AdaptiveApplicationControlGroup]'}, } - def __init__(self, *, additional_properties=None, device_vendor: str=None, device_type: str=None, workspace=None, **kwargs) -> None: - super(ExternalSecuritySolutionProperties, self).__init__(**kwargs) - self.additional_properties = additional_properties - self.device_vendor = device_vendor - self.device_type = device_type - self.workspace = workspace + def __init__( + self, + *, + value: Optional[List["AdaptiveApplicationControlGroup"]] = None, + **kwargs + ): + super(AdaptiveApplicationControlGroups, self).__init__(**kwargs) + self.value = value -class AtaSolutionProperties(ExternalSecuritySolutionProperties): - """The external security solution properties for ATA solutions. +class AdaptiveApplicationControlIssueSummary(msrest.serialization.Model): + """Represents a summary of the alerts of the machine group. - :param additional_properties: Unmatched properties from the message are - deserialized this collection - :type additional_properties: dict[str, object] - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace - :param last_event_received: - :type last_event_received: str + :param issue: An alert that machines within a group can have. Possible values include: + "ViolationsAudited", "ViolationsBlocked", "MsiAndScriptViolationsAudited", + "MsiAndScriptViolationsBlocked", "ExecutableViolationsAudited", "RulesViolatedManually". + :type issue: str or ~azure.mgmt.security.models.AdaptiveApplicationControlIssue + :param number_of_vms: The number of machines in the group that have this alert. + :type number_of_vms: float """ _attribute_map = { - 'additional_properties': {'key': '', 'type': '{object}'}, - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, - 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, + 'issue': {'key': 'issue', 'type': 'str'}, + 'number_of_vms': {'key': 'numberOfVms', 'type': 'float'}, } - def __init__(self, *, additional_properties=None, device_vendor: str=None, device_type: str=None, workspace=None, last_event_received: str=None, **kwargs) -> None: - super(AtaSolutionProperties, self).__init__(additional_properties=additional_properties, device_vendor=device_vendor, device_type=device_type, workspace=workspace, **kwargs) - self.last_event_received = last_event_received - + def __init__( + self, + *, + issue: Optional[Union[str, "AdaptiveApplicationControlIssue"]] = None, + number_of_vms: Optional[float] = None, + **kwargs + ): + super(AdaptiveApplicationControlIssueSummary, self).__init__(**kwargs) + self.issue = issue + self.number_of_vms = number_of_vms -class AutoProvisioningSetting(Resource): - """Auto provisioning setting. - Variables are only populated by the server, and will be ignored when - sending a request. +class AdaptiveNetworkHardening(Resource): + """The resource whose properties describes the Adaptive Network Hardening settings for some Azure resource. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param auto_provision: Required. Describes what kind of security agent - provisioning action to take. Possible values include: 'On', 'Off' - :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision + :param rules: The security rules which are recommended to be effective on the VM. + :type rules: list[~azure.mgmt.security.models.Rule] + :param rules_calculation_time: The UTC time on which the rules were calculated. + :type rules_calculation_time: ~datetime.datetime + :param effective_network_security_groups: The Network Security Groups effective on the network + interfaces of the protected resource. + :type effective_network_security_groups: + list[~azure.mgmt.security.models.EffectiveNetworkSecurityGroups] """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'auto_provision': {'required': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'auto_provision': {'key': 'properties.autoProvision', 'type': 'str'}, + 'rules': {'key': 'properties.rules', 'type': '[Rule]'}, + 'rules_calculation_time': {'key': 'properties.rulesCalculationTime', 'type': 'iso-8601'}, + 'effective_network_security_groups': {'key': 'properties.effectiveNetworkSecurityGroups', 'type': '[EffectiveNetworkSecurityGroups]'}, } - def __init__(self, *, auto_provision, **kwargs) -> None: - super(AutoProvisioningSetting, self).__init__(**kwargs) - self.auto_provision = auto_provision + def __init__( + self, + *, + rules: Optional[List["Rule"]] = None, + rules_calculation_time: Optional[datetime.datetime] = None, + effective_network_security_groups: Optional[List["EffectiveNetworkSecurityGroups"]] = None, + **kwargs + ): + super(AdaptiveNetworkHardening, self).__init__(**kwargs) + self.rules = rules + self.rules_calculation_time = rules_calculation_time + self.effective_network_security_groups = effective_network_security_groups -class CefExternalSecuritySolution(ExternalSecuritySolution): - """Represents a security solution which sends CEF logs to an OMS workspace. - - Variables are only populated by the server, and will be ignored when - sending a request. +class AdaptiveNetworkHardeningEnforceRequest(msrest.serialization.Model): + """AdaptiveNetworkHardeningEnforceRequest. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param kind: Required. Constant filled by server. - :type kind: str - :param properties: - :type properties: ~azure.mgmt.security.models.CefSolutionProperties + :param rules: Required. The rules to enforce. + :type rules: list[~azure.mgmt.security.models.Rule] + :param network_security_groups: Required. The Azure resource IDs of the effective network + security groups that will be updated with the created security rules from the Adaptive Network + Hardening rules. + :type network_security_groups: list[str] """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'kind': {'required': True}, + 'rules': {'required': True}, + 'network_security_groups': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'properties': {'key': 'properties', 'type': 'CefSolutionProperties'}, + 'rules': {'key': 'rules', 'type': '[Rule]'}, + 'network_security_groups': {'key': 'networkSecurityGroups', 'type': '[str]'}, } - def __init__(self, *, properties=None, **kwargs) -> None: - super(CefExternalSecuritySolution, self).__init__(**kwargs) - self.properties = properties - self.kind = 'CEF' + def __init__( + self, + *, + rules: List["Rule"], + network_security_groups: List[str], + **kwargs + ): + super(AdaptiveNetworkHardeningEnforceRequest, self).__init__(**kwargs) + self.rules = rules + self.network_security_groups = network_security_groups -class CefSolutionProperties(ExternalSecuritySolutionProperties): - """The external security solution properties for CEF solutions. +class AdaptiveNetworkHardeningsList(msrest.serialization.Model): + """Response for ListAdaptiveNetworkHardenings API service call. - :param additional_properties: Unmatched properties from the message are - deserialized this collection - :type additional_properties: dict[str, object] - :param device_vendor: - :type device_vendor: str - :param device_type: - :type device_type: str - :param workspace: - :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace - :param hostname: - :type hostname: str - :param agent: - :type agent: str - :param last_event_received: - :type last_event_received: str + :param value: A list of Adaptive Network Hardenings resources. + :type value: list[~azure.mgmt.security.models.AdaptiveNetworkHardening] + :param next_link: The URL to get the next set of results. + :type next_link: str """ _attribute_map = { - 'additional_properties': {'key': '', 'type': '{object}'}, - 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, - 'device_type': {'key': 'deviceType', 'type': 'str'}, - 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, - 'hostname': {'key': 'hostname', 'type': 'str'}, - 'agent': {'key': 'agent', 'type': 'str'}, - 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[AdaptiveNetworkHardening]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, *, additional_properties=None, device_vendor: str=None, device_type: str=None, workspace=None, hostname: str=None, agent: str=None, last_event_received: str=None, **kwargs) -> None: - super(CefSolutionProperties, self).__init__(additional_properties=additional_properties, device_vendor=device_vendor, device_type=device_type, workspace=workspace, **kwargs) - self.hostname = hostname - self.agent = agent - self.last_event_received = last_event_received + def __init__( + self, + *, + value: Optional[List["AdaptiveNetworkHardening"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(AdaptiveNetworkHardeningsList, self).__init__(**kwargs) + self.value = value + self.next_link = next_link -class CloudError(Model): - """Error response structure. +class AdditionalData(msrest.serialization.Model): + """Details of the sub-assessment. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ContainerRegistryVulnerabilityProperties, ServerVulnerabilityProperties, SqlServerVulnerabilityProperties. - Variables are only populated by the server, and will be ignored when - sending a request. + All required parameters must be populated in order to send to Azure. - :ivar code: An identifier for the error. Codes are invariant and are - intended to be consumed programmatically. - :vartype code: str - :ivar message: A message describing the error, intended to be suitable for - display in a user interface. - :vartype message: str + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType """ _validation = { - 'code': {'readonly': True}, - 'message': {'readonly': True}, + 'assessed_resource_type': {'required': True}, } _attribute_map = { - 'code': {'key': 'error.code', 'type': 'str'}, - 'message': {'key': 'error.message', 'type': 'str'}, + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(CloudError, self).__init__(**kwargs) - self.code = None - self.message = None - - -class CloudErrorException(HttpOperationError): - """Server responsed with exception of type: 'CloudError'. - - :param deserialize: A deserializer - :param response: Server response to be deserialized. - """ - - def __init__(self, deserialize, response, *args): + _subtype_map = { + 'assessed_resource_type': {'ContainerRegistryVulnerability': 'ContainerRegistryVulnerabilityProperties', 'ServerVulnerabilityAssessment': 'ServerVulnerabilityProperties', 'SqlServerVulnerability': 'SqlServerVulnerabilityProperties'} + } - super(CloudErrorException, self).__init__(deserialize, response, 'CloudError', *args) + def __init__( + self, + **kwargs + ): + super(AdditionalData, self).__init__(**kwargs) + self.assessed_resource_type = None # type: Optional[str] -class Compliance(Resource): - """Compliance of a scope. +class AdvancedThreatProtectionSetting(Resource): + """The Advanced Threat Protection resource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar assessment_timestamp_utc_date: The timestamp when the Compliance - calculation was conducted. - :vartype assessment_timestamp_utc_date: datetime - :ivar resource_count: The resource count of the given subscription for - which the Compliance calculation was conducted (needed for Management - Group Compliance calculation). - :vartype resource_count: int - :ivar assessment_result: An array of segment, which is the actually the - compliance assessment. - :vartype assessment_result: - list[~azure.mgmt.security.models.ComplianceSegment] + :param is_enabled: Indicates whether Advanced Threat Protection is enabled. + :type is_enabled: bool """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'assessment_timestamp_utc_date': {'readonly': True}, - 'resource_count': {'readonly': True}, - 'assessment_result': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'assessment_timestamp_utc_date': {'key': 'properties.assessmentTimestampUtcDate', 'type': 'iso-8601'}, - 'resource_count': {'key': 'properties.resourceCount', 'type': 'int'}, - 'assessment_result': {'key': 'properties.assessmentResult', 'type': '[ComplianceSegment]'}, + 'is_enabled': {'key': 'properties.isEnabled', 'type': 'bool'}, } - def __init__(self, **kwargs) -> None: - super(Compliance, self).__init__(**kwargs) - self.assessment_timestamp_utc_date = None - self.resource_count = None - self.assessment_result = None + def __init__( + self, + *, + is_enabled: Optional[bool] = None, + **kwargs + ): + super(AdvancedThreatProtectionSetting, self).__init__(**kwargs) + self.is_enabled = is_enabled -class ComplianceResult(Resource): - """a compliance result. +class Alert(Resource): + """Security alert. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar resource_status: The status of the resource regarding a single - assessment. Possible values include: 'Healthy', 'NotApplicable', - 'OffByPolicy', 'NotHealthy' - :vartype resource_status: str or - ~azure.mgmt.security.models.ResourceStatus - """ - - _validation = { + :ivar alert_type: Unique identifier for the detection logic (all alert instances from the same + detection logic will have the same alertType). + :vartype alert_type: str + :ivar system_alert_id: Unique identifier for the alert. + :vartype system_alert_id: str + :ivar product_component_name: The name of Azure Security Center pricing tier which powering + this alert. Learn more: https://docs.microsoft.com/en-us/azure/security-center/security-center- + pricing. + :vartype product_component_name: str + :ivar alert_display_name: The display name of the alert. + :vartype alert_display_name: str + :ivar description: Description of the suspicious activity that was detected. + :vartype description: str + :ivar severity: The risk level of the threat that was detected. Learn more: + https://docs.microsoft.com/en-us/azure/security-center/security-center-alerts-overview#how-are- + alerts-classified. Possible values include: "Informational", "Low", "Medium", "High". + :vartype severity: str or ~azure.mgmt.security.models.AlertSeverity + :ivar intent: The kill chain related intent behind the alert. For list of supported values, and + explanations of Azure Security Center's supported kill chain intents. Possible values include: + "Unknown", "PreAttack", "InitialAccess", "Persistence", "PrivilegeEscalation", + "DefenseEvasion", "CredentialAccess", "Discovery", "LateralMovement", "Execution", + "Collection", "Exfiltration", "CommandAndControl", "Impact", "Probing", "Exploitation". + :vartype intent: str or ~azure.mgmt.security.models.Intent + :ivar start_time_utc: The UTC time of the first event or activity included in the alert in + ISO8601 format. + :vartype start_time_utc: ~datetime.datetime + :ivar end_time_utc: The UTC time of the last event or activity included in the alert in ISO8601 + format. + :vartype end_time_utc: ~datetime.datetime + :ivar resource_identifiers: The resource identifiers that can be used to direct the alert to + the right product exposure group (tenant, workspace, subscription etc.). There can be multiple + identifiers of different type per alert. + :vartype resource_identifiers: list[~azure.mgmt.security.models.ResourceIdentifier] + :ivar remediation_steps: Manual action items to take to remediate the alert. + :vartype remediation_steps: list[str] + :ivar vendor_name: The name of the vendor that raises the alert. + :vartype vendor_name: str + :ivar status: The life cycle status of the alert. Possible values include: "Active", + "Resolved", "Dismissed". + :vartype status: str or ~azure.mgmt.security.models.AlertStatus + :ivar extended_links: Links related to the alert. + :vartype extended_links: list[dict[str, str]] + :ivar alert_uri: A direct link to the alert page in Azure Portal. + :vartype alert_uri: str + :ivar time_generated_utc: The UTC time the alert was generated in ISO8601 format. + :vartype time_generated_utc: ~datetime.datetime + :ivar product_name: The name of the product which published this alert (Azure Security Center, + Azure ATP, Microsoft Defender ATP, O365 ATP, MCAS, and so on). + :vartype product_name: str + :ivar processing_end_time_utc: The UTC processing end time of the alert in ISO8601 format. + :vartype processing_end_time_utc: ~datetime.datetime + :ivar entities: A list of entities related to the alert. + :vartype entities: list[~azure.mgmt.security.models.AlertEntity] + :ivar is_incident: This field determines whether the alert is an incident (a compound grouping + of several alerts) or a single alert. + :vartype is_incident: bool + :ivar correlation_key: Key for corelating related alerts. Alerts with the same correlation key + considered to be related. + :vartype correlation_key: str + :param extended_properties: Custom properties for the alert. + :type extended_properties: dict[str, str] + :ivar compromised_entity: The display name of the resource most related to this alert. + :vartype compromised_entity: str + """ + + _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'resource_status': {'readonly': True}, + 'alert_type': {'readonly': True}, + 'system_alert_id': {'readonly': True}, + 'product_component_name': {'readonly': True}, + 'alert_display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'severity': {'readonly': True}, + 'intent': {'readonly': True}, + 'start_time_utc': {'readonly': True}, + 'end_time_utc': {'readonly': True}, + 'resource_identifiers': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'status': {'readonly': True}, + 'extended_links': {'readonly': True}, + 'alert_uri': {'readonly': True}, + 'time_generated_utc': {'readonly': True}, + 'product_name': {'readonly': True}, + 'processing_end_time_utc': {'readonly': True}, + 'entities': {'readonly': True}, + 'is_incident': {'readonly': True}, + 'correlation_key': {'readonly': True}, + 'compromised_entity': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'resource_status': {'key': 'properties.resourceStatus', 'type': 'str'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'system_alert_id': {'key': 'properties.systemAlertId', 'type': 'str'}, + 'product_component_name': {'key': 'properties.productComponentName', 'type': 'str'}, + 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'intent': {'key': 'properties.intent', 'type': 'str'}, + 'start_time_utc': {'key': 'properties.startTimeUtc', 'type': 'iso-8601'}, + 'end_time_utc': {'key': 'properties.endTimeUtc', 'type': 'iso-8601'}, + 'resource_identifiers': {'key': 'properties.resourceIdentifiers', 'type': '[ResourceIdentifier]'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': '[str]'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'extended_links': {'key': 'properties.extendedLinks', 'type': '[{str}]'}, + 'alert_uri': {'key': 'properties.alertUri', 'type': 'str'}, + 'time_generated_utc': {'key': 'properties.timeGeneratedUtc', 'type': 'iso-8601'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'processing_end_time_utc': {'key': 'properties.processingEndTimeUtc', 'type': 'iso-8601'}, + 'entities': {'key': 'properties.entities', 'type': '[AlertEntity]'}, + 'is_incident': {'key': 'properties.isIncident', 'type': 'bool'}, + 'correlation_key': {'key': 'properties.correlationKey', 'type': 'str'}, + 'extended_properties': {'key': 'properties.extendedProperties', 'type': '{str}'}, + 'compromised_entity': {'key': 'properties.compromisedEntity', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(ComplianceResult, self).__init__(**kwargs) - self.resource_status = None + def __init__( + self, + *, + extended_properties: Optional[Dict[str, str]] = None, + **kwargs + ): + super(Alert, self).__init__(**kwargs) + self.alert_type = None + self.system_alert_id = None + self.product_component_name = None + self.alert_display_name = None + self.description = None + self.severity = None + self.intent = None + self.start_time_utc = None + self.end_time_utc = None + self.resource_identifiers = None + self.remediation_steps = None + self.vendor_name = None + self.status = None + self.extended_links = None + self.alert_uri = None + self.time_generated_utc = None + self.product_name = None + self.processing_end_time_utc = None + self.entities = None + self.is_incident = None + self.correlation_key = None + self.extended_properties = extended_properties + self.compromised_entity = None -class ComplianceSegment(Model): - """A segment of a compliance assessment. +class AlertEntity(msrest.serialization.Model): + """Changing set of properties depending on the entity type. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar segment_type: The segment type, e.g. compliant, non-compliance, - insufficient coverage, N/A, etc. - :vartype segment_type: str - :ivar percentage: The size (%) of the segment. - :vartype percentage: float + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :ivar type: Type of entity. + :vartype type: str """ _validation = { - 'segment_type': {'readonly': True}, - 'percentage': {'readonly': True}, + 'type': {'readonly': True}, } _attribute_map = { - 'segment_type': {'key': 'segmentType', 'type': 'str'}, - 'percentage': {'key': 'percentage', 'type': 'float'}, + 'additional_properties': {'key': '', 'type': '{object}'}, + 'type': {'key': 'type', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(ComplianceSegment, self).__init__(**kwargs) - self.segment_type = None - self.percentage = None + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + **kwargs + ): + super(AlertEntity, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.type = None -class ConnectableResource(Model): - """Describes the allowed inbound and outbound traffic of an Azure resource. +class AlertList(msrest.serialization.Model): + """List of security alerts. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: The Azure resource id - :vartype id: str - :ivar inbound_connected_resources: The list of Azure resources that the - resource has inbound allowed connection from - :vartype inbound_connected_resources: - list[~azure.mgmt.security.models.ConnectedResource] - :ivar outbound_connected_resources: The list of Azure resources that the - resource has outbound allowed connection to - :vartype outbound_connected_resources: - list[~azure.mgmt.security.models.ConnectedResource] + :param value: describes security alert properties. + :type value: list[~azure.mgmt.security.models.Alert] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'id': {'readonly': True}, - 'inbound_connected_resources': {'readonly': True}, - 'outbound_connected_resources': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'inbound_connected_resources': {'key': 'inboundConnectedResources', 'type': '[ConnectedResource]'}, - 'outbound_connected_resources': {'key': 'outboundConnectedResources', 'type': '[ConnectedResource]'}, + 'value': {'key': 'value', 'type': '[Alert]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(ConnectableResource, self).__init__(**kwargs) - self.id = None - self.inbound_connected_resources = None - self.outbound_connected_resources = None + def __init__( + self, + *, + value: Optional[List["Alert"]] = None, + **kwargs + ): + super(AlertList, self).__init__(**kwargs) + self.value = value + self.next_link = None -class ConnectedResource(Model): - """Describes properties of a connected resource. +class AlertsSuppressionRule(Resource): + """Describes the suppression rule. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar connected_resource_id: The Azure resource id of the connected - resource - :vartype connected_resource_id: str - :ivar tcp_ports: The allowed tcp ports - :vartype tcp_ports: str - :ivar udp_ports: The allowed udp ports - :vartype udp_ports: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param alert_type: Type of the alert to automatically suppress. For all alert types, use '*'. + :type alert_type: str + :ivar last_modified_utc: The last time this rule was modified. + :vartype last_modified_utc: ~datetime.datetime + :param expiration_date_utc: Expiration date of the rule, if value is not provided or provided + as null this field will default to the maximum allowed expiration date. + :type expiration_date_utc: ~datetime.datetime + :param reason: The reason for dismissing the alert. + :type reason: str + :param state: Possible states of the rule. Possible values include: "Enabled", "Disabled", + "Expired". + :type state: str or ~azure.mgmt.security.models.RuleState + :param comment: Any comment regarding the rule. + :type comment: str + :param suppression_alerts_scope: The suppression conditions. + :type suppression_alerts_scope: ~azure.mgmt.security.models.SuppressionAlertsScope """ _validation = { - 'connected_resource_id': {'readonly': True}, - 'tcp_ports': {'readonly': True}, - 'udp_ports': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'last_modified_utc': {'readonly': True}, } _attribute_map = { - 'connected_resource_id': {'key': 'connectedResourceId', 'type': 'str'}, - 'tcp_ports': {'key': 'tcpPorts', 'type': 'str'}, - 'udp_ports': {'key': 'udpPorts', 'type': 'str'}, - } + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'last_modified_utc': {'key': 'properties.lastModifiedUtc', 'type': 'iso-8601'}, + 'expiration_date_utc': {'key': 'properties.expirationDateUtc', 'type': 'iso-8601'}, + 'reason': {'key': 'properties.reason', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'comment': {'key': 'properties.comment', 'type': 'str'}, + 'suppression_alerts_scope': {'key': 'properties.suppressionAlertsScope', 'type': 'SuppressionAlertsScope'}, + } + + def __init__( + self, + *, + alert_type: Optional[str] = None, + expiration_date_utc: Optional[datetime.datetime] = None, + reason: Optional[str] = None, + state: Optional[Union[str, "RuleState"]] = None, + comment: Optional[str] = None, + suppression_alerts_scope: Optional["SuppressionAlertsScope"] = None, + **kwargs + ): + super(AlertsSuppressionRule, self).__init__(**kwargs) + self.alert_type = alert_type + self.last_modified_utc = None + self.expiration_date_utc = expiration_date_utc + self.reason = reason + self.state = state + self.comment = comment + self.suppression_alerts_scope = suppression_alerts_scope - def __init__(self, **kwargs) -> None: - super(ConnectedResource, self).__init__(**kwargs) - self.connected_resource_id = None - self.tcp_ports = None - self.udp_ports = None +class AlertsSuppressionRulesList(msrest.serialization.Model): + """Suppression rules list for subscription. -class ConnectedWorkspace(Model): - """Represents an OMS workspace to which the solution is connected. + Variables are only populated by the server, and will be ignored when sending a request. - :param id: Azure resource ID of the connected OMS workspace - :type id: str + All required parameters must be populated in order to send to Azure. + + :param value: Required. + :type value: list[~azure.mgmt.security.models.AlertsSuppressionRule] + :ivar next_link: URI to fetch the next page. + :vartype next_link: str """ - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, } - def __init__(self, *, id: str=None, **kwargs) -> None: - super(ConnectedWorkspace, self).__init__(**kwargs) - self.id = id + _attribute_map = { + 'value': {'key': 'value', 'type': '[AlertsSuppressionRule]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + def __init__( + self, + *, + value: List["AlertsSuppressionRule"], + **kwargs + ): + super(AlertsSuppressionRulesList, self).__init__(**kwargs) + self.value = value + self.next_link = None -class SettingResource(Resource): - """The kind of the security setting. - Variables are only populated by the server, and will be ignored when - sending a request. +class AllowedConnectionsList(msrest.serialization.Model): + """List of all possible traffic between Azure resources. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param kind: Required. the kind of the settings string - (DataExportSetting). Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind + :ivar value: + :vartype value: list[~azure.mgmt.security.models.AllowedConnectionsResource] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'kind': {'required': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[AllowedConnectionsResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, *, kind, **kwargs) -> None: - super(SettingResource, self).__init__(**kwargs) - self.kind = kind - + def __init__( + self, + **kwargs + ): + super(AllowedConnectionsList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class Setting(SettingResource): - """Represents a security setting in Azure Security Center. - Variables are only populated by the server, and will be ignored when - sending a request. +class AllowedConnectionsResource(Resource, Location): + """The resource whose properties describes the allowed traffic between Azure resources. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param kind: Required. the kind of the settings string - (DataExportSetting). Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind + :ivar calculated_date_time: The UTC time on which the allowed connections resource was + calculated. + :vartype calculated_date_time: ~datetime.datetime + :ivar connectable_resources: List of connectable resources. + :vartype connectable_resources: list[~azure.mgmt.security.models.ConnectableResource] """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'kind': {'required': True}, + 'calculated_date_time': {'readonly': True}, + 'connectable_resources': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, + 'calculated_date_time': {'key': 'properties.calculatedDateTime', 'type': 'iso-8601'}, + 'connectable_resources': {'key': 'properties.connectableResources', 'type': '[ConnectableResource]'}, } - def __init__(self, *, kind, **kwargs) -> None: - super(Setting, self).__init__(kind=kind, **kwargs) + def __init__( + self, + **kwargs + ): + super(AllowedConnectionsResource, self).__init__(**kwargs) + self.location = None + self.calculated_date_time = None + self.connectable_resources = None + self.id = None + self.name = None + self.type = None + self.calculated_date_time = None + self.connectable_resources = None + +class ListCustomAlertRule(CustomAlertRule): + """A List custom alert rule. -class DataExportSetting(Setting): - """Represents a data export setting. + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AllowlistCustomAlertRule, DenylistCustomAlertRule. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param kind: Required. the kind of the settings string - (DataExportSetting). Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind - :param enabled: Required. Is the data export setting is enabled - :type enabled: bool + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'kind': {'required': True}, - 'enabled': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'enabled': {'key': 'properties.enabled', 'type': 'bool'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, } - def __init__(self, *, kind, enabled: bool, **kwargs) -> None: - super(DataExportSetting, self).__init__(kind=kind, **kwargs) - self.enabled = enabled + _subtype_map = { + 'rule_type': {'AllowlistCustomAlertRule': 'AllowlistCustomAlertRule', 'DenylistCustomAlertRule': 'DenylistCustomAlertRule'} + } + def __init__( + self, + *, + is_enabled: bool, + **kwargs + ): + super(ListCustomAlertRule, self).__init__(is_enabled=is_enabled, **kwargs) + self.rule_type = 'ListCustomAlertRule' # type: str + self.value_type = None -class DiscoveredSecuritySolution(Model): - """DiscoveredSecuritySolution. - Variables are only populated by the server, and will be ignored when - sending a request. +class AllowlistCustomAlertRule(ListCustomAlertRule): + """A custom alert rule that checks if a value (depends on the custom alert type) is allowed. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: ConnectionToIpNotAllowed, LocalUserNotAllowed, ProcessNotAllowed. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :param security_family: Required. The security family of the discovered - solution. Possible values include: 'Waf', 'Ngfw', 'SaasWaf', 'Va' - :type security_family: str or ~azure.mgmt.security.models.SecurityFamily - :param offer: Required. The security solutions' image offer - :type offer: str - :param publisher: Required. The security solutions' image publisher - :type publisher: str - :param sku: Required. The security solutions' image sku - :type sku: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'security_family': {'required': True}, - 'offer': {'required': True}, - 'publisher': {'required': True}, - 'sku': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, - 'offer': {'key': 'properties.offer', 'type': 'str'}, - 'publisher': {'key': 'properties.publisher', 'type': 'str'}, - 'sku': {'key': 'properties.sku', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, } - def __init__(self, *, security_family, offer: str, publisher: str, sku: str, **kwargs) -> None: - super(DiscoveredSecuritySolution, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = None - self.security_family = security_family - self.offer = offer - self.publisher = publisher - self.sku = sku - + _subtype_map = { + 'rule_type': {'ConnectionToIpNotAllowed': 'ConnectionToIpNotAllowed', 'LocalUserNotAllowed': 'LocalUserNotAllowed', 'ProcessNotAllowed': 'ProcessNotAllowed'} + } -class ExternalSecuritySolutionKind1(Model): - """Describes an Azure resource with kind. + def __init__( + self, + *, + is_enabled: bool, + allowlist_values: List[str], + **kwargs + ): + super(AllowlistCustomAlertRule, self).__init__(is_enabled=is_enabled, **kwargs) + self.rule_type = 'AllowlistCustomAlertRule' # type: str + self.allowlist_values = allowlist_values - :param kind: The kind of the external solution. Possible values include: - 'CEF', 'ATA', 'AAD' - :type kind: str or - ~azure.mgmt.security.models.ExternalSecuritySolutionKind - """ - _attribute_map = { - 'kind': {'key': 'kind', 'type': 'str'}, - } +class AmqpC2DMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of cloud to device messages (AMQP protocol) is not in allowed range. - def __init__(self, *, kind=None, **kwargs) -> None: - super(ExternalSecuritySolutionKind1, self).__init__(**kwargs) - self.kind = kind + Variables are only populated by the server, and will be ignored when sending a request. + All required parameters must be populated in order to send to Azure. -class InformationProtectionKeyword(Model): - """The information type keyword. + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ - :param pattern: The keyword pattern. - :type pattern: str - :param custom: Indicates whether the keyword is custom or not. - :type custom: bool - :param can_be_numeric: Indicates whether the keyword can be applied on - numeric types or not. - :type can_be_numeric: bool - :param excluded: Indicates whether the keyword is excluded or not. - :type excluded: bool - """ + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } _attribute_map = { - 'pattern': {'key': 'pattern', 'type': 'str'}, - 'custom': {'key': 'custom', 'type': 'bool'}, - 'can_be_numeric': {'key': 'canBeNumeric', 'type': 'bool'}, - 'excluded': {'key': 'excluded', 'type': 'bool'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, *, pattern: str=None, custom: bool=None, can_be_numeric: bool=None, excluded: bool=None, **kwargs) -> None: - super(InformationProtectionKeyword, self).__init__(**kwargs) - self.pattern = pattern - self.custom = custom - self.can_be_numeric = can_be_numeric - self.excluded = excluded + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(AmqpC2DMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'AmqpC2DMessagesNotInAllowedRange' # type: str + self.rule_type = 'AmqpC2DMessagesNotInAllowedRange' # type: str -class InformationProtectionPolicy(Resource): - """Information protection policy. +class AmqpC2DRejectedMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of rejected cloud to device messages (AMQP protocol) is not in allowed range. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar last_modified_utc: Describes the last UTC time the policy was - modified. - :vartype last_modified_utc: datetime - :param labels: Dictionary of sensitivity labels. - :type labels: dict[str, ~azure.mgmt.security.models.SensitivityLabel] - :param information_types: The sensitivity information types. - :type information_types: dict[str, - ~azure.mgmt.security.models.InformationType] + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'last_modified_utc': {'readonly': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'last_modified_utc': {'key': 'properties.lastModifiedUtc', 'type': 'iso-8601'}, - 'labels': {'key': 'properties.labels', 'type': '{SensitivityLabel}'}, - 'information_types': {'key': 'properties.informationTypes', 'type': '{InformationType}'}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } - def __init__(self, *, labels=None, information_types=None, **kwargs) -> None: - super(InformationProtectionPolicy, self).__init__(**kwargs) - self.last_modified_utc = None - self.labels = labels - self.information_types = information_types - - -class InformationType(Model): - """The information type. - - :param display_name: The name of the information type. - :type display_name: str - :param order: The order of the information type. - :type order: float - :param recommended_label_id: The recommended label id to be associated - with this information type. - :type recommended_label_id: str - :param enabled: Indicates whether the information type is enabled or not. - :type enabled: bool - :param custom: Indicates whether the information type is custom or not. - :type custom: bool - :param keywords: The information type keywords. - :type keywords: - list[~azure.mgmt.security.models.InformationProtectionKeyword] - """ - _attribute_map = { 'display_name': {'key': 'displayName', 'type': 'str'}, - 'order': {'key': 'order', 'type': 'float'}, - 'recommended_label_id': {'key': 'recommendedLabelId', 'type': 'str'}, - 'enabled': {'key': 'enabled', 'type': 'bool'}, - 'custom': {'key': 'custom', 'type': 'bool'}, - 'keywords': {'key': 'keywords', 'type': '[InformationProtectionKeyword]'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, *, display_name: str=None, order: float=None, recommended_label_id: str=None, enabled: bool=None, custom: bool=None, keywords=None, **kwargs) -> None: - super(InformationType, self).__init__(**kwargs) - self.display_name = display_name - self.order = order - self.recommended_label_id = recommended_label_id - self.enabled = enabled - self.custom = custom - self.keywords = keywords + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(AmqpC2DRejectedMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'AmqpC2DRejectedMessagesNotInAllowedRange' # type: str + self.rule_type = 'AmqpC2DRejectedMessagesNotInAllowedRange' # type: str -class IoTSecurityAggregatedAlert(Model): - """Security Solution Aggregated Alert information. +class AmqpD2CMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device to cloud messages (AMQP protocol) is not in allowed range. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :param tags: Resource tags - :type tags: dict[str, str] - :ivar alert_type: Name of the alert type - :vartype alert_type: str - :ivar alert_display_name: Display name of the alert type - :vartype alert_display_name: str - :ivar aggregated_date_utc: The date the incidents were detected by the - vendor - :vartype aggregated_date_utc: date - :ivar vendor_name: Name of the vendor that discovered the incident - :vartype vendor_name: str - :ivar reported_severity: Estimated severity of this alert. Possible values - include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar remediation_steps: Recommended steps for remediation - :vartype remediation_steps: str - :ivar description: Description of the incident and what it means + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. :vartype description: str - :ivar count: Occurrence number of the alert within the aggregated date - :vartype count: int - :ivar effected_resource_type: Azure resource ID of the resource that got - the alerts - :vartype effected_resource_type: str - :ivar system_source: The type of the alerted resource (Azure, Non-Azure) - :vartype system_source: str - :ivar action_taken: The action that was taken as a response to the alert - (Active, Blocked etc.) - :vartype action_taken: str - :ivar log_analytics_query: query in log analytics to get the list of - affected devices/alerts - :vartype log_analytics_query: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'alert_type': {'readonly': True}, - 'alert_display_name': {'readonly': True}, - 'aggregated_date_utc': {'readonly': True}, - 'vendor_name': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'remediation_steps': {'readonly': True}, + 'display_name': {'readonly': True}, 'description': {'readonly': True}, - 'count': {'readonly': True}, - 'effected_resource_type': {'readonly': True}, - 'system_source': {'readonly': True}, - 'action_taken': {'readonly': True}, - 'log_analytics_query': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, - 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, - 'aggregated_date_utc': {'key': 'properties.aggregatedDateUtc', 'type': 'date'}, - 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, - 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, - 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'count': {'key': 'properties.count', 'type': 'int'}, - 'effected_resource_type': {'key': 'properties.effectedResourceType', 'type': 'str'}, - 'system_source': {'key': 'properties.systemSource', 'type': 'str'}, - 'action_taken': {'key': 'properties.actionTaken', 'type': 'str'}, - 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, - } - - def __init__(self, *, tags=None, **kwargs) -> None: - super(IoTSecurityAggregatedAlert, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.tags = tags - self.alert_type = None - self.alert_display_name = None - self.aggregated_date_utc = None - self.vendor_name = None - self.reported_severity = None - self.remediation_steps = None - self.description = None - self.count = None - self.effected_resource_type = None - self.system_source = None - self.action_taken = None - self.log_analytics_query = None + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(AmqpD2CMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'AmqpD2CMessagesNotInAllowedRange' # type: str + self.rule_type = 'AmqpD2CMessagesNotInAllowedRange' # type: str -class IoTSecurityAggregatedRecommendation(Model): - """Security Solution Recommendation Information. +class AscLocation(Resource): + """The ASC location of the subscription is in the "name" field. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param tags: Resource tags - :type tags: dict[str, str] - :param recommendation_name: Name of the recommendation - :type recommendation_name: str - :ivar recommendation_display_name: Display name of the recommendation - type. - :vartype recommendation_display_name: str - :ivar description: Description of the incident and what it means - :vartype description: str - :ivar recommendation_type_id: The recommendation-type GUID. - :vartype recommendation_type_id: str - :ivar detected_by: Name of the vendor that discovered the issue - :vartype detected_by: str - :ivar remediation_steps: Recommended steps for remediation - :vartype remediation_steps: str - :ivar reported_severity: Estimated severity of this recommendation. - Possible values include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar healthy_devices: the number of the healthy devices within the - solution - :vartype healthy_devices: int - :ivar unhealthy_device_count: the number of the unhealthy devices within - the solution - :vartype unhealthy_device_count: int - :ivar log_analytics_query: query in log analytics to get the list of - affected devices/alerts - :vartype log_analytics_query: str + :param properties: Any object. + :type properties: object """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'recommendation_display_name': {'readonly': True}, - 'description': {'readonly': True}, - 'recommendation_type_id': {'readonly': True}, - 'detected_by': {'readonly': True}, - 'remediation_steps': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'healthy_devices': {'readonly': True}, - 'unhealthy_device_count': {'readonly': True}, - 'log_analytics_query': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'recommendation_name': {'key': 'properties.recommendationName', 'type': 'str'}, - 'recommendation_display_name': {'key': 'properties.recommendationDisplayName', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'recommendation_type_id': {'key': 'properties.recommendationTypeId', 'type': 'str'}, - 'detected_by': {'key': 'properties.detectedBy', 'type': 'str'}, - 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, - 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, - 'healthy_devices': {'key': 'properties.healthyDevices', 'type': 'int'}, - 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, - 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'object'}, } - def __init__(self, *, tags=None, recommendation_name: str=None, **kwargs) -> None: - super(IoTSecurityAggregatedRecommendation, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.tags = tags - self.recommendation_name = recommendation_name - self.recommendation_display_name = None - self.description = None - self.recommendation_type_id = None - self.detected_by = None - self.remediation_steps = None - self.reported_severity = None - self.healthy_devices = None - self.unhealthy_device_count = None - self.log_analytics_query = None + def __init__( + self, + *, + properties: Optional[object] = None, + **kwargs + ): + super(AscLocation, self).__init__(**kwargs) + self.properties = properties -class IoTSecurityAlertedDevice(Model): - """Statistic information about the number of alerts per device during the last - period. +class AscLocationList(msrest.serialization.Model): + """List of locations where ASC saves your data. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar device_id: Name of the alert type - :vartype device_id: str - :ivar alerts_count: the number of alerts raised for this device - :vartype alerts_count: int + :ivar value: + :vartype value: list[~azure.mgmt.security.models.AscLocation] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'device_id': {'readonly': True}, - 'alerts_count': {'readonly': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'device_id': {'key': 'deviceId', 'type': 'str'}, - 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + 'value': {'key': 'value', 'type': '[AscLocation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(IoTSecurityAlertedDevice, self).__init__(**kwargs) - self.device_id = None - self.alerts_count = None + def __init__( + self, + **kwargs + ): + super(AscLocationList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class IoTSecurityAlertedDevicesList(Model): - """List of devices with the count of raised alerts. +class AssessmentLinks(msrest.serialization.Model): + """Links relevant to the assessment. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param value: Required. List of aggregated alerts data - :type value: list[~azure.mgmt.security.models.IoTSecurityAlertedDevice] + :ivar azure_portal_uri: Link to assessment in Azure Portal. + :vartype azure_portal_uri: str """ _validation = { - 'value': {'required': True}, + 'azure_portal_uri': {'readonly': True}, } _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecurityAlertedDevice]'}, + 'azure_portal_uri': {'key': 'azurePortalUri', 'type': 'str'}, } - def __init__(self, *, value, **kwargs) -> None: - super(IoTSecurityAlertedDevicesList, self).__init__(**kwargs) - self.value = value + def __init__( + self, + **kwargs + ): + super(AssessmentLinks, self).__init__(**kwargs) + self.azure_portal_uri = None -class IoTSecurityDeviceAlert(Model): - """Statistic information about the number of alerts per alert type during the - last period. +class AssessmentStatus(msrest.serialization.Model): + """The result of the assessment. - Variables are only populated by the server, and will be ignored when - sending a request. + All required parameters must be populated in order to send to Azure. - :ivar alert_display_name: Display name of the alert - :vartype alert_display_name: str - :ivar reported_severity: Estimated severity of this alert. Possible values - include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar alerts_count: the number of alerts raised for this alert type - :vartype alerts_count: int + :param code: Required. Programmatic code for the status of the assessment. Possible values + include: "Healthy", "Unhealthy", "NotApplicable". + :type code: str or ~azure.mgmt.security.models.AssessmentStatusCode + :param cause: Programmatic code for the cause of the assessment status. + :type cause: str + :param description: Human readable description of the assessment status. + :type description: str """ _validation = { - 'alert_display_name': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'alerts_count': {'readonly': True}, + 'code': {'required': True}, } _attribute_map = { - 'alert_display_name': {'key': 'alertDisplayName', 'type': 'str'}, - 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, - 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + 'code': {'key': 'code', 'type': 'str'}, + 'cause': {'key': 'cause', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(IoTSecurityDeviceAlert, self).__init__(**kwargs) - self.alert_display_name = None - self.reported_severity = None - self.alerts_count = None - + def __init__( + self, + *, + code: Union[str, "AssessmentStatusCode"], + cause: Optional[str] = None, + description: Optional[str] = None, + **kwargs + ): + super(AssessmentStatus, self).__init__(**kwargs) + self.code = code + self.cause = cause + self.description = description -class IoTSecurityDeviceAlertsList(Model): - """List of alerts with the count of raised alerts. - Variables are only populated by the server, and will be ignored when - sending a request. +class AtaExternalSecuritySolution(ExternalSecuritySolution): + """Represents an ATA security solution which sends logs to an OMS workspace. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param value: Required. List of top alerts data - :type value: list[~azure.mgmt.security.models.IoTSecurityDeviceAlert] - :ivar next_link: The URI to fetch the next page. - :vartype next_link: str + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: The external security solution properties for ATA solutions. + :type properties: ~azure.mgmt.security.models.AtaSolutionProperties """ _validation = { - 'value': {'required': True}, - 'next_link': {'readonly': True}, - } - - _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecurityDeviceAlert]'}, - 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, } - def __init__(self, *, value, **kwargs) -> None: - super(IoTSecurityDeviceAlertsList, self).__init__(**kwargs) - self.value = value - self.next_link = None + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'AtaSolutionProperties'}, + } + def __init__( + self, + *, + kind: Optional[Union[str, "ExternalSecuritySolutionKindEnum"]] = None, + properties: Optional["AtaSolutionProperties"] = None, + **kwargs + ): + super(AtaExternalSecuritySolution, self).__init__(kind=kind, **kwargs) + self.properties = properties -class IoTSecurityDeviceRecommendation(Model): - """Statistic information about the number of recommendations per - recommendation type. - Variables are only populated by the server, and will be ignored when - sending a request. +class AtaSolutionProperties(ExternalSecuritySolutionProperties): + """The external security solution properties for ATA solutions. - :ivar recommendation_display_name: Display name of the recommendation - :vartype recommendation_display_name: str - :ivar reported_severity: Estimated severity of this recommendation. - Possible values include: 'Informational', 'Low', 'Medium', 'High' - :vartype reported_severity: str or - ~azure.mgmt.security.models.ReportedSeverity - :ivar devices_count: the number of device with this recommendation - :vartype devices_count: int + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace + :param last_event_received: + :type last_event_received: str """ - _validation = { - 'recommendation_display_name': {'readonly': True}, - 'reported_severity': {'readonly': True}, - 'devices_count': {'readonly': True}, - } - _attribute_map = { - 'recommendation_display_name': {'key': 'recommendationDisplayName', 'type': 'str'}, - 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, - 'devices_count': {'key': 'devicesCount', 'type': 'int'}, + 'additional_properties': {'key': '', 'type': '{object}'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, + 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(IoTSecurityDeviceRecommendation, self).__init__(**kwargs) - self.recommendation_display_name = None - self.reported_severity = None - self.devices_count = None + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + device_vendor: Optional[str] = None, + device_type: Optional[str] = None, + workspace: Optional["ConnectedWorkspace"] = None, + last_event_received: Optional[str] = None, + **kwargs + ): + super(AtaSolutionProperties, self).__init__(additional_properties=additional_properties, device_vendor=device_vendor, device_type=device_type, workspace=workspace, **kwargs) + self.last_event_received = last_event_received + +class AuthenticationDetailsProperties(msrest.serialization.Model): + """Settings for cloud authentication management. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AwAssumeRoleAuthenticationDetailsProperties, AwsCredsAuthenticationDetailsProperties, GcpCredentialsDetailsProperties. -class IoTSecurityDeviceRecommendationsList(Model): - """List of recommendations with the count of devices. + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param value: Required. List of aggregated recommendation data - :type value: - list[~azure.mgmt.security.models.IoTSecurityDeviceRecommendation] + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType """ _validation = { - 'value': {'required': True}, + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, } _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecurityDeviceRecommendation]'}, + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, } - def __init__(self, *, value, **kwargs) -> None: - super(IoTSecurityDeviceRecommendationsList, self).__init__(**kwargs) - self.value = value + _subtype_map = { + 'authentication_type': {'awsAssumeRole': 'AwAssumeRoleAuthenticationDetailsProperties', 'awsCreds': 'AwsCredsAuthenticationDetailsProperties', 'gcpCredentials': 'GcpCredentialsDetailsProperties'} + } + def __init__( + self, + **kwargs + ): + super(AuthenticationDetailsProperties, self).__init__(**kwargs) + self.authentication_provisioning_state = None + self.granted_permissions = None + self.authentication_type = None # type: Optional[str] -class IoTSecuritySolutionAnalyticsModel(Resource): - """Security Analytics of a security solution. - Variables are only populated by the server, and will be ignored when - sending a request. +class Tags(msrest.serialization.Model): + """A list of key value pairs that describe the resource. - :ivar id: Resource Id - :vartype id: str - :ivar name: Resource name - :vartype name: str - :ivar type: Resource type - :vartype type: str - :ivar metrics: Security Analytics of a security solution - :vartype metrics: ~azure.mgmt.security.models.IoTSeverityMetrics - :ivar unhealthy_device_count: number of unhealthy devices - :vartype unhealthy_device_count: int - :ivar devices_metrics: The list of devices metrics by the aggregated date. - :vartype devices_metrics: - list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem] - :param top_alerted_devices: The list of top 3 devices with the most - attacked. - :type top_alerted_devices: - ~azure.mgmt.security.models.IoTSecurityAlertedDevicesList - :param most_prevalent_device_alerts: The list of most prevalent 3 alerts. - :type most_prevalent_device_alerts: - ~azure.mgmt.security.models.IoTSecurityDeviceAlertsList - :param most_prevalent_device_recommendations: The list of most prevalent 3 - recommendations. - :type most_prevalent_device_recommendations: - ~azure.mgmt.security.models.IoTSecurityDeviceRecommendationsList + :param tags: A set of tags. A list of key value pairs that describe the resource. + :type tags: dict[str, str] """ - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'metrics': {'readonly': True}, - 'unhealthy_device_count': {'readonly': True}, - 'devices_metrics': {'readonly': True}, - } - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'metrics': {'key': 'properties.metrics', 'type': 'IoTSeverityMetrics'}, - 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, - 'devices_metrics': {'key': 'properties.devicesMetrics', 'type': '[IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem]'}, - 'top_alerted_devices': {'key': 'properties.topAlertedDevices', 'type': 'IoTSecurityAlertedDevicesList'}, - 'most_prevalent_device_alerts': {'key': 'properties.mostPrevalentDeviceAlerts', 'type': 'IoTSecurityDeviceAlertsList'}, - 'most_prevalent_device_recommendations': {'key': 'properties.mostPrevalentDeviceRecommendations', 'type': 'IoTSecurityDeviceRecommendationsList'}, + 'tags': {'key': 'tags', 'type': '{str}'}, } - def __init__(self, *, top_alerted_devices=None, most_prevalent_device_alerts=None, most_prevalent_device_recommendations=None, **kwargs) -> None: - super(IoTSecuritySolutionAnalyticsModel, self).__init__(**kwargs) - self.metrics = None - self.unhealthy_device_count = None - self.devices_metrics = None - self.top_alerted_devices = top_alerted_devices - self.most_prevalent_device_alerts = most_prevalent_device_alerts - self.most_prevalent_device_recommendations = most_prevalent_device_recommendations - - -class IoTSecuritySolutionAnalyticsModelList(Model): - """List of Security Analytics of a security solution. + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + super(Tags, self).__init__(**kwargs) + self.tags = tags - Variables are only populated by the server, and will be ignored when - sending a request. - All required parameters must be populated in order to send to Azure. +class ETag(msrest.serialization.Model): + """Entity tag is used for comparing two or more entities from the same requested resource. - :param value: Required. List of Security Analytics of a security solution - :type value: - list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel] - :ivar next_link: The URI to fetch the next page. - :vartype next_link: str + :param etag: Entity tag is used for comparing two or more entities from the same requested + resource. + :type etag: str """ - _validation = { - 'value': {'required': True}, - 'next_link': {'readonly': True}, + _attribute_map = { + 'etag': {'key': 'etag', 'type': 'str'}, } + def __init__( + self, + *, + etag: Optional[str] = None, + **kwargs + ): + super(ETag, self).__init__(**kwargs) + self.etag = etag + + +class Kind(msrest.serialization.Model): + """Describes an Azure resource with kind. + + :param kind: Kind of the resource. + :type kind: str + """ + _attribute_map = { - 'value': {'key': 'value', 'type': '[IoTSecuritySolutionAnalyticsModel]'}, - 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, } - def __init__(self, *, value, **kwargs) -> None: - super(IoTSecuritySolutionAnalyticsModelList, self).__init__(**kwargs) - self.value = value - self.next_link = None + def __init__( + self, + *, + kind: Optional[str] = None, + **kwargs + ): + super(Kind, self).__init__(**kwargs) + self.kind = kind -class IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem(Model): - """IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem. +class AzureTrackedResourceLocation(msrest.serialization.Model): + """Describes an Azure resource with location. - :param date_property: the date of the metrics - :type date_property: datetime - :param devices_metrics: devices alerts count by severity. - :type devices_metrics: ~azure.mgmt.security.models.IoTSeverityMetrics + :param location: Location where the resource is stored. + :type location: str """ _attribute_map = { - 'date_property': {'key': 'date', 'type': 'iso-8601'}, - 'devices_metrics': {'key': 'devicesMetrics', 'type': 'IoTSeverityMetrics'}, + 'location': {'key': 'location', 'type': 'str'}, } - def __init__(self, *, date_property=None, devices_metrics=None, **kwargs) -> None: - super(IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem, self).__init__(**kwargs) - self.date_property = date_property - self.devices_metrics = devices_metrics - + def __init__( + self, + *, + location: Optional[str] = None, + **kwargs + ): + super(AzureTrackedResourceLocation, self).__init__(**kwargs) + self.location = location -class IoTSecuritySolutionModel(Model): - """Security Solution. - Variables are only populated by the server, and will be ignored when - sending a request. +class TrackedResource(Resource, AzureTrackedResourceLocation, Kind, ETag, Tags): + """Describes an Azure tracked resource. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :param tags: A set of tags. A list of key value pairs that describe the resource. + :type tags: dict[str, str] + :param etag: Entity tag is used for comparing two or more entities from the same requested + resource. + :type etag: str + :param kind: Kind of the resource. + :type kind: str + :param location: Location where the resource is stored. + :type location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param tags: Resource tags - :type tags: dict[str, str] - :param location: The resource location. - :type location: str - :param workspace: Required. Workspace resource ID - :type workspace: str - :param display_name: Required. Resource display name. - :type display_name: str - :param status: Security solution status. Possible values include: - 'Enabled', 'Disabled'. Default value: "Enabled" . - :type status: str or ~azure.mgmt.security.models.SecuritySolutionStatus - :param export: List of additional export to workspace data options - :type export: list[str or ~azure.mgmt.security.models.ExportData] - :param disabled_data_sources: Disabled data sources. Disabling these data - sources compromises the system. - :type disabled_data_sources: list[str or - ~azure.mgmt.security.models.DataSource] - :param iot_hubs: Required. IoT Hub resource IDs - :type iot_hubs: list[str] - :param user_defined_resources: - :type user_defined_resources: - ~azure.mgmt.security.models.UserDefinedResourcesProperties - :ivar auto_discovered_resources: List of resources that were automatically - discovered as relevant to the security solution. - :vartype auto_discovered_resources: list[str] - :param recommendations_configuration: - :type recommendations_configuration: - list[~azure.mgmt.security.models.RecommendationConfigurationProperties] """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'workspace': {'required': True}, - 'display_name': {'required': True}, - 'iot_hubs': {'required': True}, - 'auto_discovered_resources': {'readonly': True}, } _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'etag': {'key': 'etag', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'location': {'key': 'location', 'type': 'str'}, - 'workspace': {'key': 'properties.workspace', 'type': 'str'}, - 'display_name': {'key': 'properties.displayName', 'type': 'str'}, - 'status': {'key': 'properties.status', 'type': 'str'}, - 'export': {'key': 'properties.export', 'type': '[str]'}, - 'disabled_data_sources': {'key': 'properties.disabledDataSources', 'type': '[str]'}, - 'iot_hubs': {'key': 'properties.iotHubs', 'type': '[str]'}, - 'user_defined_resources': {'key': 'properties.userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, - 'auto_discovered_resources': {'key': 'properties.autoDiscoveredResources', 'type': '[str]'}, - 'recommendations_configuration': {'key': 'properties.recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, } - def __init__(self, *, workspace: str, display_name: str, iot_hubs, tags=None, location: str=None, status="Enabled", export=None, disabled_data_sources=None, user_defined_resources=None, recommendations_configuration=None, **kwargs) -> None: - super(IoTSecuritySolutionModel, self).__init__(**kwargs) + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + etag: Optional[str] = None, + kind: Optional[str] = None, + location: Optional[str] = None, + **kwargs + ): + super(TrackedResource, self).__init__(location=location, kind=kind, etag=etag, tags=tags, **kwargs) + self.tags = tags + self.etag = etag + self.kind = kind + self.location = location + self.tags = tags + self.etag = etag + self.kind = kind self.id = None self.name = None self.type = None self.tags = tags + self.etag = etag self.location = location - self.workspace = workspace - self.display_name = display_name - self.status = status - self.export = export - self.disabled_data_sources = disabled_data_sources - self.iot_hubs = iot_hubs - self.user_defined_resources = user_defined_resources - self.auto_discovered_resources = None - self.recommendations_configuration = recommendations_configuration - - -class IoTSeverityMetrics(Model): - """Severity metrics. - - :param high: count of high severity items - :type high: int - :param medium: count of medium severity items - :type medium: int - :param low: count of low severity items - :type low: int - """ - - _attribute_map = { - 'high': {'key': 'high', 'type': 'int'}, - 'medium': {'key': 'medium', 'type': 'int'}, - 'low': {'key': 'low', 'type': 'int'}, - } - - def __init__(self, *, high: int=None, medium: int=None, low: int=None, **kwargs) -> None: - super(IoTSeverityMetrics, self).__init__(**kwargs) - self.high = high - self.medium = medium - self.low = low - + self.id = None + self.name = None + self.type = None + self.tags = tags + self.kind = kind + self.location = location + self.id = None + self.name = None + self.type = None + self.etag = etag + self.kind = kind + self.location = location + self.id = None + self.name = None + self.type = None -class JitNetworkAccessPolicy(Model): - """JitNetworkAccessPolicy. - Variables are only populated by the server, and will be ignored when - sending a request. +class Automation(TrackedResource): + """The security automation resource. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :param tags: A set of tags. A list of key value pairs that describe the resource. + :type tags: dict[str, str] + :param etag: Entity tag is used for comparing two or more entities from the same requested + resource. + :type etag: str + :param kind: Kind of the resource. + :type kind: str + :param location: Location where the resource is stored. + :type location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param kind: Kind of the resource - :type kind: str - :ivar location: Location where the resource is stored - :vartype location: str - :param virtual_machines: Required. Configurations for - Microsoft.Compute/virtualMachines resource type. - :type virtual_machines: - list[~azure.mgmt.security.models.JitNetworkAccessPolicyVirtualMachine] - :param requests: - :type requests: list[~azure.mgmt.security.models.JitNetworkAccessRequest] - :ivar provisioning_state: Gets the provisioning state of the Just-in-Time - policy. - :vartype provisioning_state: str + :param description: The security automation description. + :type description: str + :param is_enabled: Indicates whether the security automation is enabled. + :type is_enabled: bool + :param scopes: A collection of scopes on which the security automations logic is applied. + Supported scopes are the subscription itself or a resource group under that subscription. The + automation will only apply on defined scopes. + :type scopes: list[~azure.mgmt.security.models.AutomationScope] + :param sources: A collection of the source event types which evaluate the security automation + set of rules. + :type sources: list[~azure.mgmt.security.models.AutomationSource] + :param actions: A collection of the actions which are triggered if all the configured rules + evaluations, within at least one rule set, are true. + :type actions: list[~azure.mgmt.security.models.AutomationAction] """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'location': {'readonly': True}, - 'virtual_machines': {'required': True}, - 'provisioning_state': {'readonly': True}, } _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'etag': {'key': 'etag', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'kind': {'key': 'kind', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[JitNetworkAccessPolicyVirtualMachine]'}, - 'requests': {'key': 'properties.requests', 'type': '[JitNetworkAccessRequest]'}, - 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, - } + 'description': {'key': 'properties.description', 'type': 'str'}, + 'is_enabled': {'key': 'properties.isEnabled', 'type': 'bool'}, + 'scopes': {'key': 'properties.scopes', 'type': '[AutomationScope]'}, + 'sources': {'key': 'properties.sources', 'type': '[AutomationSource]'}, + 'actions': {'key': 'properties.actions', 'type': '[AutomationAction]'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + etag: Optional[str] = None, + kind: Optional[str] = None, + location: Optional[str] = None, + description: Optional[str] = None, + is_enabled: Optional[bool] = None, + scopes: Optional[List["AutomationScope"]] = None, + sources: Optional[List["AutomationSource"]] = None, + actions: Optional[List["AutomationAction"]] = None, + **kwargs + ): + super(Automation, self).__init__(tags=tags, etag=etag, kind=kind, location=location, **kwargs) + self.description = description + self.is_enabled = is_enabled + self.scopes = scopes + self.sources = sources + self.actions = actions - def __init__(self, *, virtual_machines, kind: str=None, requests=None, **kwargs) -> None: - super(JitNetworkAccessPolicy, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.kind = kind - self.location = None - self.virtual_machines = virtual_machines - self.requests = requests - self.provisioning_state = None +class AutomationAction(msrest.serialization.Model): + """The action that should be triggered. -class JitNetworkAccessPolicyInitiatePort(Model): - """JitNetworkAccessPolicyInitiatePort. + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AutomationActionEventHub, AutomationActionLogicApp, AutomationActionWorkspace. All required parameters must be populated in order to send to Azure. - :param number: Required. - :type number: int - :param allowed_source_address_prefix: Source of the allowed traffic. If - omitted, the request will be for the source IP address of the initiate - request. - :type allowed_source_address_prefix: str - :param end_time_utc: Required. The time to close the request in UTC - :type end_time_utc: datetime + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType """ _validation = { - 'number': {'required': True}, - 'end_time_utc': {'required': True}, + 'action_type': {'required': True}, } _attribute_map = { - 'number': {'key': 'number', 'type': 'int'}, - 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, - 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, + 'action_type': {'key': 'actionType', 'type': 'str'}, } - def __init__(self, *, number: int, end_time_utc, allowed_source_address_prefix: str=None, **kwargs) -> None: - super(JitNetworkAccessPolicyInitiatePort, self).__init__(**kwargs) - self.number = number - self.allowed_source_address_prefix = allowed_source_address_prefix - self.end_time_utc = end_time_utc + _subtype_map = { + 'action_type': {'EventHub': 'AutomationActionEventHub', 'LogicApp': 'AutomationActionLogicApp', 'Workspace': 'AutomationActionWorkspace'} + } + def __init__( + self, + **kwargs + ): + super(AutomationAction, self).__init__(**kwargs) + self.action_type = None # type: Optional[str] -class JitNetworkAccessPolicyInitiateRequest(Model): - """JitNetworkAccessPolicyInitiateRequest. - All required parameters must be populated in order to send to Azure. +class AutomationActionEventHub(AutomationAction): + """The target Event Hub to which event data will be exported. To learn more about Security Center continuous export capabilities, visit https://aka.ms/ASCExportLearnMore. - :param virtual_machines: Required. A list of virtual machines & ports to - open access for + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + :param event_hub_resource_id: The target Event Hub Azure Resource ID. + :type event_hub_resource_id: str + :ivar sas_policy_name: The target Event Hub SAS policy name. + :vartype sas_policy_name: str + :param connection_string: The target Event Hub connection string (it will not be included in + any response). + :type connection_string: str + """ + + _validation = { + 'action_type': {'required': True}, + 'sas_policy_name': {'readonly': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'event_hub_resource_id': {'key': 'eventHubResourceId', 'type': 'str'}, + 'sas_policy_name': {'key': 'sasPolicyName', 'type': 'str'}, + 'connection_string': {'key': 'connectionString', 'type': 'str'}, + } + + def __init__( + self, + *, + event_hub_resource_id: Optional[str] = None, + connection_string: Optional[str] = None, + **kwargs + ): + super(AutomationActionEventHub, self).__init__(**kwargs) + self.action_type = 'EventHub' # type: str + self.event_hub_resource_id = event_hub_resource_id + self.sas_policy_name = None + self.connection_string = connection_string + + +class AutomationActionLogicApp(AutomationAction): + """The logic app action that should be triggered. To learn more about Security Center's Workflow Automation capabilities, visit https://aka.ms/ASCWorkflowAutomationLearnMore. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + :param logic_app_resource_id: The triggered Logic App Azure Resource ID. This can also reside + on other subscriptions, given that you have permissions to trigger the Logic App. + :type logic_app_resource_id: str + :param uri: The Logic App trigger URI endpoint (it will not be included in any response). + :type uri: str + """ + + _validation = { + 'action_type': {'required': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'logic_app_resource_id': {'key': 'logicAppResourceId', 'type': 'str'}, + 'uri': {'key': 'uri', 'type': 'str'}, + } + + def __init__( + self, + *, + logic_app_resource_id: Optional[str] = None, + uri: Optional[str] = None, + **kwargs + ): + super(AutomationActionLogicApp, self).__init__(**kwargs) + self.action_type = 'LogicApp' # type: str + self.logic_app_resource_id = logic_app_resource_id + self.uri = uri + + +class AutomationActionWorkspace(AutomationAction): + """The Log Analytics Workspace to which event data will be exported. Security alerts data will reside in the 'SecurityAlert' table and the assessments data will reside in the 'SecurityRecommendation' table (under the 'Security'/'SecurityCenterFree' solutions). Note that in order to view the data in the workspace, the Security Center Log Analytics free/standard solution needs to be enabled on that workspace. To learn more about Security Center continuous export capabilities, visit https://aka.ms/ASCExportLearnMore. + + All required parameters must be populated in order to send to Azure. + + :param action_type: Required. The type of the action that will be triggered by the + Automation.Constant filled by server. Possible values include: "LogicApp", "EventHub", + "Workspace". + :type action_type: str or ~azure.mgmt.security.models.ActionType + :param workspace_resource_id: The fully qualified Log Analytics Workspace Azure Resource ID. + :type workspace_resource_id: str + """ + + _validation = { + 'action_type': {'required': True}, + } + + _attribute_map = { + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'workspace_resource_id': {'key': 'workspaceResourceId', 'type': 'str'}, + } + + def __init__( + self, + *, + workspace_resource_id: Optional[str] = None, + **kwargs + ): + super(AutomationActionWorkspace, self).__init__(**kwargs) + self.action_type = 'Workspace' # type: str + self.workspace_resource_id = workspace_resource_id + + +class AutomationList(msrest.serialization.Model): + """List of security automations response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. The list of security automations under the given scope. + :type value: list[~azure.mgmt.security.models.Automation] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Automation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["Automation"], + **kwargs + ): + super(AutomationList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class AutomationRuleSet(msrest.serialization.Model): + """A rule set which evaluates all its rules upon an event interception. Only when all the included rules in the rule set will be evaluated as 'true', will the event trigger the defined actions. + + :param rules: + :type rules: list[~azure.mgmt.security.models.AutomationTriggeringRule] + """ + + _attribute_map = { + 'rules': {'key': 'rules', 'type': '[AutomationTriggeringRule]'}, + } + + def __init__( + self, + *, + rules: Optional[List["AutomationTriggeringRule"]] = None, + **kwargs + ): + super(AutomationRuleSet, self).__init__(**kwargs) + self.rules = rules + + +class AutomationScope(msrest.serialization.Model): + """A single automation scope. + + :param description: The resources scope description. + :type description: str + :param scope_path: The resources scope path. Can be the subscription on which the automation is + defined on or a resource group under that subscription (fully qualified Azure resource IDs). + :type scope_path: str + """ + + _attribute_map = { + 'description': {'key': 'description', 'type': 'str'}, + 'scope_path': {'key': 'scopePath', 'type': 'str'}, + } + + def __init__( + self, + *, + description: Optional[str] = None, + scope_path: Optional[str] = None, + **kwargs + ): + super(AutomationScope, self).__init__(**kwargs) + self.description = description + self.scope_path = scope_path + + +class AutomationSource(msrest.serialization.Model): + """The source event types which evaluate the security automation set of rules. For example - security alerts and security assessments. To learn more about the supported security events data models schemas - please visit https://aka.ms/ASCAutomationSchemas. + + :param event_source: A valid event source type. Possible values include: "Assessments", + "SubAssessments", "Alerts". + :type event_source: str or ~azure.mgmt.security.models.EventSource + :param rule_sets: A set of rules which evaluate upon event interception. A logical disjunction + is applied between defined rule sets (logical 'or'). + :type rule_sets: list[~azure.mgmt.security.models.AutomationRuleSet] + """ + + _attribute_map = { + 'event_source': {'key': 'eventSource', 'type': 'str'}, + 'rule_sets': {'key': 'ruleSets', 'type': '[AutomationRuleSet]'}, + } + + def __init__( + self, + *, + event_source: Optional[Union[str, "EventSource"]] = None, + rule_sets: Optional[List["AutomationRuleSet"]] = None, + **kwargs + ): + super(AutomationSource, self).__init__(**kwargs) + self.event_source = event_source + self.rule_sets = rule_sets + + +class AutomationTriggeringRule(msrest.serialization.Model): + """A rule which is evaluated upon event interception. The rule is configured by comparing a specific value from the event model to an expected value. This comparison is done by using one of the supported operators set. + + :param property_j_path: The JPath of the entity model property that should be checked. + :type property_j_path: str + :param property_type: The data type of the compared operands (string, integer, floating point + number or a boolean [true/false]]. Possible values include: "String", "Integer", "Number", + "Boolean". + :type property_type: str or ~azure.mgmt.security.models.PropertyType + :param expected_value: The expected value. + :type expected_value: str + :param operator: A valid comparer operator to use. A case-insensitive comparison will be + applied for String PropertyType. Possible values include: "Equals", "GreaterThan", + "GreaterThanOrEqualTo", "LesserThan", "LesserThanOrEqualTo", "NotEquals", "Contains", + "StartsWith", "EndsWith". + :type operator: str or ~azure.mgmt.security.models.Operator + """ + + _attribute_map = { + 'property_j_path': {'key': 'propertyJPath', 'type': 'str'}, + 'property_type': {'key': 'propertyType', 'type': 'str'}, + 'expected_value': {'key': 'expectedValue', 'type': 'str'}, + 'operator': {'key': 'operator', 'type': 'str'}, + } + + def __init__( + self, + *, + property_j_path: Optional[str] = None, + property_type: Optional[Union[str, "PropertyType"]] = None, + expected_value: Optional[str] = None, + operator: Optional[Union[str, "Operator"]] = None, + **kwargs + ): + super(AutomationTriggeringRule, self).__init__(**kwargs) + self.property_j_path = property_j_path + self.property_type = property_type + self.expected_value = expected_value + self.operator = operator + + +class AutomationValidationStatus(msrest.serialization.Model): + """The security automation model state property bag. + + :param is_valid: Indicates whether the model is valid or not. + :type is_valid: bool + :param message: The validation message. + :type message: str + """ + + _attribute_map = { + 'is_valid': {'key': 'isValid', 'type': 'bool'}, + 'message': {'key': 'message', 'type': 'str'}, + } + + def __init__( + self, + *, + is_valid: Optional[bool] = None, + message: Optional[str] = None, + **kwargs + ): + super(AutomationValidationStatus, self).__init__(**kwargs) + self.is_valid = is_valid + self.message = message + + +class AutoProvisioningSetting(Resource): + """Auto provisioning setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param auto_provision: Describes what kind of security agent provisioning action to take. + Possible values include: "On", "Off". + :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'auto_provision': {'key': 'properties.autoProvision', 'type': 'str'}, + } + + def __init__( + self, + *, + auto_provision: Optional[Union[str, "AutoProvision"]] = None, + **kwargs + ): + super(AutoProvisioningSetting, self).__init__(**kwargs) + self.auto_provision = auto_provision + + +class AutoProvisioningSettingList(msrest.serialization.Model): + """List of all the auto provisioning settings response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of all the auto provisioning settings. + :type value: list[~azure.mgmt.security.models.AutoProvisioningSetting] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[AutoProvisioningSetting]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["AutoProvisioningSetting"]] = None, + **kwargs + ): + super(AutoProvisioningSettingList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class AwAssumeRoleAuthenticationDetailsProperties(AuthenticationDetailsProperties): + """AWS cloud account connector based assume role, the role enables delegating access to your AWS resources. The role is composed of role arn and external id, for more details, refer to :code:`Creating a Role to Delegate Permissions to an IAM User (write only)`. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + :ivar account_id: The ID of the cloud account. + :vartype account_id: str + :param aws_assume_role_arn: Required. Assumed role ID is an identifier that you can use to + create temporary security credentials. + :type aws_assume_role_arn: str + :param aws_external_id: Required. A unique identifier that is required when you assume a role + in another account. + :type aws_external_id: str + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + 'account_id': {'readonly': True}, + 'aws_assume_role_arn': {'required': True}, + 'aws_external_id': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + 'account_id': {'key': 'accountId', 'type': 'str'}, + 'aws_assume_role_arn': {'key': 'awsAssumeRoleArn', 'type': 'str'}, + 'aws_external_id': {'key': 'awsExternalId', 'type': 'str'}, + } + + def __init__( + self, + *, + aws_assume_role_arn: str, + aws_external_id: str, + **kwargs + ): + super(AwAssumeRoleAuthenticationDetailsProperties, self).__init__(**kwargs) + self.authentication_type = 'awsAssumeRole' # type: str + self.account_id = None + self.aws_assume_role_arn = aws_assume_role_arn + self.aws_external_id = aws_external_id + + +class AwsCredsAuthenticationDetailsProperties(AuthenticationDetailsProperties): + """AWS cloud account connector based credentials, the credentials is composed of access key id and secret key, for more details, refer to :code:`Creating an IAM User in Your AWS Account (write only)`. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + :ivar account_id: The ID of the cloud account. + :vartype account_id: str + :param aws_access_key_id: Required. Public key element of the AWS credential object (write + only). + :type aws_access_key_id: str + :param aws_secret_access_key: Required. Secret key element of the AWS credential object (write + only). + :type aws_secret_access_key: str + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + 'account_id': {'readonly': True}, + 'aws_access_key_id': {'required': True}, + 'aws_secret_access_key': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + 'account_id': {'key': 'accountId', 'type': 'str'}, + 'aws_access_key_id': {'key': 'awsAccessKeyId', 'type': 'str'}, + 'aws_secret_access_key': {'key': 'awsSecretAccessKey', 'type': 'str'}, + } + + def __init__( + self, + *, + aws_access_key_id: str, + aws_secret_access_key: str, + **kwargs + ): + super(AwsCredsAuthenticationDetailsProperties, self).__init__(**kwargs) + self.authentication_type = 'awsCreds' # type: str + self.account_id = None + self.aws_access_key_id = aws_access_key_id + self.aws_secret_access_key = aws_secret_access_key + + +class ResourceDetails(msrest.serialization.Model): + """Details of the resource that was assessed. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AzureResourceDetails, OnPremiseResourceDetails. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + """ + + _validation = { + 'source': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + } + + _subtype_map = { + 'source': {'Azure': 'AzureResourceDetails', 'OnPremise': 'OnPremiseResourceDetails'} + } + + def __init__( + self, + **kwargs + ): + super(ResourceDetails, self).__init__(**kwargs) + self.source = None # type: Optional[str] + + +class AzureResourceDetails(ResourceDetails): + """Details of the Azure resource that was assessed. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + :ivar id: Azure resource Id of the assessed resource. + :vartype id: str + """ + + _validation = { + 'source': {'required': True}, + 'id': {'readonly': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureResourceDetails, self).__init__(**kwargs) + self.source = 'Azure' # type: str + self.id = None + + +class ResourceIdentifier(msrest.serialization.Model): + """A resource identifier for an alert which can be used to direct the alert to the right product exposure group (tenant, workspace, subscription etc.). + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: AzureResourceIdentifier, LogAnalyticsIdentifier. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. There can be multiple identifiers of different type per alert, this + field specify the identifier type.Constant filled by server. Possible values include: + "AzureResource", "LogAnalytics". + :type type: str or ~azure.mgmt.security.models.ResourceIdentifierType + """ + + _validation = { + 'type': {'required': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + } + + _subtype_map = { + 'type': {'AzureResource': 'AzureResourceIdentifier', 'LogAnalytics': 'LogAnalyticsIdentifier'} + } + + def __init__( + self, + **kwargs + ): + super(ResourceIdentifier, self).__init__(**kwargs) + self.type = None # type: Optional[str] + + +class AzureResourceIdentifier(ResourceIdentifier): + """Azure resource identifier. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. There can be multiple identifiers of different type per alert, this + field specify the identifier type.Constant filled by server. Possible values include: + "AzureResource", "LogAnalytics". + :type type: str or ~azure.mgmt.security.models.ResourceIdentifierType + :ivar azure_resource_id: ARM resource identifier for the cloud resource being alerted on. + :vartype azure_resource_id: str + """ + + _validation = { + 'type': {'required': True}, + 'azure_resource_id': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'azure_resource_id': {'key': 'azureResourceId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureResourceIdentifier, self).__init__(**kwargs) + self.type = 'AzureResource' # type: str + self.azure_resource_id = None + + +class AzureResourceLink(msrest.serialization.Model): + """Describes an Azure resource with kind. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Azure resource Id. + :vartype id: str + """ + + _validation = { + 'id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(AzureResourceLink, self).__init__(**kwargs) + self.id = None + + +class CefExternalSecuritySolution(ExternalSecuritySolution): + """Represents a security solution which sends CEF logs to an OMS workspace. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param kind: The kind of the external solution. Possible values include: "CEF", "ATA", "AAD". + :type kind: str or ~azure.mgmt.security.models.ExternalSecuritySolutionKindEnum + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: The external security solution properties for CEF solutions. + :type properties: ~azure.mgmt.security.models.CefSolutionProperties + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'CefSolutionProperties'}, + } + + def __init__( + self, + *, + kind: Optional[Union[str, "ExternalSecuritySolutionKindEnum"]] = None, + properties: Optional["CefSolutionProperties"] = None, + **kwargs + ): + super(CefExternalSecuritySolution, self).__init__(kind=kind, **kwargs) + self.properties = properties + + +class CefSolutionProperties(ExternalSecuritySolutionProperties): + """The external security solution properties for CEF solutions. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param device_vendor: + :type device_vendor: str + :param device_type: + :type device_type: str + :param workspace: Represents an OMS workspace to which the solution is connected. + :type workspace: ~azure.mgmt.security.models.ConnectedWorkspace + :param hostname: + :type hostname: str + :param agent: + :type agent: str + :param last_event_received: + :type last_event_received: str + """ + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'device_vendor': {'key': 'deviceVendor', 'type': 'str'}, + 'device_type': {'key': 'deviceType', 'type': 'str'}, + 'workspace': {'key': 'workspace', 'type': 'ConnectedWorkspace'}, + 'hostname': {'key': 'hostname', 'type': 'str'}, + 'agent': {'key': 'agent', 'type': 'str'}, + 'last_event_received': {'key': 'lastEventReceived', 'type': 'str'}, + } + + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + device_vendor: Optional[str] = None, + device_type: Optional[str] = None, + workspace: Optional["ConnectedWorkspace"] = None, + hostname: Optional[str] = None, + agent: Optional[str] = None, + last_event_received: Optional[str] = None, + **kwargs + ): + super(CefSolutionProperties, self).__init__(additional_properties=additional_properties, device_vendor=device_vendor, device_type=device_type, workspace=workspace, **kwargs) + self.hostname = hostname + self.agent = agent + self.last_event_received = last_event_received + + +class Compliance(Resource): + """Compliance of a scope. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar assessment_timestamp_utc_date: The timestamp when the Compliance calculation was + conducted. + :vartype assessment_timestamp_utc_date: ~datetime.datetime + :ivar resource_count: The resource count of the given subscription for which the Compliance + calculation was conducted (needed for Management Group Compliance calculation). + :vartype resource_count: int + :ivar assessment_result: An array of segment, which is the actually the compliance assessment. + :vartype assessment_result: list[~azure.mgmt.security.models.ComplianceSegment] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'assessment_timestamp_utc_date': {'readonly': True}, + 'resource_count': {'readonly': True}, + 'assessment_result': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'assessment_timestamp_utc_date': {'key': 'properties.assessmentTimestampUtcDate', 'type': 'iso-8601'}, + 'resource_count': {'key': 'properties.resourceCount', 'type': 'int'}, + 'assessment_result': {'key': 'properties.assessmentResult', 'type': '[ComplianceSegment]'}, + } + + def __init__( + self, + **kwargs + ): + super(Compliance, self).__init__(**kwargs) + self.assessment_timestamp_utc_date = None + self.resource_count = None + self.assessment_result = None + + +class ComplianceList(msrest.serialization.Model): + """List of Compliance objects response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of Compliance objects. + :type value: list[~azure.mgmt.security.models.Compliance] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Compliance]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Compliance"]] = None, + **kwargs + ): + super(ComplianceList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ComplianceResult(Resource): + """a compliance result. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar resource_status: The status of the resource regarding a single assessment. Possible + values include: "Healthy", "NotApplicable", "OffByPolicy", "NotHealthy". + :vartype resource_status: str or ~azure.mgmt.security.models.ResourceStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'resource_status': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'resource_status': {'key': 'properties.resourceStatus', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ComplianceResult, self).__init__(**kwargs) + self.resource_status = None + + +class ComplianceResultList(msrest.serialization.Model): + """List of compliance results response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of compliance results. + :type value: list[~azure.mgmt.security.models.ComplianceResult] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ComplianceResult]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["ComplianceResult"], + **kwargs + ): + super(ComplianceResultList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ComplianceSegment(msrest.serialization.Model): + """A segment of a compliance assessment. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar segment_type: The segment type, e.g. compliant, non-compliance, insufficient coverage, + N/A, etc. + :vartype segment_type: str + :ivar percentage: The size (%) of the segment. + :vartype percentage: float + """ + + _validation = { + 'segment_type': {'readonly': True}, + 'percentage': {'readonly': True}, + } + + _attribute_map = { + 'segment_type': {'key': 'segmentType', 'type': 'str'}, + 'percentage': {'key': 'percentage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(ComplianceSegment, self).__init__(**kwargs) + self.segment_type = None + self.percentage = None + + +class ConnectableResource(msrest.serialization.Model): + """Describes the allowed inbound and outbound traffic of an Azure resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The Azure resource id. + :vartype id: str + :ivar inbound_connected_resources: The list of Azure resources that the resource has inbound + allowed connection from. + :vartype inbound_connected_resources: list[~azure.mgmt.security.models.ConnectedResource] + :ivar outbound_connected_resources: The list of Azure resources that the resource has outbound + allowed connection to. + :vartype outbound_connected_resources: list[~azure.mgmt.security.models.ConnectedResource] + """ + + _validation = { + 'id': {'readonly': True}, + 'inbound_connected_resources': {'readonly': True}, + 'outbound_connected_resources': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'inbound_connected_resources': {'key': 'inboundConnectedResources', 'type': '[ConnectedResource]'}, + 'outbound_connected_resources': {'key': 'outboundConnectedResources', 'type': '[ConnectedResource]'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectableResource, self).__init__(**kwargs) + self.id = None + self.inbound_connected_resources = None + self.outbound_connected_resources = None + + +class ConnectedResource(msrest.serialization.Model): + """Describes properties of a connected resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar connected_resource_id: The Azure resource id of the connected resource. + :vartype connected_resource_id: str + :ivar tcp_ports: The allowed tcp ports. + :vartype tcp_ports: str + :ivar udp_ports: The allowed udp ports. + :vartype udp_ports: str + """ + + _validation = { + 'connected_resource_id': {'readonly': True}, + 'tcp_ports': {'readonly': True}, + 'udp_ports': {'readonly': True}, + } + + _attribute_map = { + 'connected_resource_id': {'key': 'connectedResourceId', 'type': 'str'}, + 'tcp_ports': {'key': 'tcpPorts', 'type': 'str'}, + 'udp_ports': {'key': 'udpPorts', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ConnectedResource, self).__init__(**kwargs) + self.connected_resource_id = None + self.tcp_ports = None + self.udp_ports = None + + +class ConnectedWorkspace(msrest.serialization.Model): + """Represents an OMS workspace to which the solution is connected. + + :param id: Azure resource ID of the connected OMS workspace. + :type id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + **kwargs + ): + super(ConnectedWorkspace, self).__init__(**kwargs) + self.id = id + + +class ConnectionToIpNotAllowed(AllowlistCustomAlertRule): + """Outbound connection to an ip that isn't allowed. Allow list consists of ipv4 or ipv6 range in CIDR notation. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + allowlist_values: List[str], + **kwargs + ): + super(ConnectionToIpNotAllowed, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, allowlist_values=allowlist_values, **kwargs) + self.rule_type = 'ConnectionToIpNotAllowed' # type: str + self.rule_type = 'ConnectionToIpNotAllowed' # type: str + + +class ConnectorSetting(Resource): + """The connector setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param hybrid_compute_settings: Settings for hybrid compute management, these settings are + relevant only Arc autoProvision (Hybrid Compute). + :type hybrid_compute_settings: ~azure.mgmt.security.models.HybridComputeSettingsProperties + :param authentication_details: Settings for authentication management, these settings are + relevant only for the cloud connector. + :type authentication_details: ~azure.mgmt.security.models.AuthenticationDetailsProperties + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'hybrid_compute_settings': {'key': 'properties.hybridComputeSettings', 'type': 'HybridComputeSettingsProperties'}, + 'authentication_details': {'key': 'properties.authenticationDetails', 'type': 'AuthenticationDetailsProperties'}, + } + + def __init__( + self, + *, + hybrid_compute_settings: Optional["HybridComputeSettingsProperties"] = None, + authentication_details: Optional["AuthenticationDetailsProperties"] = None, + **kwargs + ): + super(ConnectorSetting, self).__init__(**kwargs) + self.hybrid_compute_settings = hybrid_compute_settings + self.authentication_details = authentication_details + + +class ConnectorSettingList(msrest.serialization.Model): + """For a subscription, list of all cloud account connectors and their settings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of all the cloud account connector settings. + :type value: list[~azure.mgmt.security.models.ConnectorSetting] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ConnectorSetting]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["ConnectorSetting"]] = None, + **kwargs + ): + super(ConnectorSettingList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ContainerRegistryVulnerabilityProperties(AdditionalData): + """Additional context fields for container registry Vulnerability assessment. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType + :ivar type: Vulnerability Type. e.g: Vulnerability, Potential Vulnerability, Information + Gathered, Vulnerability. + :vartype type: str + :ivar cvss: Dictionary from cvss version to cvss details object. + :vartype cvss: dict[str, ~azure.mgmt.security.models.CVSS] + :ivar patchable: Indicates whether a patch is available or not. + :vartype patchable: bool + :ivar cve: List of CVEs. + :vartype cve: list[~azure.mgmt.security.models.CVE] + :ivar published_time: Published time. + :vartype published_time: ~datetime.datetime + :ivar vendor_references: + :vartype vendor_references: list[~azure.mgmt.security.models.VendorReference] + :ivar repository_name: Name of the repository which the vulnerable image belongs to. + :vartype repository_name: str + :ivar image_digest: Digest of the vulnerable image. + :vartype image_digest: str + """ + + _validation = { + 'assessed_resource_type': {'required': True}, + 'type': {'readonly': True}, + 'cvss': {'readonly': True}, + 'patchable': {'readonly': True}, + 'cve': {'readonly': True}, + 'published_time': {'readonly': True}, + 'vendor_references': {'readonly': True}, + 'repository_name': {'readonly': True}, + 'image_digest': {'readonly': True}, + } + + _attribute_map = { + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'cvss': {'key': 'cvss', 'type': '{CVSS}'}, + 'patchable': {'key': 'patchable', 'type': 'bool'}, + 'cve': {'key': 'cve', 'type': '[CVE]'}, + 'published_time': {'key': 'publishedTime', 'type': 'iso-8601'}, + 'vendor_references': {'key': 'vendorReferences', 'type': '[VendorReference]'}, + 'repository_name': {'key': 'repositoryName', 'type': 'str'}, + 'image_digest': {'key': 'imageDigest', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ContainerRegistryVulnerabilityProperties, self).__init__(**kwargs) + self.assessed_resource_type = 'ContainerRegistryVulnerability' # type: str + self.type = None + self.cvss = None + self.patchable = None + self.cve = None + self.published_time = None + self.vendor_references = None + self.repository_name = None + self.image_digest = None + + +class CVE(msrest.serialization.Model): + """CVE details. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar title: CVE title. + :vartype title: str + :ivar link: Link url. + :vartype link: str + """ + + _validation = { + 'title': {'readonly': True}, + 'link': {'readonly': True}, + } + + _attribute_map = { + 'title': {'key': 'title', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(CVE, self).__init__(**kwargs) + self.title = None + self.link = None + + +class CVSS(msrest.serialization.Model): + """CVSS details. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar base: CVSS base. + :vartype base: float + """ + + _validation = { + 'base': {'readonly': True}, + } + + _attribute_map = { + 'base': {'key': 'base', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(CVSS, self).__init__(**kwargs) + self.base = None + + +class SettingResource(Resource): + """The kind of the security setting. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: DataExportSettings, Setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param kind: Required. the kind of the settings string (DataExportSettings).Constant filled by + server. Possible values include: "DataExportSettings", "AlertSuppressionSetting". + :type kind: str or ~azure.mgmt.security.models.SettingKind + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'kind': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + } + + _subtype_map = { + 'kind': {'DataExportSettings': 'DataExportSettings', 'Setting': 'Setting'} + } + + def __init__( + self, + **kwargs + ): + super(SettingResource, self).__init__(**kwargs) + self.kind = 'SettingResource' # type: str + + +class DataExportSettings(SettingResource): + """Represents a data export setting. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param kind: Required. the kind of the settings string (DataExportSettings).Constant filled by + server. Possible values include: "DataExportSettings", "AlertSuppressionSetting". + :type kind: str or ~azure.mgmt.security.models.SettingKind + :param enabled: Is the data export setting is enabled. + :type enabled: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'kind': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'enabled': {'key': 'properties.enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + super(DataExportSettings, self).__init__(**kwargs) + self.kind = 'DataExportSettings' # type: str + self.enabled = enabled + + +class DenylistCustomAlertRule(ListCustomAlertRule): + """A custom alert rule that checks if a value (depends on the custom alert type) is denied. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param denylist_values: Required. The values to deny. The format of the values depends on the + rule type. + :type denylist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'denylist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'denylist_values': {'key': 'denylistValues', 'type': '[str]'}, + } + + def __init__( + self, + *, + is_enabled: bool, + denylist_values: List[str], + **kwargs + ): + super(DenylistCustomAlertRule, self).__init__(is_enabled=is_enabled, **kwargs) + self.rule_type = 'DenylistCustomAlertRule' # type: str + self.denylist_values = denylist_values + + +class Device(Resource): + """Device model. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param display_name: Device display name given by the collector. + :type display_name: str + :param device_type: Device type. + :type device_type: str + :ivar source_name: The source that created the device. + :vartype source_name: str + :ivar network_interfaces: List of network interfaces. + :vartype network_interfaces: list[~azure.mgmt.security.models.NetworkInterface] + :ivar vendor: Device vendor. + :vartype vendor: str + :param os_name: Device operating system name. + :type os_name: str + :ivar protocols: List of protocols. + :vartype protocols: list[~azure.mgmt.security.models.Protocol] + :ivar last_active_time: last time the device was active in the network. + :vartype last_active_time: ~datetime.datetime + :ivar last_update_time: last time the device was updated. + :vartype last_update_time: ~datetime.datetime + :ivar management_state: Managed state of the device. Possible values include: "Managed", + "Unmanaged". + :vartype management_state: str or ~azure.mgmt.security.models.ManagementState + :param authorization_state: Authorized state of the device. Possible values include: + "Authorized", "Unauthorized". Default value: "Unauthorized". + :type authorization_state: str or ~azure.mgmt.security.models.AuthorizationState + :param device_criticality: Device criticality. Possible values include: "Important", + "Standard". Default value: "Standard". + :type device_criticality: str or ~azure.mgmt.security.models.DeviceCriticality + :param purdue_level: Purdue level of the device. Possible values include: "ProcessControl", + "Supervisory", "Enterprise". Default value: "ProcessControl". + :type purdue_level: str or ~azure.mgmt.security.models.PurdueLevel + :param notes: user notes for the device, up to 300 characters. + :type notes: str + :ivar firmwares: List of device firmwares. + :vartype firmwares: list[~azure.mgmt.security.models.Firmware] + :ivar discovery_time: Discovered time of the device. + :vartype discovery_time: ~datetime.datetime + :ivar programming_state: Indicates whether this device is programming. Possible values include: + "ProgrammingDevice", "NotProgrammingDevice". + :vartype programming_state: str or ~azure.mgmt.security.models.ProgrammingState + :ivar last_programming_time: last time the device was programming or programed. + :vartype last_programming_time: ~datetime.datetime + :ivar scanning_functionality: Indicates whether the device is a scanner. Possible values + include: "ScannerDevice", "NotScannerDevice". + :vartype scanning_functionality: str or ~azure.mgmt.security.models.ScanningFunctionality + :ivar last_scan_time: last time the device was scanning. + :vartype last_scan_time: ~datetime.datetime + :ivar risk_score: risk score of the device. + :vartype risk_score: int + :ivar sensor_name: When the device is unmanaged, the sensor that scanned this device. + :vartype sensor_name: str + :ivar site_name: The sensor site name. + :vartype site_name: str + :ivar zone_name: The sensor zone name. + :vartype zone_name: str + :ivar device_status: Device status. Possible values include: "Active", "Removed". + :vartype device_status: str or ~azure.mgmt.security.models.DeviceStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'source_name': {'readonly': True}, + 'network_interfaces': {'readonly': True}, + 'vendor': {'readonly': True}, + 'protocols': {'readonly': True}, + 'last_active_time': {'readonly': True}, + 'last_update_time': {'readonly': True}, + 'management_state': {'readonly': True}, + 'firmwares': {'readonly': True}, + 'discovery_time': {'readonly': True}, + 'programming_state': {'readonly': True}, + 'last_programming_time': {'readonly': True}, + 'scanning_functionality': {'readonly': True}, + 'last_scan_time': {'readonly': True}, + 'risk_score': {'readonly': True, 'maximum': 100, 'minimum': 0}, + 'sensor_name': {'readonly': True}, + 'site_name': {'readonly': True}, + 'zone_name': {'readonly': True}, + 'device_status': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'device_type': {'key': 'properties.deviceType', 'type': 'str'}, + 'source_name': {'key': 'properties.sourceName', 'type': 'str'}, + 'network_interfaces': {'key': 'properties.networkInterfaces', 'type': '[NetworkInterface]'}, + 'vendor': {'key': 'properties.vendor', 'type': 'str'}, + 'os_name': {'key': 'properties.osName', 'type': 'str'}, + 'protocols': {'key': 'properties.protocols', 'type': '[Protocol]'}, + 'last_active_time': {'key': 'properties.lastActiveTime', 'type': 'iso-8601'}, + 'last_update_time': {'key': 'properties.lastUpdateTime', 'type': 'iso-8601'}, + 'management_state': {'key': 'properties.managementState', 'type': 'str'}, + 'authorization_state': {'key': 'properties.authorizationState', 'type': 'str'}, + 'device_criticality': {'key': 'properties.deviceCriticality', 'type': 'str'}, + 'purdue_level': {'key': 'properties.purdueLevel', 'type': 'str'}, + 'notes': {'key': 'properties.notes', 'type': 'str'}, + 'firmwares': {'key': 'properties.firmwares', 'type': '[Firmware]'}, + 'discovery_time': {'key': 'properties.discoveryTime', 'type': 'iso-8601'}, + 'programming_state': {'key': 'properties.programmingState', 'type': 'str'}, + 'last_programming_time': {'key': 'properties.lastProgrammingTime', 'type': 'iso-8601'}, + 'scanning_functionality': {'key': 'properties.scanningFunctionality', 'type': 'str'}, + 'last_scan_time': {'key': 'properties.lastScanTime', 'type': 'iso-8601'}, + 'risk_score': {'key': 'properties.riskScore', 'type': 'int'}, + 'sensor_name': {'key': 'properties.sensorName', 'type': 'str'}, + 'site_name': {'key': 'properties.siteName', 'type': 'str'}, + 'zone_name': {'key': 'properties.zoneName', 'type': 'str'}, + 'device_status': {'key': 'properties.deviceStatus', 'type': 'str'}, + } + + def __init__( + self, + *, + display_name: Optional[str] = None, + device_type: Optional[str] = None, + os_name: Optional[str] = None, + authorization_state: Optional[Union[str, "AuthorizationState"]] = "Unauthorized", + device_criticality: Optional[Union[str, "DeviceCriticality"]] = "Standard", + purdue_level: Optional[Union[str, "PurdueLevel"]] = "ProcessControl", + notes: Optional[str] = None, + **kwargs + ): + super(Device, self).__init__(**kwargs) + self.display_name = display_name + self.device_type = device_type + self.source_name = None + self.network_interfaces = None + self.vendor = None + self.os_name = os_name + self.protocols = None + self.last_active_time = None + self.last_update_time = None + self.management_state = None + self.authorization_state = authorization_state + self.device_criticality = device_criticality + self.purdue_level = purdue_level + self.notes = notes + self.firmwares = None + self.discovery_time = None + self.programming_state = None + self.last_programming_time = None + self.scanning_functionality = None + self.last_scan_time = None + self.risk_score = None + self.sensor_name = None + self.site_name = None + self.zone_name = None + self.device_status = None + + +class DeviceList(msrest.serialization.Model): + """List of Devices. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of devices. + :type value: list[~azure.mgmt.security.models.Device] + :ivar next_link: When there are too many devices for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Device]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["Device"], + **kwargs + ): + super(DeviceList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class DeviceSecurityGroup(Resource): + """The device security group resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param threshold_rules: The list of custom alert threshold rules. + :type threshold_rules: list[~azure.mgmt.security.models.ThresholdCustomAlertRule] + :param time_window_rules: The list of custom alert time-window rules. + :type time_window_rules: list[~azure.mgmt.security.models.TimeWindowCustomAlertRule] + :param allowlist_rules: The allow-list custom alert rules. + :type allowlist_rules: list[~azure.mgmt.security.models.AllowlistCustomAlertRule] + :param denylist_rules: The deny-list custom alert rules. + :type denylist_rules: list[~azure.mgmt.security.models.DenylistCustomAlertRule] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'threshold_rules': {'key': 'properties.thresholdRules', 'type': '[ThresholdCustomAlertRule]'}, + 'time_window_rules': {'key': 'properties.timeWindowRules', 'type': '[TimeWindowCustomAlertRule]'}, + 'allowlist_rules': {'key': 'properties.allowlistRules', 'type': '[AllowlistCustomAlertRule]'}, + 'denylist_rules': {'key': 'properties.denylistRules', 'type': '[DenylistCustomAlertRule]'}, + } + + def __init__( + self, + *, + threshold_rules: Optional[List["ThresholdCustomAlertRule"]] = None, + time_window_rules: Optional[List["TimeWindowCustomAlertRule"]] = None, + allowlist_rules: Optional[List["AllowlistCustomAlertRule"]] = None, + denylist_rules: Optional[List["DenylistCustomAlertRule"]] = None, + **kwargs + ): + super(DeviceSecurityGroup, self).__init__(**kwargs) + self.threshold_rules = threshold_rules + self.time_window_rules = time_window_rules + self.allowlist_rules = allowlist_rules + self.denylist_rules = denylist_rules + + +class DeviceSecurityGroupList(msrest.serialization.Model): + """List of device security groups. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of device security group objects. + :type value: list[~azure.mgmt.security.models.DeviceSecurityGroup] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DeviceSecurityGroup]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["DeviceSecurityGroup"]] = None, + **kwargs + ): + super(DeviceSecurityGroupList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class DirectMethodInvokesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of direct method invokes is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(DirectMethodInvokesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'DirectMethodInvokesNotInAllowedRange' # type: str + self.rule_type = 'DirectMethodInvokesNotInAllowedRange' # type: str + + +class DiscoveredSecuritySolution(Resource, Location): + """DiscoveredSecuritySolution. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param security_family: Required. The security family of the discovered solution. Possible + values include: "Waf", "Ngfw", "SaasWaf", "Va". + :type security_family: str or ~azure.mgmt.security.models.SecurityFamily + :param offer: Required. The security solutions' image offer. + :type offer: str + :param publisher: Required. The security solutions' image publisher. + :type publisher: str + :param sku: Required. The security solutions' image sku. + :type sku: str + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'security_family': {'required': True}, + 'offer': {'required': True}, + 'publisher': {'required': True}, + 'sku': {'required': True}, + } + + _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, + 'offer': {'key': 'properties.offer', 'type': 'str'}, + 'publisher': {'key': 'properties.publisher', 'type': 'str'}, + 'sku': {'key': 'properties.sku', 'type': 'str'}, + } + + def __init__( + self, + *, + security_family: Union[str, "SecurityFamily"], + offer: str, + publisher: str, + sku: str, + **kwargs + ): + super(DiscoveredSecuritySolution, self).__init__(**kwargs) + self.location = None + self.security_family = security_family + self.offer = offer + self.publisher = publisher + self.sku = sku + self.id = None + self.name = None + self.type = None + self.security_family = security_family + self.offer = offer + self.publisher = publisher + self.sku = sku + + +class DiscoveredSecuritySolutionList(msrest.serialization.Model): + """DiscoveredSecuritySolutionList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.DiscoveredSecuritySolution] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DiscoveredSecuritySolution]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["DiscoveredSecuritySolution"]] = None, + **kwargs + ): + super(DiscoveredSecuritySolutionList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class EffectiveNetworkSecurityGroups(msrest.serialization.Model): + """Describes the Network Security Groups effective on a network interface. + + :param network_interface: The Azure resource ID of the network interface. + :type network_interface: str + :param network_security_groups: The Network Security Groups effective on the network interface. + :type network_security_groups: list[str] + """ + + _attribute_map = { + 'network_interface': {'key': 'networkInterface', 'type': 'str'}, + 'network_security_groups': {'key': 'networkSecurityGroups', 'type': '[str]'}, + } + + def __init__( + self, + *, + network_interface: Optional[str] = None, + network_security_groups: Optional[List[str]] = None, + **kwargs + ): + super(EffectiveNetworkSecurityGroups, self).__init__(**kwargs) + self.network_interface = network_interface + self.network_security_groups = network_security_groups + + +class ExternalSecuritySolutionList(msrest.serialization.Model): + """ExternalSecuritySolutionList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.ExternalSecuritySolution] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ExternalSecuritySolution]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["ExternalSecuritySolution"]] = None, + **kwargs + ): + super(ExternalSecuritySolutionList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class FailedLocalLoginsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of failed local logins is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(FailedLocalLoginsNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'FailedLocalLoginsNotInAllowedRange' # type: str + self.rule_type = 'FailedLocalLoginsNotInAllowedRange' # type: str + + +class FileUploadsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of file uploads is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(FileUploadsNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'FileUploadsNotInAllowedRange' # type: str + self.rule_type = 'FileUploadsNotInAllowedRange' # type: str + + +class Firmware(msrest.serialization.Model): + """Firmware information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar module_address: Address of the specific module a firmware is related to. + :vartype module_address: str + :ivar rack: Rack number of the module a firmware is related to. + :vartype rack: str + :ivar slot: Slot number in the rack of the module a firmware is related to. + :vartype slot: str + :ivar serial: Serial of the firmware. + :vartype serial: str + :ivar model: Firmware model. + :vartype model: str + :ivar version: Firmware version. + :vartype version: str + :ivar additional_data: A bag of fields which extends the firmware information. + :vartype additional_data: object + """ + + _validation = { + 'module_address': {'readonly': True}, + 'rack': {'readonly': True}, + 'slot': {'readonly': True}, + 'serial': {'readonly': True}, + 'model': {'readonly': True}, + 'version': {'readonly': True}, + 'additional_data': {'readonly': True}, + } + + _attribute_map = { + 'module_address': {'key': 'moduleAddress', 'type': 'str'}, + 'rack': {'key': 'rack', 'type': 'str'}, + 'slot': {'key': 'slot', 'type': 'str'}, + 'serial': {'key': 'serial', 'type': 'str'}, + 'model': {'key': 'model', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + 'additional_data': {'key': 'additionalData', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(Firmware, self).__init__(**kwargs) + self.module_address = None + self.rack = None + self.slot = None + self.serial = None + self.model = None + self.version = None + self.additional_data = None + + +class GcpCredentialsDetailsProperties(AuthenticationDetailsProperties): + """GCP cloud account connector based service to service credentials, the credentials is composed of organization id and json api key (write only). + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar authentication_provisioning_state: State of the multi-cloud connector. Possible values + include: "Valid", "Invalid", "Expired", "IncorrectPolicy". + :vartype authentication_provisioning_state: str or + ~azure.mgmt.security.models.AuthenticationProvisioningState + :ivar granted_permissions: The permissions detected in the cloud account. + :vartype granted_permissions: list[str or ~azure.mgmt.security.models.PermissionProperty] + :param authentication_type: Required. Connect to your cloud account, for AWS use either account + credentials or role-based authentication. For GCP use account organization credentials.Constant + filled by server. Possible values include: "awsCreds", "awsAssumeRole", "gcpCredentials". + :type authentication_type: str or ~azure.mgmt.security.models.AuthenticationType + :param organization_id: Required. The Organization ID of the GCP cloud account. + :type organization_id: str + :param type: Required. Type field of the API key (write only). + :type type: str + :param project_id: Required. Project Id field of the API key (write only). + :type project_id: str + :param private_key_id: Required. Private key Id field of the API key (write only). + :type private_key_id: str + :param private_key: Required. Private key field of the API key (write only). + :type private_key: str + :param client_email: Required. Client email field of the API key (write only). + :type client_email: str + :param client_id: Required. Client Id field of the API key (write only). + :type client_id: str + :param auth_uri: Required. Auth Uri field of the API key (write only). + :type auth_uri: str + :param token_uri: Required. Token Uri field of the API key (write only). + :type token_uri: str + :param auth_provider_x509_cert_url: Required. Auth provider x509 certificate url field of the + API key (write only). + :type auth_provider_x509_cert_url: str + :param client_x509_cert_url: Required. Client x509 certificate url field of the API key (write + only). + :type client_x509_cert_url: str + """ + + _validation = { + 'authentication_provisioning_state': {'readonly': True}, + 'granted_permissions': {'readonly': True}, + 'authentication_type': {'required': True}, + 'organization_id': {'required': True}, + 'type': {'required': True}, + 'project_id': {'required': True}, + 'private_key_id': {'required': True}, + 'private_key': {'required': True}, + 'client_email': {'required': True}, + 'client_id': {'required': True}, + 'auth_uri': {'required': True}, + 'token_uri': {'required': True}, + 'auth_provider_x509_cert_url': {'required': True}, + 'client_x509_cert_url': {'required': True}, + } + + _attribute_map = { + 'authentication_provisioning_state': {'key': 'authenticationProvisioningState', 'type': 'str'}, + 'granted_permissions': {'key': 'grantedPermissions', 'type': '[str]'}, + 'authentication_type': {'key': 'authenticationType', 'type': 'str'}, + 'organization_id': {'key': 'organizationId', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'project_id': {'key': 'projectId', 'type': 'str'}, + 'private_key_id': {'key': 'privateKeyId', 'type': 'str'}, + 'private_key': {'key': 'privateKey', 'type': 'str'}, + 'client_email': {'key': 'clientEmail', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + 'auth_uri': {'key': 'authUri', 'type': 'str'}, + 'token_uri': {'key': 'tokenUri', 'type': 'str'}, + 'auth_provider_x509_cert_url': {'key': 'authProviderX509CertUrl', 'type': 'str'}, + 'client_x509_cert_url': {'key': 'clientX509CertUrl', 'type': 'str'}, + } + + def __init__( + self, + *, + organization_id: str, + type: str, + project_id: str, + private_key_id: str, + private_key: str, + client_email: str, + client_id: str, + auth_uri: str, + token_uri: str, + auth_provider_x509_cert_url: str, + client_x509_cert_url: str, + **kwargs + ): + super(GcpCredentialsDetailsProperties, self).__init__(**kwargs) + self.authentication_type = 'gcpCredentials' # type: str + self.organization_id = organization_id + self.type = type + self.project_id = project_id + self.private_key_id = private_key_id + self.private_key = private_key + self.client_email = client_email + self.client_id = client_id + self.auth_uri = auth_uri + self.token_uri = token_uri + self.auth_provider_x509_cert_url = auth_provider_x509_cert_url + self.client_x509_cert_url = client_x509_cert_url + + +class HttpC2DMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of cloud to device messages (HTTP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(HttpC2DMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'HttpC2DMessagesNotInAllowedRange' # type: str + self.rule_type = 'HttpC2DMessagesNotInAllowedRange' # type: str + + +class HttpC2DRejectedMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of rejected cloud to device messages (HTTP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(HttpC2DRejectedMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'HttpC2DRejectedMessagesNotInAllowedRange' # type: str + self.rule_type = 'HttpC2DRejectedMessagesNotInAllowedRange' # type: str + + +class HttpD2CMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device to cloud messages (HTTP protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(HttpD2CMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'HttpD2CMessagesNotInAllowedRange' # type: str + self.rule_type = 'HttpD2CMessagesNotInAllowedRange' # type: str + + +class HybridComputeSettingsProperties(msrest.serialization.Model): + """Settings for hybrid compute management. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar hybrid_compute_provisioning_state: State of the service principal and its secret. + Possible values include: "Valid", "Invalid", "Expired". + :vartype hybrid_compute_provisioning_state: str or + ~azure.mgmt.security.models.HybridComputeProvisioningState + :param auto_provision: Required. Whether or not to automatically install Azure Arc (hybrid + compute) agents on machines. Possible values include: "On", "Off". + :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision + :param resource_group_name: The name of the resource group where Arc (Hybrid Compute) + connectors are connected. + :type resource_group_name: str + :param region: The location where the meta data of machines will be stored. + :type region: str + :param proxy_server: For a non-Azure machine that is not connected directly to the internet, + specify a proxy server that the non-Azure machine can use. + :type proxy_server: ~azure.mgmt.security.models.ProxyServerProperties + :param service_principal: An object to access resources that are secured by an Azure AD tenant. + :type service_principal: ~azure.mgmt.security.models.ServicePrincipalProperties + """ + + _validation = { + 'hybrid_compute_provisioning_state': {'readonly': True}, + 'auto_provision': {'required': True}, + } + + _attribute_map = { + 'hybrid_compute_provisioning_state': {'key': 'hybridComputeProvisioningState', 'type': 'str'}, + 'auto_provision': {'key': 'autoProvision', 'type': 'str'}, + 'resource_group_name': {'key': 'resourceGroupName', 'type': 'str'}, + 'region': {'key': 'region', 'type': 'str'}, + 'proxy_server': {'key': 'proxyServer', 'type': 'ProxyServerProperties'}, + 'service_principal': {'key': 'servicePrincipal', 'type': 'ServicePrincipalProperties'}, + } + + def __init__( + self, + *, + auto_provision: Union[str, "AutoProvision"], + resource_group_name: Optional[str] = None, + region: Optional[str] = None, + proxy_server: Optional["ProxyServerProperties"] = None, + service_principal: Optional["ServicePrincipalProperties"] = None, + **kwargs + ): + super(HybridComputeSettingsProperties, self).__init__(**kwargs) + self.hybrid_compute_provisioning_state = None + self.auto_provision = auto_provision + self.resource_group_name = resource_group_name + self.region = region + self.proxy_server = proxy_server + self.service_principal = service_principal + + +class InformationProtectionKeyword(msrest.serialization.Model): + """The information type keyword. + + :param pattern: The keyword pattern. + :type pattern: str + :param custom: Indicates whether the keyword is custom or not. + :type custom: bool + :param can_be_numeric: Indicates whether the keyword can be applied on numeric types or not. + :type can_be_numeric: bool + :param excluded: Indicates whether the keyword is excluded or not. + :type excluded: bool + """ + + _attribute_map = { + 'pattern': {'key': 'pattern', 'type': 'str'}, + 'custom': {'key': 'custom', 'type': 'bool'}, + 'can_be_numeric': {'key': 'canBeNumeric', 'type': 'bool'}, + 'excluded': {'key': 'excluded', 'type': 'bool'}, + } + + def __init__( + self, + *, + pattern: Optional[str] = None, + custom: Optional[bool] = None, + can_be_numeric: Optional[bool] = None, + excluded: Optional[bool] = None, + **kwargs + ): + super(InformationProtectionKeyword, self).__init__(**kwargs) + self.pattern = pattern + self.custom = custom + self.can_be_numeric = can_be_numeric + self.excluded = excluded + + +class InformationProtectionPolicy(Resource): + """Information protection policy. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar last_modified_utc: Describes the last UTC time the policy was modified. + :vartype last_modified_utc: ~datetime.datetime + :ivar version: Describes the version of the policy. + :vartype version: str + :param labels: Dictionary of sensitivity labels. + :type labels: dict[str, ~azure.mgmt.security.models.SensitivityLabel] + :param information_types: The sensitivity information types. + :type information_types: dict[str, ~azure.mgmt.security.models.InformationType] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'last_modified_utc': {'readonly': True}, + 'version': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'last_modified_utc': {'key': 'properties.lastModifiedUtc', 'type': 'iso-8601'}, + 'version': {'key': 'properties.version', 'type': 'str'}, + 'labels': {'key': 'properties.labels', 'type': '{SensitivityLabel}'}, + 'information_types': {'key': 'properties.informationTypes', 'type': '{InformationType}'}, + } + + def __init__( + self, + *, + labels: Optional[Dict[str, "SensitivityLabel"]] = None, + information_types: Optional[Dict[str, "InformationType"]] = None, + **kwargs + ): + super(InformationProtectionPolicy, self).__init__(**kwargs) + self.last_modified_utc = None + self.version = None + self.labels = labels + self.information_types = information_types + + +class InformationProtectionPolicyList(msrest.serialization.Model): + """Information protection policies response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of information protection policies. + :type value: list[~azure.mgmt.security.models.InformationProtectionPolicy] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[InformationProtectionPolicy]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["InformationProtectionPolicy"]] = None, + **kwargs + ): + super(InformationProtectionPolicyList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class InformationType(msrest.serialization.Model): + """The information type. + + :param display_name: The name of the information type. + :type display_name: str + :param description: The description of the information type. + :type description: str + :param order: The order of the information type. + :type order: int + :param recommended_label_id: The recommended label id to be associated with this information + type. + :type recommended_label_id: str + :param enabled: Indicates whether the information type is enabled or not. + :type enabled: bool + :param custom: Indicates whether the information type is custom or not. + :type custom: bool + :param keywords: The information type keywords. + :type keywords: list[~azure.mgmt.security.models.InformationProtectionKeyword] + """ + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'order': {'key': 'order', 'type': 'int'}, + 'recommended_label_id': {'key': 'recommendedLabelId', 'type': 'str'}, + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'custom': {'key': 'custom', 'type': 'bool'}, + 'keywords': {'key': 'keywords', 'type': '[InformationProtectionKeyword]'}, + } + + def __init__( + self, + *, + display_name: Optional[str] = None, + description: Optional[str] = None, + order: Optional[int] = None, + recommended_label_id: Optional[str] = None, + enabled: Optional[bool] = None, + custom: Optional[bool] = None, + keywords: Optional[List["InformationProtectionKeyword"]] = None, + **kwargs + ): + super(InformationType, self).__init__(**kwargs) + self.display_name = display_name + self.description = description + self.order = order + self.recommended_label_id = recommended_label_id + self.enabled = enabled + self.custom = custom + self.keywords = keywords + + +class IotAlert(msrest.serialization.Model): + """IoT alert. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar system_alert_id: Holds the product canonical identifier of the alert within the scope of + a product. + :vartype system_alert_id: str + :ivar compromised_entity: Display name of the main entity being reported on. + :vartype compromised_entity: str + :ivar alert_type: The type name of the alert. + :vartype alert_type: str + :ivar start_time_utc: The impact start time of the alert (the time of the first event or + activity included in the alert). + :vartype start_time_utc: str + :ivar end_time_utc: The impact end time of the alert (the time of the last event or activity + included in the alert). + :vartype end_time_utc: str + :param entities: A list of entities related to the alert. + :type entities: list[object] + :param extended_properties: A bag of fields which extends the alert information. + :type extended_properties: object + """ + + _validation = { + 'system_alert_id': {'readonly': True}, + 'compromised_entity': {'readonly': True}, + 'alert_type': {'readonly': True}, + 'start_time_utc': {'readonly': True}, + 'end_time_utc': {'readonly': True}, + } + + _attribute_map = { + 'system_alert_id': {'key': 'properties.systemAlertId', 'type': 'str'}, + 'compromised_entity': {'key': 'properties.compromisedEntity', 'type': 'str'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'start_time_utc': {'key': 'properties.startTimeUtc', 'type': 'str'}, + 'end_time_utc': {'key': 'properties.endTimeUtc', 'type': 'str'}, + 'entities': {'key': 'properties.entities', 'type': '[object]'}, + 'extended_properties': {'key': 'properties.extendedProperties', 'type': 'object'}, + } + + def __init__( + self, + *, + entities: Optional[List[object]] = None, + extended_properties: Optional[object] = None, + **kwargs + ): + super(IotAlert, self).__init__(**kwargs) + self.system_alert_id = None + self.compromised_entity = None + self.alert_type = None + self.start_time_utc = None + self.end_time_utc = None + self.entities = entities + self.extended_properties = extended_properties + + +class IotAlertList(msrest.serialization.Model): + """List of IoT alerts. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotAlert] + :ivar next_link: When available, follow the URI to get the next page of data. + :vartype next_link: str + :ivar total_count: Total count of alerts that conforms with the given filter options (not + affected by page size). + :vartype total_count: int + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + 'total_count': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotAlert]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'total_count': {'key': 'totalCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IotAlertList, self).__init__(**kwargs) + self.value = None + self.next_link = None + self.total_count = None + + +class IotAlertType(Resource): + """IoT alert type. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar alert_display_name: The display name of the alert. + :vartype alert_display_name: str + :ivar severity: The severity of the alert. Possible values include: "Informational", "Low", + "Medium", "High". + :vartype severity: str or ~azure.mgmt.security.models.AlertSeverity + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar provider_name: The name of the alert provider or internal partner. + :vartype provider_name: str + :ivar product_name: The name of the product which published this alert. + :vartype product_name: str + :ivar product_component_name: The name of a component inside the product which generated the + alert. + :vartype product_component_name: str + :ivar vendor_name: The name of the vendor that raise the alert. + :vartype vendor_name: str + :ivar intent: Kill chain related intent behind the alert. Could contain multiple enum values + (separated by commas). Possible values include: "Unknown", "PreAttack", "InitialAccess", + "Persistence", "PrivilegeEscalation", "DefenseEvasion", "CredentialAccess", "Discovery", + "LateralMovement", "Execution", "Collection", "Exfiltration", "CommandAndControl", "Impact", + "Probing", "Exploitation". + :vartype intent: str or ~azure.mgmt.security.models.AlertIntent + :ivar remediation_steps: Manual action items to take to remediate the alert. + :vartype remediation_steps: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'alert_display_name': {'readonly': True}, + 'severity': {'readonly': True}, + 'description': {'readonly': True}, + 'provider_name': {'readonly': True}, + 'product_name': {'readonly': True}, + 'product_component_name': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'intent': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'provider_name': {'key': 'properties.providerName', 'type': 'str'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'product_component_name': {'key': 'properties.productComponentName', 'type': 'str'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'intent': {'key': 'properties.intent', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotAlertType, self).__init__(**kwargs) + self.alert_display_name = None + self.severity = None + self.description = None + self.provider_name = None + self.product_name = None + self.product_component_name = None + self.vendor_name = None + self.intent = None + self.remediation_steps = None + + +class IotAlertTypeList(msrest.serialization.Model): + """List of alert types. + + :param value: List data. + :type value: list[~azure.mgmt.security.models.IotAlertType] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotAlertType]'}, + } + + def __init__( + self, + *, + value: Optional[List["IotAlertType"]] = None, + **kwargs + ): + super(IotAlertTypeList, self).__init__(**kwargs) + self.value = value + + +class IotDefenderSettingsList(msrest.serialization.Model): + """List of IoT Defender settings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotDefenderSettingsModel] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotDefenderSettingsModel]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotDefenderSettingsList, self).__init__(**kwargs) + self.value = None + + +class IotDefenderSettingsModel(Resource): + """IoT Defender settings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param device_quota: Size of the device quota (as a opposed to a Pay as You Go billing model). + Value is required to be in multiples of 1000. + :type device_quota: int + :param sentinel_workspace_resource_ids: Sentinel Workspace Resource Ids. + :type sentinel_workspace_resource_ids: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'device_quota': {'minimum': 1000}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'device_quota': {'key': 'properties.deviceQuota', 'type': 'int'}, + 'sentinel_workspace_resource_ids': {'key': 'properties.sentinelWorkspaceResourceIds', 'type': '[str]'}, + } + + def __init__( + self, + *, + device_quota: Optional[int] = None, + sentinel_workspace_resource_ids: Optional[List[str]] = None, + **kwargs + ): + super(IotDefenderSettingsModel, self).__init__(**kwargs) + self.device_quota = device_quota + self.sentinel_workspace_resource_ids = sentinel_workspace_resource_ids + + +class IotRecommendation(Resource): + """IoT recommendation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar device_id: Identifier of the device being reported on. + :vartype device_id: str + :ivar recommendation_type: The type name of the recommendation. + :vartype recommendation_type: str + :ivar discovered_time_utc: The discovery time of the recommendation. + :vartype discovered_time_utc: str + :param recommendation_additional_data: A bag of fields which extends the recommendation + information. + :type recommendation_additional_data: object + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'device_id': {'readonly': True}, + 'recommendation_type': {'readonly': True}, + 'discovered_time_utc': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'device_id': {'key': 'properties.deviceId', 'type': 'str'}, + 'recommendation_type': {'key': 'properties.recommendationType', 'type': 'str'}, + 'discovered_time_utc': {'key': 'properties.discoveredTimeUtc', 'type': 'str'}, + 'recommendation_additional_data': {'key': 'properties.recommendationAdditionalData', 'type': 'object'}, + } + + def __init__( + self, + *, + recommendation_additional_data: Optional[object] = None, + **kwargs + ): + super(IotRecommendation, self).__init__(**kwargs) + self.device_id = None + self.recommendation_type = None + self.discovered_time_utc = None + self.recommendation_additional_data = recommendation_additional_data + + +class IotRecommendationList(msrest.serialization.Model): + """List of IoT recommendations. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotRecommendation] + :ivar next_link: When available, follow the URI to get the next page of data. + :vartype next_link: str + :ivar total_count: Total count of recommendations that conforms with the given filter options + (not affected by page size). + :vartype total_count: int + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + 'total_count': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotRecommendation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'total_count': {'key': 'totalCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IotRecommendationList, self).__init__(**kwargs) + self.value = None + self.next_link = None + self.total_count = None + + +class IotRecommendationType(Resource): + """IoT recommendation type. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar recommendation_display_name: The display name of the recommendation. + :vartype recommendation_display_name: str + :ivar severity: The severity of the recommendation. Possible values include: "Unknown", + "NotApplicable", "Healthy", "OffByPolicy", "Low", "Medium", "High". + :vartype severity: str or ~azure.mgmt.security.models.RecommendationSeverity + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar product_name: The name of the product which published this recommendation. + :vartype product_name: str + :ivar product_component_name: The name of a component inside the product which generated the + recommendation. + :vartype product_component_name: str + :ivar vendor_name: The name of the vendor that raised the recommendation. + :vartype vendor_name: str + :ivar control: The name of the recommendation's control category. + :vartype control: str + :ivar remediation_steps: Manual action items to take to resolve the recommendation. + :vartype remediation_steps: list[str] + :ivar data_source: The alert's data source. + :vartype data_source: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'recommendation_display_name': {'readonly': True}, + 'severity': {'readonly': True}, + 'description': {'readonly': True}, + 'product_name': {'readonly': True}, + 'product_component_name': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'control': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'data_source': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'recommendation_display_name': {'key': 'properties.recommendationDisplayName', 'type': 'str'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'product_component_name': {'key': 'properties.productComponentName', 'type': 'str'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'control': {'key': 'properties.control', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': '[str]'}, + 'data_source': {'key': 'properties.dataSource', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IotRecommendationType, self).__init__(**kwargs) + self.recommendation_display_name = None + self.severity = None + self.description = None + self.product_name = None + self.product_component_name = None + self.vendor_name = None + self.control = None + self.remediation_steps = None + self.data_source = None + + +class IotRecommendationTypeList(msrest.serialization.Model): + """List of recommendation types. + + :param value: List data. + :type value: list[~azure.mgmt.security.models.IotRecommendationType] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotRecommendationType]'}, + } + + def __init__( + self, + *, + value: Optional[List["IotRecommendationType"]] = None, + **kwargs + ): + super(IotRecommendationTypeList, self).__init__(**kwargs) + self.value = value + + +class TagsResource(msrest.serialization.Model): + """A container holding only the Tags for a resource, allowing the user to update the tags. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + super(TagsResource, self).__init__(**kwargs) + self.tags = tags + + +class IoTSecurityAggregatedAlert(Resource, TagsResource): + """Security Solution Aggregated Alert information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar alert_type: Name of the alert type. + :vartype alert_type: str + :ivar alert_display_name: Display name of the alert type. + :vartype alert_display_name: str + :ivar aggregated_date_utc: Date of detection. + :vartype aggregated_date_utc: ~datetime.date + :ivar vendor_name: Name of the organization that raised the alert. + :vartype vendor_name: str + :ivar reported_severity: Assessed alert severity. Possible values include: "Informational", + "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar remediation_steps: Recommended steps for remediation. + :vartype remediation_steps: str + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar count: Number of alerts occurrences within the aggregated time window. + :vartype count: int + :ivar effected_resource_type: Azure resource ID of the resource that received the alerts. + :vartype effected_resource_type: str + :ivar system_source: The type of the alerted resource (Azure, Non-Azure). + :vartype system_source: str + :ivar action_taken: IoT Security solution alert response. + :vartype action_taken: str + :ivar log_analytics_query: Log analytics query for getting the list of affected devices/alerts. + :vartype log_analytics_query: str + :ivar top_devices_list: 10 devices with the highest number of occurrences of this alert type, + on this day. + :vartype top_devices_list: + list[~azure.mgmt.security.models.IoTSecurityAggregatedAlertPropertiesTopDevicesListItem] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'alert_type': {'readonly': True}, + 'alert_display_name': {'readonly': True}, + 'aggregated_date_utc': {'readonly': True}, + 'vendor_name': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'description': {'readonly': True}, + 'count': {'readonly': True}, + 'effected_resource_type': {'readonly': True}, + 'system_source': {'readonly': True}, + 'action_taken': {'readonly': True}, + 'log_analytics_query': {'readonly': True}, + 'top_devices_list': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'alert_type': {'key': 'properties.alertType', 'type': 'str'}, + 'alert_display_name': {'key': 'properties.alertDisplayName', 'type': 'str'}, + 'aggregated_date_utc': {'key': 'properties.aggregatedDateUtc', 'type': 'date'}, + 'vendor_name': {'key': 'properties.vendorName', 'type': 'str'}, + 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + 'effected_resource_type': {'key': 'properties.effectedResourceType', 'type': 'str'}, + 'system_source': {'key': 'properties.systemSource', 'type': 'str'}, + 'action_taken': {'key': 'properties.actionTaken', 'type': 'str'}, + 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + 'top_devices_list': {'key': 'properties.topDevicesList', 'type': '[IoTSecurityAggregatedAlertPropertiesTopDevicesListItem]'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + super(IoTSecurityAggregatedAlert, self).__init__(tags=tags, **kwargs) + self.tags = tags + self.alert_type = None + self.alert_display_name = None + self.aggregated_date_utc = None + self.vendor_name = None + self.reported_severity = None + self.remediation_steps = None + self.description = None + self.count = None + self.effected_resource_type = None + self.system_source = None + self.action_taken = None + self.log_analytics_query = None + self.top_devices_list = None + self.id = None + self.name = None + self.type = None + self.alert_type = None + self.alert_display_name = None + self.aggregated_date_utc = None + self.vendor_name = None + self.reported_severity = None + self.remediation_steps = None + self.description = None + self.count = None + self.effected_resource_type = None + self.system_source = None + self.action_taken = None + self.log_analytics_query = None + self.top_devices_list = None + + +class IoTSecurityAggregatedAlertList(msrest.serialization.Model): + """List of IoT Security solution aggregated alert data. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of aggregated alerts data. + :type value: list[~azure.mgmt.security.models.IoTSecurityAggregatedAlert] + :ivar next_link: When there is too much alert data for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecurityAggregatedAlert]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["IoTSecurityAggregatedAlert"], + **kwargs + ): + super(IoTSecurityAggregatedAlertList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class IoTSecurityAggregatedAlertPropertiesTopDevicesListItem(msrest.serialization.Model): + """IoTSecurityAggregatedAlertPropertiesTopDevicesListItem. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar device_id: Name of the device. + :vartype device_id: str + :ivar alerts_count: Number of alerts raised for this device. + :vartype alerts_count: int + :ivar last_occurrence: Most recent time this alert was raised for this device, on this day. + :vartype last_occurrence: str + """ + + _validation = { + 'device_id': {'readonly': True}, + 'alerts_count': {'readonly': True}, + 'last_occurrence': {'readonly': True}, + } + + _attribute_map = { + 'device_id': {'key': 'deviceId', 'type': 'str'}, + 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + 'last_occurrence': {'key': 'lastOccurrence', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAggregatedAlertPropertiesTopDevicesListItem, self).__init__(**kwargs) + self.device_id = None + self.alerts_count = None + self.last_occurrence = None + + +class IoTSecurityAggregatedRecommendation(Resource, TagsResource): + """IoT Security solution recommendation information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param recommendation_name: Name of the recommendation. + :type recommendation_name: str + :ivar recommendation_display_name: Display name of the recommendation type. + :vartype recommendation_display_name: str + :ivar description: Description of the suspected vulnerability and meaning. + :vartype description: str + :ivar recommendation_type_id: Recommendation-type GUID. + :vartype recommendation_type_id: str + :ivar detected_by: Name of the organization that made the recommendation. + :vartype detected_by: str + :ivar remediation_steps: Recommended steps for remediation. + :vartype remediation_steps: str + :ivar reported_severity: Assessed recommendation severity. Possible values include: + "Informational", "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar healthy_devices: Number of healthy devices within the IoT Security solution. + :vartype healthy_devices: int + :ivar unhealthy_device_count: Number of unhealthy devices within the IoT Security solution. + :vartype unhealthy_device_count: int + :ivar log_analytics_query: Log analytics query for getting the list of affected devices/alerts. + :vartype log_analytics_query: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'recommendation_display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'recommendation_type_id': {'readonly': True}, + 'detected_by': {'readonly': True}, + 'remediation_steps': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'healthy_devices': {'readonly': True}, + 'unhealthy_device_count': {'readonly': True}, + 'log_analytics_query': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'recommendation_name': {'key': 'properties.recommendationName', 'type': 'str'}, + 'recommendation_display_name': {'key': 'properties.recommendationDisplayName', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'recommendation_type_id': {'key': 'properties.recommendationTypeId', 'type': 'str'}, + 'detected_by': {'key': 'properties.detectedBy', 'type': 'str'}, + 'remediation_steps': {'key': 'properties.remediationSteps', 'type': 'str'}, + 'reported_severity': {'key': 'properties.reportedSeverity', 'type': 'str'}, + 'healthy_devices': {'key': 'properties.healthyDevices', 'type': 'int'}, + 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, + 'log_analytics_query': {'key': 'properties.logAnalyticsQuery', 'type': 'str'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + recommendation_name: Optional[str] = None, + **kwargs + ): + super(IoTSecurityAggregatedRecommendation, self).__init__(tags=tags, **kwargs) + self.tags = tags + self.recommendation_name = recommendation_name + self.recommendation_display_name = None + self.description = None + self.recommendation_type_id = None + self.detected_by = None + self.remediation_steps = None + self.reported_severity = None + self.healthy_devices = None + self.unhealthy_device_count = None + self.log_analytics_query = None + self.id = None + self.name = None + self.type = None + self.recommendation_name = recommendation_name + self.recommendation_display_name = None + self.description = None + self.recommendation_type_id = None + self.detected_by = None + self.remediation_steps = None + self.reported_severity = None + self.healthy_devices = None + self.unhealthy_device_count = None + self.log_analytics_query = None + + +class IoTSecurityAggregatedRecommendationList(msrest.serialization.Model): + """List of IoT Security solution aggregated recommendations. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of aggregated recommendations data. + :type value: list[~azure.mgmt.security.models.IoTSecurityAggregatedRecommendation] + :ivar next_link: When there is too much alert data for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecurityAggregatedRecommendation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["IoTSecurityAggregatedRecommendation"], + **kwargs + ): + super(IoTSecurityAggregatedRecommendationList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class IoTSecurityAlertedDevice(msrest.serialization.Model): + """Statistical information about the number of alerts per device during last set number of days. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar device_id: Device identifier. + :vartype device_id: str + :ivar alerts_count: Number of alerts raised for this device. + :vartype alerts_count: int + """ + + _validation = { + 'device_id': {'readonly': True}, + 'alerts_count': {'readonly': True}, + } + + _attribute_map = { + 'device_id': {'key': 'deviceId', 'type': 'str'}, + 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityAlertedDevice, self).__init__(**kwargs) + self.device_id = None + self.alerts_count = None + + +class IoTSecurityDeviceAlert(msrest.serialization.Model): + """Statistical information about the number of alerts per alert type during last set number of days. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar alert_display_name: Display name of the alert. + :vartype alert_display_name: str + :ivar reported_severity: Assessed Alert severity. Possible values include: "Informational", + "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar alerts_count: Number of alerts raised for this alert type. + :vartype alerts_count: int + """ + + _validation = { + 'alert_display_name': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'alerts_count': {'readonly': True}, + } + + _attribute_map = { + 'alert_display_name': {'key': 'alertDisplayName', 'type': 'str'}, + 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, + 'alerts_count': {'key': 'alertsCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityDeviceAlert, self).__init__(**kwargs) + self.alert_display_name = None + self.reported_severity = None + self.alerts_count = None + + +class IoTSecurityDeviceRecommendation(msrest.serialization.Model): + """Statistical information about the number of recommendations per device, per recommendation type. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar recommendation_display_name: Display name of the recommendation. + :vartype recommendation_display_name: str + :ivar reported_severity: Assessed recommendation severity. Possible values include: + "Informational", "Low", "Medium", "High". + :vartype reported_severity: str or ~azure.mgmt.security.models.ReportedSeverity + :ivar devices_count: Number of devices with this recommendation. + :vartype devices_count: int + """ + + _validation = { + 'recommendation_display_name': {'readonly': True}, + 'reported_severity': {'readonly': True}, + 'devices_count': {'readonly': True}, + } + + _attribute_map = { + 'recommendation_display_name': {'key': 'recommendationDisplayName', 'type': 'str'}, + 'reported_severity': {'key': 'reportedSeverity', 'type': 'str'}, + 'devices_count': {'key': 'devicesCount', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IoTSecurityDeviceRecommendation, self).__init__(**kwargs) + self.recommendation_display_name = None + self.reported_severity = None + self.devices_count = None + + +class IoTSecuritySolutionAnalyticsModel(Resource): + """Security analytics of your IoT Security solution. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar metrics: Security analytics of your IoT Security solution. + :vartype metrics: ~azure.mgmt.security.models.IoTSeverityMetrics + :ivar unhealthy_device_count: Number of unhealthy devices within your IoT Security solution. + :vartype unhealthy_device_count: int + :ivar devices_metrics: List of device metrics by the aggregation date. + :vartype devices_metrics: + list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem] + :param top_alerted_devices: List of the 3 devices with the most alerts. + :type top_alerted_devices: list[~azure.mgmt.security.models.IoTSecurityAlertedDevice] + :param most_prevalent_device_alerts: List of the 3 most prevalent device alerts. + :type most_prevalent_device_alerts: list[~azure.mgmt.security.models.IoTSecurityDeviceAlert] + :param most_prevalent_device_recommendations: List of the 3 most prevalent device + recommendations. + :type most_prevalent_device_recommendations: + list[~azure.mgmt.security.models.IoTSecurityDeviceRecommendation] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'metrics': {'readonly': True}, + 'unhealthy_device_count': {'readonly': True}, + 'devices_metrics': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'metrics': {'key': 'properties.metrics', 'type': 'IoTSeverityMetrics'}, + 'unhealthy_device_count': {'key': 'properties.unhealthyDeviceCount', 'type': 'int'}, + 'devices_metrics': {'key': 'properties.devicesMetrics', 'type': '[IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem]'}, + 'top_alerted_devices': {'key': 'properties.topAlertedDevices', 'type': '[IoTSecurityAlertedDevice]'}, + 'most_prevalent_device_alerts': {'key': 'properties.mostPrevalentDeviceAlerts', 'type': '[IoTSecurityDeviceAlert]'}, + 'most_prevalent_device_recommendations': {'key': 'properties.mostPrevalentDeviceRecommendations', 'type': '[IoTSecurityDeviceRecommendation]'}, + } + + def __init__( + self, + *, + top_alerted_devices: Optional[List["IoTSecurityAlertedDevice"]] = None, + most_prevalent_device_alerts: Optional[List["IoTSecurityDeviceAlert"]] = None, + most_prevalent_device_recommendations: Optional[List["IoTSecurityDeviceRecommendation"]] = None, + **kwargs + ): + super(IoTSecuritySolutionAnalyticsModel, self).__init__(**kwargs) + self.metrics = None + self.unhealthy_device_count = None + self.devices_metrics = None + self.top_alerted_devices = top_alerted_devices + self.most_prevalent_device_alerts = most_prevalent_device_alerts + self.most_prevalent_device_recommendations = most_prevalent_device_recommendations + + +class IoTSecuritySolutionAnalyticsModelList(msrest.serialization.Model): + """List of Security analytics of your IoT Security solution. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of Security analytics of your IoT Security solution. + :type value: list[~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel] + :ivar next_link: When there is too much alert data for one page, use this URI to fetch the next + page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecuritySolutionAnalyticsModel]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["IoTSecuritySolutionAnalyticsModel"], + **kwargs + ): + super(IoTSecuritySolutionAnalyticsModelList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem(msrest.serialization.Model): + """IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem. + + :param date: Aggregation of IoT Security solution device alert metrics by date. + :type date: ~datetime.datetime + :param devices_metrics: Device alert count by severity. + :type devices_metrics: ~azure.mgmt.security.models.IoTSeverityMetrics + """ + + _attribute_map = { + 'date': {'key': 'date', 'type': 'iso-8601'}, + 'devices_metrics': {'key': 'devicesMetrics', 'type': 'IoTSeverityMetrics'}, + } + + def __init__( + self, + *, + date: Optional[datetime.datetime] = None, + devices_metrics: Optional["IoTSeverityMetrics"] = None, + **kwargs + ): + super(IoTSecuritySolutionAnalyticsModelPropertiesDevicesMetricsItem, self).__init__(**kwargs) + self.date = date + self.devices_metrics = devices_metrics + + +class IoTSecuritySolutionModel(Resource, TagsResource): + """IoT Security solution configuration and resource information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param location: The resource location. + :type location: str + :param workspace: Workspace resource ID. + :type workspace: str + :param display_name: Resource display name. + :type display_name: str + :param status: Status of the IoT Security solution. Possible values include: "Enabled", + "Disabled". Default value: "Enabled". + :type status: str or ~azure.mgmt.security.models.SecuritySolutionStatus + :param export: List of additional options for exporting to workspace data. + :type export: list[str or ~azure.mgmt.security.models.ExportData] + :param disabled_data_sources: Disabled data sources. Disabling these data sources compromises + the system. + :type disabled_data_sources: list[str or ~azure.mgmt.security.models.DataSource] + :param iot_hubs: IoT Hub resource IDs. + :type iot_hubs: list[str] + :param user_defined_resources: Properties of the IoT Security solution's user defined + resources. + :type user_defined_resources: ~azure.mgmt.security.models.UserDefinedResourcesProperties + :ivar auto_discovered_resources: List of resources that were automatically discovered as + relevant to the security solution. + :vartype auto_discovered_resources: list[str] + :param recommendations_configuration: List of the configuration status for each recommendation + type. + :type recommendations_configuration: + list[~azure.mgmt.security.models.RecommendationConfigurationProperties] + :param unmasked_ip_logging_status: Unmasked IP address logging status. Possible values include: + "Disabled", "Enabled". Default value: "Disabled". + :type unmasked_ip_logging_status: str or ~azure.mgmt.security.models.UnmaskedIpLoggingStatus + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'auto_discovered_resources': {'readonly': True}, + } + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'workspace': {'key': 'properties.workspace', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'export': {'key': 'properties.export', 'type': '[str]'}, + 'disabled_data_sources': {'key': 'properties.disabledDataSources', 'type': '[str]'}, + 'iot_hubs': {'key': 'properties.iotHubs', 'type': '[str]'}, + 'user_defined_resources': {'key': 'properties.userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, + 'auto_discovered_resources': {'key': 'properties.autoDiscoveredResources', 'type': '[str]'}, + 'recommendations_configuration': {'key': 'properties.recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, + 'unmasked_ip_logging_status': {'key': 'properties.unmaskedIpLoggingStatus', 'type': 'str'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + location: Optional[str] = None, + workspace: Optional[str] = None, + display_name: Optional[str] = None, + status: Optional[Union[str, "SecuritySolutionStatus"]] = "Enabled", + export: Optional[List[Union[str, "ExportData"]]] = None, + disabled_data_sources: Optional[List[Union[str, "DataSource"]]] = None, + iot_hubs: Optional[List[str]] = None, + user_defined_resources: Optional["UserDefinedResourcesProperties"] = None, + recommendations_configuration: Optional[List["RecommendationConfigurationProperties"]] = None, + unmasked_ip_logging_status: Optional[Union[str, "UnmaskedIpLoggingStatus"]] = "Disabled", + **kwargs + ): + super(IoTSecuritySolutionModel, self).__init__(tags=tags, **kwargs) + self.tags = tags + self.location = location + self.workspace = workspace + self.display_name = display_name + self.status = status + self.export = export + self.disabled_data_sources = disabled_data_sources + self.iot_hubs = iot_hubs + self.user_defined_resources = user_defined_resources + self.auto_discovered_resources = None + self.recommendations_configuration = recommendations_configuration + self.unmasked_ip_logging_status = unmasked_ip_logging_status + self.id = None + self.name = None + self.type = None + self.location = location + self.workspace = workspace + self.display_name = display_name + self.status = status + self.export = export + self.disabled_data_sources = disabled_data_sources + self.iot_hubs = iot_hubs + self.user_defined_resources = user_defined_resources + self.auto_discovered_resources = None + self.recommendations_configuration = recommendations_configuration + self.unmasked_ip_logging_status = unmasked_ip_logging_status + + +class IoTSecuritySolutionsList(msrest.serialization.Model): + """List of IoT Security solutions. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of IoT Security solutions. + :type value: list[~azure.mgmt.security.models.IoTSecuritySolutionModel] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IoTSecuritySolutionModel]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["IoTSecuritySolutionModel"], + **kwargs + ): + super(IoTSecuritySolutionsList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class IotSensor(Resource): + """IoT sensor. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: IoT sensor properties. + :type properties: object + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'object'}, + } + + def __init__( + self, + *, + properties: Optional[object] = None, + **kwargs + ): + super(IotSensor, self).__init__(**kwargs) + self.properties = properties + + +class IotSensorsList(msrest.serialization.Model): + """List of IoT sensors. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.IotSensor] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IotSensor]'}, + } + + def __init__( + self, + **kwargs + ): + super(IotSensorsList, self).__init__(**kwargs) + self.value = None + + +class IoTSeverityMetrics(msrest.serialization.Model): + """IoT Security solution analytics severity metrics. + + :param high: Count of high severity alerts/recommendations. + :type high: int + :param medium: Count of medium severity alerts/recommendations. + :type medium: int + :param low: Count of low severity alerts/recommendations. + :type low: int + """ + + _attribute_map = { + 'high': {'key': 'high', 'type': 'int'}, + 'medium': {'key': 'medium', 'type': 'int'}, + 'low': {'key': 'low', 'type': 'int'}, + } + + def __init__( + self, + *, + high: Optional[int] = None, + medium: Optional[int] = None, + low: Optional[int] = None, + **kwargs + ): + super(IoTSeverityMetrics, self).__init__(**kwargs) + self.high = high + self.medium = medium + self.low = low + + +class IpAddress(msrest.serialization.Model): + """IP Address information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar v4_address: IPV4 address. + :vartype v4_address: str + :ivar detection_time: Detection time of the ip address. + :vartype detection_time: ~datetime.datetime + :ivar subnet_cidr: Subnet Classless Inter-Domain Routing. + :vartype subnet_cidr: str + :ivar fqdn: Fully qualified domain name. + :vartype fqdn: str + :ivar fqdn_last_lookup_time: FQDN last lookup time. + :vartype fqdn_last_lookup_time: ~datetime.datetime + """ + + _validation = { + 'v4_address': {'readonly': True}, + 'detection_time': {'readonly': True}, + 'subnet_cidr': {'readonly': True}, + 'fqdn': {'readonly': True}, + 'fqdn_last_lookup_time': {'readonly': True}, + } + + _attribute_map = { + 'v4_address': {'key': 'v4Address', 'type': 'str'}, + 'detection_time': {'key': 'detectionTime', 'type': 'iso-8601'}, + 'subnet_cidr': {'key': 'subnetCidr', 'type': 'str'}, + 'fqdn': {'key': 'fqdn', 'type': 'str'}, + 'fqdn_last_lookup_time': {'key': 'fqdnLastLookupTime', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(IpAddress, self).__init__(**kwargs) + self.v4_address = None + self.detection_time = None + self.subnet_cidr = None + self.fqdn = None + self.fqdn_last_lookup_time = None + + +class JitNetworkAccessPoliciesList(msrest.serialization.Model): + """JitNetworkAccessPoliciesList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.JitNetworkAccessPolicy] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[JitNetworkAccessPolicy]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["JitNetworkAccessPolicy"]] = None, + **kwargs + ): + super(JitNetworkAccessPoliciesList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class JitNetworkAccessPolicy(Resource, Kind, Location): + """JitNetworkAccessPolicy. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar location: Location where the resource is stored. + :vartype location: str + :param kind: Kind of the resource. + :type kind: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param virtual_machines: Required. Configurations for Microsoft.Compute/virtualMachines + resource type. + :type virtual_machines: list[~azure.mgmt.security.models.JitNetworkAccessPolicyVirtualMachine] + :param requests: + :type requests: list[~azure.mgmt.security.models.JitNetworkAccessRequest] + :ivar provisioning_state: Gets the provisioning state of the Just-in-Time policy. + :vartype provisioning_state: str + """ + + _validation = { + 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'virtual_machines': {'required': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'virtual_machines': {'key': 'properties.virtualMachines', 'type': '[JitNetworkAccessPolicyVirtualMachine]'}, + 'requests': {'key': 'properties.requests', 'type': '[JitNetworkAccessRequest]'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + virtual_machines: List["JitNetworkAccessPolicyVirtualMachine"], + kind: Optional[str] = None, + requests: Optional[List["JitNetworkAccessRequest"]] = None, + **kwargs + ): + super(JitNetworkAccessPolicy, self).__init__(kind=kind, **kwargs) + self.location = None + self.kind = kind + self.virtual_machines = virtual_machines + self.requests = requests + self.provisioning_state = None + self.location = None + self.id = None + self.name = None + self.type = None + self.virtual_machines = virtual_machines + self.requests = requests + self.provisioning_state = None + self.kind = kind + self.id = None + self.name = None + self.type = None + self.virtual_machines = virtual_machines + self.requests = requests + self.provisioning_state = None + + +class JitNetworkAccessPolicyInitiatePort(msrest.serialization.Model): + """JitNetworkAccessPolicyInitiatePort. + + All required parameters must be populated in order to send to Azure. + + :param number: Required. + :type number: int + :param allowed_source_address_prefix: Source of the allowed traffic. If omitted, the request + will be for the source IP address of the initiate request. + :type allowed_source_address_prefix: str + :param end_time_utc: Required. The time to close the request in UTC. + :type end_time_utc: ~datetime.datetime + """ + + _validation = { + 'number': {'required': True, 'maximum': 65535, 'minimum': 0}, + 'end_time_utc': {'required': True}, + } + + _attribute_map = { + 'number': {'key': 'number', 'type': 'int'}, + 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, + 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, + } + + def __init__( + self, + *, + number: int, + end_time_utc: datetime.datetime, + allowed_source_address_prefix: Optional[str] = None, + **kwargs + ): + super(JitNetworkAccessPolicyInitiatePort, self).__init__(**kwargs) + self.number = number + self.allowed_source_address_prefix = allowed_source_address_prefix + self.end_time_utc = end_time_utc + + +class JitNetworkAccessPolicyInitiateRequest(msrest.serialization.Model): + """JitNetworkAccessPolicyInitiateRequest. + + All required parameters must be populated in order to send to Azure. + + :param virtual_machines: Required. A list of virtual machines & ports to open access for. :type virtual_machines: list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiateVirtualMachine] + :param justification: The justification for making the initiate request. + :type justification: str + """ + + _validation = { + 'virtual_machines': {'required': True}, + } + + _attribute_map = { + 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessPolicyInitiateVirtualMachine]'}, + 'justification': {'key': 'justification', 'type': 'str'}, + } + + def __init__( + self, + *, + virtual_machines: List["JitNetworkAccessPolicyInitiateVirtualMachine"], + justification: Optional[str] = None, + **kwargs + ): + super(JitNetworkAccessPolicyInitiateRequest, self).__init__(**kwargs) + self.virtual_machines = virtual_machines + self.justification = justification + + +class JitNetworkAccessPolicyInitiateVirtualMachine(msrest.serialization.Model): + """JitNetworkAccessPolicyInitiateVirtualMachine. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Resource ID of the virtual machine that is linked to this policy. + :type id: str + :param ports: Required. The ports to open for the resource with the ``id``. + :type ports: list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiatePort] + """ + + _validation = { + 'id': {'required': True}, + 'ports': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPolicyInitiatePort]'}, + } + + def __init__( + self, + *, + id: str, + ports: List["JitNetworkAccessPolicyInitiatePort"], + **kwargs + ): + super(JitNetworkAccessPolicyInitiateVirtualMachine, self).__init__(**kwargs) + self.id = id + self.ports = ports + + +class JitNetworkAccessPolicyVirtualMachine(msrest.serialization.Model): + """JitNetworkAccessPolicyVirtualMachine. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Resource ID of the virtual machine that is linked to this policy. + :type id: str + :param ports: Required. Port configurations for the virtual machine. + :type ports: list[~azure.mgmt.security.models.JitNetworkAccessPortRule] + :param public_ip_address: Public IP address of the Azure Firewall that is linked to this + policy, if applicable. + :type public_ip_address: str + """ + + _validation = { + 'id': {'required': True}, + 'ports': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPortRule]'}, + 'public_ip_address': {'key': 'publicIpAddress', 'type': 'str'}, + } + + def __init__( + self, + *, + id: str, + ports: List["JitNetworkAccessPortRule"], + public_ip_address: Optional[str] = None, + **kwargs + ): + super(JitNetworkAccessPolicyVirtualMachine, self).__init__(**kwargs) + self.id = id + self.ports = ports + self.public_ip_address = public_ip_address + + +class JitNetworkAccessPortRule(msrest.serialization.Model): + """JitNetworkAccessPortRule. + + All required parameters must be populated in order to send to Azure. + + :param number: Required. + :type number: int + :param protocol: Required. Possible values include: "TCP", "UDP", "*". + :type protocol: str or ~azure.mgmt.security.models.ProtocolEnum + :param allowed_source_address_prefix: Mutually exclusive with the + "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, for example + "192.168.0.3" or "192.168.0.0/16". + :type allowed_source_address_prefix: str + :param allowed_source_address_prefixes: Mutually exclusive with the + "allowedSourceAddressPrefix" parameter. + :type allowed_source_address_prefixes: list[str] + :param max_request_access_duration: Required. Maximum duration requests can be made for. In ISO + 8601 duration format. Minimum 5 minutes, maximum 1 day. + :type max_request_access_duration: str + """ + + _validation = { + 'number': {'required': True, 'maximum': 65535, 'minimum': 0}, + 'protocol': {'required': True}, + 'max_request_access_duration': {'required': True}, + } + + _attribute_map = { + 'number': {'key': 'number', 'type': 'int'}, + 'protocol': {'key': 'protocol', 'type': 'str'}, + 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, + 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, + 'max_request_access_duration': {'key': 'maxRequestAccessDuration', 'type': 'str'}, + } + + def __init__( + self, + *, + number: int, + protocol: Union[str, "ProtocolEnum"], + max_request_access_duration: str, + allowed_source_address_prefix: Optional[str] = None, + allowed_source_address_prefixes: Optional[List[str]] = None, + **kwargs + ): + super(JitNetworkAccessPortRule, self).__init__(**kwargs) + self.number = number + self.protocol = protocol + self.allowed_source_address_prefix = allowed_source_address_prefix + self.allowed_source_address_prefixes = allowed_source_address_prefixes + self.max_request_access_duration = max_request_access_duration + + +class JitNetworkAccessRequest(msrest.serialization.Model): + """JitNetworkAccessRequest. + + All required parameters must be populated in order to send to Azure. + + :param virtual_machines: Required. + :type virtual_machines: list[~azure.mgmt.security.models.JitNetworkAccessRequestVirtualMachine] + :param start_time_utc: Required. The start time of the request in UTC. + :type start_time_utc: ~datetime.datetime + :param requestor: Required. The identity of the person who made the request. + :type requestor: str + :param justification: The justification for making the initiate request. + :type justification: str + """ + + _validation = { + 'virtual_machines': {'required': True}, + 'start_time_utc': {'required': True}, + 'requestor': {'required': True}, + } + + _attribute_map = { + 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessRequestVirtualMachine]'}, + 'start_time_utc': {'key': 'startTimeUtc', 'type': 'iso-8601'}, + 'requestor': {'key': 'requestor', 'type': 'str'}, + 'justification': {'key': 'justification', 'type': 'str'}, + } + + def __init__( + self, + *, + virtual_machines: List["JitNetworkAccessRequestVirtualMachine"], + start_time_utc: datetime.datetime, + requestor: str, + justification: Optional[str] = None, + **kwargs + ): + super(JitNetworkAccessRequest, self).__init__(**kwargs) + self.virtual_machines = virtual_machines + self.start_time_utc = start_time_utc + self.requestor = requestor + self.justification = justification + + +class JitNetworkAccessRequestPort(msrest.serialization.Model): + """JitNetworkAccessRequestPort. + + All required parameters must be populated in order to send to Azure. + + :param number: Required. + :type number: int + :param allowed_source_address_prefix: Mutually exclusive with the + "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, for example + "192.168.0.3" or "192.168.0.0/16". + :type allowed_source_address_prefix: str + :param allowed_source_address_prefixes: Mutually exclusive with the + "allowedSourceAddressPrefix" parameter. + :type allowed_source_address_prefixes: list[str] + :param end_time_utc: Required. The date & time at which the request ends in UTC. + :type end_time_utc: ~datetime.datetime + :param status: Required. The status of the port. Possible values include: "Revoked", + "Initiated". + :type status: str or ~azure.mgmt.security.models.Status + :param status_reason: Required. A description of why the ``status`` has its value. Possible + values include: "Expired", "UserRequested", "NewerRequestInitiated". + :type status_reason: str or ~azure.mgmt.security.models.StatusReason + :param mapped_port: The port which is mapped to this port's ``number`` in the Azure Firewall, + if applicable. + :type mapped_port: int + """ + + _validation = { + 'number': {'required': True, 'maximum': 65535, 'minimum': 0}, + 'end_time_utc': {'required': True}, + 'status': {'required': True}, + 'status_reason': {'required': True}, + } + + _attribute_map = { + 'number': {'key': 'number', 'type': 'int'}, + 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, + 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, + 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, + 'status': {'key': 'status', 'type': 'str'}, + 'status_reason': {'key': 'statusReason', 'type': 'str'}, + 'mapped_port': {'key': 'mappedPort', 'type': 'int'}, + } + + def __init__( + self, + *, + number: int, + end_time_utc: datetime.datetime, + status: Union[str, "Status"], + status_reason: Union[str, "StatusReason"], + allowed_source_address_prefix: Optional[str] = None, + allowed_source_address_prefixes: Optional[List[str]] = None, + mapped_port: Optional[int] = None, + **kwargs + ): + super(JitNetworkAccessRequestPort, self).__init__(**kwargs) + self.number = number + self.allowed_source_address_prefix = allowed_source_address_prefix + self.allowed_source_address_prefixes = allowed_source_address_prefixes + self.end_time_utc = end_time_utc + self.status = status + self.status_reason = status_reason + self.mapped_port = mapped_port + + +class JitNetworkAccessRequestVirtualMachine(msrest.serialization.Model): + """JitNetworkAccessRequestVirtualMachine. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Resource ID of the virtual machine that is linked to this policy. + :type id: str + :param ports: Required. The ports that were opened for the virtual machine. + :type ports: list[~azure.mgmt.security.models.JitNetworkAccessRequestPort] + """ + + _validation = { + 'id': {'required': True}, + 'ports': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'ports': {'key': 'ports', 'type': '[JitNetworkAccessRequestPort]'}, + } + + def __init__( + self, + *, + id: str, + ports: List["JitNetworkAccessRequestPort"], + **kwargs + ): + super(JitNetworkAccessRequestVirtualMachine, self).__init__(**kwargs) + self.id = id + self.ports = ports + + +class LocalUserNotAllowed(AllowlistCustomAlertRule): + """Login by a local user that isn't allowed. Allow list consists of login names to allow. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + allowlist_values: List[str], + **kwargs + ): + super(LocalUserNotAllowed, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, allowlist_values=allowlist_values, **kwargs) + self.rule_type = 'LocalUserNotAllowed' # type: str + self.rule_type = 'LocalUserNotAllowed' # type: str + + +class LogAnalyticsIdentifier(ResourceIdentifier): + """Represents a Log Analytics workspace scope identifier. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param type: Required. There can be multiple identifiers of different type per alert, this + field specify the identifier type.Constant filled by server. Possible values include: + "AzureResource", "LogAnalytics". + :type type: str or ~azure.mgmt.security.models.ResourceIdentifierType + :ivar workspace_id: The LogAnalytics workspace id that stores this alert. + :vartype workspace_id: str + :ivar workspace_subscription_id: The azure subscription id for the LogAnalytics workspace + storing this alert. + :vartype workspace_subscription_id: str + :ivar workspace_resource_group: The azure resource group for the LogAnalytics workspace storing + this alert. + :vartype workspace_resource_group: str + :ivar agent_id: (optional) The LogAnalytics agent id reporting the event that this alert is + based on. + :vartype agent_id: str + """ + + _validation = { + 'type': {'required': True}, + 'workspace_id': {'readonly': True}, + 'workspace_subscription_id': {'readonly': True, 'pattern': r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'}, + 'workspace_resource_group': {'readonly': True}, + 'agent_id': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'workspace_id': {'key': 'workspaceId', 'type': 'str'}, + 'workspace_subscription_id': {'key': 'workspaceSubscriptionId', 'type': 'str'}, + 'workspace_resource_group': {'key': 'workspaceResourceGroup', 'type': 'str'}, + 'agent_id': {'key': 'agentId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(LogAnalyticsIdentifier, self).__init__(**kwargs) + self.type = 'LogAnalytics' # type: str + self.workspace_id = None + self.workspace_subscription_id = None + self.workspace_resource_group = None + self.agent_id = None + + +class MacAddress(msrest.serialization.Model): + """MAC Address information. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar address: MAC address. + :vartype address: str + :ivar detection_time: Detection time of the mac address. + :vartype detection_time: ~datetime.datetime + :ivar significance: Indicates whether this is the primary secondary MAC address of the device. + Possible values include: "Primary", "Secondary". + :vartype significance: str or ~azure.mgmt.security.models.MacSignificance + :ivar relation_to_ip_status: Indicates whether the relation of the mac to the ip address is + certain or a guess. Possible values include: "Guess", "Certain". + :vartype relation_to_ip_status: str or ~azure.mgmt.security.models.RelationToIpStatus + """ + + _validation = { + 'address': {'readonly': True}, + 'detection_time': {'readonly': True}, + 'significance': {'readonly': True}, + 'relation_to_ip_status': {'readonly': True}, + } + + _attribute_map = { + 'address': {'key': 'address', 'type': 'str'}, + 'detection_time': {'key': 'detectionTime', 'type': 'iso-8601'}, + 'significance': {'key': 'significance', 'type': 'str'}, + 'relation_to_ip_status': {'key': 'relationToIpStatus', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(MacAddress, self).__init__(**kwargs) + self.address = None + self.detection_time = None + self.significance = None + self.relation_to_ip_status = None + + +class MqttC2DMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of cloud to device messages (MQTT protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(MqttC2DMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'MqttC2DMessagesNotInAllowedRange' # type: str + self.rule_type = 'MqttC2DMessagesNotInAllowedRange' # type: str + + +class MqttC2DRejectedMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of rejected cloud to device messages (MQTT protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(MqttC2DRejectedMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'MqttC2DRejectedMessagesNotInAllowedRange' # type: str + self.rule_type = 'MqttC2DRejectedMessagesNotInAllowedRange' # type: str + + +class MqttD2CMessagesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device to cloud messages (MQTT protocol) is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(MqttD2CMessagesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'MqttD2CMessagesNotInAllowedRange' # type: str + self.rule_type = 'MqttD2CMessagesNotInAllowedRange' # type: str + + +class NetworkInterface(msrest.serialization.Model): + """Network interface. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param ip_address: IP Address information. + :type ip_address: ~azure.mgmt.security.models.IpAddress + :param mac_address: MAC Address information. + :type mac_address: ~azure.mgmt.security.models.MacAddress + :ivar vlans: List of device vlans. + :vartype vlans: list[str] + """ + + _validation = { + 'vlans': {'readonly': True}, + } + + _attribute_map = { + 'ip_address': {'key': 'ipAddress', 'type': 'IpAddress'}, + 'mac_address': {'key': 'macAddress', 'type': 'MacAddress'}, + 'vlans': {'key': 'vlans', 'type': '[str]'}, + } + + def __init__( + self, + *, + ip_address: Optional["IpAddress"] = None, + mac_address: Optional["MacAddress"] = None, + **kwargs + ): + super(NetworkInterface, self).__init__(**kwargs) + self.ip_address = ip_address + self.mac_address = mac_address + self.vlans = None + + +class OnPremiseIotSensor(Resource): + """On-premise IoT sensor. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param properties: On-premise IoT sensor properties. + :type properties: object + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'properties': {'key': 'properties', 'type': 'object'}, + } + + def __init__( + self, + *, + properties: Optional[object] = None, + **kwargs + ): + super(OnPremiseIotSensor, self).__init__(**kwargs) + self.properties = properties + + +class OnPremiseIotSensorsList(msrest.serialization.Model): + """List of on-premise IoT sensors. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List data. + :vartype value: list[~azure.mgmt.security.models.OnPremiseIotSensor] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OnPremiseIotSensor]'}, + } + + def __init__( + self, + **kwargs + ): + super(OnPremiseIotSensorsList, self).__init__(**kwargs) + self.value = None + + +class OnPremiseResourceDetails(ResourceDetails): + """Details of the On Premise resource that was assessed. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: OnPremiseSqlResourceDetails. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + :param workspace_id: Required. Azure resource Id of the workspace the machine is attached to. + :type workspace_id: str + :param vmuuid: Required. The unique Id of the machine. + :type vmuuid: str + :param source_computer_id: Required. The oms agent Id installed on the machine. + :type source_computer_id: str + :param machine_name: Required. The name of the machine. + :type machine_name: str + """ + + _validation = { + 'source': {'required': True}, + 'workspace_id': {'required': True}, + 'vmuuid': {'required': True}, + 'source_computer_id': {'required': True}, + 'machine_name': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + 'workspace_id': {'key': 'workspaceId', 'type': 'str'}, + 'vmuuid': {'key': 'vmuuid', 'type': 'str'}, + 'source_computer_id': {'key': 'sourceComputerId', 'type': 'str'}, + 'machine_name': {'key': 'machineName', 'type': 'str'}, + } + + _subtype_map = { + 'source': {'OnPremiseSql': 'OnPremiseSqlResourceDetails'} + } + + def __init__( + self, + *, + workspace_id: str, + vmuuid: str, + source_computer_id: str, + machine_name: str, + **kwargs + ): + super(OnPremiseResourceDetails, self).__init__(**kwargs) + self.source = 'OnPremise' # type: str + self.workspace_id = workspace_id + self.vmuuid = vmuuid + self.source_computer_id = source_computer_id + self.machine_name = machine_name + + +class OnPremiseSqlResourceDetails(OnPremiseResourceDetails): + """Details of the On Premise Sql resource that was assessed. + + All required parameters must be populated in order to send to Azure. + + :param source: Required. The platform where the assessed resource resides.Constant filled by + server. Possible values include: "Azure", "OnPremise", "OnPremiseSql". + :type source: str or ~azure.mgmt.security.models.Source + :param workspace_id: Required. Azure resource Id of the workspace the machine is attached to. + :type workspace_id: str + :param vmuuid: Required. The unique Id of the machine. + :type vmuuid: str + :param source_computer_id: Required. The oms agent Id installed on the machine. + :type source_computer_id: str + :param machine_name: Required. The name of the machine. + :type machine_name: str + :param server_name: Required. The Sql server name installed on the machine. + :type server_name: str + :param database_name: Required. The Sql database name installed on the machine. + :type database_name: str + """ + + _validation = { + 'source': {'required': True}, + 'workspace_id': {'required': True}, + 'vmuuid': {'required': True}, + 'source_computer_id': {'required': True}, + 'machine_name': {'required': True}, + 'server_name': {'required': True}, + 'database_name': {'required': True}, + } + + _attribute_map = { + 'source': {'key': 'source', 'type': 'str'}, + 'workspace_id': {'key': 'workspaceId', 'type': 'str'}, + 'vmuuid': {'key': 'vmuuid', 'type': 'str'}, + 'source_computer_id': {'key': 'sourceComputerId', 'type': 'str'}, + 'machine_name': {'key': 'machineName', 'type': 'str'}, + 'server_name': {'key': 'serverName', 'type': 'str'}, + 'database_name': {'key': 'databaseName', 'type': 'str'}, + } + + def __init__( + self, + *, + workspace_id: str, + vmuuid: str, + source_computer_id: str, + machine_name: str, + server_name: str, + database_name: str, + **kwargs + ): + super(OnPremiseSqlResourceDetails, self).__init__(workspace_id=workspace_id, vmuuid=vmuuid, source_computer_id=source_computer_id, machine_name=machine_name, **kwargs) + self.source = 'OnPremiseSql' # type: str + self.server_name = server_name + self.database_name = database_name + + +class Operation(msrest.serialization.Model): + """Possible operation in the REST API of Microsoft.Security. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: Name of the operation. + :vartype name: str + :ivar origin: Where the operation is originated. + :vartype origin: str + :param display: Security operation display. + :type display: ~azure.mgmt.security.models.OperationDisplay + """ + + _validation = { + 'name': {'readonly': True}, + 'origin': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'origin': {'key': 'origin', 'type': 'str'}, + 'display': {'key': 'display', 'type': 'OperationDisplay'}, + } + + def __init__( + self, + *, + display: Optional["OperationDisplay"] = None, + **kwargs + ): + super(Operation, self).__init__(**kwargs) + self.name = None + self.origin = None + self.display = display + + +class OperationDisplay(msrest.serialization.Model): + """Security operation display. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar provider: The resource provider for the operation. + :vartype provider: str + :ivar resource: The display name of the resource the operation applies to. + :vartype resource: str + :ivar operation: The display name of the security operation. + :vartype operation: str + :ivar description: The description of the operation. + :vartype description: str + """ + + _validation = { + 'provider': {'readonly': True}, + 'resource': {'readonly': True}, + 'operation': {'readonly': True}, + 'description': {'readonly': True}, + } + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'resource': {'key': 'resource', 'type': 'str'}, + 'operation': {'key': 'operation', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OperationDisplay, self).__init__(**kwargs) + self.provider = None + self.resource = None + self.operation = None + self.description = None + + +class OperationList(msrest.serialization.Model): + """List of possible operations for Microsoft.Security resource provider. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: List of Security operations. + :type value: list[~azure.mgmt.security.models.Operation] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Operation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["Operation"]] = None, + **kwargs + ): + super(OperationList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class PackageDownloadInfo(msrest.serialization.Model): + """Information on a specific package download. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar version: Version number. + :vartype version: str + :ivar link: Download link. + :vartype link: str + :ivar version_kind: Kind of the version. Possible values include: "Latest", "Previous", + "Preview". + :vartype version_kind: str or ~azure.mgmt.security.models.VersionKind + """ + + _validation = { + 'version': {'readonly': True}, + 'link': {'readonly': True}, + 'version_kind': {'readonly': True}, + } + + _attribute_map = { + 'version': {'key': 'version', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + 'version_kind': {'key': 'versionKind', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadInfo, self).__init__(**kwargs) + self.version = None + self.link = None + self.version_kind = None + + +class PackageDownloads(msrest.serialization.Model): + """Information about package downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar sensor: Contains all Sensor binary downloads. + :vartype sensor: ~azure.mgmt.security.models.PackageDownloadsSensor + :ivar central_manager: All downloads for Central Manager. + :vartype central_manager: ~azure.mgmt.security.models.PackageDownloadsCentralManager + :ivar threat_intelligence: All downloads for threat intelligence. + :vartype threat_intelligence: ~azure.mgmt.security.models.PackageDownloadsThreatIntelligence + """ + + _validation = { + 'sensor': {'readonly': True}, + 'central_manager': {'readonly': True}, + 'threat_intelligence': {'readonly': True}, + } + + _attribute_map = { + 'sensor': {'key': 'sensor', 'type': 'PackageDownloadsSensor'}, + 'central_manager': {'key': 'centralManager', 'type': 'PackageDownloadsCentralManager'}, + 'threat_intelligence': {'key': 'threatIntelligence', 'type': 'PackageDownloadsThreatIntelligence'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloads, self).__init__(**kwargs) + self.sensor = None + self.central_manager = None + self.threat_intelligence = None + + +class PackageDownloadsCentralManager(msrest.serialization.Model): + """All downloads for Central Manager. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar full: Contains full package downloads. + :vartype full: ~azure.mgmt.security.models.PackageDownloadsCentralManagerFull + :ivar upgrade: Central Manager upgrade package downloads (on existing installations). + :vartype upgrade: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'full': {'readonly': True}, + 'upgrade': {'readonly': True}, + } + + _attribute_map = { + 'full': {'key': 'full', 'type': 'PackageDownloadsCentralManagerFull'}, + 'upgrade': {'key': 'upgrade', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsCentralManager, self).__init__(**kwargs) + self.full = None + self.upgrade = None + + +class PackageDownloadsCentralManagerFull(msrest.serialization.Model): + """Contains full package downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar iso: Contains all ISO full versions of the Central Manager. + :vartype iso: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar ovf: Contains all OVF (virtual machine) full versions of the Central Manager. + :vartype ovf: ~azure.mgmt.security.models.PackageDownloadsCentralManagerFullOvf + """ + + _validation = { + 'iso': {'readonly': True}, + 'ovf': {'readonly': True}, + } + + _attribute_map = { + 'iso': {'key': 'iso', 'type': '[PackageDownloadInfo]'}, + 'ovf': {'key': 'ovf', 'type': 'PackageDownloadsCentralManagerFullOvf'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsCentralManagerFull, self).__init__(**kwargs) + self.iso = None + self.ovf = None + + +class PackageDownloadsCentralManagerFullOvf(msrest.serialization.Model): + """Contains all OVF (virtual machine) full versions of the Central Manager. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar enterprise: The Enterprise package type. + :vartype enterprise: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar enterprise_high_availability: The EnterpriseHighAvailability package type. + :vartype enterprise_high_availability: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar medium: The Medium package type. + :vartype medium: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar medium_high_availability: The MediumHighAvailability package type. + :vartype medium_high_availability: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'enterprise': {'readonly': True}, + 'enterprise_high_availability': {'readonly': True}, + 'medium': {'readonly': True}, + 'medium_high_availability': {'readonly': True}, + } + + _attribute_map = { + 'enterprise': {'key': 'enterprise', 'type': '[PackageDownloadInfo]'}, + 'enterprise_high_availability': {'key': 'enterpriseHighAvailability', 'type': '[PackageDownloadInfo]'}, + 'medium': {'key': 'medium', 'type': '[PackageDownloadInfo]'}, + 'medium_high_availability': {'key': 'mediumHighAvailability', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsCentralManagerFullOvf, self).__init__(**kwargs) + self.enterprise = None + self.enterprise_high_availability = None + self.medium = None + self.medium_high_availability = None + + +class PackageDownloadsSensor(msrest.serialization.Model): + """Contains all Sensor binary downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar full: Contains full package downloads. + :vartype full: ~azure.mgmt.security.models.PackageDownloadsSensorFull + :param upgrade: Sensor upgrade package downloads (on existing installations). + :type upgrade: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'full': {'readonly': True}, + } + + _attribute_map = { + 'full': {'key': 'full', 'type': 'PackageDownloadsSensorFull'}, + 'upgrade': {'key': 'upgrade', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + *, + upgrade: Optional[List["PackageDownloadInfo"]] = None, + **kwargs + ): + super(PackageDownloadsSensor, self).__init__(**kwargs) + self.full = None + self.upgrade = upgrade + + +class PackageDownloadsSensorFull(msrest.serialization.Model): + """Contains full package downloads. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar iso: Contains all ISO full versions for the sensor. + :vartype iso: list[~azure.mgmt.security.models.PackageDownloadInfo] + :param ovf: Contains all OVF (virtual machine) full versions for the sensor. + :type ovf: ~azure.mgmt.security.models.PackageDownloadsSensorFullOvf + """ + + _validation = { + 'iso': {'readonly': True}, + } + + _attribute_map = { + 'iso': {'key': 'iso', 'type': '[PackageDownloadInfo]'}, + 'ovf': {'key': 'ovf', 'type': 'PackageDownloadsSensorFullOvf'}, + } + + def __init__( + self, + *, + ovf: Optional["PackageDownloadsSensorFullOvf"] = None, + **kwargs + ): + super(PackageDownloadsSensorFull, self).__init__(**kwargs) + self.iso = None + self.ovf = ovf + + +class PackageDownloadsSensorFullOvf(msrest.serialization.Model): + """Contains all OVF (virtual machine) full versions for the sensor. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar enterprise: Enterprise package type. + :vartype enterprise: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar medium: Medium package type. + :vartype medium: list[~azure.mgmt.security.models.PackageDownloadInfo] + :ivar line: Line package type. + :vartype line: list[~azure.mgmt.security.models.PackageDownloadInfo] + """ + + _validation = { + 'enterprise': {'readonly': True}, + 'medium': {'readonly': True}, + 'line': {'readonly': True}, + } + + _attribute_map = { + 'enterprise': {'key': 'enterprise', 'type': '[PackageDownloadInfo]'}, + 'medium': {'key': 'medium', 'type': '[PackageDownloadInfo]'}, + 'line': {'key': 'line', 'type': '[PackageDownloadInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsSensorFullOvf, self).__init__(**kwargs) + self.enterprise = None + self.medium = None + self.line = None + + +class PackageDownloadsThreatIntelligence(msrest.serialization.Model): + """All downloads for threat intelligence. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar link: Download link. + :vartype link: str + """ + + _validation = { + 'link': {'readonly': True}, + } + + _attribute_map = { + 'link': {'key': 'link', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(PackageDownloadsThreatIntelligence, self).__init__(**kwargs) + self.link = None + + +class PathRecommendation(msrest.serialization.Model): + """Represents a path that is recommended to be allowed and its properties. + + :param path: The full path of the file, or an identifier of the application. + :type path: str + :param action: The recommendation action of the machine or rule. Possible values include: + "Recommended", "Add", "Remove". + :type action: str or ~azure.mgmt.security.models.RecommendationAction + :param type: The type of IoT Security recommendation. Possible values include: + "IoT_ACRAuthentication", "IoT_AgentSendsUnutilizedMessages", "IoT_Baseline", + "IoT_EdgeHubMemOptimize", "IoT_EdgeLoggingOptions", "IoT_InconsistentModuleSettings", + "IoT_InstallAgent", "IoT_IPFilter_DenyAll", "IoT_IPFilter_PermissiveRule", "IoT_OpenPorts", + "IoT_PermissiveFirewallPolicy", "IoT_PermissiveInputFirewallRules", + "IoT_PermissiveOutputFirewallRules", "IoT_PrivilegedDockerOptions", "IoT_SharedCredentials", + "IoT_VulnerableTLSCipherSuite". + :type type: str or ~azure.mgmt.security.models.RecommendationType + :param publisher_info: Represents the publisher information of a process/rule. + :type publisher_info: ~azure.mgmt.security.models.PublisherInfo + :param common: Whether the application is commonly run on the machine. + :type common: bool + :param user_sids: + :type user_sids: list[str] + :param usernames: + :type usernames: list[~azure.mgmt.security.models.UserRecommendation] + :param file_type: The type of the file (for Linux files - Executable is used). Possible values + include: "Exe", "Dll", "Msi", "Script", "Executable", "Unknown". + :type file_type: str or ~azure.mgmt.security.models.FileType + :param configuration_status: The configuration status of the machines group or machine or rule. + Possible values include: "Configured", "NotConfigured", "InProgress", "Failed", "NoStatus". + :type configuration_status: str or ~azure.mgmt.security.models.ConfigurationStatus + """ + + _attribute_map = { + 'path': {'key': 'path', 'type': 'str'}, + 'action': {'key': 'action', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'publisher_info': {'key': 'publisherInfo', 'type': 'PublisherInfo'}, + 'common': {'key': 'common', 'type': 'bool'}, + 'user_sids': {'key': 'userSids', 'type': '[str]'}, + 'usernames': {'key': 'usernames', 'type': '[UserRecommendation]'}, + 'file_type': {'key': 'fileType', 'type': 'str'}, + 'configuration_status': {'key': 'configurationStatus', 'type': 'str'}, + } + + def __init__( + self, + *, + path: Optional[str] = None, + action: Optional[Union[str, "RecommendationAction"]] = None, + type: Optional[Union[str, "RecommendationType"]] = None, + publisher_info: Optional["PublisherInfo"] = None, + common: Optional[bool] = None, + user_sids: Optional[List[str]] = None, + usernames: Optional[List["UserRecommendation"]] = None, + file_type: Optional[Union[str, "FileType"]] = None, + configuration_status: Optional[Union[str, "ConfigurationStatus"]] = None, + **kwargs + ): + super(PathRecommendation, self).__init__(**kwargs) + self.path = path + self.action = action + self.type = type + self.publisher_info = publisher_info + self.common = common + self.user_sids = user_sids + self.usernames = usernames + self.file_type = file_type + self.configuration_status = configuration_status + + +class Pricing(Resource): + """Azure Security Center is provided in two pricing tiers: free and standard, with the standard tier available with a trial period. The standard tier offers advanced security capabilities, while the free tier offers basic security features. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param pricing_tier: The pricing tier value. Azure Security Center is provided in two pricing + tiers: free and standard, with the standard tier available with a trial period. The standard + tier offers advanced security capabilities, while the free tier offers basic security features. + Possible values include: "Free", "Standard". + :type pricing_tier: str or ~azure.mgmt.security.models.PricingTier + :ivar free_trial_remaining_time: The duration left for the subscriptions free trial period - in + ISO 8601 format (e.g. P3Y6M4DT12H30M5S). + :vartype free_trial_remaining_time: ~datetime.timedelta + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'free_trial_remaining_time': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'pricing_tier': {'key': 'properties.pricingTier', 'type': 'str'}, + 'free_trial_remaining_time': {'key': 'properties.freeTrialRemainingTime', 'type': 'duration'}, + } + + def __init__( + self, + *, + pricing_tier: Optional[Union[str, "PricingTier"]] = None, + **kwargs + ): + super(Pricing, self).__init__(**kwargs) + self.pricing_tier = pricing_tier + self.free_trial_remaining_time = None + + +class PricingList(msrest.serialization.Model): + """List of pricing configurations response. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of pricing configurations. + :type value: list[~azure.mgmt.security.models.Pricing] + """ + + _validation = { + 'value': {'required': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Pricing]'}, + } + + def __init__( + self, + *, + value: List["Pricing"], + **kwargs + ): + super(PricingList, self).__init__(**kwargs) + self.value = value + + +class ProcessNotAllowed(AllowlistCustomAlertRule): + """Execution of a process that isn't allowed. Allow list consists of process names to allow. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar value_type: The value type of the items in the list. Possible values include: "IpCidr", + "String". + :vartype value_type: str or ~azure.mgmt.security.models.ValueType + :param allowlist_values: Required. The values to allow. The format of the values depends on the + rule type. + :type allowlist_values: list[str] + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'value_type': {'readonly': True}, + 'allowlist_values': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'value_type': {'key': 'valueType', 'type': 'str'}, + 'allowlist_values': {'key': 'allowlistValues', 'type': '[str]'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + allowlist_values: List[str], + **kwargs + ): + super(ProcessNotAllowed, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, allowlist_values=allowlist_values, **kwargs) + self.rule_type = 'ProcessNotAllowed' # type: str + self.rule_type = 'ProcessNotAllowed' # type: str + + +class ProtectionMode(msrest.serialization.Model): + """The protection mode of the collection/file types. Exe/Msi/Script are used for Windows, Executable is used for Linux. + + :param exe: The application control policy enforcement/protection mode of the machine group. + Possible values include: "Audit", "Enforce", "None". + :type exe: str or ~azure.mgmt.security.models.EnforcementMode + :param msi: The application control policy enforcement/protection mode of the machine group. + Possible values include: "Audit", "Enforce", "None". + :type msi: str or ~azure.mgmt.security.models.EnforcementMode + :param script: The application control policy enforcement/protection mode of the machine group. + Possible values include: "Audit", "Enforce", "None". + :type script: str or ~azure.mgmt.security.models.EnforcementMode + :param executable: The application control policy enforcement/protection mode of the machine + group. Possible values include: "Audit", "Enforce", "None". + :type executable: str or ~azure.mgmt.security.models.EnforcementMode + """ + + _attribute_map = { + 'exe': {'key': 'exe', 'type': 'str'}, + 'msi': {'key': 'msi', 'type': 'str'}, + 'script': {'key': 'script', 'type': 'str'}, + 'executable': {'key': 'executable', 'type': 'str'}, + } + + def __init__( + self, + *, + exe: Optional[Union[str, "EnforcementMode"]] = None, + msi: Optional[Union[str, "EnforcementMode"]] = None, + script: Optional[Union[str, "EnforcementMode"]] = None, + executable: Optional[Union[str, "EnforcementMode"]] = None, + **kwargs + ): + super(ProtectionMode, self).__init__(**kwargs) + self.exe = exe + self.msi = msi + self.script = script + self.executable = executable + + +class Protocol(msrest.serialization.Model): + """Protocol data. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: Protocol name. + :vartype name: str + :param identifiers: list of protocol identifiers. + :type identifiers: str + """ + + _validation = { + 'name': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'identifiers': {'key': 'identifiers', 'type': 'str'}, + } + + def __init__( + self, + *, + identifiers: Optional[str] = None, + **kwargs + ): + super(Protocol, self).__init__(**kwargs) + self.name = None + self.identifiers = identifiers + + +class ProxyServerProperties(msrest.serialization.Model): + """For a non-Azure machine that is not connected directly to the internet, specify a proxy server that the non-Azure machine can use. + + :param ip: Proxy server IP. + :type ip: str + :param port: Proxy server port. + :type port: str + """ + + _attribute_map = { + 'ip': {'key': 'ip', 'type': 'str'}, + 'port': {'key': 'port', 'type': 'str'}, + } + + def __init__( + self, + *, + ip: Optional[str] = None, + port: Optional[str] = None, + **kwargs + ): + super(ProxyServerProperties, self).__init__(**kwargs) + self.ip = ip + self.port = port + + +class PublisherInfo(msrest.serialization.Model): + """Represents the publisher information of a process/rule. + + :param publisher_name: The Subject field of the x.509 certificate used to sign the code, using + the following fields - O = Organization, L = Locality, S = State or Province, and C = Country. + :type publisher_name: str + :param product_name: The product name taken from the file's version resource. + :type product_name: str + :param binary_name: The "OriginalName" field taken from the file's version resource. + :type binary_name: str + :param version: The binary file version taken from the file's version resource. + :type version: str + """ + + _attribute_map = { + 'publisher_name': {'key': 'publisherName', 'type': 'str'}, + 'product_name': {'key': 'productName', 'type': 'str'}, + 'binary_name': {'key': 'binaryName', 'type': 'str'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + *, + publisher_name: Optional[str] = None, + product_name: Optional[str] = None, + binary_name: Optional[str] = None, + version: Optional[str] = None, + **kwargs + ): + super(PublisherInfo, self).__init__(**kwargs) + self.publisher_name = publisher_name + self.product_name = product_name + self.binary_name = binary_name + self.version = version + + +class QueuePurgesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of device queue purges is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta """ _validation = { - 'virtual_machines': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, } _attribute_map = { - 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessPolicyInitiateVirtualMachine]'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, } - def __init__(self, *, virtual_machines, **kwargs) -> None: - super(JitNetworkAccessPolicyInitiateRequest, self).__init__(**kwargs) - self.virtual_machines = virtual_machines + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(QueuePurgesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'QueuePurgesNotInAllowedRange' # type: str + self.rule_type = 'QueuePurgesNotInAllowedRange' # type: str -class JitNetworkAccessPolicyInitiateVirtualMachine(Model): - """JitNetworkAccessPolicyInitiateVirtualMachine. +class RecommendationConfigurationProperties(msrest.serialization.Model): + """The type of IoT Security recommendation. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param id: Required. Resource ID of the virtual machine that is linked to - this policy - :type id: str - :param ports: Required. The ports to open for the resource with the `id` - :type ports: - list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiatePort] + :param recommendation_type: Required. The type of IoT Security recommendation. Possible values + include: "IoT_ACRAuthentication", "IoT_AgentSendsUnutilizedMessages", "IoT_Baseline", + "IoT_EdgeHubMemOptimize", "IoT_EdgeLoggingOptions", "IoT_InconsistentModuleSettings", + "IoT_InstallAgent", "IoT_IPFilter_DenyAll", "IoT_IPFilter_PermissiveRule", "IoT_OpenPorts", + "IoT_PermissiveFirewallPolicy", "IoT_PermissiveInputFirewallRules", + "IoT_PermissiveOutputFirewallRules", "IoT_PrivilegedDockerOptions", "IoT_SharedCredentials", + "IoT_VulnerableTLSCipherSuite". + :type recommendation_type: str or ~azure.mgmt.security.models.RecommendationType + :ivar name: + :vartype name: str + :param status: Required. Recommendation status. When the recommendation status is disabled + recommendations are not generated. Possible values include: "Disabled", "Enabled". Default + value: "Enabled". + :type status: str or ~azure.mgmt.security.models.RecommendationConfigStatus """ _validation = { - 'id': {'required': True}, - 'ports': {'required': True}, + 'recommendation_type': {'required': True}, + 'name': {'readonly': True}, + 'status': {'required': True}, + } + + _attribute_map = { + 'recommendation_type': {'key': 'recommendationType', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'status': {'key': 'status', 'type': 'str'}, + } + + def __init__( + self, + *, + recommendation_type: Union[str, "RecommendationType"], + status: Union[str, "RecommendationConfigStatus"] = "Enabled", + **kwargs + ): + super(RecommendationConfigurationProperties, self).__init__(**kwargs) + self.recommendation_type = recommendation_type + self.name = None + self.status = status + + +class RegulatoryComplianceAssessment(Resource): + """Regulatory compliance assessment details and state. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar description: The description of the regulatory compliance assessment. + :vartype description: str + :ivar assessment_type: The expected type of assessment contained in the AssessmentDetailsLink. + :vartype assessment_type: str + :ivar assessment_details_link: Link to more detailed assessment results data. The response type + will be according to the assessmentType field. + :vartype assessment_details_link: str + :param state: Aggregative state based on the assessment's scanned resources states. Possible + values include: "Passed", "Failed", "Skipped", "Unsupported". + :type state: str or ~azure.mgmt.security.models.State + :ivar passed_resources: The given assessment's related resources count with passed state. + :vartype passed_resources: int + :ivar failed_resources: The given assessment's related resources count with failed state. + :vartype failed_resources: int + :ivar skipped_resources: The given assessment's related resources count with skipped state. + :vartype skipped_resources: int + :ivar unsupported_resources: The given assessment's related resources count with unsupported + state. + :vartype unsupported_resources: int + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'description': {'readonly': True}, + 'assessment_type': {'readonly': True}, + 'assessment_details_link': {'readonly': True}, + 'passed_resources': {'readonly': True}, + 'failed_resources': {'readonly': True}, + 'skipped_resources': {'readonly': True}, + 'unsupported_resources': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPolicyInitiatePort]'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'assessment_type': {'key': 'properties.assessmentType', 'type': 'str'}, + 'assessment_details_link': {'key': 'properties.assessmentDetailsLink', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'passed_resources': {'key': 'properties.passedResources', 'type': 'int'}, + 'failed_resources': {'key': 'properties.failedResources', 'type': 'int'}, + 'skipped_resources': {'key': 'properties.skippedResources', 'type': 'int'}, + 'unsupported_resources': {'key': 'properties.unsupportedResources', 'type': 'int'}, } - def __init__(self, *, id: str, ports, **kwargs) -> None: - super(JitNetworkAccessPolicyInitiateVirtualMachine, self).__init__(**kwargs) - self.id = id - self.ports = ports + def __init__( + self, + *, + state: Optional[Union[str, "State"]] = None, + **kwargs + ): + super(RegulatoryComplianceAssessment, self).__init__(**kwargs) + self.description = None + self.assessment_type = None + self.assessment_details_link = None + self.state = state + self.passed_resources = None + self.failed_resources = None + self.skipped_resources = None + self.unsupported_resources = None -class JitNetworkAccessPolicyVirtualMachine(Model): - """JitNetworkAccessPolicyVirtualMachine. +class RegulatoryComplianceAssessmentList(msrest.serialization.Model): + """List of regulatory compliance assessment response. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param id: Required. Resource ID of the virtual machine that is linked to - this policy - :type id: str - :param ports: Required. Port configurations for the virtual machine - :type ports: list[~azure.mgmt.security.models.JitNetworkAccessPortRule] - :param public_ip_address: Public IP address of the Azure Firewall that is - linked to this policy, if applicable - :type public_ip_address: str + :param value: Required. + :type value: list[~azure.mgmt.security.models.RegulatoryComplianceAssessment] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'id': {'required': True}, - 'ports': {'required': True}, + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[RegulatoryComplianceAssessment]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["RegulatoryComplianceAssessment"], + **kwargs + ): + super(RegulatoryComplianceAssessmentList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class RegulatoryComplianceControl(Resource): + """Regulatory compliance control details and state. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar description: The description of the regulatory compliance control. + :vartype description: str + :param state: Aggregative state based on the control's supported assessments states. Possible + values include: "Passed", "Failed", "Skipped", "Unsupported". + :type state: str or ~azure.mgmt.security.models.State + :ivar passed_assessments: The number of supported regulatory compliance assessments of the + given control with a passed state. + :vartype passed_assessments: int + :ivar failed_assessments: The number of supported regulatory compliance assessments of the + given control with a failed state. + :vartype failed_assessments: int + :ivar skipped_assessments: The number of supported regulatory compliance assessments of the + given control with a skipped state. + :vartype skipped_assessments: int + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'description': {'readonly': True}, + 'passed_assessments': {'readonly': True}, + 'failed_assessments': {'readonly': True}, + 'skipped_assessments': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[JitNetworkAccessPortRule]'}, - 'public_ip_address': {'key': 'publicIpAddress', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'passed_assessments': {'key': 'properties.passedAssessments', 'type': 'int'}, + 'failed_assessments': {'key': 'properties.failedAssessments', 'type': 'int'}, + 'skipped_assessments': {'key': 'properties.skippedAssessments', 'type': 'int'}, } - def __init__(self, *, id: str, ports, public_ip_address: str=None, **kwargs) -> None: - super(JitNetworkAccessPolicyVirtualMachine, self).__init__(**kwargs) - self.id = id - self.ports = ports - self.public_ip_address = public_ip_address + def __init__( + self, + *, + state: Optional[Union[str, "State"]] = None, + **kwargs + ): + super(RegulatoryComplianceControl, self).__init__(**kwargs) + self.description = None + self.state = state + self.passed_assessments = None + self.failed_assessments = None + self.skipped_assessments = None -class JitNetworkAccessPortRule(Model): - """JitNetworkAccessPortRule. +class RegulatoryComplianceControlList(msrest.serialization.Model): + """List of regulatory compliance controls response. + + Variables are only populated by the server, and will be ignored when sending a request. All required parameters must be populated in order to send to Azure. - :param number: Required. - :type number: int - :param protocol: Required. Possible values include: 'TCP', 'UDP', 'All' - :type protocol: str or ~azure.mgmt.security.models.Protocol - :param allowed_source_address_prefix: Mutually exclusive with the - "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, - for example "192.168.0.3" or "192.168.0.0/16". - :type allowed_source_address_prefix: str - :param allowed_source_address_prefixes: Mutually exclusive with the - "allowedSourceAddressPrefix" parameter. - :type allowed_source_address_prefixes: list[str] - :param max_request_access_duration: Required. Maximum duration requests - can be made for. In ISO 8601 duration format. Minimum 5 minutes, maximum 1 - day - :type max_request_access_duration: str + :param value: Required. List of regulatory compliance controls. + :type value: list[~azure.mgmt.security.models.RegulatoryComplianceControl] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[RegulatoryComplianceControl]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["RegulatoryComplianceControl"], + **kwargs + ): + super(RegulatoryComplianceControlList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class RegulatoryComplianceStandard(Resource): + """Regulatory compliance standard details and state. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param state: Aggregative state based on the standard's supported controls states. Possible + values include: "Passed", "Failed", "Skipped", "Unsupported". + :type state: str or ~azure.mgmt.security.models.State + :ivar passed_controls: The number of supported regulatory compliance controls of the given + standard with a passed state. + :vartype passed_controls: int + :ivar failed_controls: The number of supported regulatory compliance controls of the given + standard with a failed state. + :vartype failed_controls: int + :ivar skipped_controls: The number of supported regulatory compliance controls of the given + standard with a skipped state. + :vartype skipped_controls: int + :ivar unsupported_controls: The number of regulatory compliance controls of the given standard + which are unsupported by automated assessments. + :vartype unsupported_controls: int + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'passed_controls': {'readonly': True}, + 'failed_controls': {'readonly': True}, + 'skipped_controls': {'readonly': True}, + 'unsupported_controls': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'state': {'key': 'properties.state', 'type': 'str'}, + 'passed_controls': {'key': 'properties.passedControls', 'type': 'int'}, + 'failed_controls': {'key': 'properties.failedControls', 'type': 'int'}, + 'skipped_controls': {'key': 'properties.skippedControls', 'type': 'int'}, + 'unsupported_controls': {'key': 'properties.unsupportedControls', 'type': 'int'}, + } + + def __init__( + self, + *, + state: Optional[Union[str, "State"]] = None, + **kwargs + ): + super(RegulatoryComplianceStandard, self).__init__(**kwargs) + self.state = state + self.passed_controls = None + self.failed_controls = None + self.skipped_controls = None + self.unsupported_controls = None + + +class RegulatoryComplianceStandardList(msrest.serialization.Model): + """List of regulatory compliance standards response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. + :type value: list[~azure.mgmt.security.models.RegulatoryComplianceStandard] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[RegulatoryComplianceStandard]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["RegulatoryComplianceStandard"], + **kwargs + ): + super(RegulatoryComplianceStandardList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class Rule(msrest.serialization.Model): + """Describes remote addresses that is recommended to communicate with the Azure resource on some (Protocol, Port, Direction). All other remote addresses are recommended to be blocked. + + :param name: The name of the rule. + :type name: str + :param direction: The rule's direction. Possible values include: "Inbound", "Outbound". + :type direction: str or ~azure.mgmt.security.models.Direction + :param destination_port: The rule's destination port. + :type destination_port: int + :param protocols: The rule's transport protocols. + :type protocols: list[str or ~azure.mgmt.security.models.TransportProtocol] + :param ip_addresses: The remote IP addresses that should be able to communicate with the Azure + resource on the rule's destination port and protocol. + :type ip_addresses: list[str] """ _validation = { - 'number': {'required': True}, - 'protocol': {'required': True}, - 'max_request_access_duration': {'required': True}, + 'destination_port': {'maximum': 65535, 'minimum': 0}, } _attribute_map = { - 'number': {'key': 'number', 'type': 'int'}, - 'protocol': {'key': 'protocol', 'type': 'str'}, - 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, - 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, - 'max_request_access_duration': {'key': 'maxRequestAccessDuration', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'direction': {'key': 'direction', 'type': 'str'}, + 'destination_port': {'key': 'destinationPort', 'type': 'int'}, + 'protocols': {'key': 'protocols', 'type': '[str]'}, + 'ip_addresses': {'key': 'ipAddresses', 'type': '[str]'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + direction: Optional[Union[str, "Direction"]] = None, + destination_port: Optional[int] = None, + protocols: Optional[List[Union[str, "TransportProtocol"]]] = None, + ip_addresses: Optional[List[str]] = None, + **kwargs + ): + super(Rule, self).__init__(**kwargs) + self.name = name + self.direction = direction + self.destination_port = destination_port + self.protocols = protocols + self.ip_addresses = ip_addresses + + +class ScopeElement(msrest.serialization.Model): + """A more specific scope used to identify the alerts to suppress. + + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. + :type additional_properties: dict[str, object] + :param field: The alert entity type to suppress by. + :type field: str + """ + + _attribute_map = { + 'additional_properties': {'key': '', 'type': '{object}'}, + 'field': {'key': 'field', 'type': 'str'}, } - def __init__(self, *, number: int, protocol, max_request_access_duration: str, allowed_source_address_prefix: str=None, allowed_source_address_prefixes=None, **kwargs) -> None: - super(JitNetworkAccessPortRule, self).__init__(**kwargs) - self.number = number - self.protocol = protocol - self.allowed_source_address_prefix = allowed_source_address_prefix - self.allowed_source_address_prefixes = allowed_source_address_prefixes - self.max_request_access_duration = max_request_access_duration + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + field: Optional[str] = None, + **kwargs + ): + super(ScopeElement, self).__init__(**kwargs) + self.additional_properties = additional_properties + self.field = field -class JitNetworkAccessRequest(Model): - """JitNetworkAccessRequest. +class SecureScoreControlDefinitionItem(Resource): + """Information about the security control. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param virtual_machines: Required. - :type virtual_machines: - list[~azure.mgmt.security.models.JitNetworkAccessRequestVirtualMachine] - :param start_time_utc: Required. The start time of the request in UTC - :type start_time_utc: datetime - :param requestor: Required. The identity of the person who made the - request - :type requestor: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar display_name: User friendly display name of the control. + :vartype display_name: str + :ivar description: User friendly description of the control. + :vartype description: str + :ivar max_score: Maximum control score (0..10). + :vartype max_score: int + :ivar source: Source object from which the control was created. + :vartype source: ~azure.mgmt.security.models.SecureScoreControlDefinitionSource + :ivar assessment_definitions: Array of assessments metadata IDs that are included in this + security control. + :vartype assessment_definitions: list[~azure.mgmt.security.models.AzureResourceLink] """ _validation = { - 'virtual_machines': {'required': True}, - 'start_time_utc': {'required': True}, - 'requestor': {'required': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True, 'max_length': 256, 'min_length': 0}, + 'max_score': {'readonly': True, 'maximum': 10, 'minimum': 0}, + 'source': {'readonly': True}, + 'assessment_definitions': {'readonly': True}, } _attribute_map = { - 'virtual_machines': {'key': 'virtualMachines', 'type': '[JitNetworkAccessRequestVirtualMachine]'}, - 'start_time_utc': {'key': 'startTimeUtc', 'type': 'iso-8601'}, - 'requestor': {'key': 'requestor', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'max_score': {'key': 'properties.maxScore', 'type': 'int'}, + 'source': {'key': 'properties.source', 'type': 'SecureScoreControlDefinitionSource'}, + 'assessment_definitions': {'key': 'properties.assessmentDefinitions', 'type': '[AzureResourceLink]'}, } - def __init__(self, *, virtual_machines, start_time_utc, requestor: str, **kwargs) -> None: - super(JitNetworkAccessRequest, self).__init__(**kwargs) - self.virtual_machines = virtual_machines - self.start_time_utc = start_time_utc - self.requestor = requestor + def __init__( + self, + **kwargs + ): + super(SecureScoreControlDefinitionItem, self).__init__(**kwargs) + self.display_name = None + self.description = None + self.max_score = None + self.source = None + self.assessment_definitions = None -class JitNetworkAccessRequestPort(Model): - """JitNetworkAccessRequestPort. +class SecureScoreControlDefinitionList(msrest.serialization.Model): + """List of security controls definition. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :param number: Required. - :type number: int - :param allowed_source_address_prefix: Mutually exclusive with the - "allowedSourceAddressPrefixes" parameter. Should be an IP address or CIDR, - for example "192.168.0.3" or "192.168.0.0/16". - :type allowed_source_address_prefix: str - :param allowed_source_address_prefixes: Mutually exclusive with the - "allowedSourceAddressPrefix" parameter. - :type allowed_source_address_prefixes: list[str] - :param end_time_utc: Required. The date & time at which the request ends - in UTC - :type end_time_utc: datetime - :param status: Required. The status of the port. Possible values include: - 'Revoked', 'Initiated' - :type status: str or ~azure.mgmt.security.models.Status - :param status_reason: Required. A description of why the `status` has its - value. Possible values include: 'Expired', 'UserRequested', - 'NewerRequestInitiated' - :type status_reason: str or ~azure.mgmt.security.models.StatusReason - :param mapped_port: The port which is mapped to this port's `number` in - the Azure Firewall, if applicable - :type mapped_port: int + :ivar value: Collection of security controls definition in this page. + :vartype value: list[~azure.mgmt.security.models.SecureScoreControlDefinitionItem] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'number': {'required': True}, - 'end_time_utc': {'required': True}, - 'status': {'required': True}, - 'status_reason': {'required': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'number': {'key': 'number', 'type': 'int'}, - 'allowed_source_address_prefix': {'key': 'allowedSourceAddressPrefix', 'type': 'str'}, - 'allowed_source_address_prefixes': {'key': 'allowedSourceAddressPrefixes', 'type': '[str]'}, - 'end_time_utc': {'key': 'endTimeUtc', 'type': 'iso-8601'}, - 'status': {'key': 'status', 'type': 'str'}, - 'status_reason': {'key': 'statusReason', 'type': 'str'}, - 'mapped_port': {'key': 'mappedPort', 'type': 'int'}, + 'value': {'key': 'value', 'type': '[SecureScoreControlDefinitionItem]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, *, number: int, end_time_utc, status, status_reason, allowed_source_address_prefix: str=None, allowed_source_address_prefixes=None, mapped_port: int=None, **kwargs) -> None: - super(JitNetworkAccessRequestPort, self).__init__(**kwargs) - self.number = number - self.allowed_source_address_prefix = allowed_source_address_prefix - self.allowed_source_address_prefixes = allowed_source_address_prefixes - self.end_time_utc = end_time_utc - self.status = status - self.status_reason = status_reason - self.mapped_port = mapped_port + def __init__( + self, + **kwargs + ): + super(SecureScoreControlDefinitionList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class JitNetworkAccessRequestVirtualMachine(Model): - """JitNetworkAccessRequestVirtualMachine. +class SecureScoreControlDefinitionSource(msrest.serialization.Model): + """The type of the security control (For example, BuiltIn). - All required parameters must be populated in order to send to Azure. + :param source_type: The type of security control (for example, BuiltIn). Possible values + include: "BuiltIn", "Custom". + :type source_type: str or ~azure.mgmt.security.models.ControlType + """ - :param id: Required. Resource ID of the virtual machine that is linked to - this policy - :type id: str - :param ports: Required. The ports that were opened for the virtual machine - :type ports: list[~azure.mgmt.security.models.JitNetworkAccessRequestPort] + _attribute_map = { + 'source_type': {'key': 'sourceType', 'type': 'str'}, + } + + def __init__( + self, + *, + source_type: Optional[Union[str, "ControlType"]] = None, + **kwargs + ): + super(SecureScoreControlDefinitionSource, self).__init__(**kwargs) + self.source_type = source_type + + +class SecureScoreControlDetails(Resource): + """Details of the security control, its score, and the health status of the relevant resources. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar display_name: User friendly display name of the control. + :vartype display_name: str + :ivar healthy_resource_count: Number of healthy resources in the control. + :vartype healthy_resource_count: int + :ivar unhealthy_resource_count: Number of unhealthy resources in the control. + :vartype unhealthy_resource_count: int + :ivar not_applicable_resource_count: Number of not applicable resources in the control. + :vartype not_applicable_resource_count: int + :ivar weight: The relative weight for this specific control in each of your subscriptions. Used + when calculating an aggregated score for this control across all of your subscriptions. + :vartype weight: long + :param definition: Information about the security control. + :type definition: ~azure.mgmt.security.models.SecureScoreControlDefinitionItem + :ivar max: Maximum score available. + :vartype max: int + :ivar current: Current score. + :vartype current: float + :ivar percentage: Ratio of the current score divided by the maximum. Rounded to 4 digits after + the decimal point. + :vartype percentage: float """ _validation = { - 'id': {'required': True}, - 'ports': {'required': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'healthy_resource_count': {'readonly': True}, + 'unhealthy_resource_count': {'readonly': True}, + 'not_applicable_resource_count': {'readonly': True}, + 'weight': {'readonly': True, 'minimum': 0}, + 'max': {'readonly': True, 'minimum': 0}, + 'current': {'readonly': True, 'minimum': 0}, + 'percentage': {'readonly': True, 'maximum': 1, 'minimum': 0}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[JitNetworkAccessRequestPort]'}, - } + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'healthy_resource_count': {'key': 'properties.healthyResourceCount', 'type': 'int'}, + 'unhealthy_resource_count': {'key': 'properties.unhealthyResourceCount', 'type': 'int'}, + 'not_applicable_resource_count': {'key': 'properties.notApplicableResourceCount', 'type': 'int'}, + 'weight': {'key': 'properties.weight', 'type': 'long'}, + 'definition': {'key': 'properties.definition', 'type': 'SecureScoreControlDefinitionItem'}, + 'max': {'key': 'properties.score.max', 'type': 'int'}, + 'current': {'key': 'properties.score.current', 'type': 'float'}, + 'percentage': {'key': 'properties.score.percentage', 'type': 'float'}, + } + + def __init__( + self, + *, + definition: Optional["SecureScoreControlDefinitionItem"] = None, + **kwargs + ): + super(SecureScoreControlDetails, self).__init__(**kwargs) + self.display_name = None + self.healthy_resource_count = None + self.unhealthy_resource_count = None + self.not_applicable_resource_count = None + self.weight = None + self.definition = definition + self.max = None + self.current = None + self.percentage = None - def __init__(self, *, id: str, ports, **kwargs) -> None: - super(JitNetworkAccessRequestVirtualMachine, self).__init__(**kwargs) - self.id = id - self.ports = ports +class SecureScoreControlList(msrest.serialization.Model): + """List of security controls. -class Kind(Model): - """Describes an Azure resource with kind. + Variables are only populated by the server, and will be ignored when sending a request. - :param kind: Kind of the resource - :type kind: str + :ivar value: Collection of security controls in this page. + :vartype value: list[~azure.mgmt.security.models.SecureScoreControlDetails] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + _attribute_map = { - 'kind': {'key': 'kind', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[SecureScoreControlDetails]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, *, kind: str=None, **kwargs) -> None: - super(Kind, self).__init__(**kwargs) - self.kind = kind + def __init__( + self, + **kwargs + ): + super(SecureScoreControlList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class Location(Model): - """Describes an Azure resource with location. +class SecureScoreControlScore(msrest.serialization.Model): + """Calculation result data. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar location: Location where the resource is stored - :vartype location: str + :ivar max: Maximum control score (0..10). + :vartype max: int + :ivar current: Actual score for the control = (achieved points / total points) * max score. if + total points is zeroed, the return number is 0.00. + :vartype current: float + :ivar percentage: Ratio of the current score divided by the maximum. Rounded to 4 digits after + the decimal point. + :vartype percentage: float """ _validation = { - 'location': {'readonly': True}, + 'max': {'readonly': True, 'maximum': 10, 'minimum': 0}, + 'current': {'readonly': True, 'maximum': 10, 'minimum': 0}, + 'percentage': {'readonly': True, 'maximum': 1, 'minimum': 0}, } _attribute_map = { - 'location': {'key': 'location', 'type': 'str'}, + 'max': {'key': 'max', 'type': 'int'}, + 'current': {'key': 'current', 'type': 'float'}, + 'percentage': {'key': 'percentage', 'type': 'float'}, } - def __init__(self, **kwargs) -> None: - super(Location, self).__init__(**kwargs) - self.location = None + def __init__( + self, + **kwargs + ): + super(SecureScoreControlScore, self).__init__(**kwargs) + self.max = None + self.current = None + self.percentage = None -class Operation(Model): - """Possible operation in the REST API of Microsoft.Security. +class SecureScoreItem(Resource): + """Secure score item data model. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar name: Name of the operation + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. :vartype name: str - :ivar origin: Where the operation is originated - :vartype origin: str - :param display: - :type display: ~azure.mgmt.security.models.OperationDisplay + :ivar type: Resource type. + :vartype type: str + :ivar display_name: The initiative’s name. + :vartype display_name: str + :ivar weight: The relative weight for each subscription. Used when calculating an aggregated + secure score for multiple subscriptions. + :vartype weight: long + :ivar max: Maximum score available. + :vartype max: int + :ivar current: Current score. + :vartype current: float + :ivar percentage: Ratio of the current score divided by the maximum. Rounded to 4 digits after + the decimal point. + :vartype percentage: float """ _validation = { + 'id': {'readonly': True}, 'name': {'readonly': True}, - 'origin': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'weight': {'readonly': True, 'minimum': 0}, + 'max': {'readonly': True, 'minimum': 0}, + 'current': {'readonly': True, 'minimum': 0}, + 'percentage': {'readonly': True, 'maximum': 1, 'minimum': 0}, } _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, - 'origin': {'key': 'origin', 'type': 'str'}, - 'display': {'key': 'display', 'type': 'OperationDisplay'}, - } - - def __init__(self, *, display=None, **kwargs) -> None: - super(Operation, self).__init__(**kwargs) - self.name = None - self.origin = None - self.display = display + 'type': {'key': 'type', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'weight': {'key': 'properties.weight', 'type': 'long'}, + 'max': {'key': 'properties.score.max', 'type': 'int'}, + 'current': {'key': 'properties.score.current', 'type': 'float'}, + 'percentage': {'key': 'properties.score.percentage', 'type': 'float'}, + } + + def __init__( + self, + **kwargs + ): + super(SecureScoreItem, self).__init__(**kwargs) + self.display_name = None + self.weight = None + self.max = None + self.current = None + self.percentage = None -class OperationDisplay(Model): - """Security operation display. +class SecureScoresList(msrest.serialization.Model): + """List of secure scores. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar provider: The resource provider for the operation. - :vartype provider: str - :ivar resource: The display name of the resource the operation applies to. - :vartype resource: str - :ivar operation: The display name of the security operation. - :vartype operation: str - :ivar description: The description of the operation. - :vartype description: str + :ivar value: Collection of secure scores in this page. + :vartype value: list[~azure.mgmt.security.models.SecureScoreItem] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str """ _validation = { - 'provider': {'readonly': True}, - 'resource': {'readonly': True}, - 'operation': {'readonly': True}, - 'description': {'readonly': True}, + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } _attribute_map = { - 'provider': {'key': 'provider', 'type': 'str'}, - 'resource': {'key': 'resource', 'type': 'str'}, - 'operation': {'key': 'operation', 'type': 'str'}, - 'description': {'key': 'description', 'type': 'str'}, + 'value': {'key': 'value', 'type': '[SecureScoreItem]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: - super(OperationDisplay, self).__init__(**kwargs) - self.provider = None - self.resource = None - self.operation = None - self.description = None + def __init__( + self, + **kwargs + ): + super(SecureScoresList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class PathRecommendation(Model): - """Represents a path that is recommended to be allowed and its properties. +class SecurityAssessment(Resource): + """Security assessment on a resource. - :param path: The full path to whitelist - :type path: str - :param action: Possible values include: 'Recommended', 'Add', 'Remove' - :type action: str or ~azure.mgmt.security.models.enum - :param type: Possible values include: 'File', 'FileHash', - 'PublisherSignature', 'ProductSignature', 'BinarySignature', - 'VersionAndAboveSignature' - :type type: str or ~azure.mgmt.security.models.enum - :param publisher_info: - :type publisher_info: ~azure.mgmt.security.models.PublisherInfo - :param common: Whether the path is commonly run on the machine - :type common: bool - :param user_sids: - :type user_sids: list[str] - :param usernames: - :type usernames: list[~azure.mgmt.security.models.UserRecommendation] - :param file_type: Possible values include: 'Exe', 'Dll', 'Msi', 'Script', - 'Executable', 'Unknown' - :type file_type: str or ~azure.mgmt.security.models.enum - :param configuration_status: Possible values include: 'Configured', - 'NotConfigured', 'InProgress', 'Failed', 'NoStatus' - :type configuration_status: str or ~azure.mgmt.security.models.enum + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :param resource_details: Details of the resource that was assessed. + :type resource_details: ~azure.mgmt.security.models.ResourceDetails + :ivar display_name: User friendly display name of the assessment. + :vartype display_name: str + :param status: The result of the assessment. + :type status: ~azure.mgmt.security.models.AssessmentStatus + :param additional_data: Additional data regarding the assessment. + :type additional_data: dict[str, str] + :ivar links: Links relevant to the assessment. + :vartype links: ~azure.mgmt.security.models.AssessmentLinks + :param metadata: Describes properties of an assessment metadata. + :type metadata: ~azure.mgmt.security.models.SecurityAssessmentMetadataProperties + :param partners_data: Data regarding 3rd party partner integration. + :type partners_data: ~azure.mgmt.security.models.SecurityAssessmentPartnerData """ + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'display_name': {'readonly': True}, + 'links': {'readonly': True}, + } + _attribute_map = { - 'path': {'key': 'path', 'type': 'str'}, - 'action': {'key': 'action', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'publisher_info': {'key': 'publisherInfo', 'type': 'PublisherInfo'}, - 'common': {'key': 'common', 'type': 'bool'}, - 'user_sids': {'key': 'userSids', 'type': '[str]'}, - 'usernames': {'key': 'usernames', 'type': '[UserRecommendation]'}, - 'file_type': {'key': 'fileType', 'type': 'str'}, - 'configuration_status': {'key': 'configurationStatus', 'type': 'str'}, + 'resource_details': {'key': 'properties.resourceDetails', 'type': 'ResourceDetails'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'AssessmentStatus'}, + 'additional_data': {'key': 'properties.additionalData', 'type': '{str}'}, + 'links': {'key': 'properties.links', 'type': 'AssessmentLinks'}, + 'metadata': {'key': 'properties.metadata', 'type': 'SecurityAssessmentMetadataProperties'}, + 'partners_data': {'key': 'properties.partnersData', 'type': 'SecurityAssessmentPartnerData'}, + } + + def __init__( + self, + *, + resource_details: Optional["ResourceDetails"] = None, + status: Optional["AssessmentStatus"] = None, + additional_data: Optional[Dict[str, str]] = None, + metadata: Optional["SecurityAssessmentMetadataProperties"] = None, + partners_data: Optional["SecurityAssessmentPartnerData"] = None, + **kwargs + ): + super(SecurityAssessment, self).__init__(**kwargs) + self.resource_details = resource_details + self.display_name = None + self.status = status + self.additional_data = additional_data + self.links = None + self.metadata = metadata + self.partners_data = partners_data + + +class SecurityAssessmentList(msrest.serialization.Model): + """Page of a security assessments list. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: Collection of security assessments in this page. + :vartype value: list[~azure.mgmt.security.models.SecurityAssessment] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } - def __init__(self, *, path: str=None, action=None, type=None, publisher_info=None, common: bool=None, user_sids=None, usernames=None, file_type=None, configuration_status=None, **kwargs) -> None: - super(PathRecommendation, self).__init__(**kwargs) - self.path = path - self.action = action - self.type = type - self.publisher_info = publisher_info - self.common = common - self.user_sids = user_sids - self.usernames = usernames - self.file_type = file_type - self.configuration_status = configuration_status + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecurityAssessment]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class Pricing(Resource): - """Pricing tier will be applied for the scope based on the resource ID. - Variables are only populated by the server, and will be ignored when - sending a request. +class SecurityAssessmentMetadata(Resource): + """Security assessment metadata. - All required parameters must be populated in order to send to Azure. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param pricing_tier: Required. The pricing tier value. Azure Security - Center is provided in two pricing tiers: free and standard, with the - standard tier available with a trial period. The standard tier offers - advanced security capabilities, while the free tier offers basic security - features. Possible values include: 'Free', 'Standard' - :type pricing_tier: str or ~azure.mgmt.security.models.PricingTier - :ivar free_trial_remaining_time: The duration left for the subscriptions - free trial period - in ISO 8601 format (e.g. P3Y6M4DT12H30M5S). - :vartype free_trial_remaining_time: timedelta + :param display_name: User friendly display name of the assessment. + :type display_name: str + :ivar policy_definition_id: Azure resource ID of the policy definition that turns this + assessment calculation on. + :vartype policy_definition_id: str + :param description: Human readable description of the assessment. + :type description: str + :param remediation_description: Human readable description of what you should do to mitigate + this security issue. + :type remediation_description: str + :param category: + :type category: list[str or ~azure.mgmt.security.models.Category] + :param severity: The severity level of the assessment. Possible values include: "Low", + "Medium", "High". + :type severity: str or ~azure.mgmt.security.models.Severity + :param user_impact: The user impact of the assessment. Possible values include: "Low", + "Moderate", "High". + :type user_impact: str or ~azure.mgmt.security.models.UserImpact + :param implementation_effort: The implementation effort required to remediate this assessment. + Possible values include: "Low", "Moderate", "High". + :type implementation_effort: str or ~azure.mgmt.security.models.ImplementationEffort + :param threats: + :type threats: list[str or ~azure.mgmt.security.models.Threats] + :param preview: True if this assessment is in preview release status. + :type preview: bool + :param assessment_type: BuiltIn if the assessment based on built-in Azure Policy definition, + Custom if the assessment based on custom Azure Policy definition. Possible values include: + "BuiltIn", "CustomPolicy", "CustomerManaged", "VerifiedPartner". + :type assessment_type: str or ~azure.mgmt.security.models.AssessmentType + :param partner_data: Describes the partner that created the assessment. + :type partner_data: ~azure.mgmt.security.models.SecurityAssessmentMetadataPartnerData """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'pricing_tier': {'required': True}, - 'free_trial_remaining_time': {'readonly': True}, + 'policy_definition_id': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'pricing_tier': {'key': 'properties.pricingTier', 'type': 'str'}, - 'free_trial_remaining_time': {'key': 'properties.freeTrialRemainingTime', 'type': 'duration'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'policy_definition_id': {'key': 'properties.policyDefinitionId', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'remediation_description': {'key': 'properties.remediationDescription', 'type': 'str'}, + 'category': {'key': 'properties.category', 'type': '[str]'}, + 'severity': {'key': 'properties.severity', 'type': 'str'}, + 'user_impact': {'key': 'properties.userImpact', 'type': 'str'}, + 'implementation_effort': {'key': 'properties.implementationEffort', 'type': 'str'}, + 'threats': {'key': 'properties.threats', 'type': '[str]'}, + 'preview': {'key': 'properties.preview', 'type': 'bool'}, + 'assessment_type': {'key': 'properties.assessmentType', 'type': 'str'}, + 'partner_data': {'key': 'properties.partnerData', 'type': 'SecurityAssessmentMetadataPartnerData'}, + } + + def __init__( + self, + *, + display_name: Optional[str] = None, + description: Optional[str] = None, + remediation_description: Optional[str] = None, + category: Optional[List[Union[str, "Category"]]] = None, + severity: Optional[Union[str, "Severity"]] = None, + user_impact: Optional[Union[str, "UserImpact"]] = None, + implementation_effort: Optional[Union[str, "ImplementationEffort"]] = None, + threats: Optional[List[Union[str, "Threats"]]] = None, + preview: Optional[bool] = None, + assessment_type: Optional[Union[str, "AssessmentType"]] = None, + partner_data: Optional["SecurityAssessmentMetadataPartnerData"] = None, + **kwargs + ): + super(SecurityAssessmentMetadata, self).__init__(**kwargs) + self.display_name = display_name + self.policy_definition_id = None + self.description = description + self.remediation_description = remediation_description + self.category = category + self.severity = severity + self.user_impact = user_impact + self.implementation_effort = implementation_effort + self.threats = threats + self.preview = preview + self.assessment_type = assessment_type + self.partner_data = partner_data + + +class SecurityAssessmentMetadataList(msrest.serialization.Model): + """List of security assessment metadata. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.SecurityAssessmentMetadata] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, } - def __init__(self, *, pricing_tier, **kwargs) -> None: - super(Pricing, self).__init__(**kwargs) - self.pricing_tier = pricing_tier - self.free_trial_remaining_time = None + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecurityAssessmentMetadata]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityAssessmentMetadataList, self).__init__(**kwargs) + self.value = None + self.next_link = None -class PricingList(Model): - """List of pricing configurations response. +class SecurityAssessmentMetadataPartnerData(msrest.serialization.Model): + """Describes the partner that created the assessment. All required parameters must be populated in order to send to Azure. - :param value: Required. List of pricing configurations - :type value: list[~azure.mgmt.security.models.Pricing] + :param partner_name: Required. Name of the company of the partner. + :type partner_name: str + :param product_name: Name of the product of the partner that created the assessment. + :type product_name: str + :param secret: Required. Secret to authenticate the partner and verify it created the + assessment - write only. + :type secret: str """ _validation = { - 'value': {'required': True}, + 'partner_name': {'required': True}, + 'secret': {'required': True}, } _attribute_map = { - 'value': {'key': 'value', 'type': '[Pricing]'}, - } + 'partner_name': {'key': 'partnerName', 'type': 'str'}, + 'product_name': {'key': 'productName', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, + } + + def __init__( + self, + *, + partner_name: str, + secret: str, + product_name: Optional[str] = None, + **kwargs + ): + super(SecurityAssessmentMetadataPartnerData, self).__init__(**kwargs) + self.partner_name = partner_name + self.product_name = product_name + self.secret = secret - def __init__(self, *, value, **kwargs) -> None: - super(PricingList, self).__init__(**kwargs) - self.value = value +class SecurityAssessmentMetadataProperties(msrest.serialization.Model): + """Describes properties of an assessment metadata. -class PublisherInfo(Model): - """Represents the publisher information of a process/rule. + Variables are only populated by the server, and will be ignored when sending a request. - :param publisher_name: The Subject field of the x.509 certificate used to - sign the code, using the following fields - O = Organization, L = - Locality, S = State or Province, and C = Country - :type publisher_name: str - :param product_name: The product name taken from the file's version - resource - :type product_name: str - :param binary_name: The "OriginalName" field taken from the file's version - resource - :type binary_name: str - :param version: The binary file version taken from the file's version - resource - :type version: str + All required parameters must be populated in order to send to Azure. + + :param display_name: Required. User friendly display name of the assessment. + :type display_name: str + :ivar policy_definition_id: Azure resource ID of the policy definition that turns this + assessment calculation on. + :vartype policy_definition_id: str + :param description: Human readable description of the assessment. + :type description: str + :param remediation_description: Human readable description of what you should do to mitigate + this security issue. + :type remediation_description: str + :param category: + :type category: list[str or ~azure.mgmt.security.models.Category] + :param severity: Required. The severity level of the assessment. Possible values include: + "Low", "Medium", "High". + :type severity: str or ~azure.mgmt.security.models.Severity + :param user_impact: The user impact of the assessment. Possible values include: "Low", + "Moderate", "High". + :type user_impact: str or ~azure.mgmt.security.models.UserImpact + :param implementation_effort: The implementation effort required to remediate this assessment. + Possible values include: "Low", "Moderate", "High". + :type implementation_effort: str or ~azure.mgmt.security.models.ImplementationEffort + :param threats: + :type threats: list[str or ~azure.mgmt.security.models.Threats] + :param preview: True if this assessment is in preview release status. + :type preview: bool + :param assessment_type: Required. BuiltIn if the assessment based on built-in Azure Policy + definition, Custom if the assessment based on custom Azure Policy definition. Possible values + include: "BuiltIn", "CustomPolicy", "CustomerManaged", "VerifiedPartner". + :type assessment_type: str or ~azure.mgmt.security.models.AssessmentType + :param partner_data: Describes the partner that created the assessment. + :type partner_data: ~azure.mgmt.security.models.SecurityAssessmentMetadataPartnerData """ - _attribute_map = { - 'publisher_name': {'key': 'publisherName', 'type': 'str'}, - 'product_name': {'key': 'productName', 'type': 'str'}, - 'binary_name': {'key': 'binaryName', 'type': 'str'}, - 'version': {'key': 'version', 'type': 'str'}, + _validation = { + 'display_name': {'required': True}, + 'policy_definition_id': {'readonly': True}, + 'severity': {'required': True}, + 'assessment_type': {'required': True}, } - def __init__(self, *, publisher_name: str=None, product_name: str=None, binary_name: str=None, version: str=None, **kwargs) -> None: - super(PublisherInfo, self).__init__(**kwargs) - self.publisher_name = publisher_name - self.product_name = product_name - self.binary_name = binary_name - self.version = version - - -class RecommendationConfigurationProperties(Model): - """Recommendation configuration. - - Variables are only populated by the server, and will be ignored when - sending a request. + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'policy_definition_id': {'key': 'policyDefinitionId', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'remediation_description': {'key': 'remediationDescription', 'type': 'str'}, + 'category': {'key': 'category', 'type': '[str]'}, + 'severity': {'key': 'severity', 'type': 'str'}, + 'user_impact': {'key': 'userImpact', 'type': 'str'}, + 'implementation_effort': {'key': 'implementationEffort', 'type': 'str'}, + 'threats': {'key': 'threats', 'type': '[str]'}, + 'preview': {'key': 'preview', 'type': 'bool'}, + 'assessment_type': {'key': 'assessmentType', 'type': 'str'}, + 'partner_data': {'key': 'partnerData', 'type': 'SecurityAssessmentMetadataPartnerData'}, + } + + def __init__( + self, + *, + display_name: str, + severity: Union[str, "Severity"], + assessment_type: Union[str, "AssessmentType"], + description: Optional[str] = None, + remediation_description: Optional[str] = None, + category: Optional[List[Union[str, "Category"]]] = None, + user_impact: Optional[Union[str, "UserImpact"]] = None, + implementation_effort: Optional[Union[str, "ImplementationEffort"]] = None, + threats: Optional[List[Union[str, "Threats"]]] = None, + preview: Optional[bool] = None, + partner_data: Optional["SecurityAssessmentMetadataPartnerData"] = None, + **kwargs + ): + super(SecurityAssessmentMetadataProperties, self).__init__(**kwargs) + self.display_name = display_name + self.policy_definition_id = None + self.description = description + self.remediation_description = remediation_description + self.category = category + self.severity = severity + self.user_impact = user_impact + self.implementation_effort = implementation_effort + self.threats = threats + self.preview = preview + self.assessment_type = assessment_type + self.partner_data = partner_data + + +class SecurityAssessmentPartnerData(msrest.serialization.Model): + """Data regarding 3rd party partner integration. All required parameters must be populated in order to send to Azure. - :param recommendation_type: Required. The recommendation type. Possible - values include: 'IoT_ACRAuthentication', - 'IoT_AgentSendsUnutilizedMessages', 'IoT_Baseline', - 'IoT_EdgeHubMemOptimize', 'IoT_EdgeLoggingOptions', - 'IoT_InconsistentModuleSettings', 'IoT_InstallAgent', - 'IoT_IPFilter_DenyAll', 'IoT_IPFilter_PermissiveRule', 'IoT_OpenPorts', - 'IoT_PermissiveFirewallPolicy', 'IoT_PermissiveInputFirewallRules', - 'IoT_PermissiveOutputFirewallRules', 'IoT_PrivilegedDockerOptions', - 'IoT_SharedCredentials', 'IoT_VulnerableTLSCipherSuite' - :type recommendation_type: str or - ~azure.mgmt.security.models.RecommendationType - :ivar name: - :vartype name: str - :param status: Required. Recommendation status. The recommendation is not - generated when the status is disabled. Possible values include: - 'Disabled', 'Enabled'. Default value: "Enabled" . - :type status: str or - ~azure.mgmt.security.models.RecommendationConfigStatus + :param partner_name: Required. Name of the company of the partner. + :type partner_name: str + :param secret: Required. secret to authenticate the partner - write only. + :type secret: str """ _validation = { - 'recommendation_type': {'required': True}, - 'name': {'readonly': True}, - 'status': {'required': True}, + 'partner_name': {'required': True}, + 'secret': {'required': True}, } _attribute_map = { - 'recommendation_type': {'key': 'recommendationType', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'status': {'key': 'status', 'type': 'str'}, + 'partner_name': {'key': 'partnerName', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, } - def __init__(self, *, recommendation_type, status="Enabled", **kwargs) -> None: - super(RecommendationConfigurationProperties, self).__init__(**kwargs) - self.recommendation_type = recommendation_type - self.name = None - self.status = status + def __init__( + self, + *, + partner_name: str, + secret: str, + **kwargs + ): + super(SecurityAssessmentPartnerData, self).__init__(**kwargs) + self.partner_name = partner_name + self.secret = secret -class RegulatoryComplianceAssessment(Resource): - """Regulatory compliance assessment details and state. +class SecurityContact(Resource): + """Contact details for security issues. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar description: The description of the regulatory compliance assessment - :vartype description: str - :ivar assessment_type: The expected type of assessment contained in the - AssessmentDetailsLink - :vartype assessment_type: str - :ivar assessment_details_link: Link to more detailed assessment results - data. The response type will be according to the assessmentType field - :vartype assessment_details_link: str - :param state: Aggregative state based on the assessment's scanned - resources states. Possible values include: 'Passed', 'Failed', 'Skipped', - 'Unsupported' - :type state: str or ~azure.mgmt.security.models.State - :ivar passed_resources: The given assessment's related resources count - with passed state. - :vartype passed_resources: int - :ivar failed_resources: The given assessment's related resources count - with failed state. - :vartype failed_resources: int - :ivar skipped_resources: The given assessment's related resources count - with skipped state. - :vartype skipped_resources: int - :ivar unsupported_resources: The given assessment's related resources - count with unsupported state. - :vartype unsupported_resources: int + :param email: The email of this security contact. + :type email: str + :param phone: The phone number of this security contact. + :type phone: str + :param alert_notifications: Whether to send security alerts notifications to the security + contact. Possible values include: "On", "Off". + :type alert_notifications: str or ~azure.mgmt.security.models.AlertNotifications + :param alerts_to_admins: Whether to send security alerts notifications to subscription admins. + Possible values include: "On", "Off". + :type alerts_to_admins: str or ~azure.mgmt.security.models.AlertsToAdmins """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'description': {'readonly': True}, - 'assessment_type': {'readonly': True}, - 'assessment_details_link': {'readonly': True}, - 'passed_resources': {'readonly': True}, - 'failed_resources': {'readonly': True}, - 'skipped_resources': {'readonly': True}, - 'unsupported_resources': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'assessment_type': {'key': 'properties.assessmentType', 'type': 'str'}, - 'assessment_details_link': {'key': 'properties.assessmentDetailsLink', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'passed_resources': {'key': 'properties.passedResources', 'type': 'int'}, - 'failed_resources': {'key': 'properties.failedResources', 'type': 'int'}, - 'skipped_resources': {'key': 'properties.skippedResources', 'type': 'int'}, - 'unsupported_resources': {'key': 'properties.unsupportedResources', 'type': 'int'}, + 'email': {'key': 'properties.email', 'type': 'str'}, + 'phone': {'key': 'properties.phone', 'type': 'str'}, + 'alert_notifications': {'key': 'properties.alertNotifications', 'type': 'str'}, + 'alerts_to_admins': {'key': 'properties.alertsToAdmins', 'type': 'str'}, } - def __init__(self, *, state=None, **kwargs) -> None: - super(RegulatoryComplianceAssessment, self).__init__(**kwargs) - self.description = None - self.assessment_type = None - self.assessment_details_link = None - self.state = state - self.passed_resources = None - self.failed_resources = None - self.skipped_resources = None - self.unsupported_resources = None + def __init__( + self, + *, + email: Optional[str] = None, + phone: Optional[str] = None, + alert_notifications: Optional[Union[str, "AlertNotifications"]] = None, + alerts_to_admins: Optional[Union[str, "AlertsToAdmins"]] = None, + **kwargs + ): + super(SecurityContact, self).__init__(**kwargs) + self.email = email + self.phone = phone + self.alert_notifications = alert_notifications + self.alerts_to_admins = alerts_to_admins -class RegulatoryComplianceControl(Resource): - """Regulatory compliance control details and state. +class SecurityContactList(msrest.serialization.Model): + """List of security contacts response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: List of security contacts. + :vartype value: list[~azure.mgmt.security.models.SecurityContact] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecurityContact]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityContactList, self).__init__(**kwargs) + self.value = None + self.next_link = None - Variables are only populated by the server, and will be ignored when - sending a request. - :ivar id: Resource Id +class SecuritySolution(Resource, Location): + """SecuritySolution. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar description: The description of the regulatory compliance control - :vartype description: str - :param state: Aggregative state based on the control's supported - assessments states. Possible values include: 'Passed', 'Failed', - 'Skipped', 'Unsupported' - :type state: str or ~azure.mgmt.security.models.State - :ivar passed_assessments: The number of supported regulatory compliance - assessments of the given control with a passed state - :vartype passed_assessments: int - :ivar failed_assessments: The number of supported regulatory compliance - assessments of the given control with a failed state - :vartype failed_assessments: int - :ivar skipped_assessments: The number of supported regulatory compliance - assessments of the given control with a skipped state - :vartype skipped_assessments: int + :param security_family: The security family of the security solution. Possible values include: + "Waf", "Ngfw", "SaasWaf", "Va". + :type security_family: str or ~azure.mgmt.security.models.SecurityFamily + :param provisioning_state: The security family provisioning State. Possible values include: + "Succeeded", "Failed", "Updating". + :type provisioning_state: str or ~azure.mgmt.security.models.ProvisioningState + :param template: The security solutions' template. + :type template: str + :param protection_status: The security solutions' status. + :type protection_status: str """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'description': {'readonly': True}, - 'passed_assessments': {'readonly': True}, - 'failed_assessments': {'readonly': True}, - 'skipped_assessments': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'description': {'key': 'properties.description', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'passed_assessments': {'key': 'properties.passedAssessments', 'type': 'int'}, - 'failed_assessments': {'key': 'properties.failedAssessments', 'type': 'int'}, - 'skipped_assessments': {'key': 'properties.skippedAssessments', 'type': 'int'}, + 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'template': {'key': 'properties.template', 'type': 'str'}, + 'protection_status': {'key': 'properties.protectionStatus', 'type': 'str'}, + } + + def __init__( + self, + *, + security_family: Optional[Union[str, "SecurityFamily"]] = None, + provisioning_state: Optional[Union[str, "ProvisioningState"]] = None, + template: Optional[str] = None, + protection_status: Optional[str] = None, + **kwargs + ): + super(SecuritySolution, self).__init__(**kwargs) + self.location = None + self.security_family = security_family + self.provisioning_state = provisioning_state + self.template = template + self.protection_status = protection_status + self.id = None + self.name = None + self.type = None + self.security_family = security_family + self.provisioning_state = provisioning_state + self.template = template + self.protection_status = protection_status + + +class SecuritySolutionList(msrest.serialization.Model): + """SecuritySolutionList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: + :type value: list[~azure.mgmt.security.models.SecuritySolution] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, } - def __init__(self, *, state=None, **kwargs) -> None: - super(RegulatoryComplianceControl, self).__init__(**kwargs) - self.description = None - self.state = state - self.passed_assessments = None - self.failed_assessments = None - self.skipped_assessments = None + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecuritySolution]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + def __init__( + self, + *, + value: Optional[List["SecuritySolution"]] = None, + **kwargs + ): + super(SecuritySolutionList, self).__init__(**kwargs) + self.value = value + self.next_link = None -class RegulatoryComplianceStandard(Resource): - """Regulatory compliance standard details and state. - Variables are only populated by the server, and will be ignored when - sending a request. +class SecuritySolutionsReferenceData(Resource, Location): + """SecuritySolutionsReferenceData. - :ivar id: Resource Id + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param state: Aggregative state based on the standard's supported controls - states. Possible values include: 'Passed', 'Failed', 'Skipped', - 'Unsupported' - :type state: str or ~azure.mgmt.security.models.State - :ivar passed_controls: The number of supported regulatory compliance - controls of the given standard with a passed state - :vartype passed_controls: int - :ivar failed_controls: The number of supported regulatory compliance - controls of the given standard with a failed state - :vartype failed_controls: int - :ivar skipped_controls: The number of supported regulatory compliance - controls of the given standard with a skipped state - :vartype skipped_controls: int - :ivar unsupported_controls: The number of regulatory compliance controls - of the given standard which are unsupported by automated assessments - :vartype unsupported_controls: int + :param security_family: Required. The security family of the security solution. Possible values + include: "Waf", "Ngfw", "SaasWaf", "Va". + :type security_family: str or ~azure.mgmt.security.models.SecurityFamily + :param alert_vendor_name: Required. The security solutions' vendor name. + :type alert_vendor_name: str + :param package_info_url: Required. The security solutions' package info url. + :type package_info_url: str + :param product_name: Required. The security solutions' product name. + :type product_name: str + :param publisher: Required. The security solutions' publisher. + :type publisher: str + :param publisher_display_name: Required. The security solutions' publisher display name. + :type publisher_display_name: str + :param template: Required. The security solutions' template. + :type template: str """ _validation = { + 'location': {'readonly': True}, 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'passed_controls': {'readonly': True}, - 'failed_controls': {'readonly': True}, - 'skipped_controls': {'readonly': True}, - 'unsupported_controls': {'readonly': True}, + 'security_family': {'required': True}, + 'alert_vendor_name': {'required': True}, + 'package_info_url': {'required': True}, + 'product_name': {'required': True}, + 'publisher': {'required': True}, + 'publisher_display_name': {'required': True}, + 'template': {'required': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'state': {'key': 'properties.state', 'type': 'str'}, - 'passed_controls': {'key': 'properties.passedControls', 'type': 'int'}, - 'failed_controls': {'key': 'properties.failedControls', 'type': 'int'}, - 'skipped_controls': {'key': 'properties.skippedControls', 'type': 'int'}, - 'unsupported_controls': {'key': 'properties.unsupportedControls', 'type': 'int'}, - } + 'security_family': {'key': 'properties.securityFamily', 'type': 'str'}, + 'alert_vendor_name': {'key': 'properties.alertVendorName', 'type': 'str'}, + 'package_info_url': {'key': 'properties.packageInfoUrl', 'type': 'str'}, + 'product_name': {'key': 'properties.productName', 'type': 'str'}, + 'publisher': {'key': 'properties.publisher', 'type': 'str'}, + 'publisher_display_name': {'key': 'properties.publisherDisplayName', 'type': 'str'}, + 'template': {'key': 'properties.template', 'type': 'str'}, + } + + def __init__( + self, + *, + security_family: Union[str, "SecurityFamily"], + alert_vendor_name: str, + package_info_url: str, + product_name: str, + publisher: str, + publisher_display_name: str, + template: str, + **kwargs + ): + super(SecuritySolutionsReferenceData, self).__init__(**kwargs) + self.location = None + self.security_family = security_family + self.alert_vendor_name = alert_vendor_name + self.package_info_url = package_info_url + self.product_name = product_name + self.publisher = publisher + self.publisher_display_name = publisher_display_name + self.template = template + self.id = None + self.name = None + self.type = None + self.security_family = security_family + self.alert_vendor_name = alert_vendor_name + self.package_info_url = package_info_url + self.product_name = product_name + self.publisher = publisher + self.publisher_display_name = publisher_display_name + self.template = template - def __init__(self, *, state=None, **kwargs) -> None: - super(RegulatoryComplianceStandard, self).__init__(**kwargs) - self.state = state - self.passed_controls = None - self.failed_controls = None - self.skipped_controls = None - self.unsupported_controls = None +class SecuritySolutionsReferenceDataList(msrest.serialization.Model): + """SecuritySolutionsReferenceDataList. -class SecurityContact(Resource): - """Contact details for security issues. + :param value: + :type value: list[~azure.mgmt.security.models.SecuritySolutionsReferenceData] + """ - Variables are only populated by the server, and will be ignored when - sending a request. + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecuritySolutionsReferenceData]'}, + } - All required parameters must be populated in order to send to Azure. + def __init__( + self, + *, + value: Optional[List["SecuritySolutionsReferenceData"]] = None, + **kwargs + ): + super(SecuritySolutionsReferenceDataList, self).__init__(**kwargs) + self.value = value - :ivar id: Resource Id + +class SecuritySubAssessment(Resource): + """Security sub-assessment on a resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param email: Required. The email of this security contact - :type email: str - :param phone: The phone number of this security contact - :type phone: str - :param alert_notifications: Required. Whether to send security alerts - notifications to the security contact. Possible values include: 'On', - 'Off' - :type alert_notifications: str or - ~azure.mgmt.security.models.AlertNotifications - :param alerts_to_admins: Required. Whether to send security alerts - notifications to subscription admins. Possible values include: 'On', 'Off' - :type alerts_to_admins: str or ~azure.mgmt.security.models.AlertsToAdmins + :ivar id_properties_id: Vulnerability ID. + :vartype id_properties_id: str + :ivar display_name: User friendly display name of the sub-assessment. + :vartype display_name: str + :param status: Status of the sub-assessment. + :type status: ~azure.mgmt.security.models.SubAssessmentStatus + :ivar remediation: Information on how to remediate this sub-assessment. + :vartype remediation: str + :ivar impact: Description of the impact of this sub-assessment. + :vartype impact: str + :ivar category: Category of the sub-assessment. + :vartype category: str + :ivar description: Human readable description of the assessment status. + :vartype description: str + :ivar time_generated: The date and time the sub-assessment was generated. + :vartype time_generated: ~datetime.datetime + :param resource_details: Details of the resource that was assessed. + :type resource_details: ~azure.mgmt.security.models.ResourceDetails + :param additional_data: Details of the sub-assessment. + :type additional_data: ~azure.mgmt.security.models.AdditionalData """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'email': {'required': True}, - 'alert_notifications': {'required': True}, - 'alerts_to_admins': {'required': True}, + 'id_properties_id': {'readonly': True}, + 'display_name': {'readonly': True}, + 'remediation': {'readonly': True}, + 'impact': {'readonly': True}, + 'category': {'readonly': True}, + 'description': {'readonly': True}, + 'time_generated': {'readonly': True}, } _attribute_map = { 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'email': {'key': 'properties.email', 'type': 'str'}, - 'phone': {'key': 'properties.phone', 'type': 'str'}, - 'alert_notifications': {'key': 'properties.alertNotifications', 'type': 'str'}, - 'alerts_to_admins': {'key': 'properties.alertsToAdmins', 'type': 'str'}, + 'id_properties_id': {'key': 'properties.id', 'type': 'str'}, + 'display_name': {'key': 'properties.displayName', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'SubAssessmentStatus'}, + 'remediation': {'key': 'properties.remediation', 'type': 'str'}, + 'impact': {'key': 'properties.impact', 'type': 'str'}, + 'category': {'key': 'properties.category', 'type': 'str'}, + 'description': {'key': 'properties.description', 'type': 'str'}, + 'time_generated': {'key': 'properties.timeGenerated', 'type': 'iso-8601'}, + 'resource_details': {'key': 'properties.resourceDetails', 'type': 'ResourceDetails'}, + 'additional_data': {'key': 'properties.additionalData', 'type': 'AdditionalData'}, + } + + def __init__( + self, + *, + status: Optional["SubAssessmentStatus"] = None, + resource_details: Optional["ResourceDetails"] = None, + additional_data: Optional["AdditionalData"] = None, + **kwargs + ): + super(SecuritySubAssessment, self).__init__(**kwargs) + self.id_properties_id = None + self.display_name = None + self.status = status + self.remediation = None + self.impact = None + self.category = None + self.description = None + self.time_generated = None + self.resource_details = resource_details + self.additional_data = additional_data + + +class SecuritySubAssessmentList(msrest.serialization.Model): + """List of security sub-assessments. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.SecuritySubAssessment] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecuritySubAssessment]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, } - def __init__(self, *, email: str, alert_notifications, alerts_to_admins, phone: str=None, **kwargs) -> None: - super(SecurityContact, self).__init__(**kwargs) - self.email = email - self.phone = phone - self.alert_notifications = alert_notifications - self.alerts_to_admins = alerts_to_admins + def __init__( + self, + **kwargs + ): + super(SecuritySubAssessmentList, self).__init__(**kwargs) + self.value = None + self.next_link = None class SecurityTask(Resource): """Security task that we recommend to do in order to strengthen security. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar state: State of the task (Active, Resolved etc.) + :ivar state: State of the task (Active, Resolved etc.). :vartype state: str - :ivar creation_time_utc: The time this task was discovered in UTC - :vartype creation_time_utc: datetime - :param security_task_parameters: - :type security_task_parameters: - ~azure.mgmt.security.models.SecurityTaskParameters - :ivar last_state_change_time_utc: The time this task's details were last - changed in UTC - :vartype last_state_change_time_utc: datetime - :ivar sub_state: Additional data on the state of the task + :ivar creation_time_utc: The time this task was discovered in UTC. + :vartype creation_time_utc: ~datetime.datetime + :param security_task_parameters: Changing set of properties, depending on the task type that is + derived from the name field. + :type security_task_parameters: ~azure.mgmt.security.models.SecurityTaskParameters + :ivar last_state_change_time_utc: The time this task's details were last changed in UTC. + :vartype last_state_change_time_utc: ~datetime.datetime + :ivar sub_state: Additional data on the state of the task. :vartype sub_state: str """ @@ -2995,7 +9683,12 @@ class SecurityTask(Resource): 'sub_state': {'key': 'properties.subState', 'type': 'str'}, } - def __init__(self, *, security_task_parameters=None, **kwargs) -> None: + def __init__( + self, + *, + security_task_parameters: Optional["SecurityTaskParameters"] = None, + **kwargs + ): super(SecurityTask, self).__init__(**kwargs) self.state = None self.creation_time_utc = None @@ -3004,17 +9697,45 @@ def __init__(self, *, security_task_parameters=None, **kwargs) -> None: self.sub_state = None -class SecurityTaskParameters(Model): - """Changing set of properties, depending on the task type that is derived from - the name field. +class SecurityTaskList(msrest.serialization.Model): + """List of security task recommendations. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.SecurityTask] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SecurityTask]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SecurityTaskList, self).__init__(**kwargs) + self.value = None + self.next_link = None + + +class SecurityTaskParameters(msrest.serialization.Model): + """Changing set of properties, depending on the task type that is derived from the name field. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :param additional_properties: Unmatched properties from the message are - deserialized this collection + :param additional_properties: Unmatched properties from the message are deserialized to this + collection. :type additional_properties: dict[str, object] - :ivar name: Name of the task type + :ivar name: Name of the task type. :vartype name: str """ @@ -3027,32 +9748,55 @@ class SecurityTaskParameters(Model): 'name': {'key': 'name', 'type': 'str'}, } - def __init__(self, *, additional_properties=None, **kwargs) -> None: + def __init__( + self, + *, + additional_properties: Optional[Dict[str, object]] = None, + **kwargs + ): super(SecurityTaskParameters, self).__init__(**kwargs) self.additional_properties = additional_properties self.name = None -class SensitivityLabel(Model): +class SensitivityLabel(msrest.serialization.Model): """The sensitivity label. :param display_name: The name of the sensitivity label. :type display_name: str + :param description: The description of the sensitivity label. + :type description: str + :param rank: The rank of the sensitivity label. Possible values include: "None", "Low", + "Medium", "High", "Critical". + :type rank: str or ~azure.mgmt.security.models.Rank :param order: The order of the sensitivity label. - :type order: float + :type order: int :param enabled: Indicates whether the label is enabled or not. :type enabled: bool """ _attribute_map = { 'display_name': {'key': 'displayName', 'type': 'str'}, - 'order': {'key': 'order', 'type': 'float'}, + 'description': {'key': 'description', 'type': 'str'}, + 'rank': {'key': 'rank', 'type': 'str'}, + 'order': {'key': 'order', 'type': 'int'}, 'enabled': {'key': 'enabled', 'type': 'bool'}, } - def __init__(self, *, display_name: str=None, order: float=None, enabled: bool=None, **kwargs) -> None: + def __init__( + self, + *, + display_name: Optional[str] = None, + description: Optional[str] = None, + rank: Optional[Union[str, "Rank"]] = None, + order: Optional[int] = None, + enabled: Optional[bool] = None, + **kwargs + ): super(SensitivityLabel, self).__init__(**kwargs) self.display_name = display_name + self.description = description + self.rank = rank self.order = order self.enabled = enabled @@ -3060,19 +9804,19 @@ def __init__(self, *, display_name: str=None, order: float=None, enabled: bool=N class ServerVulnerabilityAssessment(Resource): """Describes the server vulnerability assessment details on a resource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar provisioning_state: The provisioningState of the vulnerability - assessment capability on the VM. Possible values include: 'Succeeded', - 'Failed', 'Canceled', 'Provisioning', 'Deprovisioning' - :vartype provisioning_state: str or ~azure.mgmt.security.models.enum + :ivar provisioning_state: The provisioningState of the vulnerability assessment capability on + the VM. Possible values include: "Succeeded", "Failed", "Canceled", "Provisioning", + "Deprovisioning". + :vartype provisioning_state: str or + ~azure.mgmt.security.models.ServerVulnerabilityAssessmentPropertiesProvisioningState """ _validation = { @@ -3089,124 +9833,413 @@ class ServerVulnerabilityAssessment(Resource): 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: + def __init__( + self, + **kwargs + ): super(ServerVulnerabilityAssessment, self).__init__(**kwargs) self.provisioning_state = None -class ServerVulnerabilityAssessmentsList(Model): +class ServerVulnerabilityAssessmentsList(msrest.serialization.Model): """List of server vulnerability assessments. :param value: - :type value: - list[~azure.mgmt.security.models.ServerVulnerabilityAssessment] + :type value: list[~azure.mgmt.security.models.ServerVulnerabilityAssessment] """ _attribute_map = { 'value': {'key': 'value', 'type': '[ServerVulnerabilityAssessment]'}, } - def __init__(self, *, value=None, **kwargs) -> None: + def __init__( + self, + *, + value: Optional[List["ServerVulnerabilityAssessment"]] = None, + **kwargs + ): super(ServerVulnerabilityAssessmentsList, self).__init__(**kwargs) self.value = value -class TagsResource(Model): - """A container holding only the Tags for a resource, allowing the user to - update the tags. +class ServerVulnerabilityProperties(AdditionalData): + """Additional context fields for server vulnerability assessment. - :param tags: Resource tags - :type tags: dict[str, str] + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType + :ivar type: Vulnerability Type. e.g: Vulnerability, Potential Vulnerability, Information + Gathered. + :vartype type: str + :ivar cvss: Dictionary from cvss version to cvss details object. + :vartype cvss: dict[str, ~azure.mgmt.security.models.CVSS] + :ivar patchable: Indicates whether a patch is available or not. + :vartype patchable: bool + :ivar cve: List of CVEs. + :vartype cve: list[~azure.mgmt.security.models.CVE] + :ivar threat: Threat name. + :vartype threat: str + :ivar published_time: Published time. + :vartype published_time: ~datetime.datetime + :ivar vendor_references: + :vartype vendor_references: list[~azure.mgmt.security.models.VendorReference] + """ + + _validation = { + 'assessed_resource_type': {'required': True}, + 'type': {'readonly': True}, + 'cvss': {'readonly': True}, + 'patchable': {'readonly': True}, + 'cve': {'readonly': True}, + 'threat': {'readonly': True}, + 'published_time': {'readonly': True}, + 'vendor_references': {'readonly': True}, + } + + _attribute_map = { + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'cvss': {'key': 'cvss', 'type': '{CVSS}'}, + 'patchable': {'key': 'patchable', 'type': 'bool'}, + 'cve': {'key': 'cve', 'type': '[CVE]'}, + 'threat': {'key': 'threat', 'type': 'str'}, + 'published_time': {'key': 'publishedTime', 'type': 'iso-8601'}, + 'vendor_references': {'key': 'vendorReferences', 'type': '[VendorReference]'}, + } + + def __init__( + self, + **kwargs + ): + super(ServerVulnerabilityProperties, self).__init__(**kwargs) + self.assessed_resource_type = 'ServerVulnerabilityAssessment' # type: str + self.type = None + self.cvss = None + self.patchable = None + self.cve = None + self.threat = None + self.published_time = None + self.vendor_references = None + + +class ServicePrincipalProperties(msrest.serialization.Model): + """Details of the service principal. + + :param application_id: Application id of service principal. + :type application_id: str + :param secret: A secret string that the application uses to prove its identity, also can be + referred to as application password (write only). + :type secret: str """ _attribute_map = { - 'tags': {'key': 'tags', 'type': '{str}'}, + 'application_id': {'key': 'applicationId', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, } - def __init__(self, *, tags=None, **kwargs) -> None: - super(TagsResource, self).__init__(**kwargs) - self.tags = tags + def __init__( + self, + *, + application_id: Optional[str] = None, + secret: Optional[str] = None, + **kwargs + ): + super(ServicePrincipalProperties, self).__init__(**kwargs) + self.application_id = application_id + self.secret = secret -class TopologyResource(Model): - """TopologyResource. +class Setting(SettingResource): + """Represents a security setting in Azure Security Center. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :ivar location: Location where the resource is stored - :vartype location: str - :ivar calculated_date_time: The UTC time on which the topology was - calculated - :vartype calculated_date_time: datetime - :ivar topology_resources: Azure resources which are part of this topology - resource - :vartype topology_resources: - list[~azure.mgmt.security.models.TopologySingleResource] + :param kind: Required. the kind of the settings string (DataExportSettings).Constant filled by + server. Possible values include: "DataExportSettings", "AlertSuppressionSetting". + :type kind: str or ~azure.mgmt.security.models.SettingKind """ _validation = { 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, + 'kind': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kind': {'key': 'kind', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Setting, self).__init__(**kwargs) + self.kind = 'Setting' # type: str + + +class SettingsList(msrest.serialization.Model): + """Subscription settings list. + + Variables are only populated by the server, and will be ignored when sending a request. + + :param value: The settings list. + :type value: list[~azure.mgmt.security.models.SettingResource] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[SettingResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["SettingResource"]] = None, + **kwargs + ): + super(SettingsList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class SqlServerVulnerabilityProperties(AdditionalData): + """Details of the resource that was assessed. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param assessed_resource_type: Required. Sub-assessment resource type.Constant filled by + server. Possible values include: "SqlServerVulnerability", "ContainerRegistryVulnerability", + "ServerVulnerability". + :type assessed_resource_type: str or ~azure.mgmt.security.models.AssessedResourceType + :ivar type: The resource type the sub assessment refers to in its resource details. + :vartype type: str + :ivar query: The T-SQL query that runs on your SQL database to perform the particular check. + :vartype query: str + """ + + _validation = { + 'assessed_resource_type': {'required': True}, + 'type': {'readonly': True}, + 'query': {'readonly': True}, + } + + _attribute_map = { + 'assessed_resource_type': {'key': 'assessedResourceType', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'query': {'key': 'query', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SqlServerVulnerabilityProperties, self).__init__(**kwargs) + self.assessed_resource_type = 'SqlServerVulnerability' # type: str + self.type = None + self.query = None + + +class SubAssessmentStatus(msrest.serialization.Model): + """Status of the sub-assessment. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar code: Programmatic code for the status of the assessment. Possible values include: + "Healthy", "Unhealthy", "NotApplicable". + :vartype code: str or ~azure.mgmt.security.models.SubAssessmentStatusCode + :ivar cause: Programmatic code for the cause of the assessment status. + :vartype cause: str + :ivar description: Human readable description of the assessment status. + :vartype description: str + :ivar severity: The sub-assessment severity level. Possible values include: "Low", "Medium", + "High". + :vartype severity: str or ~azure.mgmt.security.models.Severity + """ + + _validation = { + 'code': {'readonly': True}, + 'cause': {'readonly': True}, + 'description': {'readonly': True}, + 'severity': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'cause': {'key': 'cause', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'severity': {'key': 'severity', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(SubAssessmentStatus, self).__init__(**kwargs) + self.code = None + self.cause = None + self.description = None + self.severity = None + + +class SuppressionAlertsScope(msrest.serialization.Model): + """SuppressionAlertsScope. + + All required parameters must be populated in order to send to Azure. + + :param all_of: Required. All the conditions inside need to be true in order to suppress the + alert. + :type all_of: list[~azure.mgmt.security.models.ScopeElement] + """ + + _validation = { + 'all_of': {'required': True}, + } + + _attribute_map = { + 'all_of': {'key': 'allOf', 'type': '[ScopeElement]'}, + } + + def __init__( + self, + *, + all_of: List["ScopeElement"], + **kwargs + ): + super(SuppressionAlertsScope, self).__init__(**kwargs) + self.all_of = all_of + + +class TopologyList(msrest.serialization.Model): + """TopologyList. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: + :vartype value: list[~azure.mgmt.security.models.TopologyResource] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[TopologyResource]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TopologyList, self).__init__(**kwargs) + self.value = None + self.next_link = None + + +class TopologyResource(Resource, Location): + """TopologyResource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar location: Location where the resource is stored. + :vartype location: str + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar calculated_date_time: The UTC time on which the topology was calculated. + :vartype calculated_date_time: ~datetime.datetime + :ivar topology_resources: Azure resources which are part of this topology resource. + :vartype topology_resources: list[~azure.mgmt.security.models.TopologySingleResource] + """ + + _validation = { 'location': {'readonly': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, 'calculated_date_time': {'readonly': True}, 'topology_resources': {'readonly': True}, } _attribute_map = { + 'location': {'key': 'location', 'type': 'str'}, 'id': {'key': 'id', 'type': 'str'}, 'name': {'key': 'name', 'type': 'str'}, 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, 'calculated_date_time': {'key': 'properties.calculatedDateTime', 'type': 'iso-8601'}, 'topology_resources': {'key': 'properties.topologyResources', 'type': '[TopologySingleResource]'}, } - def __init__(self, **kwargs) -> None: + def __init__( + self, + **kwargs + ): super(TopologyResource, self).__init__(**kwargs) + self.location = None + self.calculated_date_time = None + self.topology_resources = None self.id = None self.name = None self.type = None - self.location = None self.calculated_date_time = None self.topology_resources = None -class TopologySingleResource(Model): +class TopologySingleResource(msrest.serialization.Model): """TopologySingleResource. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar resource_id: Azure resource id + :ivar resource_id: Azure resource id. :vartype resource_id: str - :ivar severity: The security severity of the resource + :ivar severity: The security severity of the resource. :vartype severity: str - :ivar recommendations_exist: Indicates if the resource has security - recommendations + :ivar recommendations_exist: Indicates if the resource has security recommendations. :vartype recommendations_exist: bool - :ivar network_zones: Indicates the resource connectivity level to the - Internet (InternetFacing, Internal ,etc.) + :ivar network_zones: Indicates the resource connectivity level to the Internet (InternetFacing, + Internal ,etc.). :vartype network_zones: str - :ivar topology_score: Score of the resource based on its security severity + :ivar topology_score: Score of the resource based on its security severity. :vartype topology_score: int - :ivar location: The location of this resource + :ivar location: The location of this resource. :vartype location: str - :ivar parents: Azure resources connected to this resource which are in - higher level in the topology view - :vartype parents: - list[~azure.mgmt.security.models.TopologySingleResourceParent] - :ivar children: Azure resources connected to this resource which are in - lower level in the topology view - :vartype children: - list[~azure.mgmt.security.models.TopologySingleResourceChild] + :ivar parents: Azure resources connected to this resource which are in higher level in the + topology view. + :vartype parents: list[~azure.mgmt.security.models.TopologySingleResourceParent] + :ivar children: Azure resources connected to this resource which are in lower level in the + topology view. + :vartype children: list[~azure.mgmt.security.models.TopologySingleResourceChild] """ _validation = { @@ -3231,7 +10264,10 @@ class TopologySingleResource(Model): 'children': {'key': 'children', 'type': '[TopologySingleResourceChild]'}, } - def __init__(self, **kwargs) -> None: + def __init__( + self, + **kwargs + ): super(TopologySingleResource, self).__init__(**kwargs) self.resource_id = None self.severity = None @@ -3243,14 +10279,12 @@ def __init__(self, **kwargs) -> None: self.children = None -class TopologySingleResourceChild(Model): +class TopologySingleResourceChild(msrest.serialization.Model): """TopologySingleResourceChild. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar resource_id: Azure resource id which serves as child resource in - topology view + :ivar resource_id: Azure resource id which serves as child resource in topology view. :vartype resource_id: str """ @@ -3262,19 +10296,20 @@ class TopologySingleResourceChild(Model): 'resource_id': {'key': 'resourceId', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: + def __init__( + self, + **kwargs + ): super(TopologySingleResourceChild, self).__init__(**kwargs) self.resource_id = None -class TopologySingleResourceParent(Model): +class TopologySingleResourceParent(msrest.serialization.Model): """TopologySingleResourceParent. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - :ivar resource_id: Azure resource id which serves as parent resource in - topology view + :ivar resource_id: Azure resource id which serves as parent resource in topology view. :vartype resource_id: str """ @@ -3286,47 +10321,205 @@ class TopologySingleResourceParent(Model): 'resource_id': {'key': 'resourceId', 'type': 'str'}, } - def __init__(self, **kwargs) -> None: + def __init__( + self, + **kwargs + ): super(TopologySingleResourceParent, self).__init__(**kwargs) self.resource_id = None +class TwinUpdatesNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of twin updates is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(TwinUpdatesNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'TwinUpdatesNotInAllowedRange' # type: str + self.rule_type = 'TwinUpdatesNotInAllowedRange' # type: str + + +class UnauthorizedOperationsNotInAllowedRange(TimeWindowCustomAlertRule): + """Number of unauthorized operations is not in allowed range. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :ivar display_name: The display name of the custom alert. + :vartype display_name: str + :ivar description: The description of the custom alert. + :vartype description: str + :param is_enabled: Required. Status of the custom alert. + :type is_enabled: bool + :param rule_type: Required. The type of the custom alert rule.Constant filled by server. + :type rule_type: str + :param min_threshold: Required. The minimum threshold. + :type min_threshold: int + :param max_threshold: Required. The maximum threshold. + :type max_threshold: int + :param time_window_size: Required. The time window size in iso8601 format. + :type time_window_size: ~datetime.timedelta + """ + + _validation = { + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'display_name': {'readonly': True}, + 'description': {'readonly': True}, + 'is_enabled': {'required': True}, + 'rule_type': {'required': True}, + 'min_threshold': {'required': True}, + 'max_threshold': {'required': True}, + 'time_window_size': {'required': True}, + } + + _attribute_map = { + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'display_name': {'key': 'displayName', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + 'is_enabled': {'key': 'isEnabled', 'type': 'bool'}, + 'rule_type': {'key': 'ruleType', 'type': 'str'}, + 'min_threshold': {'key': 'minThreshold', 'type': 'int'}, + 'max_threshold': {'key': 'maxThreshold', 'type': 'int'}, + 'time_window_size': {'key': 'timeWindowSize', 'type': 'duration'}, + } + + def __init__( + self, + *, + is_enabled: bool, + is_enabled: bool, + min_threshold: int, + max_threshold: int, + time_window_size: datetime.timedelta, + **kwargs + ): + super(UnauthorizedOperationsNotInAllowedRange, self).__init__(is_enabled=is_enabled, is_enabled=is_enabled, min_threshold=min_threshold, max_threshold=max_threshold, time_window_size=time_window_size, **kwargs) + self.rule_type = 'UnauthorizedOperationsNotInAllowedRange' # type: str + self.rule_type = 'UnauthorizedOperationsNotInAllowedRange' # type: str + + class UpdateIotSecuritySolutionData(TagsResource): """UpdateIotSecuritySolutionData. - :param tags: Resource tags + :param tags: A set of tags. Resource tags. :type tags: dict[str, str] - :param user_defined_resources: - :type user_defined_resources: - ~azure.mgmt.security.models.UserDefinedResourcesProperties - :param recommendations_configuration: + :param user_defined_resources: Properties of the IoT Security solution's user defined + resources. + :type user_defined_resources: ~azure.mgmt.security.models.UserDefinedResourcesProperties + :param recommendations_configuration: List of the configuration status for each recommendation + type. :type recommendations_configuration: list[~azure.mgmt.security.models.RecommendationConfigurationProperties] """ _attribute_map = { 'tags': {'key': 'tags', 'type': '{str}'}, - 'user_defined_resources': {'key': 'userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, - 'recommendations_configuration': {'key': 'recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, + 'user_defined_resources': {'key': 'properties.userDefinedResources', 'type': 'UserDefinedResourcesProperties'}, + 'recommendations_configuration': {'key': 'properties.recommendationsConfiguration', 'type': '[RecommendationConfigurationProperties]'}, } - def __init__(self, *, tags=None, user_defined_resources=None, recommendations_configuration=None, **kwargs) -> None: + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + user_defined_resources: Optional["UserDefinedResourcesProperties"] = None, + recommendations_configuration: Optional[List["RecommendationConfigurationProperties"]] = None, + **kwargs + ): super(UpdateIotSecuritySolutionData, self).__init__(tags=tags, **kwargs) self.user_defined_resources = user_defined_resources self.recommendations_configuration = recommendations_configuration -class UserDefinedResourcesProperties(Model): - """Properties of the solution's user defined resources. +class UserDefinedResourcesProperties(msrest.serialization.Model): + """Properties of the IoT Security solution's user defined resources. All required parameters must be populated in order to send to Azure. - :param query: Required. Azure Resource Graph query which represents the - security solution's user defined resources. Required to start with "where - type != "Microsoft.Devices/IotHubs"" + :param query: Required. Azure Resource Graph query which represents the security solution's + user defined resources. Required to start with "where type != "Microsoft.Devices/IotHubs"". :type query: str - :param query_subscriptions: Required. List of Azure subscription ids on - which the user defined resources query should be executed. + :param query_subscriptions: Required. List of Azure subscription ids on which the user defined + resources query should be executed. :type query_subscriptions: list[str] """ @@ -3340,21 +10533,26 @@ class UserDefinedResourcesProperties(Model): 'query_subscriptions': {'key': 'querySubscriptions', 'type': '[str]'}, } - def __init__(self, *, query: str, query_subscriptions, **kwargs) -> None: + def __init__( + self, + *, + query: str, + query_subscriptions: List[str], + **kwargs + ): super(UserDefinedResourcesProperties, self).__init__(**kwargs) self.query = query self.query_subscriptions = query_subscriptions -class UserRecommendation(Model): +class UserRecommendation(msrest.serialization.Model): """Represents a user that is recommended to be allowed for a certain rule. - :param username: Represents a user that is recommended to be allowed for a - certain rule + :param username: Represents a user that is recommended to be allowed for a certain rule. :type username: str - :param recommendation_action: Possible values include: 'Recommended', - 'Add', 'Remove' - :type recommendation_action: str or ~azure.mgmt.security.models.enum + :param recommendation_action: The recommendation action of the machine or rule. Possible values + include: "Recommended", "Add", "Remove". + :type recommendation_action: str or ~azure.mgmt.security.models.RecommendationAction """ _attribute_map = { @@ -3362,58 +10560,102 @@ class UserRecommendation(Model): 'recommendation_action': {'key': 'recommendationAction', 'type': 'str'}, } - def __init__(self, *, username: str=None, recommendation_action=None, **kwargs) -> None: + def __init__( + self, + *, + username: Optional[str] = None, + recommendation_action: Optional[Union[str, "RecommendationAction"]] = None, + **kwargs + ): super(UserRecommendation, self).__init__(**kwargs) self.username = username self.recommendation_action = recommendation_action -class VmRecommendation(Model): - """Represents a machine that is part of a VM/server group. +class VendorReference(msrest.serialization.Model): + """Vendor reference. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar title: Link title. + :vartype title: str + :ivar link: Link url. + :vartype link: str + """ + + _validation = { + 'title': {'readonly': True}, + 'link': {'readonly': True}, + } + + _attribute_map = { + 'title': {'key': 'title', 'type': 'str'}, + 'link': {'key': 'link', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(VendorReference, self).__init__(**kwargs) + self.title = None + self.link = None + + +class VmRecommendation(msrest.serialization.Model): + """Represents a machine that is part of a machine group. - :param configuration_status: Possible values include: 'Configured', - 'NotConfigured', 'InProgress', 'Failed', 'NoStatus' - :type configuration_status: str or ~azure.mgmt.security.models.enum - :param recommendation_action: Possible values include: 'Recommended', - 'Add', 'Remove' - :type recommendation_action: str or ~azure.mgmt.security.models.enum - :param resource_id: + :param configuration_status: The configuration status of the machines group or machine or rule. + Possible values include: "Configured", "NotConfigured", "InProgress", "Failed", "NoStatus". + :type configuration_status: str or ~azure.mgmt.security.models.ConfigurationStatus + :param recommendation_action: The recommendation action of the machine or rule. Possible values + include: "Recommended", "Add", "Remove". + :type recommendation_action: str or ~azure.mgmt.security.models.RecommendationAction + :param resource_id: The full resource id of the machine. :type resource_id: str + :param enforcement_support: The machine supportability of Enforce feature. Possible values + include: "Supported", "NotSupported", "Unknown". + :type enforcement_support: str or ~azure.mgmt.security.models.EnforcementSupport """ _attribute_map = { 'configuration_status': {'key': 'configurationStatus', 'type': 'str'}, 'recommendation_action': {'key': 'recommendationAction', 'type': 'str'}, 'resource_id': {'key': 'resourceId', 'type': 'str'}, - } - - def __init__(self, *, configuration_status=None, recommendation_action=None, resource_id: str=None, **kwargs) -> None: + 'enforcement_support': {'key': 'enforcementSupport', 'type': 'str'}, + } + + def __init__( + self, + *, + configuration_status: Optional[Union[str, "ConfigurationStatus"]] = None, + recommendation_action: Optional[Union[str, "RecommendationAction"]] = None, + resource_id: Optional[str] = None, + enforcement_support: Optional[Union[str, "EnforcementSupport"]] = None, + **kwargs + ): super(VmRecommendation, self).__init__(**kwargs) self.configuration_status = configuration_status self.recommendation_action = recommendation_action self.resource_id = resource_id + self.enforcement_support = enforcement_support class WorkspaceSetting(Resource): """Configures where to store the OMS agent data for workspaces under a scope. - Variables are only populated by the server, and will be ignored when - sending a request. + Variables are only populated by the server, and will be ignored when sending a request. - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id + :ivar id: Resource Id. :vartype id: str - :ivar name: Resource name + :ivar name: Resource name. :vartype name: str - :ivar type: Resource type + :ivar type: Resource type. :vartype type: str - :param workspace_id: Required. The full Azure ID of the workspace to save - the data in + :param workspace_id: The full Azure ID of the workspace to save the data in. :type workspace_id: str - :param scope: Required. All the VMs in this scope will send their security - data to the mentioned workspace unless overridden by a setting with more - specific scope + :param scope: All the VMs in this scope will send their security data to the mentioned + workspace unless overridden by a setting with more specific scope. :type scope: str """ @@ -3421,8 +10663,6 @@ class WorkspaceSetting(Resource): 'id': {'readonly': True}, 'name': {'readonly': True}, 'type': {'readonly': True}, - 'workspace_id': {'required': True}, - 'scope': {'required': True}, } _attribute_map = { @@ -3433,7 +10673,47 @@ class WorkspaceSetting(Resource): 'scope': {'key': 'properties.scope', 'type': 'str'}, } - def __init__(self, *, workspace_id: str, scope: str, **kwargs) -> None: + def __init__( + self, + *, + workspace_id: Optional[str] = None, + scope: Optional[str] = None, + **kwargs + ): super(WorkspaceSetting, self).__init__(**kwargs) self.workspace_id = workspace_id self.scope = scope + + +class WorkspaceSettingList(msrest.serialization.Model): + """List of workspace settings response. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. List of workspace settings. + :type value: list[~azure.mgmt.security.models.WorkspaceSetting] + :ivar next_link: The URI to fetch the next page. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[WorkspaceSetting]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["WorkspaceSetting"], + **kwargs + ): + super(WorkspaceSettingList, self).__init__(**kwargs) + self.value = value + self.next_link = None diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_paged_models.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_paged_models.py deleted file mode 100644 index 362a777bdc8c..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_paged_models.py +++ /dev/null @@ -1,300 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -from msrest.paging import Paged - - -class ComplianceResultPaged(Paged): - """ - A paging container for iterating over a list of :class:`ComplianceResult ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[ComplianceResult]'} - } - - def __init__(self, *args, **kwargs): - - super(ComplianceResultPaged, self).__init__(*args, **kwargs) -class AlertPaged(Paged): - """ - A paging container for iterating over a list of :class:`Alert ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[Alert]'} - } - - def __init__(self, *args, **kwargs): - - super(AlertPaged, self).__init__(*args, **kwargs) -class SettingPaged(Paged): - """ - A paging container for iterating over a list of :class:`Setting ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[Setting]'} - } - - def __init__(self, *args, **kwargs): - - super(SettingPaged, self).__init__(*args, **kwargs) -class IoTSecuritySolutionModelPaged(Paged): - """ - A paging container for iterating over a list of :class:`IoTSecuritySolutionModel ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[IoTSecuritySolutionModel]'} - } - - def __init__(self, *args, **kwargs): - - super(IoTSecuritySolutionModelPaged, self).__init__(*args, **kwargs) -class IoTSecurityAggregatedAlertPaged(Paged): - """ - A paging container for iterating over a list of :class:`IoTSecurityAggregatedAlert ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[IoTSecurityAggregatedAlert]'} - } - - def __init__(self, *args, **kwargs): - - super(IoTSecurityAggregatedAlertPaged, self).__init__(*args, **kwargs) -class IoTSecurityAggregatedRecommendationPaged(Paged): - """ - A paging container for iterating over a list of :class:`IoTSecurityAggregatedRecommendation ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[IoTSecurityAggregatedRecommendation]'} - } - - def __init__(self, *args, **kwargs): - - super(IoTSecurityAggregatedRecommendationPaged, self).__init__(*args, **kwargs) -class AllowedConnectionsResourcePaged(Paged): - """ - A paging container for iterating over a list of :class:`AllowedConnectionsResource ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[AllowedConnectionsResource]'} - } - - def __init__(self, *args, **kwargs): - - super(AllowedConnectionsResourcePaged, self).__init__(*args, **kwargs) -class DiscoveredSecuritySolutionPaged(Paged): - """ - A paging container for iterating over a list of :class:`DiscoveredSecuritySolution ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[DiscoveredSecuritySolution]'} - } - - def __init__(self, *args, **kwargs): - - super(DiscoveredSecuritySolutionPaged, self).__init__(*args, **kwargs) -class ExternalSecuritySolutionPaged(Paged): - """ - A paging container for iterating over a list of :class:`ExternalSecuritySolution ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[ExternalSecuritySolution]'} - } - - def __init__(self, *args, **kwargs): - - super(ExternalSecuritySolutionPaged, self).__init__(*args, **kwargs) -class JitNetworkAccessPolicyPaged(Paged): - """ - A paging container for iterating over a list of :class:`JitNetworkAccessPolicy ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[JitNetworkAccessPolicy]'} - } - - def __init__(self, *args, **kwargs): - - super(JitNetworkAccessPolicyPaged, self).__init__(*args, **kwargs) -class AscLocationPaged(Paged): - """ - A paging container for iterating over a list of :class:`AscLocation ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[AscLocation]'} - } - - def __init__(self, *args, **kwargs): - - super(AscLocationPaged, self).__init__(*args, **kwargs) -class OperationPaged(Paged): - """ - A paging container for iterating over a list of :class:`Operation ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[Operation]'} - } - - def __init__(self, *args, **kwargs): - - super(OperationPaged, self).__init__(*args, **kwargs) -class SecurityTaskPaged(Paged): - """ - A paging container for iterating over a list of :class:`SecurityTask ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[SecurityTask]'} - } - - def __init__(self, *args, **kwargs): - - super(SecurityTaskPaged, self).__init__(*args, **kwargs) -class TopologyResourcePaged(Paged): - """ - A paging container for iterating over a list of :class:`TopologyResource ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[TopologyResource]'} - } - - def __init__(self, *args, **kwargs): - - super(TopologyResourcePaged, self).__init__(*args, **kwargs) -class AutoProvisioningSettingPaged(Paged): - """ - A paging container for iterating over a list of :class:`AutoProvisioningSetting ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[AutoProvisioningSetting]'} - } - - def __init__(self, *args, **kwargs): - - super(AutoProvisioningSettingPaged, self).__init__(*args, **kwargs) -class CompliancePaged(Paged): - """ - A paging container for iterating over a list of :class:`Compliance ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[Compliance]'} - } - - def __init__(self, *args, **kwargs): - - super(CompliancePaged, self).__init__(*args, **kwargs) -class InformationProtectionPolicyPaged(Paged): - """ - A paging container for iterating over a list of :class:`InformationProtectionPolicy ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[InformationProtectionPolicy]'} - } - - def __init__(self, *args, **kwargs): - - super(InformationProtectionPolicyPaged, self).__init__(*args, **kwargs) -class SecurityContactPaged(Paged): - """ - A paging container for iterating over a list of :class:`SecurityContact ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[SecurityContact]'} - } - - def __init__(self, *args, **kwargs): - - super(SecurityContactPaged, self).__init__(*args, **kwargs) -class WorkspaceSettingPaged(Paged): - """ - A paging container for iterating over a list of :class:`WorkspaceSetting ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[WorkspaceSetting]'} - } - - def __init__(self, *args, **kwargs): - - super(WorkspaceSettingPaged, self).__init__(*args, **kwargs) -class RegulatoryComplianceStandardPaged(Paged): - """ - A paging container for iterating over a list of :class:`RegulatoryComplianceStandard ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[RegulatoryComplianceStandard]'} - } - - def __init__(self, *args, **kwargs): - - super(RegulatoryComplianceStandardPaged, self).__init__(*args, **kwargs) -class RegulatoryComplianceControlPaged(Paged): - """ - A paging container for iterating over a list of :class:`RegulatoryComplianceControl ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[RegulatoryComplianceControl]'} - } - - def __init__(self, *args, **kwargs): - - super(RegulatoryComplianceControlPaged, self).__init__(*args, **kwargs) -class RegulatoryComplianceAssessmentPaged(Paged): - """ - A paging container for iterating over a list of :class:`RegulatoryComplianceAssessment ` object - """ - - _attribute_map = { - 'next_link': {'key': 'nextLink', 'type': 'str'}, - 'current_page': {'key': 'value', 'type': '[RegulatoryComplianceAssessment]'} - } - - def __init__(self, *args, **kwargs): - - super(RegulatoryComplianceAssessmentPaged, self).__init__(*args, **kwargs) diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_security_center_enums.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_security_center_enums.py index 09cf991ceb06..010c6342ea89 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_security_center_enums.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/models/_security_center_enums.py @@ -1,156 +1,685 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum +from enum import Enum, EnumMeta +from six import with_metaclass + +class _CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) + + +class AadConnectivityStateEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The connectivity state of the external AAD solution + """ + + DISCOVERED = "Discovered" + NOT_LICENSED = "NotLicensed" + CONNECTED = "Connected" + +class ActionType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the action that will be triggered by the Automation + """ + + LOGIC_APP = "LogicApp" + EVENT_HUB = "EventHub" + WORKSPACE = "Workspace" + +class AdaptiveApplicationControlIssue(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """An alert that machines within a group can have + """ + + VIOLATIONS_AUDITED = "ViolationsAudited" + VIOLATIONS_BLOCKED = "ViolationsBlocked" + MSI_AND_SCRIPT_VIOLATIONS_AUDITED = "MsiAndScriptViolationsAudited" + MSI_AND_SCRIPT_VIOLATIONS_BLOCKED = "MsiAndScriptViolationsBlocked" + EXECUTABLE_VIOLATIONS_AUDITED = "ExecutableViolationsAudited" + RULES_VIOLATED_MANUALLY = "RulesViolatedManually" + +class AlertIntent(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Kill chain related intent behind the alert. Could contain multiple enum values (separated by + commas) + """ + + UNKNOWN = "Unknown" + PRE_ATTACK = "PreAttack" + INITIAL_ACCESS = "InitialAccess" + PERSISTENCE = "Persistence" + PRIVILEGE_ESCALATION = "PrivilegeEscalation" + DEFENSE_EVASION = "DefenseEvasion" + CREDENTIAL_ACCESS = "CredentialAccess" + DISCOVERY = "Discovery" + LATERAL_MOVEMENT = "LateralMovement" + EXECUTION = "Execution" + COLLECTION = "Collection" + EXFILTRATION = "Exfiltration" + COMMAND_AND_CONTROL = "CommandAndControl" + IMPACT = "Impact" + PROBING = "Probing" + EXPLOITATION = "Exploitation" + +class AlertNotifications(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Whether to send security alerts notifications to the security contact + """ + + ON = "On" #: Get notifications on new alerts. + OFF = "Off" #: Don't get notifications on new alerts. + +class AlertSeverity(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The severity of the alert + """ + + INFORMATIONAL = "Informational" + LOW = "Low" + MEDIUM = "Medium" + HIGH = "High" + +class AlertStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The life cycle status of the alert. + """ + + ACTIVE = "Active" #: An alert which doesn't specify a value is assigned the status 'Active'. + RESOLVED = "Resolved" #: Alert closed after handling. + DISMISSED = "Dismissed" #: Alert dismissed as false positive. + +class AlertsToAdmins(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Whether to send security alerts notifications to subscription admins + """ + + ON = "On" #: Send notification on new alerts to the subscription's admins. + OFF = "Off" #: Don't send notification on new alerts to the subscription's admins. + +class AssessedResourceType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Sub-assessment resource type + """ + + SQL_SERVER_VULNERABILITY = "SqlServerVulnerability" + CONTAINER_REGISTRY_VULNERABILITY = "ContainerRegistryVulnerability" + SERVER_VULNERABILITY = "ServerVulnerability" + +class AssessmentStatusCode(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Programmatic code for the status of the assessment + """ + + HEALTHY = "Healthy" #: The resource is healthy. + UNHEALTHY = "Unhealthy" #: The resource has a security issue that needs to be addressed. + NOT_APPLICABLE = "NotApplicable" #: Assessment for this resource did not happen. + +class AssessmentType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """BuiltIn if the assessment based on built-in Azure Policy definition, Custom if the assessment + based on custom Azure Policy definition + """ + + BUILT_IN = "BuiltIn" #: Azure Security Center managed assessments. + CUSTOM_POLICY = "CustomPolicy" #: User defined policies that are automatically ingested from Azure Policy to Azure Security Center. + CUSTOMER_MANAGED = "CustomerManaged" #: User assessments pushed directly by the user or other third party to Azure Security Center. + VERIFIED_PARTNER = "VerifiedPartner" #: An assessment that was created by a verified 3rd party if the user connected it to ASC. + +class AuthenticationProvisioningState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """State of the multi-cloud connector + """ + + VALID = "Valid" #: Valid connector. + INVALID = "Invalid" #: Invalid connector. + EXPIRED = "Expired" #: the connection is expired. + INCORRECT_POLICY = "IncorrectPolicy" #: Incorrect policy of the connector. + +class AuthenticationType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Connect to your cloud account, for AWS use either account credentials or role-based + authentication. For GCP use account organization credentials. + """ + + AWS_CREDS = "awsCreds" #: AWS cloud account connector user credentials authentication. + AWS_ASSUME_ROLE = "awsAssumeRole" #: AWS account connector assume role authentication. + GCP_CREDENTIALS = "gcpCredentials" #: GCP account connector service to service authentication. + +class AuthorizationState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Authorized state of the device. + """ + + AUTHORIZED = "Authorized" + UNAUTHORIZED = "Unauthorized" +class AutoProvision(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Describes what kind of security agent provisioning action to take + """ -class ResourceStatus(str, Enum): + ON = "On" #: Install missing security agent on VMs automatically. + OFF = "Off" #: Do not install security agent on the VMs automatically. - healthy = "Healthy" #: This assessment on the resource is healthy - not_applicable = "NotApplicable" #: This assessment is not applicable to this resource - off_by_policy = "OffByPolicy" #: This assessment is turned off by policy on this subscription - not_healthy = "NotHealthy" #: This assessment on the resource is not healthy +class Category(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The category of resource that is at risk when the assessment is unhealthy + """ + COMPUTE = "Compute" + NETWORKING = "Networking" + DATA = "Data" + IDENTITY_AND_ACCESS = "IdentityAndAccess" + IO_T = "IoT" -class PricingTier(str, Enum): +class ConfigurationStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The configuration status of the machines group or machine or rule + """ - free = "Free" #: Get free Azure security center experience with basic security features - standard = "Standard" #: Get the standard Azure security center experience with advanced security features + CONFIGURED = "Configured" + NOT_CONFIGURED = "NotConfigured" + IN_PROGRESS = "InProgress" + FAILED = "Failed" + NO_STATUS = "NoStatus" +class ConnectionType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): -class ReportedSeverity(str, Enum): + INTERNAL = "Internal" + EXTERNAL = "External" - informational = "Informational" - low = "Low" - medium = "Medium" - high = "High" +class ControlType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of security control (for example, BuiltIn) + """ + BUILT_IN = "BuiltIn" #: Azure Security Center managed assessments. + CUSTOM = "Custom" #: Non Azure Security Center managed assessments. -class SettingKind(str, Enum): +class DataSource(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): - data_export_setting = "DataExportSetting" - alert_suppression_setting = "AlertSuppressionSetting" + TWIN_DATA = "TwinData" #: Devices twin data. +class DeviceCriticality(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Device criticality. + """ -class SecuritySolutionStatus(str, Enum): + IMPORTANT = "Important" + STANDARD = "Standard" - enabled = "Enabled" - disabled = "Disabled" +class DeviceStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Device status. + """ + ACTIVE = "Active" + REMOVED = "Removed" -class ExportData(str, Enum): +class Direction(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The rule's direction + """ - raw_events = "RawEvents" #: Agent raw events + INBOUND = "Inbound" + OUTBOUND = "Outbound" +class EnforcementMode(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The application control policy enforcement/protection mode of the machine group + """ -class DataSource(str, Enum): + AUDIT = "Audit" + ENFORCE = "Enforce" + NONE = "None" - twin_data = "TwinData" #: Devices twin data +class EnforcementSupport(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The machine supportability of Enforce feature + """ + SUPPORTED = "Supported" + NOT_SUPPORTED = "NotSupported" + UNKNOWN = "Unknown" -class RecommendationType(str, Enum): +class Enum15(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): - io_t_acrauthentication = "IoT_ACRAuthentication" #: Authentication schema used for pull an edge module from an ACR repository does not use Service Principal Authentication. - io_t_agent_sends_unutilized_messages = "IoT_AgentSendsUnutilizedMessages" #: IoT agent message size capacity is currently underutilized, causing an increase in the number of sent messages. Adjust message intervals for better utilization. - io_t_baseline = "IoT_Baseline" #: Identified security related system configuration issues. - io_t_edge_hub_mem_optimize = "IoT_EdgeHubMemOptimize" #: You can optimize Edge Hub memory usage by turning off protocol heads for any protocols not used by Edge modules in your solution. - io_t_edge_logging_options = "IoT_EdgeLoggingOptions" #: Logging is disabled for this edge module. - io_t_inconsistent_module_settings = "IoT_InconsistentModuleSettings" #: A minority within a device security group has inconsistent Edge Module settings with the rest of their group. - io_t_install_agent = "IoT_InstallAgent" #: Install the Azure Security of Things Agent. - io_t_ipfilter_deny_all = "IoT_IPFilter_DenyAll" #: IP Filter Configuration should have rules defined for allowed traffic and should deny all other traffic by default. - io_t_ipfilter_permissive_rule = "IoT_IPFilter_PermissiveRule" #: An Allow IP Filter rules source IP range is too large. Overly permissive rules might expose your IoT hub to malicious intenders. - io_t_open_ports = "IoT_OpenPorts" #: A listening endpoint was found on the device. - io_t_permissive_firewall_policy = "IoT_PermissiveFirewallPolicy" #: An Allowed firewall policy was found (INPUT/OUTPUT). The policy should Deny all traffic by default and define rules to allow necessary communication to/from the device. - io_t_permissive_input_firewall_rules = "IoT_PermissiveInputFirewallRules" #: A rule in the firewall has been found that contains a permissive pattern for a wide range of IP addresses or Ports. - io_t_permissive_output_firewall_rules = "IoT_PermissiveOutputFirewallRules" #: A rule in the firewall has been found that contains a permissive pattern for a wide range of IP addresses or Ports. - io_t_privileged_docker_options = "IoT_PrivilegedDockerOptions" #: Edge module is configured to run in privileged mode, with extensive Linux capabilities or with host-level network access (send/receive data to host machine). - io_t_shared_credentials = "IoT_SharedCredentials" #: Same authentication credentials to the IoT Hub used by multiple devices. This could indicate an illegitimate device impersonating a legitimate device. It also exposes the risk of device impersonation by an attacker. - io_t_vulnerable_tls_cipher_suite = "IoT_VulnerableTLSCipherSuite" #: Insecure TLS configurations detected. Immediate upgrade recommended. + ACTIVATE = "Activate" + DISMISS = "Dismiss" + START = "Start" + RESOLVE = "Resolve" + CLOSE = "Close" +class Enum17(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): -class RecommendationConfigStatus(str, Enum): + EFFECTIVE = "effective" + CUSTOM = "custom" - disabled = "Disabled" - enabled = "Enabled" +class Enum3(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + MCAS = "MCAS" + WDATP = "WDATP" -class SecurityFamily(str, Enum): +class Enum37(with_metaclass(_CaseInsensitiveEnumMeta, bool, Enum)): - waf = "Waf" - ngfw = "Ngfw" - saas_waf = "SaasWaf" - va = "Va" + FALSE = False + TRUE = True +class Enum38(with_metaclass(_CaseInsensitiveEnumMeta, bool, Enum)): -class AadConnectivityState(str, Enum): + FALSE = False + TRUE = True - discovered = "Discovered" - not_licensed = "NotLicensed" - connected = "Connected" +class EventSource(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """A valid event source type. + """ + ASSESSMENTS = "Assessments" + SUB_ASSESSMENTS = "SubAssessments" + ALERTS = "Alerts" -class ExternalSecuritySolutionKind(str, Enum): +class ExpandControlsEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): - cef = "CEF" - ata = "ATA" - aad = "AAD" + DEFINITION = "definition" #: Add definition object for each control. +class ExpandEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): -class Protocol(str, Enum): + LINKS = "links" #: All links associated with an assessment. + METADATA = "metadata" #: Assessment metadata. - tcp = "TCP" - udp = "UDP" - all = "*" +class ExportData(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + RAW_EVENTS = "RawEvents" #: Agent raw events. -class Status(str, Enum): +class ExternalSecuritySolutionKindEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The kind of the external solution + """ - revoked = "Revoked" - initiated = "Initiated" + CEF = "CEF" + ATA = "ATA" + AAD = "AAD" +class FileType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of the file (for Linux files - Executable is used) + """ -class StatusReason(str, Enum): + EXE = "Exe" + DLL = "Dll" + MSI = "Msi" + SCRIPT = "Script" + EXECUTABLE = "Executable" + UNKNOWN = "Unknown" - expired = "Expired" - user_requested = "UserRequested" - newer_request_initiated = "NewerRequestInitiated" +class HybridComputeProvisioningState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """State of the service principal and its secret + """ + VALID = "Valid" #: Valid service principal details. + INVALID = "Invalid" #: Invalid service principal details. + EXPIRED = "Expired" #: the service principal details are expired. -class AutoProvision(str, Enum): +class ImplementationEffort(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The implementation effort required to remediate this assessment + """ - on = "On" #: Install missing security agent on VMs automatically - off = "Off" #: Do not install security agent on the VMs automatically + LOW = "Low" + MODERATE = "Moderate" + HIGH = "High" +class Intent(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The kill chain related intent behind the alert. For list of supported values, and explanations + of Azure Security Center's supported kill chain intents. + """ -class AlertNotifications(str, Enum): + UNKNOWN = "Unknown" #: Unknown. + PRE_ATTACK = "PreAttack" #: PreAttack could be either an attempt to access a certain resource regardless of a malicious intent, or a failed attempt to gain access to a target system to gather information prior to exploitation. This step is usually detected as an attempt, originating from outside the network, to scan the target system and find a way in. Further details on the PreAttack stage can be read in `MITRE Pre-Att&ck matrix `_. + INITIAL_ACCESS = "InitialAccess" #: InitialAccess is the stage where an attacker manages to get foothold on the attacked resource. + PERSISTENCE = "Persistence" #: Persistence is any access, action, or configuration change to a system that gives a threat actor a persistent presence on that system. + PRIVILEGE_ESCALATION = "PrivilegeEscalation" #: Privilege escalation is the result of actions that allow an adversary to obtain a higher level of permissions on a system or network. + DEFENSE_EVASION = "DefenseEvasion" #: Defense evasion consists of techniques an adversary may use to evade detection or avoid other defenses. + CREDENTIAL_ACCESS = "CredentialAccess" #: Credential access represents techniques resulting in access to or control over system, domain, or service credentials that are used within an enterprise environment. + DISCOVERY = "Discovery" #: Discovery consists of techniques that allow the adversary to gain knowledge about the system and internal network. + LATERAL_MOVEMENT = "LateralMovement" #: Lateral movement consists of techniques that enable an adversary to access and control remote systems on a network and could, but does not necessarily, include execution of tools on remote systems. + EXECUTION = "Execution" #: The execution tactic represents techniques that result in execution of adversary-controlled code on a local or remote system. + COLLECTION = "Collection" #: Collection consists of techniques used to identify and gather information, such as sensitive files, from a target network prior to exfiltration. + EXFILTRATION = "Exfiltration" #: Exfiltration refers to techniques and attributes that result or aid in the adversary removing files and information from a target network. + COMMAND_AND_CONTROL = "CommandAndControl" #: The command and control tactic represents how adversaries communicate with systems under their control within a target network. + IMPACT = "Impact" #: Impact events primarily try to directly reduce the availability or integrity of a system, service, or network; including manipulation of data to impact a business or operational process. + PROBING = "Probing" #: Probing could be either an attempt to access a certain resource regardless of a malicious intent, or a failed attempt to gain access to a target system to gather information prior to exploitation. + EXPLOITATION = "Exploitation" #: Exploitation is the stage where an attacker manages to get a foothold on the attacked resource. This stage is relevant for compute hosts and resources such as user accounts, certificates etc. - on = "On" #: Get notifications on new alerts - off = "Off" #: Don't get notifications on new alerts +class MacSignificance(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Indicates whether this is the primary secondary MAC address of the device + """ + PRIMARY = "Primary" + SECONDARY = "Secondary" + +class ManagementState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Managed state of the device. + """ + + MANAGED = "Managed" + UNMANAGED = "Unmanaged" + +class Operator(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """A valid comparer operator to use. A case-insensitive comparison will be applied for String + PropertyType. + """ + + EQUALS = "Equals" + GREATER_THAN = "GreaterThan" + GREATER_THAN_OR_EQUAL_TO = "GreaterThanOrEqualTo" + LESSER_THAN = "LesserThan" + LESSER_THAN_OR_EQUAL_TO = "LesserThanOrEqualTo" + NOT_EQUALS = "NotEquals" + CONTAINS = "Contains" + STARTS_WITH = "StartsWith" + ENDS_WITH = "EndsWith" + +class PermissionProperty(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """A permission detected in the cloud account. + """ + + AWS_AWS_SECURITY_HUB_READ_ONLY_ACCESS = "AWS::AWSSecurityHubReadOnlyAccess" #: This permission provides read only access to AWS Security Hub resources. + AWS_SECURITY_AUDIT = "AWS::SecurityAudit" #: This permission grants access to read security configuration metadata. + AWS_AMAZON_SSM_AUTOMATION_ROLE = "AWS::AmazonSSMAutomationRole" #: The permission provides for EC2 Automation service to execute activities defined within Automation documents. + GCP_SECURITY_CENTER_ADMIN_VIEWER = "GCP::Security Center Admin Viewer" #: This permission provides read only access to GCP Security Command Center. + +class PricingTier(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The pricing tier value. Azure Security Center is provided in two pricing tiers: free and + standard, with the standard tier available with a trial period. The standard tier offers + advanced security capabilities, while the free tier offers basic security features. + """ + + FREE = "Free" #: Get free Azure security center experience with basic security features. + STANDARD = "Standard" #: Get the standard Azure security center experience with advanced security features. + +class ProgrammingState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Indicates whether this device is programming + """ + + PROGRAMMING_DEVICE = "ProgrammingDevice" + NOT_PROGRAMMING_DEVICE = "NotProgrammingDevice" + +class PropertyType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The data type of the compared operands (string, integer, floating point number or a boolean + [true/false]] + """ + + STRING = "String" + INTEGER = "Integer" + NUMBER = "Number" + BOOLEAN = "Boolean" + +class ProtocolEnum(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + TCP = "TCP" + UDP = "UDP" + ALL = "*" + +class ProvisioningState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The security family provisioning State + """ + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + UPDATING = "Updating" + +class PurdueLevel(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Purdue level of the device. + """ + + PROCESS_CONTROL = "ProcessControl" + SUPERVISORY = "Supervisory" + ENTERPRISE = "Enterprise" + +class Rank(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The rank of the sensitivity label. + """ + + NONE = "None" + LOW = "Low" + MEDIUM = "Medium" + HIGH = "High" + CRITICAL = "Critical" + +class RecommendationAction(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The recommendation action of the machine or rule + """ + + RECOMMENDED = "Recommended" + ADD = "Add" + REMOVE = "Remove" + +class RecommendationConfigStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Recommendation status. When the recommendation status is disabled recommendations are not + generated. + """ + + DISABLED = "Disabled" + ENABLED = "Enabled" + +class RecommendationSeverity(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The severity of the recommendation + """ + + UNKNOWN = "Unknown" + NOT_APPLICABLE = "NotApplicable" + HEALTHY = "Healthy" + OFF_BY_POLICY = "OffByPolicy" + LOW = "Low" + MEDIUM = "Medium" + HIGH = "High" + +class RecommendationStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The initial recommendation status of the machine group or machine + """ + + RECOMMENDED = "Recommended" + NOT_RECOMMENDED = "NotRecommended" + NOT_AVAILABLE = "NotAvailable" + NO_STATUS = "NoStatus" + +class RecommendationType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of IoT Security recommendation. + """ + + IO_T_ACRAUTHENTICATION = "IoT_ACRAuthentication" #: Authentication schema used for pull an edge module from an ACR repository does not use Service Principal Authentication. + IO_T_AGENT_SENDS_UNUTILIZED_MESSAGES = "IoT_AgentSendsUnutilizedMessages" #: IoT agent message size capacity is currently underutilized, causing an increase in the number of sent messages. Adjust message intervals for better utilization. + IO_T_BASELINE = "IoT_Baseline" #: Identified security related system configuration issues. + IO_T_EDGE_HUB_MEM_OPTIMIZE = "IoT_EdgeHubMemOptimize" #: You can optimize Edge Hub memory usage by turning off protocol heads for any protocols not used by Edge modules in your solution. + IO_T_EDGE_LOGGING_OPTIONS = "IoT_EdgeLoggingOptions" #: Logging is disabled for this edge module. + IO_T_INCONSISTENT_MODULE_SETTINGS = "IoT_InconsistentModuleSettings" #: A minority within a device security group has inconsistent Edge Module settings with the rest of their group. + IO_T_INSTALL_AGENT = "IoT_InstallAgent" #: Install the Azure Security of Things Agent. + IO_T_IPFILTER_DENY_ALL = "IoT_IPFilter_DenyAll" #: IP Filter Configuration should have rules defined for allowed traffic and should deny all other traffic by default. + IO_T_IPFILTER_PERMISSIVE_RULE = "IoT_IPFilter_PermissiveRule" #: An Allow IP Filter rules source IP range is too large. Overly permissive rules might expose your IoT hub to malicious intenders. + IO_T_OPEN_PORTS = "IoT_OpenPorts" #: A listening endpoint was found on the device. + IO_T_PERMISSIVE_FIREWALL_POLICY = "IoT_PermissiveFirewallPolicy" #: An Allowed firewall policy was found (INPUT/OUTPUT). The policy should Deny all traffic by default and define rules to allow necessary communication to/from the device. + IO_T_PERMISSIVE_INPUT_FIREWALL_RULES = "IoT_PermissiveInputFirewallRules" #: A rule in the firewall has been found that contains a permissive pattern for a wide range of IP addresses or Ports. + IO_T_PERMISSIVE_OUTPUT_FIREWALL_RULES = "IoT_PermissiveOutputFirewallRules" #: A rule in the firewall has been found that contains a permissive pattern for a wide range of IP addresses or Ports. + IO_T_PRIVILEGED_DOCKER_OPTIONS = "IoT_PrivilegedDockerOptions" #: Edge module is configured to run in privileged mode, with extensive Linux capabilities or with host-level network access (send/receive data to host machine). + IO_T_SHARED_CREDENTIALS = "IoT_SharedCredentials" #: Same authentication credentials to the IoT Hub used by multiple devices. This could indicate an illegitimate device impersonating a legitimate device. It also exposes the risk of device impersonation by an attacker. + IO_T_VULNERABLE_TLS_CIPHER_SUITE = "IoT_VulnerableTLSCipherSuite" #: Insecure TLS configurations detected. Immediate upgrade recommended. + +class RelationToIpStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Indicates whether the relation of the mac to the ip address is certain or a guess + """ + + GUESS = "Guess" + CERTAIN = "Certain" + +class ReportedSeverity(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Assessed alert severity. + """ + + INFORMATIONAL = "Informational" + LOW = "Low" + MEDIUM = "Medium" + HIGH = "High" + +class ResourceIdentifierType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """There can be multiple identifiers of different type per alert, this field specify the + identifier type. + """ + + AZURE_RESOURCE = "AzureResource" + LOG_ANALYTICS = "LogAnalytics" + +class ResourceStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The status of the resource regarding a single assessment + """ + + HEALTHY = "Healthy" #: This assessment on the resource is healthy. + NOT_APPLICABLE = "NotApplicable" #: This assessment is not applicable to this resource. + OFF_BY_POLICY = "OffByPolicy" #: This assessment is turned off by policy on this subscription. + NOT_HEALTHY = "NotHealthy" #: This assessment on the resource is not healthy. + +class RuleState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Possible states of the rule + """ + + ENABLED = "Enabled" + DISABLED = "Disabled" + EXPIRED = "Expired" + +class ScanningFunctionality(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Indicates whether the device is a scanner + """ + + SCANNER_DEVICE = "ScannerDevice" + NOT_SCANNER_DEVICE = "NotScannerDevice" + +class SecurityFamily(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The security family of the discovered solution + """ + + WAF = "Waf" + NGFW = "Ngfw" + SAAS_WAF = "SaasWaf" + VA = "Va" + +class SecuritySolutionStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Status of the IoT Security solution. + """ + + ENABLED = "Enabled" + DISABLED = "Disabled" + +class ServerVulnerabilityAssessmentPropertiesProvisioningState(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The provisioningState of the vulnerability assessment capability on the VM + """ + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "Canceled" + PROVISIONING = "Provisioning" + DEPROVISIONING = "Deprovisioning" + +class SettingKind(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """the kind of the settings string (DataExportSettings) + """ + + DATA_EXPORT_SETTINGS = "DataExportSettings" + ALERT_SUPPRESSION_SETTING = "AlertSuppressionSetting" + +class Severity(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The sub-assessment severity level + """ + + LOW = "Low" + MEDIUM = "Medium" + HIGH = "High" + +class Source(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The platform where the assessed resource resides + """ + + AZURE = "Azure" #: Resource is in Azure. + ON_PREMISE = "OnPremise" #: Resource in an on premise machine connected to Azure cloud. + ON_PREMISE_SQL = "OnPremiseSql" #: SQL Resource in an on premise machine connected to Azure cloud. + +class SourceSystem(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The source type of the machine group + """ + + AZURE_APP_LOCKER = "Azure_AppLocker" + AZURE_AUDIT_D = "Azure_AuditD" + NON_AZURE_APP_LOCKER = "NonAzure_AppLocker" + NON_AZURE_AUDIT_D = "NonAzure_AuditD" + NONE = "None" + +class State(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Aggregative state based on the standard's supported controls states + """ + + PASSED = "Passed" #: All supported regulatory compliance controls in the given standard have a passed state. + FAILED = "Failed" #: At least one supported regulatory compliance control in the given standard has a state of failed. + SKIPPED = "Skipped" #: All supported regulatory compliance controls in the given standard have a state of skipped. + UNSUPPORTED = "Unsupported" #: No supported regulatory compliance data for the given standard. -class AlertsToAdmins(str, Enum): +class Status(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The status of the port + """ - on = "On" #: Send notification on new alerts to the subscription's admins - off = "Off" #: Don't send notification on new alerts to the subscription's admins + REVOKED = "Revoked" + INITIATED = "Initiated" + +class StatusReason(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """A description of why the ``status`` has its value + """ + + EXPIRED = "Expired" + USER_REQUESTED = "UserRequested" + NEWER_REQUEST_INITIATED = "NewerRequestInitiated" + +class SubAssessmentStatusCode(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Programmatic code for the status of the assessment + """ + + HEALTHY = "Healthy" #: The resource is healthy. + UNHEALTHY = "Unhealthy" #: The resource has a security issue that needs to be addressed. + NOT_APPLICABLE = "NotApplicable" #: Assessment for this resource did not happen. + +class Threats(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Threats impact of the assessment + """ + + ACCOUNT_BREACH = "accountBreach" + DATA_EXFILTRATION = "dataExfiltration" + DATA_SPILLAGE = "dataSpillage" + MALICIOUS_INSIDER = "maliciousInsider" + ELEVATION_OF_PRIVILEGE = "elevationOfPrivilege" + THREAT_RESISTANCE = "threatResistance" + MISSING_COVERAGE = "missingCoverage" + DENIAL_OF_SERVICE = "denialOfService" +class TransportProtocol(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + + TCP = "TCP" + UDP = "UDP" -class State(str, Enum): +class UnmaskedIpLoggingStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Unmasked IP address logging status + """ - passed = "Passed" #: All supported regulatory compliance controls in the given standard have a passed state - failed = "Failed" #: At least one supported regulatory compliance control in the given standard has a state of failed - skipped = "Skipped" #: All supported regulatory compliance controls in the given standard have a state of skipped - unsupported = "Unsupported" #: No supported regulatory compliance data for the given standard + DISABLED = "Disabled" #: Unmasked IP logging is disabled. + ENABLED = "Enabled" #: Unmasked IP logging is enabled. +class UserImpact(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The user impact of the assessment + """ -class ConnectionType(str, Enum): + LOW = "Low" + MODERATE = "Moderate" + HIGH = "High" - internal = "Internal" - external = "External" +class ValueType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The value type of the items in the list. + """ + + IP_CIDR = "IpCidr" #: An IP range in CIDR format (e.g. '192.168.0.1/8'). + STRING = "String" #: Any string value. + +class VersionKind(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Kind of the version + """ + + LATEST = "Latest" + PREVIOUS = "Previous" + PREVIEW = "Preview" diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/__init__.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/__init__.py index 2044043fcb95..2d9e9af2b353 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/__init__.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/__init__.py @@ -1,36 +1,27 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- from ._compliance_results_operations import ComplianceResultsOperations from ._pricings_operations import PricingsOperations -from ._alerts_operations import AlertsOperations from ._settings_operations import SettingsOperations -from ._io_tsecurity_solutions_operations import IoTSecuritySolutionsOperations -from ._io_tsecurity_solutions_resource_group_operations import IoTSecuritySolutionsResourceGroupOperations +from ._advanced_threat_protection_operations import AdvancedThreatProtectionOperations +from ._device_security_groups_operations import DeviceSecurityGroupsOperations from ._iot_security_solution_operations import IotSecuritySolutionOperations -from ._io_tsecurity_solutions_analytics_operations import IoTSecuritySolutionsAnalyticsOperations -from ._io_tsecurity_solutions_analytics_aggregated_alerts_operations import IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations -from ._io_tsecurity_solutions_analytics_aggregated_alert_operations import IoTSecuritySolutionsAnalyticsAggregatedAlertOperations -from ._io_tsecurity_solutions_analytics_recommendation_operations import IoTSecuritySolutionsAnalyticsRecommendationOperations -from ._io_tsecurity_solutions_analytics_recommendations_operations import IoTSecuritySolutionsAnalyticsRecommendationsOperations -from ._allowed_connections_operations import AllowedConnectionsOperations -from ._discovered_security_solutions_operations import DiscoveredSecuritySolutionsOperations -from ._external_security_solutions_operations import ExternalSecuritySolutionsOperations -from ._jit_network_access_policies_operations import JitNetworkAccessPoliciesOperations -from ._adaptive_application_controls_operations import AdaptiveApplicationControlsOperations +from ._iot_security_solution_analytics_operations import IotSecuritySolutionAnalyticsOperations +from ._iot_security_solutions_analytics_aggregated_alert_operations import IotSecuritySolutionsAnalyticsAggregatedAlertOperations +from ._iot_security_solutions_analytics_recommendation_operations import IotSecuritySolutionsAnalyticsRecommendationOperations +from ._iot_alert_types_operations import IotAlertTypesOperations +from ._iot_alerts_operations import IotAlertsOperations +from ._iot_recommendation_types_operations import IotRecommendationTypesOperations +from ._iot_recommendations_operations import IotRecommendationsOperations from ._locations_operations import LocationsOperations from ._operations import Operations from ._tasks_operations import TasksOperations -from ._topology_operations import TopologyOperations -from ._advanced_threat_protection_operations import AdvancedThreatProtectionOperations from ._auto_provisioning_settings_operations import AutoProvisioningSettingsOperations from ._compliances_operations import CompliancesOperations from ._information_protection_policies_operations import InformationProtectionPoliciesOperations @@ -39,31 +30,50 @@ from ._regulatory_compliance_standards_operations import RegulatoryComplianceStandardsOperations from ._regulatory_compliance_controls_operations import RegulatoryComplianceControlsOperations from ._regulatory_compliance_assessments_operations import RegulatoryComplianceAssessmentsOperations +from ._sub_assessments_operations import SubAssessmentsOperations +from ._automations_operations import AutomationsOperations +from ._alerts_suppression_rules_operations import AlertsSuppressionRulesOperations from ._server_vulnerability_assessment_operations import ServerVulnerabilityAssessmentOperations +from ._assessments_metadata_operations import AssessmentsMetadataOperations +from ._assessments_operations import AssessmentsOperations +from ._adaptive_application_controls_operations import AdaptiveApplicationControlsOperations +from ._adaptive_network_hardenings_operations import AdaptiveNetworkHardeningsOperations +from ._allowed_connections_operations import AllowedConnectionsOperations +from ._topology_operations import TopologyOperations +from ._alerts_operations import AlertsOperations +from ._jit_network_access_policies_operations import JitNetworkAccessPoliciesOperations +from ._discovered_security_solutions_operations import DiscoveredSecuritySolutionsOperations +from ._security_solutions_reference_data_operations import SecuritySolutionsReferenceDataOperations +from ._external_security_solutions_operations import ExternalSecuritySolutionsOperations +from ._secure_scores_operations import SecureScoresOperations +from ._secure_score_controls_operations import SecureScoreControlsOperations +from ._secure_score_control_definitions_operations import SecureScoreControlDefinitionsOperations +from ._security_solutions_operations import SecuritySolutionsOperations +from ._connectors_operations import ConnectorsOperations +from ._iot_defender_settings_operations import IotDefenderSettingsOperations +from ._iot_sensors_operations import IotSensorsOperations +from ._devices_for_subscription_operations import DevicesForSubscriptionOperations +from ._devices_for_hub_operations import DevicesForHubOperations +from ._device_operations import DeviceOperations +from ._on_premise_iot_sensors_operations import OnPremiseIotSensorsOperations __all__ = [ 'ComplianceResultsOperations', 'PricingsOperations', - 'AlertsOperations', 'SettingsOperations', - 'IoTSecuritySolutionsOperations', - 'IoTSecuritySolutionsResourceGroupOperations', + 'AdvancedThreatProtectionOperations', + 'DeviceSecurityGroupsOperations', 'IotSecuritySolutionOperations', - 'IoTSecuritySolutionsAnalyticsOperations', - 'IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations', - 'IoTSecuritySolutionsAnalyticsAggregatedAlertOperations', - 'IoTSecuritySolutionsAnalyticsRecommendationOperations', - 'IoTSecuritySolutionsAnalyticsRecommendationsOperations', - 'AllowedConnectionsOperations', - 'DiscoveredSecuritySolutionsOperations', - 'ExternalSecuritySolutionsOperations', - 'JitNetworkAccessPoliciesOperations', - 'AdaptiveApplicationControlsOperations', + 'IotSecuritySolutionAnalyticsOperations', + 'IotSecuritySolutionsAnalyticsAggregatedAlertOperations', + 'IotSecuritySolutionsAnalyticsRecommendationOperations', + 'IotAlertTypesOperations', + 'IotAlertsOperations', + 'IotRecommendationTypesOperations', + 'IotRecommendationsOperations', 'LocationsOperations', 'Operations', 'TasksOperations', - 'TopologyOperations', - 'AdvancedThreatProtectionOperations', 'AutoProvisioningSettingsOperations', 'CompliancesOperations', 'InformationProtectionPoliciesOperations', @@ -72,5 +82,30 @@ 'RegulatoryComplianceStandardsOperations', 'RegulatoryComplianceControlsOperations', 'RegulatoryComplianceAssessmentsOperations', + 'SubAssessmentsOperations', + 'AutomationsOperations', + 'AlertsSuppressionRulesOperations', 'ServerVulnerabilityAssessmentOperations', + 'AssessmentsMetadataOperations', + 'AssessmentsOperations', + 'AdaptiveApplicationControlsOperations', + 'AdaptiveNetworkHardeningsOperations', + 'AllowedConnectionsOperations', + 'TopologyOperations', + 'AlertsOperations', + 'JitNetworkAccessPoliciesOperations', + 'DiscoveredSecuritySolutionsOperations', + 'SecuritySolutionsReferenceDataOperations', + 'ExternalSecuritySolutionsOperations', + 'SecureScoresOperations', + 'SecureScoreControlsOperations', + 'SecureScoreControlDefinitionsOperations', + 'SecuritySolutionsOperations', + 'ConnectorsOperations', + 'IotDefenderSettingsOperations', + 'IotSensorsOperations', + 'DevicesForSubscriptionOperations', + 'DevicesForHubOperations', + 'DeviceOperations', + 'OnPremiseIotSensorsOperations', ] diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_application_controls_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_application_controls_operations.py index bab90ed88dee..556d040bc96b 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_application_controls_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_application_controls_operations.py @@ -1,228 +1,279 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class AdaptiveApplicationControlsOperations(object): """AdaptiveApplicationControlsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, include_path_recommendations=None, summary=None, custom_headers=None, raw=False, **operation_config): - """Gets a list of application control VM/server groups for the - subscription. - - :param include_path_recommendations: Include the policy rules - :type include_path_recommendations: bool - :param summary: Return output in a summarized form - :type summary: bool - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AppWhitelistingGroups or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AppWhitelistingGroups or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + self, + include_path_recommendations=None, # type: Optional[Union[bool, "models.Enum37"]] + summary=None, # type: Optional[Union[bool, "models.Enum38"]] + **kwargs # type: Any + ): + # type: (...) -> "models.AdaptiveApplicationControlGroups" + """Gets a list of application control machine groups for the subscription. + + :param include_path_recommendations: Include the policy rules. + :type include_path_recommendations: str or ~azure.mgmt.security.models.Enum37 + :param summary: Return output in a summarized form. + :type summary: str or ~azure.mgmt.security.models.Enum38 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveApplicationControlGroups, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveApplicationControlGroups + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveApplicationControlGroups"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if include_path_recommendations is not None: query_parameters['includePathRecommendations'] = self._serialize.query("include_path_recommendations", include_path_recommendations, 'bool') if summary is not None: query_parameters['summary'] = self._serialize.query("summary", summary, 'bool') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AppWhitelistingGroups', response) + deserialized = self._deserialize('AdaptiveApplicationControlGroups', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/applicationWhitelistings'} + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/applicationWhitelistings'} # type: ignore def get( - self, group_name, custom_headers=None, raw=False, **operation_config): + self, + group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AdaptiveApplicationControlGroup" """Gets an application control VM/server group. - :param group_name: Name of an application control VM/server group + :param group_name: Name of an application control machine group. :type group_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AppWhitelistingGroup or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AppWhitelistingGroup or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveApplicationControlGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveApplicationControlGroup + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveApplicationControlGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'groupName': self._serialize.url("group_name", group_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AppWhitelistingGroup', response) + deserialized = self._deserialize('AdaptiveApplicationControlGroup', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} # type: ignore def put( - self, group_name, body, custom_headers=None, raw=False, **operation_config): - """Update an application control VM/server group. - - :param group_name: Name of an application control VM/server group + self, + group_name, # type: str + body, # type: "models.AdaptiveApplicationControlGroup" + **kwargs # type: Any + ): + # type: (...) -> "models.AdaptiveApplicationControlGroup" + """Update an application control machine group. + + :param group_name: Name of an application control machine group. :type group_name: str - :param body: The updated VM/server group data - :type body: ~azure.mgmt.security.models.AppWhitelistingPutGroupData - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AppWhitelistingGroup or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AppWhitelistingGroup or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param body: + :type body: ~azure.mgmt.security.models.AdaptiveApplicationControlGroup + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveApplicationControlGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveApplicationControlGroup + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveApplicationControlGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.put.metadata['url'] + url = self.put.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'groupName': self._serialize.url("group_name", group_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(body, 'AppWhitelistingPutGroupData') - - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'AdaptiveApplicationControlGroup') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AppWhitelistingGroup', response) + deserialized = self._deserialize('AdaptiveApplicationControlGroup', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - put.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} + put.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} # type: ignore + + def delete( + self, + group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete an application control machine group. + + :param group_name: Name of an application control machine group. + :type group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'groupName': self._serialize.url("group_name", group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/applicationWhitelistings/{groupName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_network_hardenings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_network_hardenings_operations.py new file mode 100644 index 000000000000..4d58cd490fc5 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_adaptive_network_hardenings_operations.py @@ -0,0 +1,341 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class AdaptiveNetworkHardeningsOperations(object): + """AdaptiveNetworkHardeningsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_extended_resource( + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AdaptiveNetworkHardeningsList"] + """Gets a list of Adaptive Network Hardenings resources in scope of an extended resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AdaptiveNetworkHardeningsList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AdaptiveNetworkHardeningsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveNetworkHardeningsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_extended_resource.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('AdaptiveNetworkHardeningsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_extended_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings'} # type: ignore + + def get( + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + adaptive_network_hardening_resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AdaptiveNetworkHardening" + """Gets a single Adaptive Network Hardening resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :param adaptive_network_hardening_resource_name: The name of the Adaptive Network Hardening + resource. + :type adaptive_network_hardening_resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdaptiveNetworkHardening, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdaptiveNetworkHardening + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdaptiveNetworkHardening"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'adaptiveNetworkHardeningResourceName': self._serialize.url("adaptive_network_hardening_resource_name", adaptive_network_hardening_resource_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AdaptiveNetworkHardening', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}'} # type: ignore + + def _enforce_initial( + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + adaptive_network_hardening_resource_name, # type: str + body, # type: "models.AdaptiveNetworkHardeningEnforceRequest" + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + adaptive_network_hardening_enforce_action = "enforce" + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._enforce_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), + 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), + 'adaptiveNetworkHardeningResourceName': self._serialize.url("adaptive_network_hardening_resource_name", adaptive_network_hardening_resource_name, 'str'), + 'adaptiveNetworkHardeningEnforceAction': self._serialize.url("adaptive_network_hardening_enforce_action", adaptive_network_hardening_enforce_action, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'AdaptiveNetworkHardeningEnforceRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _enforce_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}/{adaptiveNetworkHardeningEnforceAction}'} # type: ignore + + def begin_enforce( + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + adaptive_network_hardening_resource_name, # type: str + body, # type: "models.AdaptiveNetworkHardeningEnforceRequest" + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Enforces the given rules on the NSG(s) listed in the request. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param resource_namespace: The Namespace of the resource. + :type resource_namespace: str + :param resource_type: The type of the resource. + :type resource_type: str + :param resource_name: Name of the resource. + :type resource_name: str + :param adaptive_network_hardening_resource_name: The name of the Adaptive Network Hardening + resource. + :type adaptive_network_hardening_resource_name: str + :param body: + :type body: ~azure.mgmt.security.models.AdaptiveNetworkHardeningEnforceRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._enforce_initial( + resource_group_name=resource_group_name, + resource_namespace=resource_namespace, + resource_type=resource_type, + resource_name=resource_name, + adaptive_network_hardening_resource_name=adaptive_network_hardening_resource_name, + body=body, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + if polling is True: polling_method = ARMPolling(lro_delay, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_enforce.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/adaptiveNetworkHardenings/{adaptiveNetworkHardeningResourceName}/{adaptiveNetworkHardeningEnforceAction}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_advanced_threat_protection_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_advanced_threat_protection_operations.py index 57930d189083..5515a1b58bd7 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_advanced_threat_protection_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_advanced_threat_protection_operations.py @@ -1,171 +1,165 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class AdvancedThreatProtectionOperations(object): """AdvancedThreatProtectionOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01-preview". - :ivar setting_name: Advanced Threat Protection setting name. Constant value: "current". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01-preview" - self.setting_name = "current" - - self.config = config + self._config = config def get( - self, resource_id, custom_headers=None, raw=False, **operation_config): - """Gets the Advanced Threat Protection settings for the specified - resource. + self, + resource_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AdvancedThreatProtectionSetting" + """Gets the Advanced Threat Protection settings for the specified resource. :param resource_id: The identifier of the resource. :type resource_id: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AdvancedThreatProtectionSetting or ClientRawResponse if - raw=true - :rtype: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdvancedThreatProtectionSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AdvancedThreatProtectionSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + setting_name = "current" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'resourceId': self._serialize.url("resource_id", resource_id, 'str'), - 'settingName': self._serialize.url("self.setting_name", self.setting_name, 'str') + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AdvancedThreatProtectionSetting', response) + deserialized = self._deserialize('AdvancedThreatProtectionSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}'} + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}'} # type: ignore def create( - self, resource_id, is_enabled=None, custom_headers=None, raw=False, **operation_config): - """Creates or updates the Advanced Threat Protection settings on a - specified resource. + self, + resource_id, # type: str + advanced_threat_protection_setting, # type: "models.AdvancedThreatProtectionSetting" + **kwargs # type: Any + ): + # type: (...) -> "models.AdvancedThreatProtectionSetting" + """Creates or updates the Advanced Threat Protection settings on a specified resource. :param resource_id: The identifier of the resource. :type resource_id: str - :param is_enabled: Indicates whether Advanced Threat Protection is - enabled. - :type is_enabled: bool - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AdvancedThreatProtectionSetting or ClientRawResponse if - raw=true - :rtype: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param advanced_threat_protection_setting: Advanced Threat Protection Settings. + :type advanced_threat_protection_setting: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AdvancedThreatProtectionSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AdvancedThreatProtectionSetting + :raises: ~azure.core.exceptions.HttpResponseError """ - advanced_threat_protection_setting = models.AdvancedThreatProtectionSetting(is_enabled=is_enabled) + cls = kwargs.pop('cls', None) # type: ClsType["models.AdvancedThreatProtectionSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + setting_name = "current" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.create.metadata['url'] + url = self.create.metadata['url'] # type: ignore path_format_arguments = { - 'resourceId': self._serialize.url("resource_id", resource_id, 'str'), - 'settingName': self._serialize.url("self.setting_name", self.setting_name, 'str') + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(advanced_threat_protection_setting, 'AdvancedThreatProtectionSetting') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(advanced_threat_protection_setting, 'AdvancedThreatProtectionSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AdvancedThreatProtectionSetting', response) + deserialized = self._deserialize('AdvancedThreatProtectionSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}'} + create.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/advancedThreatProtectionSettings/{settingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_operations.py index 984144031f99..fcde52fa60c7 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_operations.py @@ -1,601 +1,778 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class AlertsOperations(object): """AlertsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-01-01". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-01-01" - - self.config = config + self._config = config def list( - self, filter=None, select=None, expand=None, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AlertList"] """List all the alerts that are associated with the subscription. - :param filter: OData filter. Optional. - :type filter: str - :param select: OData select. Optional. - :type select: str - :param expand: OData expand. Optional. - :type expand: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Alert - :rtype: - ~azure.mgmt.security.models.AlertPaged[~azure.mgmt.security.models.Alert] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') - if select is not None: - query_parameters['$select'] = self._serialize.query("select", select, 'str') - if expand is not None: - query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AlertPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alerts'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alerts'} # type: ignore def list_by_resource_group( - self, resource_group_name, filter=None, select=None, expand=None, custom_headers=None, raw=False, **operation_config): + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AlertList"] """List all the alerts that are associated with the resource group. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param filter: OData filter. Optional. - :type filter: str - :param select: OData select. Optional. - :type select: str - :param expand: OData expand. Optional. - :type expand: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Alert - :rtype: - ~azure.mgmt.security.models.AlertPaged[~azure.mgmt.security.models.Alert] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_resource_group.metadata['url'] + url = self.list_by_resource_group.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') - if select is not None: - query_parameters['$select'] = self._serialize.query("select", select, 'str') - if expand is not None: - query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AlertPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/alerts'} + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/alerts'} # type: ignore def list_subscription_level_alerts_by_region( - self, filter=None, select=None, expand=None, custom_headers=None, raw=False, **operation_config): - """List all the alerts that are associated with the subscription that are - stored in a specific location. - - :param filter: OData filter. Optional. - :type filter: str - :param select: OData select. Optional. - :type select: str - :param expand: OData expand. Optional. - :type expand: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Alert - :rtype: - ~azure.mgmt.security.models.AlertPaged[~azure.mgmt.security.models.Alert] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AlertList"] + """List all the alerts that are associated with the subscription that are stored in a specific + location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_subscription_level_alerts_by_region.metadata['url'] + url = self.list_subscription_level_alerts_by_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') - if select is not None: - query_parameters['$select'] = self._serialize.query("select", select, 'str') - if expand is not None: - query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AlertPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_subscription_level_alerts_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts'} + return ItemPaged( + get_next, extract_data + ) + list_subscription_level_alerts_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts'} # type: ignore def list_resource_group_level_alerts_by_region( - self, resource_group_name, filter=None, select=None, expand=None, custom_headers=None, raw=False, **operation_config): - """List all the alerts that are associated with the resource group that - are stored in a specific location. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AlertList"] + """List all the alerts that are associated with the resource group that are stored in a specific + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param filter: OData filter. Optional. - :type filter: str - :param select: OData select. Optional. - :type select: str - :param expand: OData expand. Optional. - :type expand: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Alert - :rtype: - ~azure.mgmt.security.models.AlertPaged[~azure.mgmt.security.models.Alert] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AlertList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_resource_group_level_alerts_by_region.metadata['url'] + url = self.list_resource_group_level_alerts_by_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') - if select is not None: - query_parameters['$select'] = self._serialize.query("select", select, 'str') - if expand is not None: - query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AlertPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list_resource_group_level_alerts_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts'} + return ItemPaged( + get_next, extract_data + ) + list_resource_group_level_alerts_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts'} # type: ignore def get_subscription_level_alert( - self, alert_name, custom_headers=None, raw=False, **operation_config): + self, + alert_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Alert" """Get an alert that is associated with a subscription. - :param alert_name: Name of the alert object + :param alert_name: Name of the alert object. :type alert_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Alert or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Alert or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Alert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Alert + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Alert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get_subscription_level_alert.metadata['url'] + url = self.get_subscription_level_alert.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'alertName': self._serialize.url("alert_name", alert_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Alert', response) + deserialized = self._deserialize('Alert', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get_subscription_level_alert.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}'} + get_subscription_level_alert.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}'} # type: ignore def get_resource_group_level_alerts( - self, alert_name, resource_group_name, custom_headers=None, raw=False, **operation_config): - """Get an alert that is associated a resource group or a resource in a - resource group. - - :param alert_name: Name of the alert object + self, + alert_name, # type: str + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Alert" + """Get an alert that is associated a resource group or a resource in a resource group. + + :param alert_name: Name of the alert object. :type alert_name: str - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Alert or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Alert or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Alert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Alert + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Alert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get_resource_group_level_alerts.metadata['url'] + url = self.get_resource_group_level_alerts.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), 'alertName': self._serialize.url("alert_name", alert_name, 'str'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$') + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Alert', response) + deserialized = self._deserialize('Alert', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get_resource_group_level_alerts.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}'} + get_resource_group_level_alerts.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}'} # type: ignore + + def update_subscription_level_alert_state_to_dismiss( + self, + alert_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_subscription_level_alert_state_to_dismiss.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_subscription_level_alert_state_to_dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/dismiss'} # type: ignore + + def update_subscription_level_state_to_resolve( + self, + alert_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Update the alert's state. - def update_subscription_level_alert_state( - self, alert_name, alert_update_action_type, custom_headers=None, raw=False, **operation_config): + :param alert_name: Name of the alert object. + :type alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_subscription_level_state_to_resolve.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_subscription_level_state_to_resolve.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/resolve'} # type: ignore + + def update_subscription_level_alert_state_to_reactivate( + self, + alert_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None """Update the alert's state. - :param alert_name: Name of the alert object + :param alert_name: Name of the alert object. :type alert_name: str - :param alert_update_action_type: Type of the action to do on the - alert. Possible values include: 'Dismiss', 'Reactivate' - :type alert_update_action_type: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.update_subscription_level_alert_state.metadata['url'] + url = self.update_subscription_level_alert_state_to_reactivate.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), 'alertName': self._serialize.url("alert_name", alert_name, 'str'), - 'alertUpdateActionType': self._serialize.url("alert_update_action_type", alert_update_action_type, 'str') } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.post(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - update_subscription_level_alert_state.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/{alertUpdateActionType}'} + update_subscription_level_alert_state_to_reactivate.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/activate'} # type: ignore - def update_resource_group_level_alert_state( - self, alert_name, alert_update_action_type, resource_group_name, custom_headers=None, raw=False, **operation_config): + def update_resource_group_level_state_to_resolve( + self, + alert_name, # type: str + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None """Update the alert's state. - :param alert_name: Name of the alert object + :param alert_name: Name of the alert object. :type alert_name: str - :param alert_update_action_type: Type of the action to do on the - alert. Possible values include: 'Dismiss', 'Reactivate' - :type alert_update_action_type: str - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.update_resource_group_level_alert_state.metadata['url'] + url = self.update_resource_group_level_state_to_resolve.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), 'alertName': self._serialize.url("alert_name", alert_name, 'str'), - 'alertUpdateActionType': self._serialize.url("alert_update_action_type", alert_update_action_type, 'str'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$') + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.post(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - update_resource_group_level_alert_state.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/{alertUpdateActionType}'} + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_state_to_resolve.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/resolve'} # type: ignore + + def update_resource_group_level_alert_state_to_dismiss( + self, + alert_name, # type: str + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_resource_group_level_alert_state_to_dismiss.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_alert_state_to_dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/dismiss'} # type: ignore + + def update_resource_group_level_alert_state_to_reactivate( + self, + alert_name, # type: str + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Update the alert's state. + + :param alert_name: Name of the alert object. + :type alert_name: str + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.update_resource_group_level_alert_state_to_reactivate.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'alertName': self._serialize.url("alert_name", alert_name, 'str'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_alert_state_to_reactivate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/alerts/{alertName}/activate'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_suppression_rules_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_suppression_rules_operations.py new file mode 100644 index 000000000000..0fca85b290c2 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_alerts_suppression_rules_operations.py @@ -0,0 +1,288 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class AlertsSuppressionRulesOperations(object): + """AlertsSuppressionRulesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + alert_type=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AlertsSuppressionRulesList"] + """List of all the dismiss rules for the given subscription. + + :param alert_type: Type of the alert to get rules for. + :type alert_type: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AlertsSuppressionRulesList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AlertsSuppressionRulesList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertsSuppressionRulesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if alert_type is not None: + query_parameters['AlertType'] = self._serialize.query("alert_type", alert_type, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('AlertsSuppressionRulesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules'} # type: ignore + + def get( + self, + alerts_suppression_rule_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AlertsSuppressionRule" + """Get dismiss rule, with name: {alertsSuppressionRuleName}, for the given subscription. + + :param alerts_suppression_rule_name: The unique name of the suppression alert rule. + :type alerts_suppression_rule_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AlertsSuppressionRule, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AlertsSuppressionRule + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertsSuppressionRule"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'alertsSuppressionRuleName': self._serialize.url("alerts_suppression_rule_name", alerts_suppression_rule_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AlertsSuppressionRule', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}'} # type: ignore + + def update( + self, + alerts_suppression_rule_name, # type: str + alerts_suppression_rule, # type: "models.AlertsSuppressionRule" + **kwargs # type: Any + ): + # type: (...) -> "models.AlertsSuppressionRule" + """Update existing rule or create new rule if it doesn't exist. + + :param alerts_suppression_rule_name: The unique name of the suppression alert rule. + :type alerts_suppression_rule_name: str + :param alerts_suppression_rule: Suppression rule object. + :type alerts_suppression_rule: ~azure.mgmt.security.models.AlertsSuppressionRule + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AlertsSuppressionRule, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AlertsSuppressionRule + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AlertsSuppressionRule"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'alertsSuppressionRuleName': self._serialize.url("alerts_suppression_rule_name", alerts_suppression_rule_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(alerts_suppression_rule, 'AlertsSuppressionRule') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AlertsSuppressionRule', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}'} # type: ignore + + def delete( + self, + alerts_suppression_rule_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete dismiss alert rule for this subscription. + + :param alerts_suppression_rule_name: The unique name of the suppression alert rule. + :type alerts_suppression_rule_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'alertsSuppressionRuleName': self._serialize.url("alerts_suppression_rule_name", alerts_suppression_rule_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/alertsSuppressionRules/{alertsSuppressionRuleName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_allowed_connections_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_allowed_connections_operations.py index 8aa4cd8ba546..adfbf0ebcc52 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_allowed_connections_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_allowed_connections_operations.py @@ -1,241 +1,243 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class AllowedConnectionsOperations(object): """AllowedConnectionsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): - """Gets the list of all possible traffic between resources for the - subscription. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of AllowedConnectionsResource - :rtype: - ~azure.mgmt.security.models.AllowedConnectionsResourcePaged[~azure.mgmt.security.models.AllowedConnectionsResource] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AllowedConnectionsList"] + """Gets the list of all possible traffic between resources for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AllowedConnectionsList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AllowedConnectionsList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AllowedConnectionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AllowedConnectionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AllowedConnectionsResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/allowedConnections'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/allowedConnections'} # type: ignore def list_by_home_region( - self, custom_headers=None, raw=False, **operation_config): - """Gets the list of all possible traffic between resources for the - subscription and location. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of AllowedConnectionsResource - :rtype: - ~azure.mgmt.security.models.AllowedConnectionsResourcePaged[~azure.mgmt.security.models.AllowedConnectionsResource] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AllowedConnectionsList"] + """Gets the list of all possible traffic between resources for the subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AllowedConnectionsList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AllowedConnectionsList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AllowedConnectionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_home_region.metadata['url'] + url = self.list_by_home_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AllowedConnectionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AllowedConnectionsResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections'} + return ItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections'} # type: ignore def get( - self, resource_group_name, connection_type, custom_headers=None, raw=False, **operation_config): - """Gets the list of all possible traffic between resources for the - subscription and location, based on connection type. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + connection_type, # type: Union[str, "models.ConnectionType"] + **kwargs # type: Any + ): + # type: (...) -> "models.AllowedConnectionsResource" + """Gets the list of all possible traffic between resources for the subscription and location, + based on connection type. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param connection_type: The type of allowed connections (Internal, - External). Possible values include: 'Internal', 'External' - :type connection_type: str or - ~azure.mgmt.security.models.ConnectionType - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AllowedConnectionsResource or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AllowedConnectionsResource or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param connection_type: The type of allowed connections (Internal, External). + :type connection_type: str or ~azure.mgmt.security.models.ConnectionType + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AllowedConnectionsResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AllowedConnectionsResource + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AllowedConnectionsResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'connectionType': self._serialize.url("connection_type", connection_type, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'connectionType': self._serialize.url("connection_type", connection_type, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AllowedConnectionsResource', response) + deserialized = self._deserialize('AllowedConnectionsResource', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections/{connectionType}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/allowedConnections/{connectionType}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_assessments_metadata_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_assessments_metadata_operations.py new file mode 100644 index 000000000000..151966425f35 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_assessments_metadata_operations.py @@ -0,0 +1,401 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class AssessmentsMetadataOperations(object): + """AssessmentsMetadataOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityAssessmentMetadataList"] + """Get metadata information on all assessment types. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityAssessmentMetadataList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityAssessmentMetadataList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityAssessmentMetadataList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.Security/assessmentMetadata'} # type: ignore + + def get( + self, + assessment_metadata_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityAssessmentMetadata" + """Get metadata information on an assessment type. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessmentMetadata, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadata"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessmentMetadata', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore + + def list_by_subscription( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityAssessmentMetadataList"] + """Get metadata information on all assessment types in a specific subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityAssessmentMetadataList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityAssessmentMetadataList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityAssessmentMetadataList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata'} # type: ignore + + def get_in_subscription( + self, + assessment_metadata_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityAssessmentMetadata" + """Get metadata information on an assessment type in a specific subscription. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessmentMetadata, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadata"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get_in_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessmentMetadata', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore + + def create_in_subscription( + self, + assessment_metadata_name, # type: str + assessment_metadata, # type: "models.SecurityAssessmentMetadata" + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityAssessmentMetadata" + """Create metadata information on an assessment type in a specific subscription. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :param assessment_metadata: AssessmentMetadata object. + :type assessment_metadata: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessmentMetadata, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessmentMetadata + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentMetadata"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_in_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(assessment_metadata, 'SecurityAssessmentMetadata') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessmentMetadata', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore + + def delete_in_subscription( + self, + assessment_metadata_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete metadata information on an assessment type in a specific subscription, will cause the + deletion of all the assessments of that type in that subscription. + + :param assessment_metadata_name: The Assessment Key - Unique key for the assessment type. + :type assessment_metadata_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete_in_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'assessmentMetadataName': self._serialize.url("assessment_metadata_name", assessment_metadata_name, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete_in_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/assessmentMetadata/{assessmentMetadataName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_assessments_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_assessments_operations.py new file mode 100644 index 000000000000..2d56bae38322 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_assessments_operations.py @@ -0,0 +1,308 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class AssessmentsOperations(object): + """AssessmentsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + scope, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityAssessmentList"] + """Get security assessments on all your scanned resources inside a scope. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityAssessmentList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/assessments'} # type: ignore + + def get( + self, + resource_id, # type: str + assessment_name, # type: str + expand=None, # type: Optional[Union[str, "models.ExpandEnum"]] + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityAssessment" + """Get a security assessment on your scanned resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :param expand: OData expand. Optional. + :type expand: str or ~azure.mgmt.security.models.ExpandEnum + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if expand is not None: + query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecurityAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}'} # type: ignore + + def create_or_update( + self, + resource_id, # type: str + assessment_name, # type: str + assessment, # type: "models.SecurityAssessment" + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityAssessment" + """Create a security assessment on your resource. An assessment metadata that describes this + assessment must be predefined with the same name before inserting the assessment result. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :param assessment: Calculated assessment on a pre-defined assessment metadata. + :type assessment: ~azure.mgmt.security.models.SecurityAssessment + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(assessment, 'SecurityAssessment') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('SecurityAssessment', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('SecurityAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}'} # type: ignore + + def delete( + self, + resource_id, # type: str + assessment_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete a security assessment on your resource. An assessment metadata that describes this + assessment must be predefined with the same name before inserting the assessment result. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/assessments/{assessmentName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_auto_provisioning_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_auto_provisioning_settings_operations.py index 3390cc0eb08b..515ae50f1e58 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_auto_provisioning_settings_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_auto_provisioning_settings_operations.py @@ -1,231 +1,231 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class AutoProvisioningSettingsOperations(object): """AutoProvisioningSettingsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AutoProvisioningSettingList"] """Exposes the auto provisioning settings of the subscriptions. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of AutoProvisioningSetting - :rtype: - ~azure.mgmt.security.models.AutoProvisioningSettingPaged[~azure.mgmt.security.models.AutoProvisioningSetting] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AutoProvisioningSettingList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AutoProvisioningSettingList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutoProvisioningSettingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AutoProvisioningSettingList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AutoProvisioningSettingPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings'} # type: ignore def get( - self, setting_name, custom_headers=None, raw=False, **operation_config): + self, + setting_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.AutoProvisioningSetting" """Details of a specific setting. - :param setting_name: Auto provisioning setting key + :param setting_name: Auto provisioning setting key. :type setting_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AutoProvisioningSetting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AutoProvisioningSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutoProvisioningSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AutoProvisioningSetting + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutoProvisioningSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'settingName': self._serialize.url("setting_name", setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AutoProvisioningSetting', response) + deserialized = self._deserialize('AutoProvisioningSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}'} # type: ignore def create( - self, setting_name, auto_provision, custom_headers=None, raw=False, **operation_config): + self, + setting_name, # type: str + setting, # type: "models.AutoProvisioningSetting" + **kwargs # type: Any + ): + # type: (...) -> "models.AutoProvisioningSetting" """Details of a specific setting. - :param setting_name: Auto provisioning setting key + :param setting_name: Auto provisioning setting key. :type setting_name: str - :param auto_provision: Describes what kind of security agent - provisioning action to take. Possible values include: 'On', 'Off' - :type auto_provision: str or ~azure.mgmt.security.models.AutoProvision - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AutoProvisioningSetting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AutoProvisioningSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param setting: Auto provisioning setting key. + :type setting: ~azure.mgmt.security.models.AutoProvisioningSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutoProvisioningSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AutoProvisioningSetting + :raises: ~azure.core.exceptions.HttpResponseError """ - setting = models.AutoProvisioningSetting(auto_provision=auto_provision) + cls = kwargs.pop('cls', None) # type: ClsType["models.AutoProvisioningSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.create.metadata['url'] + url = self.create.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'settingName': self._serialize.url("setting_name", setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(setting, 'AutoProvisioningSetting') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(setting, 'AutoProvisioningSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AutoProvisioningSetting', response) + deserialized = self._deserialize('AutoProvisioningSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}'} + create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/autoProvisioningSettings/{settingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_automations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_automations_operations.py new file mode 100644 index 000000000000..820e2e7fd446 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_automations_operations.py @@ -0,0 +1,446 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class AutomationsOperations(object): + """AutomationsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AutomationList"] + """Lists all the security automations in the specified subscription. Use the 'nextLink' property + in the response to get the next page of security automations for the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AutomationList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AutomationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutomationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('AutomationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/automations'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AutomationList"] + """Lists all the security automations in the specified resource group. Use the 'nextLink' property + in the response to get the next page of security automations for the specified resource group. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AutomationList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AutomationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutomationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('AutomationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations'} # type: ignore + + def get( + self, + resource_group_name, # type: str + automation_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Automation" + """Retrieves information about the model of a security automation. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Automation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Automation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Automation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Automation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}'} # type: ignore + + def create_or_update( + self, + resource_group_name, # type: str + automation_name, # type: str + automation, # type: "models.Automation" + **kwargs # type: Any + ): + # type: (...) -> "models.Automation" + """Creates or updates a security automation. If a security automation is already created and a + subsequent request is issued for the same automation id, then it will be updated. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :param automation: The security automation resource. + :type automation: ~azure.mgmt.security.models.Automation + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Automation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Automation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Automation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(automation, 'Automation') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Automation', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Automation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}'} # type: ignore + + def delete( + self, + resource_group_name, # type: str + automation_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes a security automation. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}'} # type: ignore + + def validate( + self, + resource_group_name, # type: str + automation_name, # type: str + automation, # type: "models.Automation" + **kwargs # type: Any + ): + # type: (...) -> "models.AutomationValidationStatus" + """Validates the security automation model before create or update. Any validation errors are + returned to the client. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param automation_name: The security automation name. + :type automation_name: str + :param automation: The security automation resource. + :type automation: ~azure.mgmt.security.models.Automation + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AutomationValidationStatus, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AutomationValidationStatus + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AutomationValidationStatus"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.validate.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'automationName': self._serialize.url("automation_name", automation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(automation, 'Automation') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AutomationValidationStatus', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + validate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/automations/{automationName}/validate'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliance_results_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliance_results_operations.py index 9b163bbbb1e0..7375e0fa68d6 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliance_results_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliance_results_operations.py @@ -1,171 +1,176 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class ComplianceResultsOperations(object): """ComplianceResultsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01" - - self.config = config + self._config = config def list( - self, scope, custom_headers=None, raw=False, **operation_config): + self, + scope, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ComplianceResultList"] """Security compliance results in the subscription. - :param scope: Scope of the query, can be subscription - (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management - group (/providers/Microsoft.Management/managementGroups/mgName). + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). :type scope: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of ComplianceResult - :rtype: - ~azure.mgmt.security.models.ComplianceResultPaged[~azure.mgmt.security.models.ComplianceResult] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ComplianceResultList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.ComplianceResultList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ComplianceResultList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'scope': self._serialize.url("scope", scope, 'str') + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('ComplianceResultList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.ComplianceResultPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/{scope}/providers/Microsoft.Security/complianceResults'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/complianceResults'} # type: ignore def get( - self, resource_id, compliance_result_name, custom_headers=None, raw=False, **operation_config): + self, + resource_id, # type: str + compliance_result_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ComplianceResult" """Security Compliance Result. :param resource_id: The identifier of the resource. :type resource_id: str - :param compliance_result_name: name of the desired assessment - compliance result + :param compliance_result_name: name of the desired assessment compliance result. :type compliance_result_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: ComplianceResult or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.ComplianceResult or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ComplianceResult, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ComplianceResult + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ComplianceResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'resourceId': self._serialize.url("resource_id", resource_id, 'str'), - 'complianceResultName': self._serialize.url("compliance_result_name", compliance_result_name, 'str') + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'complianceResultName': self._serialize.url("compliance_result_name", compliance_result_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('ComplianceResult', response) + deserialized = self._deserialize('ComplianceResult', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/complianceResults/{complianceResultName}'} + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/complianceResults/{complianceResultName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliances_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliances_operations.py index 90e921623526..931441db502c 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliances_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_compliances_operations.py @@ -1,172 +1,178 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class CompliancesOperations(object): """CompliancesOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01-preview" - - self.config = config + self._config = config def list( - self, scope, custom_headers=None, raw=False, **operation_config): + self, + scope, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ComplianceList"] """The Compliance scores of the specific management group. - :param scope: Scope of the query, can be subscription - (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management - group (/providers/Microsoft.Management/managementGroups/mgName). + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). :type scope: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Compliance - :rtype: - ~azure.mgmt.security.models.CompliancePaged[~azure.mgmt.security.models.Compliance] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ComplianceList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.ComplianceList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ComplianceList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'scope': self._serialize.url("scope", scope, 'str') + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('ComplianceList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.CompliancePaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/{scope}/providers/Microsoft.Security/compliances'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/compliances'} # type: ignore def get( - self, scope, compliance_name, custom_headers=None, raw=False, **operation_config): + self, + scope, # type: str + compliance_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Compliance" """Details of a specific Compliance. - :param scope: Scope of the query, can be subscription - (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management - group (/providers/Microsoft.Management/managementGroups/mgName). + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). :type scope: str - :param compliance_name: name of the Compliance + :param compliance_name: name of the Compliance. :type compliance_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Compliance or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Compliance or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Compliance, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Compliance + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Compliance"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'scope': self._serialize.url("scope", scope, 'str'), - 'complianceName': self._serialize.url("compliance_name", compliance_name, 'str') + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'complianceName': self._serialize.url("compliance_name", compliance_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Compliance', response) + deserialized = self._deserialize('Compliance', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/{scope}/providers/Microsoft.Security/compliances/{complianceName}'} + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/compliances/{complianceName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_connectors_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_connectors_operations.py new file mode 100644 index 000000000000..90cf41c6749a --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_connectors_operations.py @@ -0,0 +1,284 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class ConnectorsOperations(object): + """ConnectorsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ConnectorSettingList"] + """Cloud accounts connectors of a subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ConnectorSettingList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.ConnectorSettingList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ConnectorSettingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('ConnectorSettingList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors'} # type: ignore + + def get( + self, + connector_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ConnectorSetting" + """Details of a specific cloud account connector. + + :param connector_name: Name of the cloud account connector. + :type connector_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ConnectorSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ConnectorSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ConnectorSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'connectorName': self._serialize.url("connector_name", connector_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ConnectorSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}'} # type: ignore + + def create_or_update( + self, + connector_name, # type: str + connector_setting, # type: "models.ConnectorSetting" + **kwargs # type: Any + ): + # type: (...) -> "models.ConnectorSetting" + """Create a cloud account connector or update an existing one. Connect to your AWS cloud account + using either account credentials or role-based authentication. + + :param connector_name: Name of the cloud account connector. + :type connector_name: str + :param connector_setting: Settings for the cloud account connector. + :type connector_setting: ~azure.mgmt.security.models.ConnectorSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ConnectorSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ConnectorSetting + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ConnectorSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'connectorName': self._serialize.url("connector_name", connector_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(connector_setting, 'ConnectorSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ConnectorSetting', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}'} # type: ignore + + def delete( + self, + connector_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete a cloud account connector from a subscription. + + :param connector_name: Name of the cloud account connector. + :type connector_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'connectorName': self._serialize.url("connector_name", connector_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/connectors/{connectorName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_device_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_device_operations.py new file mode 100644 index 000000000000..3666962e457d --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_device_operations.py @@ -0,0 +1,103 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DeviceOperations(object): + """DeviceOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_id, # type: str + device_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Device" + """Get device. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_id: Identifier of the device. + :type device_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Device, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Device + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Device"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceId': self._serialize.url("device_id", device_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Device', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/devices/{deviceId}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_device_security_groups_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_device_security_groups_operations.py new file mode 100644 index 000000000000..8a1115029ef0 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_device_security_groups_operations.py @@ -0,0 +1,303 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DeviceSecurityGroupsOperations(object): + """DeviceSecurityGroupsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DeviceSecurityGroupList"] + """Use this method get the list of device security groups for the specified IoT Hub resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DeviceSecurityGroupList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.DeviceSecurityGroupList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceSecurityGroupList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('DeviceSecurityGroupList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups'} # type: ignore + + def get( + self, + resource_id, # type: str + device_security_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.DeviceSecurityGroup" + """Use this method to get the device security group for the specified IoT Hub resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_security_group_name: The name of the device security group. Note that the name of + the device security group is case insensitive. + :type device_security_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DeviceSecurityGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.DeviceSecurityGroup + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceSecurityGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceSecurityGroupName': self._serialize.url("device_security_group_name", device_security_group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('DeviceSecurityGroup', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}'} # type: ignore + + def create_or_update( + self, + resource_id, # type: str + device_security_group_name, # type: str + device_security_group, # type: "models.DeviceSecurityGroup" + **kwargs # type: Any + ): + # type: (...) -> "models.DeviceSecurityGroup" + """Use this method to creates or updates the device security group on a specified IoT Hub + resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_security_group_name: The name of the device security group. Note that the name of + the device security group is case insensitive. + :type device_security_group_name: str + :param device_security_group: Security group object. + :type device_security_group: ~azure.mgmt.security.models.DeviceSecurityGroup + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DeviceSecurityGroup, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.DeviceSecurityGroup + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceSecurityGroup"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceSecurityGroupName': self._serialize.url("device_security_group_name", device_security_group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(device_security_group, 'DeviceSecurityGroup') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('DeviceSecurityGroup', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('DeviceSecurityGroup', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}'} # type: ignore + + def delete( + self, + resource_id, # type: str + device_security_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """User this method to deletes the device security group. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param device_security_group_name: The name of the device security group. Note that the name of + the device security group is case insensitive. + :type device_security_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + 'deviceSecurityGroupName': self._serialize.url("device_security_group_name", device_security_group_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/deviceSecurityGroups/{deviceSecurityGroupName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_devices_for_hub_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_devices_for_hub_operations.py new file mode 100644 index 000000000000..81892de17303 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_devices_for_hub_operations.py @@ -0,0 +1,131 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DevicesForHubOperations(object): + """DevicesForHubOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_id, # type: str + limit=None, # type: Optional[int] + skip_token=None, # type: Optional[str] + device_management_type=None, # type: Optional[Union[str, "models.ManagementState"]] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DeviceList"] + """Get list of the devices for the specified IoT Hub resource. + + :param resource_id: The identifier of the resource. + :type resource_id: str + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :param device_management_type: Get devices only from specific type, Managed or Unmanaged. + :type device_management_type: str or ~azure.mgmt.security.models.ManagementState + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DeviceList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.DeviceList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'resourceId': self._serialize.url("resource_id", resource_id, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + if device_management_type is not None: + query_parameters['deviceManagementType'] = self._serialize.query("device_management_type", device_management_type, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('DeviceList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{resourceId}/providers/Microsoft.Security/devices'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_devices_for_subscription_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_devices_for_subscription_operations.py new file mode 100644 index 000000000000..0cee801620b9 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_devices_for_subscription_operations.py @@ -0,0 +1,128 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DevicesForSubscriptionOperations(object): + """DevicesForSubscriptionOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + limit=None, # type: Optional[int] + skip_token=None, # type: Optional[str] + device_management_type=None, # type: Optional[Union[str, "models.ManagementState"]] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DeviceList"] + """Get list of the devices by their subscription. + + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :param device_management_type: Get devices only from specific type, Managed or Unmanaged. + :type device_management_type: str or ~azure.mgmt.security.models.ManagementState + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DeviceList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.DeviceList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DeviceList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + if device_management_type is not None: + query_parameters['deviceManagementType'] = self._serialize.query("device_management_type", device_management_type, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('DeviceList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/devices'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_discovered_security_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_discovered_security_solutions_operations.py index bd553e4567fd..6f43153cfc28 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_discovered_security_solutions_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_discovered_security_solutions_operations.py @@ -1,238 +1,242 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class DiscoveredSecuritySolutionsOperations(object): """DiscoveredSecuritySolutionsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DiscoveredSecuritySolutionList"] """Gets a list of discovered Security Solutions for the subscription. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of DiscoveredSecuritySolution - :rtype: - ~azure.mgmt.security.models.DiscoveredSecuritySolutionPaged[~azure.mgmt.security.models.DiscoveredSecuritySolution] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiscoveredSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.DiscoveredSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiscoveredSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('DiscoveredSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.DiscoveredSecuritySolutionPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/discoveredSecuritySolutions'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/discoveredSecuritySolutions'} # type: ignore def list_by_home_region( - self, custom_headers=None, raw=False, **operation_config): - """Gets a list of discovered Security Solutions for the subscription and - location. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of DiscoveredSecuritySolution - :rtype: - ~azure.mgmt.security.models.DiscoveredSecuritySolutionPaged[~azure.mgmt.security.models.DiscoveredSecuritySolution] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DiscoveredSecuritySolutionList"] + """Gets a list of discovered Security Solutions for the subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiscoveredSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.DiscoveredSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiscoveredSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_home_region.metadata['url'] + url = self.list_by_home_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('DiscoveredSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.DiscoveredSecuritySolutionPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions'} + return ItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions'} # type: ignore def get( - self, resource_group_name, discovered_security_solution_name, custom_headers=None, raw=False, **operation_config): + self, + resource_group_name, # type: str + discovered_security_solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.DiscoveredSecuritySolution" """Gets a specific discovered Security Solution. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param discovered_security_solution_name: Name of a discovered - security solution. + :param discovered_security_solution_name: Name of a discovered security solution. :type discovered_security_solution_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: DiscoveredSecuritySolution or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.DiscoveredSecuritySolution or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DiscoveredSecuritySolution, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.DiscoveredSecuritySolution + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiscoveredSecuritySolution"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'discoveredSecuritySolutionName': self._serialize.url("discovered_security_solution_name", discovered_security_solution_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'discoveredSecuritySolutionName': self._serialize.url("discovered_security_solution_name", discovered_security_solution_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('DiscoveredSecuritySolution', response) + deserialized = self._deserialize('DiscoveredSecuritySolution', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions/{discoveredSecuritySolutionName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/discoveredSecuritySolutions/{discoveredSecuritySolutionName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_external_security_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_external_security_solutions_operations.py index 69b6019e5e25..a716effe5292 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_external_security_solutions_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_external_security_solutions_operations.py @@ -1,238 +1,242 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class ExternalSecuritySolutionsOperations(object): """ExternalSecuritySolutionsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ExternalSecuritySolutionList"] """Gets a list of external security solutions for the subscription. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of ExternalSecuritySolution - :rtype: - ~azure.mgmt.security.models.ExternalSecuritySolutionPaged[~azure.mgmt.security.models.ExternalSecuritySolution] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ExternalSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.ExternalSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExternalSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('ExternalSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.ExternalSecuritySolutionPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/externalSecuritySolutions'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/externalSecuritySolutions'} # type: ignore def list_by_home_region( - self, custom_headers=None, raw=False, **operation_config): - """Gets a list of external Security Solutions for the subscription and - location. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of ExternalSecuritySolution - :rtype: - ~azure.mgmt.security.models.ExternalSecuritySolutionPaged[~azure.mgmt.security.models.ExternalSecuritySolution] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.ExternalSecuritySolutionList"] + """Gets a list of external Security Solutions for the subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ExternalSecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.ExternalSecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExternalSecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_home_region.metadata['url'] + url = self.list_by_home_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('ExternalSecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.ExternalSecuritySolutionPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions'} + return ItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions'} # type: ignore def get( - self, resource_group_name, external_security_solutions_name, custom_headers=None, raw=False, **operation_config): + self, + resource_group_name, # type: str + external_security_solutions_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ExternalSecuritySolution" """Gets a specific external Security Solution. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param external_security_solutions_name: Name of an external security - solution. + :param external_security_solutions_name: Name of an external security solution. :type external_security_solutions_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: ExternalSecuritySolution or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.ExternalSecuritySolution or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ExternalSecuritySolution, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ExternalSecuritySolution + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ExternalSecuritySolution"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'externalSecuritySolutionsName': self._serialize.url("external_security_solutions_name", external_security_solutions_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'externalSecuritySolutionsName': self._serialize.url("external_security_solutions_name", external_security_solutions_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('ExternalSecuritySolution', response) + deserialized = self._deserialize('ExternalSecuritySolution', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions/{externalSecuritySolutionsName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/ExternalSecuritySolutions/{externalSecuritySolutionsName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_information_protection_policies_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_information_protection_policies_operations.py index 9ee97c1bbf93..1fbd92ae9b70 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_information_protection_policies_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_information_protection_policies_operations.py @@ -1,238 +1,250 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class InformationProtectionPoliciesOperations(object): """InformationProtectionPoliciesOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01-preview" - - self.config = config + self._config = config def get( - self, scope, information_protection_policy_name, custom_headers=None, raw=False, **operation_config): + self, + scope, # type: str + information_protection_policy_name, # type: Union[str, "models.Enum17"] + **kwargs # type: Any + ): + # type: (...) -> "models.InformationProtectionPolicy" """Details of the information protection policy. - :param scope: Scope of the query, can be subscription - (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management - group (/providers/Microsoft.Management/managementGroups/mgName). + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). :type scope: str - :param information_protection_policy_name: Name of the information - protection policy. Possible values include: 'effective', 'custom' - :type information_protection_policy_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: InformationProtectionPolicy or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.InformationProtectionPolicy or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param information_protection_policy_name: Name of the information protection policy. + :type information_protection_policy_name: str or ~azure.mgmt.security.models.Enum17 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: InformationProtectionPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.InformationProtectionPolicy + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.InformationProtectionPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'scope': self._serialize.url("scope", scope, 'str'), - 'informationProtectionPolicyName': self._serialize.url("information_protection_policy_name", information_protection_policy_name, 'str') + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'informationProtectionPolicyName': self._serialize.url("information_protection_policy_name", information_protection_policy_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('InformationProtectionPolicy', response) + deserialized = self._deserialize('InformationProtectionPolicy', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}'} + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}'} # type: ignore def create_or_update( - self, scope, information_protection_policy_name, custom_headers=None, raw=False, **operation_config): + self, + scope, # type: str + information_protection_policy_name, # type: Union[str, "models.Enum17"] + information_protection_policy, # type: "models.InformationProtectionPolicy" + **kwargs # type: Any + ): + # type: (...) -> "models.InformationProtectionPolicy" """Details of the information protection policy. - :param scope: Scope of the query, can be subscription - (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management - group (/providers/Microsoft.Management/managementGroups/mgName). + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). :type scope: str - :param information_protection_policy_name: Name of the information - protection policy. Possible values include: 'effective', 'custom' - :type information_protection_policy_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: InformationProtectionPolicy or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.InformationProtectionPolicy or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param information_protection_policy_name: Name of the information protection policy. + :type information_protection_policy_name: str or ~azure.mgmt.security.models.Enum17 + :param information_protection_policy: Information protection policy. + :type information_protection_policy: ~azure.mgmt.security.models.InformationProtectionPolicy + :keyword callable cls: A custom type or function that will be passed the direct response + :return: InformationProtectionPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.InformationProtectionPolicy + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.InformationProtectionPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.create_or_update.metadata['url'] + url = self.create_or_update.metadata['url'] # type: ignore path_format_arguments = { - 'scope': self._serialize.url("scope", scope, 'str'), - 'informationProtectionPolicyName': self._serialize.url("information_protection_policy_name", information_protection_policy_name, 'str') + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'informationProtectionPolicyName': self._serialize.url("information_protection_policy_name", information_protection_policy_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(information_protection_policy, 'InformationProtectionPolicy') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200, 201]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None if response.status_code == 200: - deserialized = self._deserialize('InformationProtectionPolicy', response) + deserialized = self._deserialize('InformationProtectionPolicy', pipeline_response) + if response.status_code == 201: - deserialized = self._deserialize('InformationProtectionPolicy', response) + deserialized = self._deserialize('InformationProtectionPolicy', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create_or_update.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}'} + create_or_update.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies/{informationProtectionPolicyName}'} # type: ignore def list( - self, scope, custom_headers=None, raw=False, **operation_config): + self, + scope, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.InformationProtectionPolicyList"] """Information protection policies of a specific management group. - :param scope: Scope of the query, can be subscription - (/subscriptions/0b06d9ea-afe6-4779-bd59-30e5c2d9d13f) or management - group (/providers/Microsoft.Management/managementGroups/mgName). + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). :type scope: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of InformationProtectionPolicy - :rtype: - ~azure.mgmt.security.models.InformationProtectionPolicyPaged[~azure.mgmt.security.models.InformationProtectionPolicy] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either InformationProtectionPolicyList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.InformationProtectionPolicyList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.InformationProtectionPolicyList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'scope': self._serialize.url("scope", scope, 'str') + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('InformationProtectionPolicyList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.InformationProtectionPolicyPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/informationProtectionPolicies'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_aggregated_alert_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_aggregated_alert_operations.py deleted file mode 100644 index b4a3340cf7e6..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_aggregated_alert_operations.py +++ /dev/null @@ -1,162 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsAnalyticsAggregatedAlertOperations(object): - """IoTSecuritySolutionsAnalyticsAggregatedAlertOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def get( - self, resource_group_name, solution_name, aggregated_alert_name, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param aggregated_alert_name: Identifier of the aggregated alert - :type aggregated_alert_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecurityAggregatedAlert or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.IoTSecurityAggregatedAlert or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` - """ - # Construct URL - url = self.get.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), - 'aggregatedAlertName': self._serialize.url("aggregated_alert_name", aggregated_alert_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('IoTSecurityAggregatedAlert', response) - - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response - - return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}'} - - def dismiss( - self, resource_group_name, solution_name, aggregated_alert_name, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param aggregated_alert_name: Identifier of the aggregated alert - :type aggregated_alert_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` - """ - # Construct URL - url = self.dismiss.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), - 'aggregatedAlertName': self._serialize.url("aggregated_alert_name", aggregated_alert_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - - # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.post(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}/dismiss'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_aggregated_alerts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_aggregated_alerts_operations.py deleted file mode 100644 index 8e47ea54d879..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_aggregated_alerts_operations.py +++ /dev/null @@ -1,117 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations(object): - """IoTSecuritySolutionsAnalyticsAggregatedAlertsOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def list( - self, resource_group_name, solution_name, top=None, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param top: The number of results to retrieve. - :type top: int - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of IoTSecurityAggregatedAlert - :rtype: - ~azure.mgmt.security.models.IoTSecurityAggregatedAlertPaged[~azure.mgmt.security.models.IoTSecurityAggregatedAlert] - :raises: :class:`CloudError` - """ - def prepare_request(next_link=None): - if not next_link: - # Construct URL - url = self.list.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if top is not None: - query_parameters['$top'] = self._serialize.query("top", top, 'int') - - else: - url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - return request - - def internal_paging(next_link=None): - request = prepare_request(next_link) - - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response - - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.IoTSecurityAggregatedAlertPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_operations.py deleted file mode 100644 index 70e6b43692b5..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_operations.py +++ /dev/null @@ -1,167 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsAnalyticsOperations(object): - """IoTSecuritySolutionsAnalyticsOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def get_all( - self, resource_group_name, solution_name, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecuritySolutionAnalyticsModelList or ClientRawResponse if - raw=true - :rtype: - ~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelList or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` - """ - # Construct URL - url = self.get_all.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('IoTSecuritySolutionAnalyticsModelList', response) - - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response - - return deserialized - get_all.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels'} - - def get_default( - self, resource_group_name, solution_name, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecuritySolutionAnalyticsModel or ClientRawResponse if - raw=true - :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel - or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` - """ - # Construct URL - url = self.get_default.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('IoTSecuritySolutionAnalyticsModel', response) - - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response - - return deserialized - get_default.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_recommendation_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_recommendation_operations.py deleted file mode 100644 index 3e251e9f060e..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_recommendation_operations.py +++ /dev/null @@ -1,108 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsAnalyticsRecommendationOperations(object): - """IoTSecuritySolutionsAnalyticsRecommendationOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def get( - self, resource_group_name, solution_name, aggregated_recommendation_name, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param aggregated_recommendation_name: Identifier of the aggregated - recommendation - :type aggregated_recommendation_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecurityAggregatedRecommendation or ClientRawResponse if - raw=true - :rtype: - ~azure.mgmt.security.models.IoTSecurityAggregatedRecommendation or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` - """ - # Construct URL - url = self.get.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), - 'aggregatedRecommendationName': self._serialize.url("aggregated_recommendation_name", aggregated_recommendation_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('IoTSecurityAggregatedRecommendation', response) - - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response - - return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations/{aggregatedRecommendationName}'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_recommendations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_recommendations_operations.py deleted file mode 100644 index 3276e998ec1a..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_analytics_recommendations_operations.py +++ /dev/null @@ -1,118 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsAnalyticsRecommendationsOperations(object): - """IoTSecuritySolutionsAnalyticsRecommendationsOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def list( - self, resource_group_name, solution_name, top=None, custom_headers=None, raw=False, **operation_config): - """Security Analytics of a security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param solution_name: The solution manager name - :type solution_name: str - :param top: The number of results to retrieve. - :type top: int - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of - IoTSecurityAggregatedRecommendation - :rtype: - ~azure.mgmt.security.models.IoTSecurityAggregatedRecommendationPaged[~azure.mgmt.security.models.IoTSecurityAggregatedRecommendation] - :raises: :class:`CloudError` - """ - def prepare_request(next_link=None): - if not next_link: - # Construct URL - url = self.list.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if top is not None: - query_parameters['$top'] = self._serialize.query("top", top, 'int') - - else: - url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - return request - - def internal_paging(next_link=None): - request = prepare_request(next_link) - - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response - - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.IoTSecurityAggregatedRecommendationPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_operations.py deleted file mode 100644 index b3f222701615..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_operations.py +++ /dev/null @@ -1,111 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsOperations(object): - """IoTSecuritySolutionsOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def list( - self, filter=None, custom_headers=None, raw=False, **operation_config): - """List of security solutions. - - :param filter: filter the Security Solution with OData syntax. - supporting filter by iotHubs - :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of IoTSecuritySolutionModel - :rtype: - ~azure.mgmt.security.models.IoTSecuritySolutionModelPaged[~azure.mgmt.security.models.IoTSecuritySolutionModel] - :raises: :class:`CloudError` - """ - def prepare_request(next_link=None): - if not next_link: - # Construct URL - url = self.list.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') - - else: - url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - return request - - def internal_paging(next_link=None): - request = prepare_request(next_link) - - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response - - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.IoTSecuritySolutionModelPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotSecuritySolutions'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_resource_group_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_resource_group_operations.py deleted file mode 100644 index 1536a6eb452c..000000000000 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_io_tsecurity_solutions_resource_group_operations.py +++ /dev/null @@ -1,115 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -# Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. -# -------------------------------------------------------------------------- - -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError - -from .. import models - - -class IoTSecuritySolutionsResourceGroupOperations(object): - """IoTSecuritySolutionsResourceGroupOperations operations. - - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. - - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". - """ - - models = models - - def __init__(self, client, config, serializer, deserializer): - - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config - - def list( - self, resource_group_name, filter=None, custom_headers=None, raw=False, **operation_config): - """List of security solutions. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. - :type resource_group_name: str - :param filter: filter the Security Solution with OData syntax. - supporting filter by iotHubs - :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of IoTSecuritySolutionModel - :rtype: - ~azure.mgmt.security.models.IoTSecuritySolutionModelPaged[~azure.mgmt.security.models.IoTSecuritySolutionModel] - :raises: :class:`CloudError` - """ - def prepare_request(next_link=None): - if not next_link: - # Construct URL - url = self.list.metadata['url'] - path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$') - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') - if filter is not None: - query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') - - else: - url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) - return request - - def internal_paging(next_link=None): - request = prepare_request(next_link) - - response = self._client.send(request, stream=False, **operation_config) - - if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response - - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.IoTSecuritySolutionModelPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions'} diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_alert_types_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_alert_types_operations.py new file mode 100644 index 000000000000..fe86da1e896f --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_alert_types_operations.py @@ -0,0 +1,169 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotAlertTypesOperations(object): + """IotAlertTypesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotAlertTypeList" + """List IoT alert types. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotAlertTypeList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotAlertTypeList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlertTypeList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotAlertTypeList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlertTypes'} # type: ignore + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + iot_alert_type_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotAlertType" + """Get IoT alert type. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_alert_type_name: Name of the alert type. + :type iot_alert_type_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotAlertType, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotAlertType + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlertType"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotAlertTypeName': self._serialize.url("iot_alert_type_name", iot_alert_type_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotAlertType', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlertTypes/{iotAlertTypeName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_alerts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_alerts_operations.py new file mode 100644 index 000000000000..c362108bfb52 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_alerts_operations.py @@ -0,0 +1,216 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotAlertsOperations(object): + """IotAlertsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + min_start_time_utc=None, # type: Optional[str] + max_start_time_utc=None, # type: Optional[str] + alert_type=None, # type: Optional[str] + compromised_entity=None, # type: Optional[str] + limit=None, # type: Optional[int] + skip_token=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IotAlertList"] + """List IoT alerts. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param min_start_time_utc: Filter by minimum startTimeUtc (ISO 8601 format). + :type min_start_time_utc: str + :param max_start_time_utc: Filter by maximum startTimeUtc (ISO 8601 format). + :type max_start_time_utc: str + :param alert_type: Filter by alert type. + :type alert_type: str + :param compromised_entity: Filter by compromised device. + :type compromised_entity: str + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IotAlertList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.IotAlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if min_start_time_utc is not None: + query_parameters['startTimeUtc>'] = self._serialize.query("min_start_time_utc", min_start_time_utc, 'str') + if max_start_time_utc is not None: + query_parameters['startTimeUtc<'] = self._serialize.query("max_start_time_utc", max_start_time_utc, 'str') + if alert_type is not None: + query_parameters['alertType'] = self._serialize.query("alert_type", alert_type, 'str') + if compromised_entity is not None: + query_parameters['compromisedEntity'] = self._serialize.query("compromised_entity", compromised_entity, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IotAlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlerts'} # type: ignore + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + iot_alert_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotAlert" + """Get IoT alert. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_alert_id: Id of the alert. + :type iot_alert_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotAlert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotAlert + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotAlert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotAlertId': self._serialize.url("iot_alert_id", iot_alert_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotAlert', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotAlerts/{iotAlertId}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_defender_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_defender_settings_operations.py new file mode 100644 index 000000000000..7c4c6b22bbe0 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_defender_settings_operations.py @@ -0,0 +1,309 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotDefenderSettingsOperations(object): + """IotDefenderSettingsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> "models.IotDefenderSettingsList" + """List IoT Defender Settings. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotDefenderSettingsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotDefenderSettingsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotDefenderSettingsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotDefenderSettingsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings'} # type: ignore + + def get( + self, + **kwargs # type: Any + ): + # type: (...) -> "models.IotDefenderSettingsModel" + """Get IoT Defender Settings. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotDefenderSettingsModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotDefenderSettingsModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotDefenderSettingsModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotDefenderSettingsModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default'} # type: ignore + + def create_or_update( + self, + iot_defender_settings_model, # type: "models.IotDefenderSettingsModel" + **kwargs # type: Any + ): + # type: (...) -> "models.IotDefenderSettingsModel" + """Create or update IoT Defender settings. + + :param iot_defender_settings_model: The IoT defender settings model. + :type iot_defender_settings_model: ~azure.mgmt.security.models.IotDefenderSettingsModel + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotDefenderSettingsModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotDefenderSettingsModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotDefenderSettingsModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iot_defender_settings_model, 'IotDefenderSettingsModel') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IotDefenderSettingsModel', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IotDefenderSettingsModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default'} # type: ignore + + def delete( + self, + **kwargs # type: Any + ): + # type: (...) -> None + """Delete IoT Defender settings. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default'} # type: ignore + + def package_downloads( + self, + **kwargs # type: Any + ): + # type: (...) -> "models.PackageDownloads" + """Information about downloadable packages. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PackageDownloads, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.PackageDownloads + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PackageDownloads"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.package_downloads.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PackageDownloads', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + package_downloads.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotDefenderSettings/default/packageDownloads'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_recommendation_types_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_recommendation_types_operations.py new file mode 100644 index 000000000000..bbcfd2510d74 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_recommendation_types_operations.py @@ -0,0 +1,169 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotRecommendationTypesOperations(object): + """IotRecommendationTypesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotRecommendationTypeList" + """List IoT recommendation types. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotRecommendationTypeList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotRecommendationTypeList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendationTypeList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotRecommendationTypeList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendationTypes'} # type: ignore + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + iot_recommendation_type_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotRecommendationType" + """Get IoT recommendation type. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_recommendation_type_name: Name of the recommendation type. + :type iot_recommendation_type_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotRecommendationType, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotRecommendationType + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendationType"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotRecommendationTypeName': self._serialize.url("iot_recommendation_type_name", iot_recommendation_type_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotRecommendationType', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendationTypes/{iotRecommendationTypeName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_recommendations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_recommendations_operations.py new file mode 100644 index 000000000000..6582d1d6f83d --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_recommendations_operations.py @@ -0,0 +1,206 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotRecommendationsOperations(object): + """IotRecommendationsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + recommendation_type=None, # type: Optional[str] + device_id=None, # type: Optional[str] + limit=None, # type: Optional[int] + skip_token=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IotRecommendationList"] + """List IoT recommendations. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param recommendation_type: Filter by recommendation type. + :type recommendation_type: str + :param device_id: Filter by device id. + :type device_id: str + :param limit: Limit the number of items returned in a single page. + :type limit: int + :param skip_token: Skip token used for pagination. + :type skip_token: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IotRecommendationList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.IotRecommendationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if recommendation_type is not None: + query_parameters['recommendationType'] = self._serialize.query("recommendation_type", recommendation_type, 'str') + if device_id is not None: + query_parameters['deviceId'] = self._serialize.query("device_id", device_id, 'str') + if limit is not None: + query_parameters['$limit'] = self._serialize.query("limit", limit, 'int') + if skip_token is not None: + query_parameters['$skipToken'] = self._serialize.query("skip_token", skip_token, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IotRecommendationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendations'} # type: ignore + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + iot_recommendation_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotRecommendation" + """Get IoT recommendation. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param iot_recommendation_id: Id of the recommendation. + :type iot_recommendation_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotRecommendation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotRecommendation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotRecommendation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'iotRecommendationId': self._serialize.url("iot_recommendation_id", iot_recommendation_id, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotRecommendation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/iotRecommendations/{iotRecommendationId}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_analytics_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_analytics_operations.py new file mode 100644 index 000000000000..7069d884cd03 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_analytics_operations.py @@ -0,0 +1,165 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionAnalyticsOperations(object): + """IotSecuritySolutionAnalyticsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecuritySolutionAnalyticsModelList" + """Use this method to get IoT security Analytics metrics in an array. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionAnalyticsModelList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModelList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionAnalyticsModelList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecuritySolutionAnalyticsModelList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels'} # type: ignore + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecuritySolutionAnalyticsModel" + """Use this method to get IoT Security Analytics metrics. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionAnalyticsModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionAnalyticsModel + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionAnalyticsModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecuritySolutionAnalyticsModel', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_operations.py index 3a3c15481184..86fcce0056dc 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solution_operations.py @@ -1,297 +1,455 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class IotSecuritySolutionOperations(object): """IotSecuritySolutionOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-08-01". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-08-01" - - self.config = config + self._config = config + + def list_by_subscription( + self, + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IoTSecuritySolutionsList"] + """Use this method to get the list of IoT Security solutions by subscription. + + :param filter: Filter the IoT Security solution with OData syntax. Supports filtering by + iotHubs. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecuritySolutionsList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.IoTSecuritySolutionsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecuritySolutionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/iotSecuritySolutions'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name, # type: str + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IoTSecuritySolutionsList"] + """Use this method to get the list IoT Security solutions organized by resource group. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param filter: Filter the IoT Security solution with OData syntax. Supports filtering by + iotHubs. + :type filter: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecuritySolutionsList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.IoTSecuritySolutionsList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if filter is not None: + query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecuritySolutionsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions'} # type: ignore def get( - self, resource_group_name, solution_name, custom_headers=None, raw=False, **operation_config): - """Details of a specific iot security solution. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecuritySolutionModel" + """User this method to get details of a specific IoT Security solution based on solution name. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param solution_name: The solution manager name + :param solution_name: The name of the IoT Security solution. :type solution_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecuritySolutionModel or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('IoTSecuritySolutionModel', response) + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} - - def create( - self, resource_group_name, solution_name, iot_security_solution_data, custom_headers=None, raw=False, **operation_config): - """Create new solution manager. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore + + def create_or_update( + self, + resource_group_name, # type: str + solution_name, # type: str + iot_security_solution_data, # type: "models.IoTSecuritySolutionModel" + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecuritySolutionModel" + """Use this method to create or update yours IoT Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param solution_name: The solution manager name + :param solution_name: The name of the IoT Security solution. :type solution_name: str - :param iot_security_solution_data: The security solution data - :type iot_security_solution_data: - ~azure.mgmt.security.models.IoTSecuritySolutionModel - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecuritySolutionModel or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param iot_security_solution_data: The security solution data. + :type iot_security_solution_data: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.create.metadata['url'] + url = self.create_or_update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(iot_security_solution_data, 'IoTSecuritySolutionModel') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iot_security_solution_data, 'IoTSecuritySolutionModel') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200, 201]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None if response.status_code == 200: - deserialized = self._deserialize('IoTSecuritySolutionModel', response) + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) + if response.status_code == 201: - deserialized = self._deserialize('IoTSecuritySolutionModel', response) + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore def update( - self, resource_group_name, solution_name, update_iot_security_solution_data, custom_headers=None, raw=False, **operation_config): - """update existing Security Solution tags or user defined resources. To + self, + resource_group_name, # type: str + solution_name, # type: str + update_iot_security_solution_data, # type: "models.UpdateIotSecuritySolutionData" + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecuritySolutionModel" + """Use this method to update existing IoT Security solution tags or user defined resources. To update other fields use the CreateOrUpdate method. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param solution_name: The solution manager name + :param solution_name: The name of the IoT Security solution. :type solution_name: str - :param update_iot_security_solution_data: The security solution data - :type update_iot_security_solution_data: - ~azure.mgmt.security.models.UpdateIotSecuritySolutionData - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: IoTSecuritySolutionModel or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param update_iot_security_solution_data: The security solution data. + :type update_iot_security_solution_data: ~azure.mgmt.security.models.UpdateIotSecuritySolutionData + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecuritySolutionModel, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecuritySolutionModel + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecuritySolutionModel"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.update.metadata['url'] + url = self.update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(update_iot_security_solution_data, 'UpdateIotSecuritySolutionData') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.patch(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(update_iot_security_solution_data, 'UpdateIotSecuritySolutionData') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('IoTSecuritySolutionModel', response) + deserialized = self._deserialize('IoTSecuritySolutionModel', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} + update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore def delete( - self, resource_group_name, solution_name, custom_headers=None, raw=False, **operation_config): - """Create new solution manager. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Use this method to delete yours IoT Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param solution_name: The solution manager name + :param solution_name: The name of the IoT Security solution. :type solution_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + # Construct URL - url = self.delete.metadata['url'] + url = self.delete.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'solutionName': self._serialize.url("solution_name", solution_name, 'str') + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.delete(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200, 204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solutions_analytics_aggregated_alert_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solutions_analytics_aggregated_alert_operations.py new file mode 100644 index 000000000000..682c77a209a6 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solutions_analytics_aggregated_alert_operations.py @@ -0,0 +1,253 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionsAnalyticsAggregatedAlertOperations(object): + """IotSecuritySolutionsAnalyticsAggregatedAlertOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + top=None, # type: Optional[int] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IoTSecurityAggregatedAlertList"] + """Use this method to get the aggregated alert list of yours IoT Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param top: Number of results to retrieve. + :type top: int + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecurityAggregatedAlertList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.IoTSecurityAggregatedAlertList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedAlertList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if top is not None: + query_parameters['$top'] = self._serialize.query("top", top, 'int') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecurityAggregatedAlertList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts'} # type: ignore + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + aggregated_alert_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecurityAggregatedAlert" + """Use this method to get a single the aggregated alert of yours IoT Security solution. This + aggregation is performed by alert name. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param aggregated_alert_name: Identifier of the aggregated alert. + :type aggregated_alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecurityAggregatedAlert, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecurityAggregatedAlert + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedAlert"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'aggregatedAlertName': self._serialize.url("aggregated_alert_name", aggregated_alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecurityAggregatedAlert', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}'} # type: ignore + + def dismiss( + self, + resource_group_name, # type: str + solution_name, # type: str + aggregated_alert_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Use this method to dismiss an aggregated IoT Security Solution Alert. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param aggregated_alert_name: Identifier of the aggregated alert. + :type aggregated_alert_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.dismiss.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'aggregatedAlertName': self._serialize.url("aggregated_alert_name", aggregated_alert_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + dismiss.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedAlerts/{aggregatedAlertName}/dismiss'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solutions_analytics_recommendation_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solutions_analytics_recommendation_operations.py new file mode 100644 index 000000000000..f506216e7bf3 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_security_solutions_analytics_recommendation_operations.py @@ -0,0 +1,193 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotSecuritySolutionsAnalyticsRecommendationOperations(object): + """IotSecuritySolutionsAnalyticsRecommendationOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def get( + self, + resource_group_name, # type: str + solution_name, # type: str + aggregated_recommendation_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IoTSecurityAggregatedRecommendation" + """Use this method to get the aggregated security analytics recommendation of yours IoT Security + solution. This aggregation is performed by recommendation name. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param aggregated_recommendation_name: Name of the recommendation aggregated for this query. + :type aggregated_recommendation_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IoTSecurityAggregatedRecommendation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IoTSecurityAggregatedRecommendation + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedRecommendation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + 'aggregatedRecommendationName': self._serialize.url("aggregated_recommendation_name", aggregated_recommendation_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IoTSecurityAggregatedRecommendation', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations/{aggregatedRecommendationName}'} # type: ignore + + def list( + self, + resource_group_name, # type: str + solution_name, # type: str + top=None, # type: Optional[int] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IoTSecurityAggregatedRecommendationList"] + """Use this method to get the list of aggregated security analytics recommendations of yours IoT + Security solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param solution_name: The name of the IoT Security solution. + :type solution_name: str + :param top: Number of results to retrieve. + :type top: int + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IoTSecurityAggregatedRecommendationList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.IoTSecurityAggregatedRecommendationList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IoTSecurityAggregatedRecommendationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-08-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'solutionName': self._serialize.url("solution_name", solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if top is not None: + query_parameters['$top'] = self._serialize.query("top", top, 'int') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IoTSecurityAggregatedRecommendationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/iotSecuritySolutions/{solutionName}/analyticsModels/default/aggregatedRecommendations'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_sensors_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_sensors_operations.py new file mode 100644 index 000000000000..5dbcf3d2b3fd --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_iot_sensors_operations.py @@ -0,0 +1,332 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, IO, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IotSensorsOperations(object): + """IotSensorsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + scope, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotSensorsList" + """List IoT sensors. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotSensorsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotSensorsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotSensorsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotSensorsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors'} # type: ignore + + def get( + self, + scope, # type: str + iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotSensor" + """Get IoT sensor. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}'} # type: ignore + + def create_or_update( + self, + scope, # type: str + iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IotSensor" + """Create or update IoT sensor. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.IotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.put(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IotSensor', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}'} # type: ignore + + def delete( + self, + scope, # type: str + iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete IoT sensor. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}'} # type: ignore + + def download_activation( + self, + scope, # type: str + iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> IO + """Download sensor activation file. + + :param scope: Scope of the query (IoT Hub, /providers/Microsoft.Devices/iotHubs/myHub). + :type scope: str + :param iot_sensor_name: Name of the IoT sensor. + :type iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IO, or the result of cls(response) + :rtype: IO + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[IO] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/zip" + + # Construct URL + url = self.download_activation.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'iotSensorName': self._serialize.url("iot_sensor_name", iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=True, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = response.stream_download(self._client._pipeline) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + download_activation.metadata = {'url': '/{scope}/providers/Microsoft.Security/iotSensors/{iotSensorName}/downloadActivation'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_jit_network_access_policies_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_jit_network_access_policies_operations.py index 48df52e84dba..64e6333d856b 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_jit_network_access_policies_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_jit_network_access_policies_operations.py @@ -1,587 +1,589 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class JitNetworkAccessPoliciesOperations(object): """JitNetworkAccessPoliciesOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". - :ivar jit_network_access_policy_initiate_type: Type of the action to do on the Just-in-Time access policy. Constant value: "initiate". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - self.jit_network_access_policy_initiate_type = "initiate" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.JitNetworkAccessPoliciesList"] """Policies for protecting resources using Just-in-Time access control. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of JitNetworkAccessPolicy - :rtype: - ~azure.mgmt.security.models.JitNetworkAccessPolicyPaged[~azure.mgmt.security.models.JitNetworkAccessPolicy] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.JitNetworkAccessPolicyPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/jitNetworkAccessPolicies'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/jitNetworkAccessPolicies'} # type: ignore def list_by_region( - self, custom_headers=None, raw=False, **operation_config): - """Policies for protecting resources using Just-in-Time access control for - the subscription, location. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of JitNetworkAccessPolicy - :rtype: - ~azure.mgmt.security.models.JitNetworkAccessPolicyPaged[~azure.mgmt.security.models.JitNetworkAccessPolicy] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.JitNetworkAccessPoliciesList"] + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_region.metadata['url'] + url = self.list_by_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.JitNetworkAccessPolicyPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies'} + return ItemPaged( + get_next, extract_data + ) + list_by_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies'} # type: ignore def list_by_resource_group( - self, resource_group_name, custom_headers=None, raw=False, **operation_config): - """Policies for protecting resources using Just-in-Time access control for - the subscription, location. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.JitNetworkAccessPoliciesList"] + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of JitNetworkAccessPolicy - :rtype: - ~azure.mgmt.security.models.JitNetworkAccessPolicyPaged[~azure.mgmt.security.models.JitNetworkAccessPolicy] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_resource_group.metadata['url'] + url = self.list_by_resource_group.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.JitNetworkAccessPolicyPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/jitNetworkAccessPolicies'} + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/jitNetworkAccessPolicies'} # type: ignore def list_by_resource_group_and_region( - self, resource_group_name, custom_headers=None, raw=False, **operation_config): - """Policies for protecting resources using Just-in-Time access control for - the subscription, location. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.JitNetworkAccessPoliciesList"] + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of JitNetworkAccessPolicy - :rtype: - ~azure.mgmt.security.models.JitNetworkAccessPolicyPaged[~azure.mgmt.security.models.JitNetworkAccessPolicy] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either JitNetworkAccessPoliciesList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.JitNetworkAccessPoliciesList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPoliciesList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_resource_group_and_region.metadata['url'] + url = self.list_by_resource_group_and_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('JitNetworkAccessPoliciesList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.JitNetworkAccessPolicyPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list_by_resource_group_and_region.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies'} + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group_and_region.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies'} # type: ignore def get( - self, resource_group_name, jit_network_access_policy_name, custom_headers=None, raw=False, **operation_config): - """Policies for protecting resources using Just-in-Time access control for - the subscription, location. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + jit_network_access_policy_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.JitNetworkAccessPolicy" + """Policies for protecting resources using Just-in-Time access control for the subscription, + location. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param jit_network_access_policy_name: Name of a Just-in-Time access - configuration policy. + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. :type jit_network_access_policy_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: JitNetworkAccessPolicy or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.JitNetworkAccessPolicy or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: JitNetworkAccessPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.JitNetworkAccessPolicy + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('JitNetworkAccessPolicy', response) + deserialized = self._deserialize('JitNetworkAccessPolicy', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} # type: ignore def create_or_update( - self, resource_group_name, jit_network_access_policy_name, body, custom_headers=None, raw=False, **operation_config): - """Create a policy for protecting resources using Just-in-Time access - control. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + jit_network_access_policy_name, # type: str + body, # type: "models.JitNetworkAccessPolicy" + **kwargs # type: Any + ): + # type: (...) -> "models.JitNetworkAccessPolicy" + """Create a policy for protecting resources using Just-in-Time access control. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param jit_network_access_policy_name: Name of a Just-in-Time access - configuration policy. + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. :type jit_network_access_policy_name: str :param body: :type body: ~azure.mgmt.security.models.JitNetworkAccessPolicy - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: JitNetworkAccessPolicy or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.JitNetworkAccessPolicy or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: JitNetworkAccessPolicy, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.JitNetworkAccessPolicy + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessPolicy"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.create_or_update.metadata['url'] + url = self.create_or_update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(body, 'JitNetworkAccessPolicy') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'JitNetworkAccessPolicy') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('JitNetworkAccessPolicy', response) + deserialized = self._deserialize('JitNetworkAccessPolicy', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} # type: ignore def delete( - self, resource_group_name, jit_network_access_policy_name, custom_headers=None, raw=False, **operation_config): + self, + resource_group_name, # type: str + jit_network_access_policy_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None """Delete a Just-in-Time access control policy. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param jit_network_access_policy_name: Name of a Just-in-Time access - configuration policy. + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. :type jit_network_access_policy_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.delete.metadata['url'] + url = self.delete.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.delete(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200, 204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} + if cls: + return cls(pipeline_response, None, {}) - def initiate( - self, resource_group_name, jit_network_access_policy_name, virtual_machines, custom_headers=None, raw=False, **operation_config): - """Initiate a JIT access from a specific Just-in-Time policy - configuration. + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}'} # type: ignore - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + def initiate( + self, + resource_group_name, # type: str + jit_network_access_policy_name, # type: str + body, # type: "models.JitNetworkAccessPolicyInitiateRequest" + **kwargs # type: Any + ): + # type: (...) -> "models.JitNetworkAccessRequest" + """Initiate a JIT access from a specific Just-in-Time policy configuration. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param jit_network_access_policy_name: Name of a Just-in-Time access - configuration policy. + :param jit_network_access_policy_name: Name of a Just-in-Time access configuration policy. :type jit_network_access_policy_name: str - :param virtual_machines: A list of virtual machines & ports to open - access for - :type virtual_machines: - list[~azure.mgmt.security.models.JitNetworkAccessPolicyInitiateVirtualMachine] - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: JitNetworkAccessRequest or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.JitNetworkAccessRequest or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param body: + :type body: ~azure.mgmt.security.models.JitNetworkAccessPolicyInitiateRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :return: JitNetworkAccessRequest, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.JitNetworkAccessRequest + :raises: ~azure.core.exceptions.HttpResponseError """ - body = models.JitNetworkAccessPolicyInitiateRequest(virtual_machines=virtual_machines) + cls = kwargs.pop('cls', None) # type: ClsType["models.JitNetworkAccessRequest"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + jit_network_access_policy_initiate_type = "initiate" + api_version = "2020-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.initiate.metadata['url'] + url = self.initiate.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), 'jitNetworkAccessPolicyName': self._serialize.url("jit_network_access_policy_name", jit_network_access_policy_name, 'str'), - 'jitNetworkAccessPolicyInitiateType': self._serialize.url("self.jit_network_access_policy_initiate_type", self.jit_network_access_policy_initiate_type, 'str') + 'jitNetworkAccessPolicyInitiateType': self._serialize.url("jit_network_access_policy_initiate_type", jit_network_access_policy_initiate_type, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(body, 'JitNetworkAccessPolicyInitiateRequest') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.post(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(body, 'JitNetworkAccessPolicyInitiateRequest') + body_content_kwargs['content'] = body_content + request = self._client.post(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [202]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 202: - deserialized = self._deserialize('JitNetworkAccessRequest', response) + deserialized = self._deserialize('JitNetworkAccessRequest', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - initiate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}/{jitNetworkAccessPolicyInitiateType}'} + initiate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/jitNetworkAccessPolicies/{jitNetworkAccessPolicyName}/{jitNetworkAccessPolicyInitiateType}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_locations_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_locations_operations.py index df6c428164d3..051378fb17d6 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_locations_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_locations_operations.py @@ -1,165 +1,167 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class LocationsOperations(object): """LocationsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): - """The location of the responsible ASC of the specific subscription (home - region). For each subscription there is only one responsible location. - The location in the response should be used to read or write other - resources in ASC according to their ID. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of AscLocation - :rtype: - ~azure.mgmt.security.models.AscLocationPaged[~azure.mgmt.security.models.AscLocation] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.AscLocationList"] + """The location of the responsible ASC of the specific subscription (home region). For each + subscription there is only one responsible location. The location in the response should be + used to read or write other resources in ASC according to their ID. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AscLocationList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.AscLocationList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AscLocationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('AscLocationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.AscLocationPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations'} # type: ignore def get( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> "models.AscLocation" """Details of a specific location. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: AscLocation or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.AscLocation or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AscLocation, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.AscLocation + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.AscLocation"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('AscLocation', response) + deserialized = self._deserialize('AscLocation', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_on_premise_iot_sensors_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_on_premise_iot_sensors_operations.py new file mode 100644 index 000000000000..943f3b42f023 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_on_premise_iot_sensors_operations.py @@ -0,0 +1,317 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, IO, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class OnPremiseIotSensorsOperations(object): + """OnPremiseIotSensorsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> "models.OnPremiseIotSensorsList" + """List on-premise IoT sensors. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OnPremiseIotSensorsList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.OnPremiseIotSensorsList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OnPremiseIotSensorsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OnPremiseIotSensorsList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors'} # type: ignore + + def get( + self, + on_premise_iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.OnPremiseIotSensor" + """Get on-premise IoT sensor. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OnPremiseIotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.OnPremiseIotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OnPremiseIotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OnPremiseIotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}'} # type: ignore + + def create_or_update( + self, + on_premise_iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.OnPremiseIotSensor" + """Create or update on-premise IoT sensor. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OnPremiseIotSensor, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.OnPremiseIotSensor + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OnPremiseIotSensor"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.create_or_update.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.put(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('OnPremiseIotSensor', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('OnPremiseIotSensor', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}'} # type: ignore + + def delete( + self, + on_premise_iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Delete on-premise IoT sensor. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/json" + + # Construct URL + url = self.delete.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}'} # type: ignore + + def download_activation( + self, + on_premise_iot_sensor_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> IO + """Download sensor activation file. + + :param on_premise_iot_sensor_name: Name of the on-premise IoT sensor. + :type on_premise_iot_sensor_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IO, or the result of cls(response) + :rtype: IO + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType[IO] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-08-06-preview" + accept = "application/zip" + + # Construct URL + url = self.download_activation.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'onPremiseIotSensorName': self._serialize.url("on_premise_iot_sensor_name", on_premise_iot_sensor_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=True, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = response.stream_download(self._client._pipeline) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + download_activation.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/onPremiseIotSensors/{onPremiseIotSensorName}/downloadActivation'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_operations.py index 2f400c9b62e9..05b08e0ca6c3 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_operations.py @@ -1,102 +1,109 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class Operations(object): """Operations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.OperationList"] """Exposes all available operations for discovery purposes. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Operation - :rtype: - ~azure.mgmt.security.models.OperationPaged[~azure.mgmt.security.models.Operation] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OperationList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.OperationList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OperationList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] - + url = self.list.metadata['url'] # type: ignore # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('OperationList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.OperationPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/providers/Microsoft.Security/operations'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.Security/operations'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_pricings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_pricings_operations.py index 02e06e34875c..43e27de0a896 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_pricings_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_pricings_operations.py @@ -1,232 +1,214 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class PricingsOperations(object): """PricingsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2018-06-01". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2018-06-01" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): - """A given security pricing configuration in the subscription. Azure - Security Center is available in two pricing tiers: Free and Standard, - on multiple resource types, including Virtual machines, SQL Servers, - App service plans and Storage accounts. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: PricingList or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.PricingList or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> "models.PricingList" + """Lists Security Center pricing configurations in the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PricingList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.PricingList + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.PricingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2018-06-01" + accept = "application/json" + # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('PricingList', response) + deserialized = self._deserialize('PricingList', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings'} + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings'} # type: ignore def get( - self, pricing_name, custom_headers=None, raw=False, **operation_config): - """A given security pricing configuration in the subscription. Azure - Security Center is available in two pricing tiers: Free and Standard, - on multiple resource types, including Virtual machines, SQL Servers, - App service plans and Storage accounts. - - :param pricing_name: name of the pricing configuration + self, + pricing_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.Pricing" + """Gets a provided Security Center pricing configuration in the subscription. + + :param pricing_name: name of the pricing configuration. :type pricing_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Pricing or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Pricing or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Pricing, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Pricing + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.Pricing"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2018-06-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'pricingName': self._serialize.url("pricing_name", pricing_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'pricingName': self._serialize.url("pricing_name", pricing_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Pricing', response) + deserialized = self._deserialize('Pricing', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}'} # type: ignore def update( - self, pricing_name, pricing_tier, custom_headers=None, raw=False, **operation_config): - """A given security pricing configuration in the subscription. Azure - Security Center is available in two pricing tiers: Free and Standard, - on multiple resource types, including Virtual machines, SQL Servers, - App service plans and Storage accounts. - - :param pricing_name: name of the pricing configuration + self, + pricing_name, # type: str + pricing, # type: "models.Pricing" + **kwargs # type: Any + ): + # type: (...) -> "models.Pricing" + """Updates a provided Security Center pricing configuration in the subscription. + + :param pricing_name: name of the pricing configuration. :type pricing_name: str - :param pricing_tier: The pricing tier value. Azure Security Center is - provided in two pricing tiers: free and standard, with the standard - tier available with a trial period. The standard tier offers advanced - security capabilities, while the free tier offers basic security - features. Possible values include: 'Free', 'Standard' - :type pricing_tier: str or ~azure.mgmt.security.models.PricingTier - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Pricing or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Pricing or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param pricing: Pricing object. + :type pricing: ~azure.mgmt.security.models.Pricing + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Pricing, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.Pricing + :raises: ~azure.core.exceptions.HttpResponseError """ - pricing = models.Pricing(pricing_tier=pricing_tier) + cls = kwargs.pop('cls', None) # type: ClsType["models.Pricing"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2018-06-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.update.metadata['url'] + url = self.update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'pricingName': self._serialize.url("pricing_name", pricing_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'pricingName': self._serialize.url("pricing_name", pricing_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(pricing, 'Pricing') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(pricing, 'Pricing') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Pricing', response) + deserialized = self._deserialize('Pricing', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}'} + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/pricings/{pricingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_assessments_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_assessments_operations.py index 353ea103d365..49e2bbd02bbe 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_assessments_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_assessments_operations.py @@ -1,188 +1,190 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class RegulatoryComplianceAssessmentsOperations(object): """RegulatoryComplianceAssessmentsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-01-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-01-01-preview" - - self.config = config + self._config = config def list( - self, regulatory_compliance_standard_name, regulatory_compliance_control_name, filter=None, custom_headers=None, raw=False, **operation_config): - """Details and state of assessments mapped to selected regulatory - compliance control. - - :param regulatory_compliance_standard_name: Name of the regulatory - compliance standard object + self, + regulatory_compliance_standard_name, # type: str + regulatory_compliance_control_name, # type: str + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.RegulatoryComplianceAssessmentList"] + """Details and state of assessments mapped to selected regulatory compliance control. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. :type regulatory_compliance_standard_name: str - :param regulatory_compliance_control_name: Name of the regulatory - compliance control object + :param regulatory_compliance_control_name: Name of the regulatory compliance control object. :type regulatory_compliance_control_name: str :param filter: OData filter. Optional. :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of RegulatoryComplianceAssessment - :rtype: - ~azure.mgmt.security.models.RegulatoryComplianceAssessmentPaged[~azure.mgmt.security.models.RegulatoryComplianceAssessment] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegulatoryComplianceAssessmentList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.RegulatoryComplianceAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), - 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str') + 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if filter is not None: query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('RegulatoryComplianceAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.RegulatoryComplianceAssessmentPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments'} # type: ignore def get( - self, regulatory_compliance_standard_name, regulatory_compliance_control_name, regulatory_compliance_assessment_name, custom_headers=None, raw=False, **operation_config): - """Supported regulatory compliance details and state for selected - assessment. - - :param regulatory_compliance_standard_name: Name of the regulatory - compliance standard object + self, + regulatory_compliance_standard_name, # type: str + regulatory_compliance_control_name, # type: str + regulatory_compliance_assessment_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.RegulatoryComplianceAssessment" + """Supported regulatory compliance details and state for selected assessment. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. :type regulatory_compliance_standard_name: str - :param regulatory_compliance_control_name: Name of the regulatory - compliance control object + :param regulatory_compliance_control_name: Name of the regulatory compliance control object. :type regulatory_compliance_control_name: str - :param regulatory_compliance_assessment_name: Name of the regulatory - compliance assessment object + :param regulatory_compliance_assessment_name: Name of the regulatory compliance assessment + object. :type regulatory_compliance_assessment_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: RegulatoryComplianceAssessment or ClientRawResponse if - raw=true - :rtype: ~azure.mgmt.security.models.RegulatoryComplianceAssessment or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegulatoryComplianceAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.RegulatoryComplianceAssessment + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str'), - 'regulatoryComplianceAssessmentName': self._serialize.url("regulatory_compliance_assessment_name", regulatory_compliance_assessment_name, 'str') + 'regulatoryComplianceAssessmentName': self._serialize.url("regulatory_compliance_assessment_name", regulatory_compliance_assessment_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('RegulatoryComplianceAssessment', response) + deserialized = self._deserialize('RegulatoryComplianceAssessment', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments/{regulatoryComplianceAssessmentName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}/regulatoryComplianceAssessments/{regulatoryComplianceAssessmentName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_controls_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_controls_operations.py index 21bb45c57662..3a0903236265 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_controls_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_controls_operations.py @@ -1,178 +1,181 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class RegulatoryComplianceControlsOperations(object): """RegulatoryComplianceControlsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-01-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-01-01-preview" - - self.config = config + self._config = config def list( - self, regulatory_compliance_standard_name, filter=None, custom_headers=None, raw=False, **operation_config): - """All supported regulatory compliance controls details and state for - selected standard. - - :param regulatory_compliance_standard_name: Name of the regulatory - compliance standard object + self, + regulatory_compliance_standard_name, # type: str + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.RegulatoryComplianceControlList"] + """All supported regulatory compliance controls details and state for selected standard. + + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. :type regulatory_compliance_standard_name: str :param filter: OData filter. Optional. :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of RegulatoryComplianceControl - :rtype: - ~azure.mgmt.security.models.RegulatoryComplianceControlPaged[~azure.mgmt.security.models.RegulatoryComplianceControl] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegulatoryComplianceControlList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.RegulatoryComplianceControlList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceControlList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if filter is not None: query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('RegulatoryComplianceControlList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.RegulatoryComplianceControlPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls'} # type: ignore def get( - self, regulatory_compliance_standard_name, regulatory_compliance_control_name, custom_headers=None, raw=False, **operation_config): + self, + regulatory_compliance_standard_name, # type: str + regulatory_compliance_control_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.RegulatoryComplianceControl" """Selected regulatory compliance control details and state. - :param regulatory_compliance_standard_name: Name of the regulatory - compliance standard object + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. :type regulatory_compliance_standard_name: str - :param regulatory_compliance_control_name: Name of the regulatory - compliance control object + :param regulatory_compliance_control_name: Name of the regulatory compliance control object. :type regulatory_compliance_control_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: RegulatoryComplianceControl or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.RegulatoryComplianceControl or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegulatoryComplianceControl, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.RegulatoryComplianceControl + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceControl"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), - 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str') + 'regulatoryComplianceControlName': self._serialize.url("regulatory_compliance_control_name", regulatory_compliance_control_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('RegulatoryComplianceControl', response) + deserialized = self._deserialize('RegulatoryComplianceControl', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}/regulatoryComplianceControls/{regulatoryComplianceControlName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_standards_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_standards_operations.py index 63cca3001264..20d243492b95 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_standards_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_regulatory_compliance_standards_operations.py @@ -1,169 +1,173 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class RegulatoryComplianceStandardsOperations(object): """RegulatoryComplianceStandardsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-01-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-01-01-preview" - - self.config = config + self._config = config def list( - self, filter=None, custom_headers=None, raw=False, **operation_config): + self, + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.RegulatoryComplianceStandardList"] """Supported regulatory compliance standards details and state. :param filter: OData filter. Optional. :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of RegulatoryComplianceStandard - :rtype: - ~azure.mgmt.security.models.RegulatoryComplianceStandardPaged[~azure.mgmt.security.models.RegulatoryComplianceStandard] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either RegulatoryComplianceStandardList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.RegulatoryComplianceStandardList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceStandardList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if filter is not None: query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('RegulatoryComplianceStandardList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.RegulatoryComplianceStandardPaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards'} # type: ignore def get( - self, regulatory_compliance_standard_name, custom_headers=None, raw=False, **operation_config): + self, + regulatory_compliance_standard_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.RegulatoryComplianceStandard" """Supported regulatory compliance details state for selected standard. - :param regulatory_compliance_standard_name: Name of the regulatory - compliance standard object + :param regulatory_compliance_standard_name: Name of the regulatory compliance standard object. :type regulatory_compliance_standard_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: RegulatoryComplianceStandard or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.RegulatoryComplianceStandard or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RegulatoryComplianceStandard, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.RegulatoryComplianceStandard + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.RegulatoryComplianceStandard"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'regulatoryComplianceStandardName': self._serialize.url("regulatory_compliance_standard_name", regulatory_compliance_standard_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('RegulatoryComplianceStandard', response) + deserialized = self._deserialize('RegulatoryComplianceStandard', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/regulatoryComplianceStandards/{regulatoryComplianceStandardName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_score_control_definitions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_score_control_definitions_operations.py new file mode 100644 index 000000000000..937a2eb540e6 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_score_control_definitions_operations.py @@ -0,0 +1,177 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SecureScoreControlDefinitionsOperations(object): + """SecureScoreControlDefinitionsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecureScoreControlDefinitionList"] + """List the available security controls, their assessments, and the max score. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlDefinitionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecureScoreControlDefinitionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlDefinitionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlDefinitionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.Security/secureScoreControlDefinitions'} # type: ignore + + def list_by_subscription( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecureScoreControlDefinitionList"] + """For a specified subscription, list the available security controls, their assessments, and the + max score. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlDefinitionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecureScoreControlDefinitionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlDefinitionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlDefinitionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScoreControlDefinitions'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_score_controls_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_score_controls_operations.py new file mode 100644 index 000000000000..e19bfaef3fe5 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_score_controls_operations.py @@ -0,0 +1,195 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SecureScoreControlsOperations(object): + """SecureScoreControlsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_secure_score( + self, + secure_score_name, # type: str + expand=None, # type: Optional[Union[str, "models.ExpandControlsEnum"]] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecureScoreControlList"] + """Get all security controls for a specific initiative within a scope. + + :param secure_score_name: The initiative name. For the ASC Default initiative, use 'ascScore' + as in the sample request below. + :type secure_score_name: str + :param expand: OData expand. Optional. + :type expand: str or ~azure.mgmt.security.models.ExpandControlsEnum + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecureScoreControlList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_secure_score.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'secureScoreName': self._serialize.url("secure_score_name", secure_score_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if expand is not None: + query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_secure_score.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores/{secureScoreName}/secureScoreControls'} # type: ignore + + def list( + self, + expand=None, # type: Optional[Union[str, "models.ExpandControlsEnum"]] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecureScoreControlList"] + """Get all security controls within a scope. + + :param expand: OData expand. Optional. + :type expand: str or ~azure.mgmt.security.models.ExpandControlsEnum + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoreControlList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecureScoreControlList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreControlList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + if expand is not None: + query_parameters['$expand'] = self._serialize.query("expand", expand, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoreControlList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScoreControls'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_scores_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_scores_operations.py new file mode 100644 index 000000000000..df4c17565bcb --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_secure_scores_operations.py @@ -0,0 +1,170 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SecureScoresOperations(object): + """SecureScoresOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecureScoresList"] + """List secure scores for all your Security Center initiatives within your current scope. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecureScoresList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecureScoresList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoresList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecureScoresList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores'} # type: ignore + + def get( + self, + secure_score_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecureScoreItem" + """Get secure score for a specific Security Center initiative within your current scope. For the + ASC Default initiative, use 'ascScore'. + + :param secure_score_name: The initiative name. For the ASC Default initiative, use 'ascScore' + as in the sample request below. + :type secure_score_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecureScoreItem, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecureScoreItem + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecureScoreItem"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'secureScoreName': self._serialize.url("secure_score_name", secure_score_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecureScoreItem', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/secureScores/{secureScoreName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_contacts_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_contacts_operations.py index 5b1343256321..f2268097d0d1 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_contacts_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_contacts_operations.py @@ -1,342 +1,346 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class SecurityContactsOperations(object): """SecurityContactsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityContactList"] """Security contact configurations for the subscription. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of SecurityContact - :rtype: - ~azure.mgmt.security.models.SecurityContactPaged[~azure.mgmt.security.models.SecurityContact] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityContactList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityContactList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContactList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityContactList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.SecurityContactPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts'} # type: ignore def get( - self, security_contact_name, custom_headers=None, raw=False, **operation_config): + self, + security_contact_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityContact" """Security contact configurations for the subscription. - :param security_contact_name: Name of the security contact object + :param security_contact_name: Name of the security contact object. :type security_contact_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: SecurityContact or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.SecurityContact or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityContact, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityContact + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContact"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('SecurityContact', response) + deserialized = self._deserialize('SecurityContact', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore def create( - self, security_contact_name, security_contact, custom_headers=None, raw=False, **operation_config): + self, + security_contact_name, # type: str + security_contact, # type: "models.SecurityContact" + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityContact" """Security contact configurations for the subscription. - :param security_contact_name: Name of the security contact object + :param security_contact_name: Name of the security contact object. :type security_contact_name: str - :param security_contact: Security contact object + :param security_contact: Security contact object. :type security_contact: ~azure.mgmt.security.models.SecurityContact - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: SecurityContact or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.SecurityContact or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityContact, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityContact + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContact"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.create.metadata['url'] + url = self.create.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(security_contact, 'SecurityContact') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(security_contact, 'SecurityContact') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('SecurityContact', response) + deserialized = self._deserialize('SecurityContact', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} + create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore def delete( - self, security_contact_name, custom_headers=None, raw=False, **operation_config): + self, + security_contact_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None """Security contact configurations for the subscription. - :param security_contact_name: Name of the security contact object + :param security_contact_name: Name of the security contact object. :type security_contact_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.delete.metadata['url'] + url = self.delete.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.delete(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore def update( - self, security_contact_name, security_contact, custom_headers=None, raw=False, **operation_config): + self, + security_contact_name, # type: str + security_contact, # type: "models.SecurityContact" + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityContact" """Security contact configurations for the subscription. - :param security_contact_name: Name of the security contact object + :param security_contact_name: Name of the security contact object. :type security_contact_name: str - :param security_contact: Security contact object + :param security_contact: Security contact object. :type security_contact: ~azure.mgmt.security.models.SecurityContact - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: SecurityContact or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.SecurityContact or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityContact, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityContact + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityContact"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + # Construct URL - url = self.update.metadata['url'] + url = self.update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'securityContactName': self._serialize.url("security_contact_name", security_contact_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(security_contact, 'SecurityContact') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.patch(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(security_contact, 'SecurityContact') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('SecurityContact', response) + deserialized = self._deserialize('SecurityContact', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securityContacts/{securityContactName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_solutions_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_solutions_operations.py new file mode 100644 index 000000000000..0a2b9b8f0b2a --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_solutions_operations.py @@ -0,0 +1,174 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SecuritySolutionsOperations(object): + """SecuritySolutionsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecuritySolutionList"] + """Gets a list of Security Solutions for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecuritySolutionList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecuritySolutionList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolutionList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecuritySolutionList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securitySolutions'} # type: ignore + + def get( + self, + resource_group_name, # type: str + security_solution_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecuritySolution" + """Gets a specific Security Solution. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. + :type resource_group_name: str + :param security_solution_name: Name of security solution. + :type security_solution_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySolution, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySolution + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolution"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'securitySolutionName': self._serialize.url("security_solution_name", security_solution_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySolution', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/securitySolutions/{securitySolutionName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_solutions_reference_data_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_solutions_reference_data_operations.py new file mode 100644 index 000000000000..fcdfde541cb3 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_security_solutions_reference_data_operations.py @@ -0,0 +1,148 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SecuritySolutionsReferenceDataOperations(object): + """SecuritySolutionsReferenceDataOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> "models.SecuritySolutionsReferenceDataList" + """Gets a list of all supported Security Solutions for the subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySolutionsReferenceDataList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySolutionsReferenceDataList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolutionsReferenceDataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySolutionsReferenceDataList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/securitySolutionsReferenceData'} # type: ignore + + def list_by_home_region( + self, + **kwargs # type: Any + ): + # type: (...) -> "models.SecuritySolutionsReferenceDataList" + """Gets list of all supported Security Solutions for subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySolutionsReferenceDataList, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySolutionsReferenceDataList + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySolutionsReferenceDataList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + + # Construct URL + url = self.list_by_home_region.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySolutionsReferenceDataList', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/securitySolutionsReferenceData'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_server_vulnerability_assessment_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_server_vulnerability_assessment_operations.py index 18722ae2855b..7421839d8fa1 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_server_vulnerability_assessment_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_server_vulnerability_assessment_operations.py @@ -1,53 +1,62 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class ServerVulnerabilityAssessmentOperations(object): """ServerVulnerabilityAssessmentOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-01-01-preview". - :ivar server_vulnerability_assessment: ServerVulnerabilityAssessment status. only a 'default' value is supported. Constant value: "default". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-01-01-preview" - self.server_vulnerability_assessment = "default" - - self.config = config + self._config = config def list_by_extended_resource( - self, resource_group_name, resource_namespace, resource_type, resource_name, custom_headers=None, raw=False, **operation_config): - """Gets a list of server vulnerability assessment onboarding statuses on a - given resource. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ServerVulnerabilityAssessmentsList" + """Gets a list of server vulnerability assessment onboarding statuses on a given resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str :param resource_namespace: The Namespace of the resource. :type resource_namespace: str @@ -55,69 +64,67 @@ def list_by_extended_resource( :type resource_type: str :param resource_name: Name of the resource. :type resource_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: ServerVulnerabilityAssessmentsList or ClientRawResponse if - raw=true + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServerVulnerabilityAssessmentsList, or the result of cls(response) :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessmentsList - or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServerVulnerabilityAssessmentsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.list_by_extended_resource.metadata['url'] + url = self.list_by_extended_resource.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), - 'resourceName': self._serialize.url("resource_name", resource_name, 'str') + 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('ServerVulnerabilityAssessmentsList', response) + deserialized = self._deserialize('ServerVulnerabilityAssessmentsList', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - list_by_extended_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments'} + list_by_extended_resource.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments'} # type: ignore def get( - self, resource_group_name, resource_namespace, resource_type, resource_name, custom_headers=None, raw=False, **operation_config): - """Gets a server vulnerability assessment onboarding statuses on a given - resource. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ServerVulnerabilityAssessment" + """Gets a server vulnerability assessment onboarding statuses on a given resource. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str :param resource_namespace: The Namespace of the resource. :type resource_namespace: str @@ -125,70 +132,70 @@ def get( :type resource_type: str :param resource_name: Name of the resource. :type resource_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: ServerVulnerabilityAssessment or ClientRawResponse if - raw=true - :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessment or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServerVulnerabilityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessment + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServerVulnerabilityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + server_vulnerability_assessment = "default" + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), - 'serverVulnerabilityAssessment': self._serialize.url("self.server_vulnerability_assessment", self.server_vulnerability_assessment, 'str') + 'serverVulnerabilityAssessment': self._serialize.url("server_vulnerability_assessment", server_vulnerability_assessment, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('ServerVulnerabilityAssessment', response) + deserialized = self._deserialize('ServerVulnerabilityAssessment', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} # type: ignore def create_or_update( - self, resource_group_name, resource_namespace, resource_type, resource_name, custom_headers=None, raw=False, **operation_config): - """Creating a server vulnerability assessment on a resource, which will - onboard a resource for having a vulnerability assessment on it. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.ServerVulnerabilityAssessment" + """Creating a server vulnerability assessment on a resource, which will onboard a resource for + having a vulnerability assessment on it. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str :param resource_namespace: The Namespace of the resource. :type resource_namespace: str @@ -196,69 +203,69 @@ def create_or_update( :type resource_type: str :param resource_name: Name of the resource. :type resource_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: ServerVulnerabilityAssessment or ClientRawResponse if - raw=true - :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessment or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ServerVulnerabilityAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.ServerVulnerabilityAssessment + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.ServerVulnerabilityAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + server_vulnerability_assessment = "default" + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.create_or_update.metadata['url'] + url = self.create_or_update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), - 'serverVulnerabilityAssessment': self._serialize.url("self.server_vulnerability_assessment", self.server_vulnerability_assessment, 'str') + 'serverVulnerabilityAssessment': self._serialize.url("server_vulnerability_assessment", server_vulnerability_assessment, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.put(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [202]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 202: - deserialized = self._deserialize('ServerVulnerabilityAssessment', response) + deserialized = self._deserialize('ServerVulnerabilityAssessment', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} + create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} # type: ignore def delete( - self, resource_group_name, resource_namespace, resource_type, resource_name, custom_headers=None, raw=False, **operation_config): + self, + resource_group_name, # type: str + resource_namespace, # type: str + resource_type, # type: str + resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None """Removing server vulnerability assessment from a resource. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str :param resource_namespace: The Namespace of the resource. :type resource_namespace: str @@ -266,50 +273,49 @@ def delete( :type resource_type: str :param resource_name: Name of the resource. :type resource_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + server_vulnerability_assessment = "default" + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.delete.metadata['url'] + url = self.delete.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), 'resourceNamespace': self._serialize.url("resource_namespace", resource_namespace, 'str'), 'resourceType': self._serialize.url("resource_type", resource_type, 'str'), 'resourceName': self._serialize.url("resource_name", resource_name, 'str'), - 'serverVulnerabilityAssessment': self._serialize.url("self.server_vulnerability_assessment", self.server_vulnerability_assessment, 'str') + 'serverVulnerabilityAssessment': self._serialize.url("server_vulnerability_assessment", server_vulnerability_assessment, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.delete(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200, 204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceNamespace}/{resourceType}/{resourceName}/providers/Microsoft.Security/serverVulnerabilityAssessments/{serverVulnerabilityAssessment}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_settings_operations.py index 5dcbe3cd8d9f..9d9e4e1a271c 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_settings_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_settings_operations.py @@ -1,234 +1,231 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class SettingsOperations(object): """SettingsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2019-01-01". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2019-01-01" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SettingsList"] """Settings about different configurations in security center. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of Setting - :rtype: - ~azure.mgmt.security.models.SettingPaged[~azure.mgmt.security.models.Setting] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SettingsList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SettingsList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SettingsList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('SettingsList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.SettingPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings'} # type: ignore def get( - self, setting_name, custom_headers=None, raw=False, **operation_config): + self, + setting_name, # type: Union[str, "models.Enum3"] + **kwargs # type: Any + ): + # type: (...) -> "models.SettingResource" """Settings of different configurations in security center. - :param setting_name: Name of setting: (MCAS/WDATP). Possible values - include: 'MCAS', 'WDATP' - :type setting_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Setting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Setting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param setting_name: Name of setting: (MCAS/WDATP). + :type setting_name: str or ~azure.mgmt.security.models.Enum3 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SettingResource + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SettingResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'settingName': self._serialize.url("setting_name", setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Setting', response) + deserialized = self._deserialize('SettingResource', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}'} # type: ignore def update( - self, setting_name, kind, custom_headers=None, raw=False, **operation_config): + self, + setting_name, # type: Union[str, "models.Enum3"] + setting, # type: "models.SettingResource" + **kwargs # type: Any + ): + # type: (...) -> "models.SettingResource" """updating settings about different configurations in security center. - :param setting_name: Name of setting: (MCAS/WDATP). Possible values - include: 'MCAS', 'WDATP' - :type setting_name: str - :param kind: the kind of the settings string (DataExportSetting). - Possible values include: 'DataExportSetting', - 'AlertSuppressionSetting' - :type kind: str or ~azure.mgmt.security.models.SettingKind - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: Setting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.Setting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param setting_name: Name of setting: (MCAS/WDATP). + :type setting_name: str or ~azure.mgmt.security.models.Enum3 + :param setting: Setting object. + :type setting: ~azure.mgmt.security.models.SettingResource + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SettingResource + :raises: ~azure.core.exceptions.HttpResponseError """ - setting = models.Setting(kind=kind) + cls = kwargs.pop('cls', None) # type: ClsType["models.SettingResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.update.metadata['url'] + url = self.update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'settingName': self._serialize.url("setting_name", setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'settingName': self._serialize.url("setting_name", setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(setting, 'Setting') - - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(setting, 'SettingResource') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('Setting', response) + deserialized = self._deserialize('SettingResource', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}'} + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/settings/{settingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_sub_assessments_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_sub_assessments_operations.py new file mode 100644 index 000000000000..01ab8e0a7485 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_sub_assessments_operations.py @@ -0,0 +1,258 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class SubAssessmentsOperations(object): + """SubAssessmentsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_all( + self, + scope, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecuritySubAssessmentList"] + """Get security sub-assessments on all your scanned resources inside a subscription scope. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecuritySubAssessmentList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecuritySubAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySubAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_all.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecuritySubAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_all.metadata = {'url': '/{scope}/providers/Microsoft.Security/subAssessments'} # type: ignore + + def list( + self, + scope, # type: str + assessment_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecuritySubAssessmentList"] + """Get security sub-assessments on all your scanned resources inside a scope. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecuritySubAssessmentList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecuritySubAssessmentList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySubAssessmentList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('SecuritySubAssessmentList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/{scope}/providers/Microsoft.Security/assessments/{assessmentName}/subAssessments'} # type: ignore + + def get( + self, + scope, # type: str + assessment_name, # type: str + sub_assessment_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecuritySubAssessment" + """Get a security sub-assessment on your scanned resource. + + :param scope: Scope of the query, can be subscription (/subscriptions/0b06d9ea- + afe6-4779-bd59-30e5c2d9d13f) or management group + (/providers/Microsoft.Management/managementGroups/mgName). + :type scope: str + :param assessment_name: The Assessment Key - Unique key for the assessment type. + :type assessment_name: str + :param sub_assessment_name: The Sub-Assessment Key - Unique key for the sub-assessment type. + :type sub_assessment_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecuritySubAssessment, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecuritySubAssessment + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecuritySubAssessment"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2019-01-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'scope': self._serialize.url("scope", scope, 'str', skip_quote=True), + 'assessmentName': self._serialize.url("assessment_name", assessment_name, 'str'), + 'subAssessmentName': self._serialize.url("sub_assessment_name", sub_assessment_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('SecuritySubAssessment', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/{scope}/providers/Microsoft.Security/assessments/{assessmentName}/subAssessments/{subAssessmentName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_tasks_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_tasks_operations.py index 3fed53ee15dc..fa21b584f58a 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_tasks_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_tasks_operations.py @@ -1,501 +1,505 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class TasksOperations(object): """TasksOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, filter=None, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. + self, + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityTaskList"] + """Recommended tasks that will help improve the security of the subscription proactively. :param filter: OData filter. Optional. :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of SecurityTask - :rtype: - ~azure.mgmt.security.models.SecurityTaskPaged[~azure.mgmt.security.models.SecurityTask] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityTaskList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityTaskList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTaskList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if filter is not None: query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityTaskList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.SecurityTaskPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/tasks'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/tasks'} # type: ignore def list_by_home_region( - self, filter=None, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. + self, + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityTaskList"] + """Recommended tasks that will help improve the security of the subscription proactively. :param filter: OData filter. Optional. :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of SecurityTask - :rtype: - ~azure.mgmt.security.models.SecurityTaskPaged[~azure.mgmt.security.models.SecurityTask] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityTaskList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityTaskList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTaskList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_home_region.metadata['url'] + url = self.list_by_home_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if filter is not None: query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityTaskList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.SecurityTaskPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks'} + return ItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks'} # type: ignore def get_subscription_level_task( - self, task_name, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. - - :param task_name: Name of the task object, will be a GUID + self, + task_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityTask" + """Recommended tasks that will help improve the security of the subscription proactively. + + :param task_name: Name of the task object, will be a GUID. :type task_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: SecurityTask or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.SecurityTask or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityTask, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityTask + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTask"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + # Construct URL - url = self.get_subscription_level_task.metadata['url'] + url = self.get_subscription_level_task.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'taskName': self._serialize.url("task_name", task_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'taskName': self._serialize.url("task_name", task_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('SecurityTask', response) + deserialized = self._deserialize('SecurityTask', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get_subscription_level_task.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}'} + get_subscription_level_task.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}'} # type: ignore def update_subscription_level_task_state( - self, task_name, task_update_action_type, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. - - :param task_name: Name of the task object, will be a GUID + self, + task_name, # type: str + task_update_action_type, # type: Union[str, "models.Enum15"] + **kwargs # type: Any + ): + # type: (...) -> None + """Recommended tasks that will help improve the security of the subscription proactively. + + :param task_name: Name of the task object, will be a GUID. :type task_name: str :param task_update_action_type: Type of the action to do on the task. - Possible values include: 'Activate', 'Dismiss', 'Start', 'Resolve', - 'Close' - :type task_update_action_type: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :type task_update_action_type: str or ~azure.mgmt.security.models.Enum15 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + # Construct URL - url = self.update_subscription_level_task_state.metadata['url'] + url = self.update_subscription_level_task_state.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), 'taskName': self._serialize.url("task_name", task_name, 'str'), - 'taskUpdateActionType': self._serialize.url("task_update_action_type", task_update_action_type, 'str') + 'taskUpdateActionType': self._serialize.url("task_update_action_type", task_update_action_type, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.post(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - update_subscription_level_task_state.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}'} + if cls: + return cls(pipeline_response, None, {}) - def list_by_resource_group( - self, resource_group_name, filter=None, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. + update_subscription_level_task_state.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}'} # type: ignore - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + def list_by_resource_group( + self, + resource_group_name, # type: str + filter=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.SecurityTaskList"] + """Recommended tasks that will help improve the security of the subscription proactively. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str :param filter: OData filter. Optional. :type filter: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of SecurityTask - :rtype: - ~azure.mgmt.security.models.SecurityTaskPaged[~azure.mgmt.security.models.SecurityTask] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SecurityTaskList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.SecurityTaskList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTaskList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_resource_group.metadata['url'] + url = self.list_by_resource_group.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') if filter is not None: query_parameters['$filter'] = self._serialize.query("filter", filter, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('SecurityTaskList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.SecurityTaskPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks'} + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks'} # type: ignore def get_resource_group_level_task( - self, resource_group_name, task_name, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + task_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.SecurityTask" + """Recommended tasks that will help improve the security of the subscription proactively. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param task_name: Name of the task object, will be a GUID + :param task_name: Name of the task object, will be a GUID. :type task_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: SecurityTask or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.SecurityTask or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SecurityTask, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.SecurityTask + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.SecurityTask"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + # Construct URL - url = self.get_resource_group_level_task.metadata['url'] + url = self.get_resource_group_level_task.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'taskName': self._serialize.url("task_name", task_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'taskName': self._serialize.url("task_name", task_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('SecurityTask', response) + deserialized = self._deserialize('SecurityTask', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get_resource_group_level_task.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}'} + get_resource_group_level_task.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}'} # type: ignore def update_resource_group_level_task_state( - self, resource_group_name, task_name, task_update_action_type, custom_headers=None, raw=False, **operation_config): - """Recommended tasks that will help improve the security of the - subscription proactively. - - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + self, + resource_group_name, # type: str + task_name, # type: str + task_update_action_type, # type: Union[str, "models.Enum15"] + **kwargs # type: Any + ): + # type: (...) -> None + """Recommended tasks that will help improve the security of the subscription proactively. + + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param task_name: Name of the task object, will be a GUID + :param task_name: Name of the task object, will be a GUID. :type task_name: str :param task_update_action_type: Type of the action to do on the task. - Possible values include: 'Activate', 'Dismiss', 'Start', 'Resolve', - 'Close' - :type task_update_action_type: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :type task_update_action_type: str or ~azure.mgmt.security.models.Enum15 + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2015-06-01-preview" + accept = "application/json" + # Construct URL - url = self.update_resource_group_level_task_state.metadata['url'] + url = self.update_resource_group_level_task_state.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), 'taskName': self._serialize.url("task_name", task_name, 'str'), - 'taskUpdateActionType': self._serialize.url("task_update_action_type", task_update_action_type, 'str') + 'taskUpdateActionType': self._serialize.url("task_update_action_type", task_update_action_type, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.post(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - update_resource_group_level_task_state.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}'} + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + update_resource_group_level_task_state.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/tasks/{taskName}/{taskUpdateActionType}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_topology_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_topology_operations.py index 1d6e616bb498..39a5e07eb6b6 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_topology_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_topology_operations.py @@ -1,238 +1,242 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class TopologyOperations(object): """TopologyOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2015-06-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2015-06-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.TopologyList"] """Gets a list that allows to build a topology view of a subscription. - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of TopologyResource - :rtype: - ~azure.mgmt.security.models.TopologyResourcePaged[~azure.mgmt.security.models.TopologyResource] - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TopologyList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.TopologyList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TopologyList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('TopologyList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.TopologyResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/topologies'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/topologies'} # type: ignore def list_by_home_region( - self, custom_headers=None, raw=False, **operation_config): - """Gets a list that allows to build a topology view of a subscription and - location. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of TopologyResource - :rtype: - ~azure.mgmt.security.models.TopologyResourcePaged[~azure.mgmt.security.models.TopologyResource] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.TopologyList"] + """Gets a list that allows to build a topology view of a subscription and location. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TopologyList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.TopologyList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TopologyList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list_by_home_region.metadata['url'] + url = self.list_by_home_region.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('TopologyList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - return response + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.TopologyResourcePaged(internal_paging, self._deserialize.dependencies, header_dict) + return pipeline_response - return deserialized - list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/topologies'} + return ItemPaged( + get_next, extract_data + ) + list_by_home_region.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/locations/{ascLocation}/topologies'} # type: ignore def get( - self, resource_group_name, topology_resource_name, custom_headers=None, raw=False, **operation_config): + self, + resource_group_name, # type: str + topology_resource_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.TopologyResource" """Gets a specific topology component. - :param resource_group_name: The name of the resource group within the - user's subscription. The name is case insensitive. + :param resource_group_name: The name of the resource group within the user's subscription. The + name is case insensitive. :type resource_group_name: str - :param topology_resource_name: Name of a topology resources - collection. + :param topology_resource_name: Name of a topology resources collection. :type topology_resource_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: TopologyResource or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.TopologyResource or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TopologyResource, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.TopologyResource + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.TopologyResource"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2020-01-01" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._\(\)]+$'), - 'ascLocation': self._serialize.url("self.config.asc_location", self.config.asc_location, 'str'), - 'topologyResourceName': self._serialize.url("topology_resource_name", topology_resource_name, 'str') + 'ascLocation': self._serialize.url("self._config.asc_location", self._config.asc_location, 'str'), + 'topologyResourceName': self._serialize.url("topology_resource_name", topology_resource_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('TopologyResource', response) + deserialized = self._deserialize('TopologyResource', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/topologies/{topologyResourceName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Security/locations/{ascLocation}/topologies/{topologyResourceName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_workspace_settings_operations.py b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_workspace_settings_operations.py index 5717490464d3..1aeb6339b008 100644 --- a/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_workspace_settings_operations.py +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/operations/_workspace_settings_operations.py @@ -1,362 +1,349 @@ # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# +# Licensed under the MIT License. See License.txt in the project root for license information. # Code generated by Microsoft (R) AutoRest Code Generator. -# Changes may cause incorrect behavior and will be lost if the code is -# regenerated. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings -import uuid -from msrest.pipeline import ClientRawResponse -from msrestazure.azure_exceptions import CloudError +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] class WorkspaceSettingsOperations(object): """WorkspaceSettingsOperations operations. - You should not instantiate directly this class, but create a Client instance that will create it for you and attach it as attribute. + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + :ivar models: Alias to model classes used in this operation group. + :type models: ~azure.mgmt.security.models :param client: Client for service requests. :param config: Configuration of service client. :param serializer: An object model serializer. :param deserializer: An object model deserializer. - :ivar api_version: API version for the operation. Constant value: "2017-08-01-preview". """ models = models def __init__(self, client, config, serializer, deserializer): - self._client = client self._serialize = serializer self._deserialize = deserializer - self.api_version = "2017-08-01-preview" - - self.config = config + self._config = config def list( - self, custom_headers=None, raw=False, **operation_config): - """Settings about where we should store your security data and logs. If - the result is empty, it means that no custom-workspace configuration - was set. - - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: An iterator like instance of WorkspaceSetting - :rtype: - ~azure.mgmt.security.models.WorkspaceSettingPaged[~azure.mgmt.security.models.WorkspaceSetting] - :raises: :class:`CloudError` + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.WorkspaceSettingList"] + """Settings about where we should store your security data and logs. If the result is empty, it + means that no custom-workspace configuration was set. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either WorkspaceSettingList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.security.models.WorkspaceSettingList] + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSettingList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + if not next_link: # Construct URL - url = self.list.metadata['url'] + url = self.list.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), } url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + request = self._client.get(url, query_parameters, header_parameters) else: url = next_link - query_parameters = {} - - # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request - request = self._client.get(url, query_parameters, header_parameters) + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) return request - def internal_paging(next_link=None): + def extract_data(pipeline_response): + deserialized = self._deserialize('WorkspaceSettingList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): request = prepare_request(next_link) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - return response + return pipeline_response - # Deserialize response - header_dict = None - if raw: - header_dict = {} - deserialized = models.WorkspaceSettingPaged(internal_paging, self._deserialize.dependencies, header_dict) - - return deserialized - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings'} + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings'} # type: ignore def get( - self, workspace_setting_name, custom_headers=None, raw=False, **operation_config): - """Settings about where we should store your security data and logs. If - the result is empty, it means that no custom-workspace configuration - was set. - - :param workspace_setting_name: Name of the security setting + self, + workspace_setting_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.WorkspaceSetting" + """Settings about where we should store your security data and logs. If the result is empty, it + means that no custom-workspace configuration was set. + + :param workspace_setting_name: Name of the security setting. :type workspace_setting_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: WorkspaceSetting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.WorkspaceSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: WorkspaceSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.WorkspaceSetting + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.get.metadata['url'] + url = self.get.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.get(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('WorkspaceSetting', response) + deserialized = self._deserialize('WorkspaceSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} + get.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore def create( - self, workspace_setting_name, workspace_id, scope, custom_headers=None, raw=False, **operation_config): - """creating settings about where we should store your security data and - logs. - - :param workspace_setting_name: Name of the security setting + self, + workspace_setting_name, # type: str + workspace_setting, # type: "models.WorkspaceSetting" + **kwargs # type: Any + ): + # type: (...) -> "models.WorkspaceSetting" + """creating settings about where we should store your security data and logs. + + :param workspace_setting_name: Name of the security setting. :type workspace_setting_name: str - :param workspace_id: The full Azure ID of the workspace to save the - data in - :type workspace_id: str - :param scope: All the VMs in this scope will send their security data - to the mentioned workspace unless overridden by a setting with more - specific scope - :type scope: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: WorkspaceSetting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.WorkspaceSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param workspace_setting: Security data setting object. + :type workspace_setting: ~azure.mgmt.security.models.WorkspaceSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: WorkspaceSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.WorkspaceSetting + :raises: ~azure.core.exceptions.HttpResponseError """ - workspace_setting = models.WorkspaceSetting(workspace_id=workspace_id, scope=scope) + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.create.metadata['url'] + url = self.create.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(workspace_setting, 'WorkspaceSetting') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.put(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(workspace_setting, 'WorkspaceSetting') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('WorkspaceSetting', response) + deserialized = self._deserialize('WorkspaceSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} + create.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore def update( - self, workspace_setting_name, workspace_id, scope, custom_headers=None, raw=False, **operation_config): + self, + workspace_setting_name, # type: str + workspace_setting, # type: "models.WorkspaceSetting" + **kwargs # type: Any + ): + # type: (...) -> "models.WorkspaceSetting" """Settings about where we should store your security data and logs. - :param workspace_setting_name: Name of the security setting + :param workspace_setting_name: Name of the security setting. :type workspace_setting_name: str - :param workspace_id: The full Azure ID of the workspace to save the - data in - :type workspace_id: str - :param scope: All the VMs in this scope will send their security data - to the mentioned workspace unless overridden by a setting with more - specific scope - :type scope: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: WorkspaceSetting or ClientRawResponse if raw=true - :rtype: ~azure.mgmt.security.models.WorkspaceSetting or - ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :param workspace_setting: Security data setting object. + :type workspace_setting: ~azure.mgmt.security.models.WorkspaceSetting + :keyword callable cls: A custom type or function that will be passed the direct response + :return: WorkspaceSetting, or the result of cls(response) + :rtype: ~azure.mgmt.security.models.WorkspaceSetting + :raises: ~azure.core.exceptions.HttpResponseError """ - workspace_setting = models.WorkspaceSetting(workspace_id=workspace_id, scope=scope) + cls = kwargs.pop('cls', None) # type: ClsType["models.WorkspaceSetting"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" # Construct URL - url = self.update.metadata['url'] + url = self.update.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - header_parameters['Accept'] = 'application/json' - header_parameters['Content-Type'] = 'application/json; charset=utf-8' - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct body - body_content = self._serialize.body(workspace_setting, 'WorkspaceSetting') + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - # Construct and send request - request = self._client.patch(url, query_parameters, header_parameters, body_content) - response = self._client.send(request, stream=False, **operation_config) + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(workspace_setting, 'WorkspaceSetting') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [200]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) - deserialized = None - if response.status_code == 200: - deserialized = self._deserialize('WorkspaceSetting', response) + deserialized = self._deserialize('WorkspaceSetting', pipeline_response) - if raw: - client_raw_response = ClientRawResponse(deserialized, response) - return client_raw_response + if cls: + return cls(pipeline_response, deserialized, {}) return deserialized - update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} + update.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore def delete( - self, workspace_setting_name, custom_headers=None, raw=False, **operation_config): - """Deletes the custom workspace settings for this subscription. new VMs - will report to the default workspace. - - :param workspace_setting_name: Name of the security setting + self, + workspace_setting_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + """Deletes the custom workspace settings for this subscription. new VMs will report to the default + workspace. + + :param workspace_setting_name: Name of the security setting. :type workspace_setting_name: str - :param dict custom_headers: headers that will be added to the request - :param bool raw: returns the direct response alongside the - deserialized response - :param operation_config: :ref:`Operation configuration - overrides`. - :return: None or ClientRawResponse if raw=true - :rtype: None or ~msrest.pipeline.ClientRawResponse - :raises: :class:`CloudError` + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError """ + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2017-08-01-preview" + accept = "application/json" + # Construct URL - url = self.delete.metadata['url'] + url = self.delete.metadata['url'] # type: ignore path_format_arguments = { - 'subscriptionId': self._serialize.url("self.config.subscription_id", self.config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), - 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str') + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', pattern=r'^[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}$'), + 'workspaceSettingName': self._serialize.url("workspace_setting_name", workspace_setting_name, 'str'), } url = self._client.format_url(url, **path_format_arguments) # Construct parameters - query_parameters = {} - query_parameters['api-version'] = self._serialize.query("self.api_version", self.api_version, 'str') + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') # Construct headers - header_parameters = {} - if self.config.generate_client_request_id: - header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) - if custom_headers: - header_parameters.update(custom_headers) - if self.config.accept_language is not None: - header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') - - # Construct and send request + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + request = self._client.delete(url, query_parameters, header_parameters) - response = self._client.send(request, stream=False, **operation_config) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response if response.status_code not in [204]: - exp = CloudError(response) - exp.request_id = response.headers.get('x-ms-request-id') - raise exp - - if raw: - client_raw_response = ClientRawResponse(None, response) - return client_raw_response - delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.Security/workspaceSettings/{workspaceSettingName}'} # type: ignore diff --git a/sdk/security/azure-mgmt-security/azure/mgmt/security/py.typed b/sdk/security/azure-mgmt-security/azure/mgmt/security/py.typed new file mode 100644 index 000000000000..e5aff4f83af8 --- /dev/null +++ b/sdk/security/azure-mgmt-security/azure/mgmt/security/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. \ No newline at end of file diff --git a/sdk/security/azure-mgmt-security/setup.py b/sdk/security/azure-mgmt-security/setup.py index 92d40c6d820d..367e5f757274 100644 --- a/sdk/security/azure-mgmt-security/setup.py +++ b/sdk/security/azure-mgmt-security/setup.py @@ -36,7 +36,7 @@ pass # Version extraction inspired from 'requests' -with open(os.path.join(package_folder_path, 'version.py'), 'r') as fd: +with open(os.path.join(package_folder_path, '_version.py'), 'r') as fd: version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) @@ -78,8 +78,8 @@ ]), install_requires=[ 'msrest>=0.5.0', - 'msrestazure>=0.4.32,<2.0.0', 'azure-common~=1.1', + 'azure-mgmt-core>=1.2.0,<2.0.0', ], extras_require={ ":python_version<'3.0'": ['azure-mgmt-nspkg'],