ark-sdk-python 1.0.5__py3-none-any.whl → 1.0.7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. ark_sdk_python/ark.py +1 -1
  2. ark_sdk_python/auth/ark_auth.py +6 -6
  3. ark_sdk_python/cli_services/dpa/vm/ark_dpa_vm_policies_editor_service.py +0 -2
  4. ark_sdk_python/models/actions/services/ark_dpa_exec_action_consts.py +7 -1
  5. ark_sdk_python/models/ark_model.py +2 -2
  6. ark_sdk_python/models/common/ark_region.py +6 -0
  7. ark_sdk_python/models/common/ark_workspace_type.py +2 -0
  8. ark_sdk_python/models/services/dpa/db/__init__.py +4 -0
  9. ark_sdk_python/models/services/dpa/db/ark_dpa_db_assets_type.py +7 -0
  10. ark_sdk_python/models/services/dpa/db/ark_dpa_db_base_generate_assets.py +1 -1
  11. ark_sdk_python/models/services/dpa/db/ark_dpa_db_oracle_generate_assets.py +1 -1
  12. ark_sdk_python/models/services/dpa/db/ark_dpa_db_proxy_fullchain_generate_assets.py +5 -0
  13. ark_sdk_python/models/services/dpa/policies/db/__init__.py +9 -0
  14. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_connection_data.py +10 -1
  15. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_enums.py +24 -0
  16. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_policies_filter.py +2 -0
  17. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_policies_stats.py +2 -0
  18. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_policies_workspace_type_serializer.py +4 -0
  19. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_policy_list_item.py +2 -0
  20. ark_sdk_python/models/services/dpa/policies/db/ark_dpa_db_providers.py +10 -0
  21. ark_sdk_python/models/services/dpa/policies/vm/__init__.py +0 -2
  22. ark_sdk_python/models/services/dpa/policies/vm/ark_dpa_vm_add_policy.py +4 -1
  23. ark_sdk_python/models/services/dpa/policies/vm/ark_dpa_vm_policies_workspace_type_serializer.py +2 -0
  24. ark_sdk_python/models/services/dpa/policies/vm/ark_dpa_vm_policy.py +4 -1
  25. ark_sdk_python/models/services/dpa/policies/vm/ark_dpa_vm_providers.py +2 -8
  26. ark_sdk_python/models/services/dpa/policies/vm/ark_dpa_vm_update_policy.py +4 -1
  27. ark_sdk_python/models/services/dpa/sso/__init__.py +5 -1
  28. ark_sdk_python/models/services/dpa/workspaces/db/ark_dpa_db_add_database.py +5 -0
  29. ark_sdk_python/models/services/dpa/workspaces/db/ark_dpa_db_provider.py +6 -0
  30. ark_sdk_python/models/services/dpa/workspaces/db/ark_dpa_db_update_database.py +5 -0
  31. ark_sdk_python/services/dpa/db/ark_dpa_db_service.py +48 -16
  32. ark_sdk_python/services/dpa/sso/ark_dpa_sso_service.py +28 -18
  33. {ark_sdk_python-1.0.5.dist-info → ark_sdk_python-1.0.7.dist-info}/METADATA +2 -2
  34. ark_sdk_python-1.0.7.dist-info/NOTICES.md +2081 -0
  35. {ark_sdk_python-1.0.5.dist-info → ark_sdk_python-1.0.7.dist-info}/RECORD +38 -34
  36. {ark_sdk_python-1.0.5.dist-info → ark_sdk_python-1.0.7.dist-info}/WHEEL +1 -1
  37. {ark_sdk_python-1.0.5.dist-info → ark_sdk_python-1.0.7.dist-info}/LICENSE.txt +0 -0
  38. {ark_sdk_python-1.0.5.dist-info → ark_sdk_python-1.0.7.dist-info}/entry_points.txt +0 -0
ark_sdk_python/ark.py CHANGED
@@ -17,7 +17,7 @@ from ark_sdk_python.actions import ArkAction, ArkCacheAction, ArkConfigureAction
17
17
 
18
18
  urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
19
19
 
20
- __version__ = '1.0.5'
20
+ __version__ = '1.0.7'
21
21
 
22
22
 
23
23
  def main():
@@ -180,7 +180,9 @@ class ArkAuth(ABC):
180
180
  return self.__token != None
181
181
  return False
182
182
 
183
- def load_authentication(self, profile: Optional[ArkProfile] = None, refresh_auth: bool = False) -> Optional[ArkToken]:
183
+ def load_authentication(
184
+ self, profile: Optional[ArkProfile] = None, refresh_auth: bool = False, grace_seconds: Optional[int] = None
185
+ ) -> Optional[ArkToken]:
184
186
  """
185
187
  Loads and returns the authentication token from the cache, if it exists.
186
188
  If specified, the method also attempts to refresh the token as needed.
@@ -188,6 +190,7 @@ class ArkAuth(ABC):
188
190
  Args:
189
191
  profile (Optional[ArkProfile], optional): _description_. Defaults to None.
190
192
  refresh_auth (bool, optional): _description_. Defaults to False.
193
+ grace_seconds (Optional[int], optional): try to refresh in case there is less than grace_seconds until expired. Defaults to None.
191
194
 
192
195
  Returns:
193
196
  Optional[ArkToken]: _description_
@@ -208,11 +211,8 @@ class ArkAuth(ABC):
208
211
  if self._cache_keyring:
209
212
  self.__token = self._cache_keyring.load_token(profile, self._resolve_cache_postfix(auth_profile))
210
213
  if refresh_auth:
211
- if (
212
- self.__token
213
- and self.__token.expires_in.replace(tzinfo=None) - timedelta(seconds=DEFAULT_EXPIRATION_GRACE_DELTA_SECONDS)
214
- > datetime.now()
215
- ):
214
+ grace_seconds = grace_seconds if grace_seconds is not None else DEFAULT_EXPIRATION_GRACE_DELTA_SECONDS
215
+ if self.__token and self.__token.expires_in.replace(tzinfo=None) - timedelta(seconds=grace_seconds) > datetime.now():
216
216
  self._logger.info('Token did not pass grace expiration, no need to refresh')
217
217
  else:
218
218
  self._logger.info('Trying to refresh token authentication')
@@ -21,7 +21,6 @@ from ark_sdk_python.models.services.dpa.policies.vm import (
21
21
  ArkDPAVMConnectionInformation,
22
22
  ArkDPAVMFQDNOperator,
23
23
  ArkDPAVMFQDNRule,
24
- ArkDPAVMFQDNRulesConjunction,
25
24
  ArkDPAVMGCPProviderData,
26
25
  ArkDPAVMLocalEphemeralUserConnectionMethodData,
27
26
  ArkDPAVMOnPremProviderData,
@@ -66,7 +65,6 @@ DEFAULT_GENERATED_PROVIDERS: Final[Dict[ArkWorkspaceType, ArkDPAVMProvider]] = {
66
65
  ),
67
66
  ArkWorkspaceType.GCP: ArkDPAVMGCPProviderData(regions=[], tags=[{'key': 'value'}], network_ids=[], projects=[]),
68
67
  ArkWorkspaceType.ONPREM: ArkDPAVMOnPremProviderData(
69
- fqdn_rules_conjunction=ArkDPAVMFQDNRulesConjunction.OR,
70
68
  fqdn_rules=[ArkDPAVMFQDNRule(operator=ArkDPAVMFQDNOperator.WILDCARD, computername_pattern='*', domain='default.com')],
71
69
  ),
72
70
  }
@@ -21,7 +21,12 @@ from ark_sdk_python.models.services.dpa.certificates import (
21
21
  ArkDPAGetCertificate,
22
22
  ArkDPAUpdateCertificate,
23
23
  )
24
- from ark_sdk_python.models.services.dpa.db import ArkDPADBMysqlExecution, ArkDPADBOracleGenerateAssets, ArkDPADBPsqlExecution
24
+ from ark_sdk_python.models.services.dpa.db import (
25
+ ArkDPADBMysqlExecution,
26
+ ArkDPADBOracleGenerateAssets,
27
+ ArkDPADBProxyFullchainGenerateAssets,
28
+ ArkDPADBPsqlExecution,
29
+ )
25
30
  from ark_sdk_python.models.services.dpa.k8s.ark_dpa_k8s_generate_kubeconfig import ArkDPAK8SGenerateKubeConfig
26
31
  from ark_sdk_python.models.services.dpa.policies.common import ArkDPADeletePolicy, ArkDPAGetPolicy, ArkDPAUpdatePolicyStatus
27
32
  from ark_sdk_python.models.services.dpa.policies.db import ArkDPADBAddPolicy, ArkDPADBPoliciesFilter, ArkDPADBUpdatePolicy
@@ -154,6 +159,7 @@ DB_ACTION_TO_SCHEMA_MAP: Final[Dict[(str, Optional[Type[ArkModel]])]] = {
154
159
  'psql': ArkDPADBPsqlExecution,
155
160
  'mysql': ArkDPADBMysqlExecution,
156
161
  'generate-oracle-tnsnames': ArkDPADBOracleGenerateAssets,
162
+ 'generate-proxy-fullchain': ArkDPADBProxyFullchainGenerateAssets,
157
163
  }
158
164
  DB_ACTION: Final[ArkServiceActionDefinition] = ArkServiceActionDefinition(action_name='db', schemas=DB_ACTION_TO_SCHEMA_MAP)
159
165
  K8S_ACTION_TO_SCHEMA_MAP: Final[Dict[(str, Optional[Type[ArkModel]])]] = {'generate-kubeconfig': ArkDPAK8SGenerateKubeConfig}
@@ -1,6 +1,6 @@
1
1
  from typing import Any, Callable, Optional
2
2
 
3
- from humps import camel
3
+ from humps import camelize
4
4
  from pydantic import BaseModel, Field, validator
5
5
  from pydantic.generics import GenericModel
6
6
 
@@ -21,7 +21,7 @@ class ArkPresentableModel(ArkModel):
21
21
 
22
22
  class ArkCamelizedModel(ArkPresentableModel):
23
23
  class Config:
24
- alias_generator = camel.case
24
+ alias_generator = camelize
25
25
 
26
26
 
27
27
  class ArkTitleizedModel(ArkPresentableModel):
@@ -30,7 +30,9 @@ class ArkRegion(str, Enum):
30
30
  USEastPerf = 'us-east-perf'
31
31
  USEastPod = 'us-east-pod'
32
32
  Jakarta = 'ap-southeast-3'
33
+ Indonesia = 'ap-southeast-3'
33
34
  Melbourne = 'ap-southeast-4'
35
+ UAE = 'me-central-1'
34
36
 
35
37
 
36
38
  regions_full_names = {
@@ -62,7 +64,9 @@ regions_full_names = {
62
64
  ArkRegion.USEastPerf: 'us-east-perf (US-East-Perf)',
63
65
  ArkRegion.USEastPod: 'us-east-pod (US-East-Pod)',
64
66
  ArkRegion.Jakarta: 'ap-southeast-3 (Jakarta)',
67
+ ArkRegion.Indonesia: 'ap-southeast-3 (Indonesia)',
65
68
  ArkRegion.Melbourne: 'ap-southeast-4 (Melbourne)',
69
+ ArkRegion.UAE: 'me-central-1 (UAE)',
66
70
  }
67
71
 
68
72
  platform_region_dict = {
@@ -94,7 +98,9 @@ platform_region_dict = {
94
98
  'us-east-pod': 'US-East-Pod',
95
99
  'ISP-PcloudPerf-US East': 'isp-pcloudperf-us east',
96
100
  'Jakarta': 'ap-southeast-3',
101
+ 'Indonesia': 'ap-southeast-3',
97
102
  'Melbourne': 'ap-southeast-4',
103
+ 'UAE': 'me-central-1',
98
104
  }
99
105
 
100
106
 
@@ -12,5 +12,7 @@ class ArkWorkspaceType(str, MultiValueEnum):
12
12
  MSSQL = 'mssql', 'MSSQL'
13
13
  ORACLE = 'oracle', 'Oracle'
14
14
  POSTGRES = 'postgres', 'Postgres'
15
+ MONGO = 'mongo', 'Mongo'
16
+ DB2 = 'db2', 'Db2'
15
17
  FAULT = 'fault', 'FAULT'
16
18
  UNKNOWN = 'unknown', 'UNKNOWN', 'Unknown'
@@ -1,8 +1,10 @@
1
+ from ark_sdk_python.models.services.dpa.db.ark_dpa_db_assets_type import ArkDPADBAssetsType
1
2
  from ark_sdk_python.models.services.dpa.db.ark_dpa_db_base_execution import ArkDPADBBaseExecution
2
3
  from ark_sdk_python.models.services.dpa.db.ark_dpa_db_base_generate_assets import ArkDPADBAssetsResponseFormat, ArkDPADBBaseGenerateAssets
3
4
  from ark_sdk_python.models.services.dpa.db.ark_dpa_db_generated_assets import ArkDPADBGeneratedAssets
4
5
  from ark_sdk_python.models.services.dpa.db.ark_dpa_db_mysql_execution import ArkDPADBMysqlExecution
5
6
  from ark_sdk_python.models.services.dpa.db.ark_dpa_db_oracle_generate_assets import ArkDPADBOracleGenerateAssets
7
+ from ark_sdk_python.models.services.dpa.db.ark_dpa_db_proxy_fullchain_generate_assets import ArkDPADBProxyFullchainGenerateAssets
6
8
  from ark_sdk_python.models.services.dpa.db.ark_dpa_db_psql_execution import ArkDPADBPsqlExecution
7
9
 
8
10
  __all__ = [
@@ -13,4 +15,6 @@ __all__ = [
13
15
  'ArkDPADBAssetsResponseFormat',
14
16
  'ArkDPADBOracleGenerateAssets',
15
17
  'ArkDPADBGeneratedAssets',
18
+ 'ArkDPADBProxyFullchainGenerateAssets',
19
+ 'ArkDPADBAssetsType',
16
20
  ]
@@ -0,0 +1,7 @@
1
+ # pylint: disable=invalid-name
2
+ from enum import Enum
3
+
4
+
5
+ class ArkDPADBAssetsType(str, Enum):
6
+ OracleTNSAssets = 'oracle_tns_assets'
7
+ ProxyFullChain = 'proxy_full_chain'
@@ -18,4 +18,4 @@ class ArkDPADBBaseGenerateAssets(ArkModel):
18
18
  response_format: ArkDPADBAssetsResponseFormat = Field(
19
19
  description='In which format to return the assets', default=ArkDPADBAssetsResponseFormat.RAW
20
20
  )
21
- include_sso: bool = Field(description='Whether to generate the asset with SSO details', default=True)
21
+ folder: str = Field(description='Where to output the assets')
@@ -4,5 +4,5 @@ from ark_sdk_python.models.services.dpa.db.ark_dpa_db_base_generate_assets impor
4
4
 
5
5
 
6
6
  class ArkDPADBOracleGenerateAssets(ArkDPADBBaseGenerateAssets):
7
- folder: str = Field(description='Where to output the assets')
8
7
  unzip: bool = Field(description='Whether to save zipped or not', default=True)
8
+ include_sso: bool = Field(description='Whether to generate the asset with SSO details', default=True)
@@ -0,0 +1,5 @@
1
+ from ark_sdk_python.models.services.dpa.db.ark_dpa_db_base_generate_assets import ArkDPADBBaseGenerateAssets
2
+
3
+
4
+ class ArkDPADBProxyFullchainGenerateAssets(ArkDPADBBaseGenerateAssets):
5
+ pass
@@ -9,9 +9,11 @@ from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_connection_data i
9
9
  ArkDPADBConnectAs,
10
10
  ArkDPADBLDAPAuth,
11
11
  ArkDPADBLocalDBAuth,
12
+ ArkDPADBMongoDBAuth,
12
13
  ArkDPADBOracleDBAuth,
13
14
  ArkDPADBResourceIdentifierType,
14
15
  )
16
+ from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_enums import ArkDPADBMongoDatabaseBuiltinRole, ArkDPADBMongoGlobalBuiltinRole
15
17
  from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_policies_filter import ArkDPADBPoliciesFilter
16
18
  from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_policies_stats import ArkDPADBPoliciesStats
17
19
  from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_policies_workspace_type_serializer import (
@@ -21,8 +23,10 @@ from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_policy import Ark
21
23
  from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_policy_list_item import ArkDPADBPolicyListItem
22
24
  from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_providers import (
23
25
  ArkDPADB,
26
+ ArkDPADBDb2,
24
27
  ArkDPADBIdentifiers,
25
28
  ArkDPADBMariaDB,
29
+ ArkDPADBMongo,
26
30
  ArkDPADBMSSQL,
27
31
  ArkDPADBMySQL,
28
32
  ArkDPADBOracle,
@@ -42,6 +46,7 @@ __all__ = [
42
46
  'ArkDPADBLDAPAuth',
43
47
  'ArkDPADBLocalDBAuth',
44
48
  'ArkDPADBOracleDBAuth',
49
+ 'ArkDPADBMongoDBAuth',
45
50
  'ArkDPADBResourceIdentifierType',
46
51
  'ArkDPADBPoliciesFilter',
47
52
  'ArkDPADBPoliciesStats',
@@ -56,6 +61,10 @@ __all__ = [
56
61
  'ArkDPADBOracleResource',
57
62
  'ArkDPADBPostgres',
58
63
  'ArkDPADBOracle',
64
+ 'ArkDPADBMongo',
59
65
  'ArkDPADBProvidersData',
60
66
  'ArkDPADBUpdatePolicy',
67
+ 'ArkDPADBMongoDatabaseBuiltinRole',
68
+ 'ArkDPADBMongoGlobalBuiltinRole',
69
+ 'ArkDPADBDb2',
61
70
  ]
@@ -1,9 +1,10 @@
1
1
  from enum import Enum
2
- from typing import List, Optional
2
+ from typing import Dict, List, Optional
3
3
 
4
4
  from pydantic import Field
5
5
 
6
6
  from ark_sdk_python.models.ark_model import ArkCamelizedModel
7
+ from ark_sdk_python.models.services.dpa.policies.db.ark_dpa_db_enums import ArkDPADBMongoDatabaseBuiltinRole, ArkDPADBMongoGlobalBuiltinRole
7
8
 
8
9
 
9
10
  class ArkDPADBBaseAuth(ArkCamelizedModel):
@@ -38,9 +39,17 @@ class ArkDPADBOracleDBAuth(ArkDPADBBaseAuth):
38
39
  sysoper_role: bool = Field(description='Whether to apply to the ephemeral user the SYSOPER role', default=False)
39
40
 
40
41
 
42
+ class ArkDPADBMongoDBAuth(ArkDPADBBaseAuth):
43
+ global_builtin_roles: List[ArkDPADBMongoGlobalBuiltinRole] = Field(description='Global builtin roles across all databases')
44
+ database_builtin_roles: Dict[str, List[ArkDPADBMongoDatabaseBuiltinRole]] = Field(description='Per database builtin roles')
45
+ database_custom_roles: Dict[str, List[str]] = Field(description='Custom per database roles')
46
+ applied_to: Optional[List[ArkDPADBAppliedTo]] = Field(description='Which resources to apply to')
47
+
48
+
41
49
  class ArkDPADBConnectAs(ArkCamelizedModel):
42
50
  ldap_auth: Optional[List[ArkDPADBLDAPAuth]] = Field(description='LDAP related authentication, only applies to MSSQL DB')
43
51
  db_auth: Optional[List[ArkDPADBLocalDBAuth]] = Field(
44
52
  description='Local DB related authentication, only applies to MySQL / MariaDB / Postgres'
45
53
  )
46
54
  oracle_auth: Optional[List[ArkDPADBOracleDBAuth]] = Field(description='Oracle DB related authentication, only applies to Oracle')
55
+ mongo_auth: Optional[List[ArkDPADBMongoDBAuth]] = Field(description='Mongo DB related authentication, only applies to Mongo')
@@ -0,0 +1,24 @@
1
+ # pylint: disable=invalid-name
2
+ from enum import Enum
3
+
4
+
5
+ class ArkDPADBMongoGlobalBuiltinRole(str, Enum):
6
+ Root = 'root'
7
+ DbAdminAnyDatabase = 'dbAdminAnyDatabase'
8
+ UserAdminAnyDatabase = 'userAdminAnyDatabase'
9
+ ReadWriteAnyDatabase = 'readWriteAnyDatabase'
10
+ ReadAnyDatabase = 'readAnyDatabase'
11
+ Backup = 'backup'
12
+ Restore = 'restore'
13
+ ClusterAdmin = 'clusterAdmin'
14
+ ClusterManager = 'clusterManager'
15
+ ClusterMonitor = 'clusterMonitor'
16
+ HostManager = 'hostManager'
17
+
18
+
19
+ class ArkDPADBMongoDatabaseBuiltinRole(str, Enum):
20
+ UserAdmin = 'userAdmin'
21
+ DbOwner = 'dbOwner'
22
+ DbAdmin = 'dbAdmin'
23
+ ReadWrite = 'readWrite'
24
+ Read = 'read'
@@ -20,6 +20,8 @@ class ArkDPADBPoliciesFilter(ArkDPABasePoliciesFilter):
20
20
  ArkWorkspaceType.POSTGRES,
21
21
  ArkWorkspaceType.MSSQL,
22
22
  ArkWorkspaceType.ORACLE,
23
+ ArkWorkspaceType.MONGO,
24
+ ArkWorkspaceType.DB2,
23
25
  ]:
24
26
  raise ValueError('Invalid Database Type')
25
27
  return val
@@ -19,6 +19,8 @@ class ArkDPADBPoliciesStats(ArkDPABasePoliciesStats):
19
19
  ArkWorkspaceType.POSTGRES,
20
20
  ArkWorkspaceType.MSSQL,
21
21
  ArkWorkspaceType.ORACLE,
22
+ ArkWorkspaceType.MONGO,
23
+ ArkWorkspaceType.DB2,
22
24
  ]:
23
25
  raise ValueError('Invalid Database Type')
24
26
  return val
@@ -15,4 +15,8 @@ def serialize_dpa_db_policies_workspace_type(ws_type: ArkWorkspaceType) -> str:
15
15
  return 'Postgres'
16
16
  elif ws_type == ArkWorkspaceType.ORACLE:
17
17
  return 'Oracle'
18
+ elif ws_type == ArkWorkspaceType.MONGO:
19
+ return 'Mongo'
20
+ elif ws_type == ArkWorkspaceType.DB2:
21
+ return 'Db2'
18
22
  raise ArkException('Invalid DB Policies Workspace Type')
@@ -21,6 +21,8 @@ class ArkDPADBPolicyListItem(ArkDPABasePolicyListItem):
21
21
  ArkWorkspaceType.POSTGRES,
22
22
  ArkWorkspaceType.MSSQL,
23
23
  ArkWorkspaceType.ORACLE,
24
+ ArkWorkspaceType.MONGO,
25
+ ArkWorkspaceType.DB2,
24
26
  ]:
25
27
  raise ValueError('Invalid Database Type')
26
28
  return val
@@ -29,6 +29,14 @@ class ArkDPADBPostgres(ArkDPADBIdentifiers):
29
29
  pass
30
30
 
31
31
 
32
+ class ArkDPADBMongo(ArkDPADBIdentifiers):
33
+ pass
34
+
35
+
36
+ class ArkDPADBDb2(ArkDPADBIdentifiers):
37
+ pass
38
+
39
+
32
40
  class ArkDPADBOracleResource(ArkCamelizedModel):
33
41
  name: str = Field(description='Name of the oracle db resource / asset')
34
42
  services: Optional[List[str]] = Field(description='Oracle services in the database')
@@ -44,6 +52,8 @@ class ArkDPADBProvidersData(ArkCamelizedModel):
44
52
  mariadb: Optional[ArkDPADBMariaDB] = Field(description='MariaDB related resources')
45
53
  postgres: Optional[ArkDPADBPostgres] = Field(description='PostgreSQL related resources')
46
54
  oracle: Optional[ArkDPADBOracle] = Field(description='Oracle related resources')
55
+ mongo: Optional[ArkDPADBMongo] = Field(description='Mongo related resources')
56
+ db2: Optional[ArkDPADBDb2] = Field(description='Db2 related resources')
47
57
 
48
58
  @root_validator
49
59
  @classmethod
@@ -26,7 +26,6 @@ from ark_sdk_python.models.services.dpa.policies.vm.ark_dpa_vm_providers import
26
26
  ArkDPAVMAzureProviderData,
27
27
  ArkDPAVMFQDNOperator,
28
28
  ArkDPAVMFQDNRule,
29
- ArkDPAVMFQDNRulesConjunction,
30
29
  ArkDPAVMGCPProviderData,
31
30
  ArkDPAVMKeyValTag,
32
31
  ArkDPAVMOnPremProviderData,
@@ -56,7 +55,6 @@ __all__ = [
56
55
  'ArkDPAVMProvidersDict',
57
56
  'ArkDPAVMFQDNOperator',
58
57
  'ArkDPAVMFQDNRule',
59
- 'ArkDPAVMFQDNRulesConjunction',
60
58
  'ArkDPAVMGCPProviderData',
61
59
  'ArkDPAVMKeyValTag',
62
60
  'ArkDPAVMOnPremProviderData',
@@ -25,7 +25,10 @@ class ArkDPAVMAddPolicy(ArkDPABaseAddPolicy):
25
25
  def validate_providers_data(cls, val):
26
26
  if val is not None:
27
27
  for k in val.keys():
28
- val[k]['providerName'] = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
28
+ if isinstance(val[k], dict):
29
+ val[k]['providerName'] = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
30
+ else:
31
+ val[k].provider_name = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
29
32
  if ArkWorkspaceType(k) not in [ArkWorkspaceType.AWS, ArkWorkspaceType.AZURE, ArkWorkspaceType.GCP, ArkWorkspaceType.ONPREM]:
30
33
  raise ValueError('Invalid Platform / Workspace Type')
31
34
  return val
@@ -9,6 +9,8 @@ def serialize_dpa_vm_policies_workspace_type(ws_type: ArkWorkspaceType) -> str:
9
9
  return 'AWS'
10
10
  elif ws_type == ArkWorkspaceType.AZURE:
11
11
  return 'Azure'
12
+ elif ws_type == ArkWorkspaceType.GCP:
13
+ return 'GCP'
12
14
  elif ws_type == ArkWorkspaceType.ONPREM:
13
15
  return 'OnPrem'
14
16
  raise ArkException('Invalid VM Policies Workspace Type')
@@ -20,7 +20,10 @@ class ArkDPAVMPolicy(ArkDPABasePolicy):
20
20
  def validate_providers_data(cls, val):
21
21
  if val is not None:
22
22
  for k in val.keys():
23
- val[k]['providerName'] = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
23
+ if isinstance(val[k], dict):
24
+ val[k]['providerName'] = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
25
+ else:
26
+ val[k].provider_name = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
24
27
  if ArkWorkspaceType(k) not in [ArkWorkspaceType.AWS, ArkWorkspaceType.AZURE, ArkWorkspaceType.GCP, ArkWorkspaceType.ONPREM]:
25
28
  raise ValueError('Invalid Platform / Workspace Type')
26
29
  return val
@@ -30,16 +30,11 @@ class ArkDPAVMAzureProviderData(ArkCamelizedModel):
30
30
  class ArkDPAVMGCPProviderData(ArkCamelizedModel):
31
31
  provider_name: Literal['GCP'] = Field(alias='providerName', default='GCP', exclude=True)
32
32
  regions: Optional[List[str]] = Field(description='Regions GCP Filter')
33
- tags: Optional[List[Dict]] = Field(description='Tags GCP Filter')
34
- network_ids: Optional[List[str]] = Field(description='Networks GCP Filter')
33
+ labels: Optional[List[Dict]] = Field(description='Labels GCP Filter')
34
+ vpc_Ids: Optional[List[str]] = Field(description='Vpc GCP Filter')
35
35
  projects: Optional[List[str]] = Field(description='Projects GCP Filter')
36
36
 
37
37
 
38
- class ArkDPAVMFQDNRulesConjunction(str, Enum):
39
- AND = 'AND'
40
- OR = 'OR'
41
-
42
-
43
38
  class ArkDPAVMFQDNOperator(str, Enum):
44
39
  EXACTLY = 'EXACTLY'
45
40
  WILDCARD = 'WILDCARD'
@@ -56,7 +51,6 @@ class ArkDPAVMFQDNRule(ArkCamelizedModel):
56
51
 
57
52
  class ArkDPAVMOnPremProviderData(ArkCamelizedModel):
58
53
  provider_name: Literal['OnPrem'] = Field(alias='providerName', default='OnPrem', exclude=True)
59
- fqdn_rules_conjunction: Optional[ArkDPAVMFQDNRulesConjunction] = Field(description='Rules relationships')
60
54
  fqdn_rules: Optional[List[ArkDPAVMFQDNRule]] = Field(description='List of FQDN rules applied to the connection')
61
55
 
62
56
 
@@ -20,7 +20,10 @@ class ArkDPAVMUpdatePolicy(ArkDPABaseUpdatePolicy):
20
20
  def validate_providers_data(cls, val):
21
21
  if val is not None:
22
22
  for k in val.keys():
23
- val[k]['providerName'] = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
23
+ if isinstance(val[k], dict):
24
+ val[k]['providerName'] = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
25
+ else:
26
+ val[k].provider_name = serialize_dpa_vm_policies_workspace_type(ArkWorkspaceType(k))
24
27
  if ArkWorkspaceType(k) not in [ArkWorkspaceType.AWS, ArkWorkspaceType.AZURE, ArkWorkspaceType.GCP, ArkWorkspaceType.ONPREM]:
25
28
  raise ValueError('Invalid Platform / Workspace Type')
26
29
  return val
@@ -1,5 +1,8 @@
1
1
  from ark_sdk_python.models.services.dpa.sso.ark_dpa_sso_acquire_token_response import ArkDPASSOAcquireTokenResponse
2
- from ark_sdk_python.models.services.dpa.sso.ark_dpa_sso_get_short_lived_client_certificate import ArkDPASSOGetShortLivedClientCertificate
2
+ from ark_sdk_python.models.services.dpa.sso.ark_dpa_sso_get_short_lived_client_certificate import (
3
+ ArkDPASSOGetShortLivedClientCertificate,
4
+ ArkDPASSOShortLiveClientCertificateFormat,
5
+ )
3
6
  from ark_sdk_python.models.services.dpa.sso.ark_dpa_sso_get_short_lived_oracle_wallet import (
4
7
  ArkDPASSOGetShortLivedOracleWallet,
5
8
  ArkDPASSOShortLivedOracleWalletType,
@@ -9,6 +12,7 @@ from ark_sdk_python.models.services.dpa.sso.ark_dpa_sso_get_short_lived_rdp_file
9
12
 
10
13
  __all__ = [
11
14
  'ArkDPASSOGetShortLivedClientCertificate',
15
+ 'ArkDPASSOShortLiveClientCertificateFormat',
12
16
  'ArkDPASSOGetShortLivedPassword',
13
17
  'ArkDPASSOGetShortLivedOracleWallet',
14
18
  'ArkDPASSOShortLivedOracleWalletType',
@@ -18,6 +18,11 @@ class ArkDPADBAddDatabase(ArkCamelizedModel):
18
18
  domain: Optional[str] = Field(description='The domain the DB resides in')
19
19
  domain_controller_name: Optional[str] = Field(description='Domain controller name associated to this database')
20
20
  domain_controller_netbios: Optional[str] = Field(description='Domain controller netbios associated to this database')
21
+ domain_controller_use_ldaps: bool = Field(description='Whether to work with LDAP secure or not', default=False)
22
+ domain_controller_enable_certificate_validation: bool = Field(
23
+ description='Whether to enforce certificate validation on TLS comm to the DC', default=True
24
+ )
25
+ domain_controller_ldaps_certificate: Optional[str] = Field(description='Certificate id to use for the domain controller TLS comm')
21
26
  provider_engine: ArkDPADBDatabaseEngineType = Field(
22
27
  description='Provider engine, will be later deduced to the identifer of the provider'
23
28
  )
@@ -29,6 +29,8 @@ class ArkDPADBDatabaseEngineType(str, Enum):
29
29
  OracleSH = 'oracle-sh'
30
30
  DB2 = 'db2'
31
31
  DB2SH = 'db2-sh'
32
+ Mongo = 'mongo'
33
+ MongoSH = 'mongo-sh'
32
34
 
33
35
 
34
36
  class ArkDPADBDatabaseFamilyType(str, Enum):
@@ -38,6 +40,7 @@ class ArkDPADBDatabaseFamilyType(str, Enum):
38
40
  MySQL = 'MySQL'
39
41
  MariaDB = 'MariaDB'
40
42
  DB2 = 'DB2'
43
+ Mongo = 'Mongo'
41
44
  Unknown = 'Unknown'
42
45
 
43
46
 
@@ -77,6 +80,8 @@ DATABASES_ENGINES_TO_FAMILY: Final[Dict[ArkDPADBDatabaseEngineType, ArkDPADBData
77
80
  ArkDPADBDatabaseEngineType.SqlServerSH: ArkDPADBDatabaseFamilyType.MSSQL,
78
81
  ArkDPADBDatabaseEngineType.DB2: ArkDPADBDatabaseFamilyType.DB2,
79
82
  ArkDPADBDatabaseEngineType.DB2SH: ArkDPADBDatabaseFamilyType.DB2,
83
+ ArkDPADBDatabaseEngineType.Mongo: ArkDPADBDatabaseFamilyType.Mongo,
84
+ ArkDPADBDatabaseEngineType.MongoSH: ArkDPADBDatabaseFamilyType.Mongo,
80
85
  }
81
86
 
82
87
 
@@ -87,4 +92,5 @@ DATABASE_FAMILIES_DEFAULT_PORTS: Final[Dict[ArkDPADBDatabaseFamilyType, int]] =
87
92
  ArkDPADBDatabaseFamilyType.MySQL: 3306,
88
93
  ArkDPADBDatabaseFamilyType.MariaDB: 3306,
89
94
  ArkDPADBDatabaseFamilyType.DB2: 50002,
95
+ ArkDPADBDatabaseFamilyType.Mongo: 27017,
90
96
  }
@@ -18,6 +18,11 @@ class ArkDPADBUpdateDatabase(ArkCamelizedModel):
18
18
  domain: Optional[str] = Field(description='The domain the DB resides in')
19
19
  domain_controller_name: Optional[str] = Field(description='Domain controller name associated to this database')
20
20
  domain_controller_netbios: Optional[str] = Field(description='Domain controller netbios associated to this database')
21
+ domain_controller_use_ldaps: bool = Field(description='Whether to work with LDAP secure or not', default=False)
22
+ domain_controller_enable_certificate_validation: bool = Field(
23
+ description='Whether to enforce certificate validation on TLS comm to the DC', default=True
24
+ )
25
+ domain_controller_ldaps_certificate: Optional[str] = Field(description='Certificate id to use for the domain controller TLS comm')
21
26
  provider_engine: Optional[ArkDPADBDatabaseEngineType] = Field(
22
27
  description='Provider engine, will be later deduced to the identifer of the provider'
23
28
  )
@@ -21,9 +21,11 @@ from ark_sdk_python.models.common.ark_connection_method import ArkConnectionMeth
21
21
  from ark_sdk_python.models.services import ArkServiceConfig
22
22
  from ark_sdk_python.models.services.dpa.db import (
23
23
  ArkDPADBAssetsResponseFormat,
24
+ ArkDPADBAssetsType,
24
25
  ArkDPADBGeneratedAssets,
25
26
  ArkDPADBMysqlExecution,
26
27
  ArkDPADBOracleGenerateAssets,
28
+ ArkDPADBProxyFullchainGenerateAssets,
27
29
  ArkDPADBPsqlExecution,
28
30
  )
29
31
  from ark_sdk_python.models.services.dpa.sso import ArkDPASSOGetShortLivedPassword
@@ -144,22 +146,28 @@ class ArkDPADBService(ArkService):
144
146
 
145
147
  def __generate_assets(
146
148
  self,
147
- resource_type: ArkDPADBDatabaseFamilyType,
149
+ asset_type: ArkDPADBAssetsType,
148
150
  connection_method: ArkConnectionMethod,
149
151
  response_format: ArkDPADBAssetsResponseFormat,
150
- include_sso: bool,
151
- generation_hints: Dict[str, Any],
152
+ generation_hints: Optional[Dict[str, Any]] = None,
153
+ include_sso: Optional[bool] = None,
154
+ resource_type: Optional[ArkDPADBDatabaseFamilyType] = None,
152
155
  ) -> ArkDPADBGeneratedAssets:
156
+ body = {
157
+ 'asset_type': asset_type,
158
+ 'os_type': running_os().value,
159
+ 'connection_method': connection_method.value,
160
+ 'response_format': response_format.value,
161
+ }
162
+ if generation_hints:
163
+ body['generation_hints'] = generation_hints
164
+ if include_sso is not None:
165
+ body['include_sso'] = include_sso
166
+ if resource_type:
167
+ body['resource_type'] = resource_type.value
153
168
  resp: Response = self.__client.post(
154
169
  ASSETS_API,
155
- json={
156
- 'resource_type': resource_type.value,
157
- 'os_type': running_os().value,
158
- 'connection_method': connection_method.value,
159
- 'response_format': response_format.value,
160
- 'include_sso': include_sso,
161
- 'generation_hints': generation_hints,
162
- },
170
+ json=body,
163
171
  )
164
172
  if resp.status_code == HTTPStatus.OK:
165
173
  try:
@@ -183,11 +191,12 @@ class ArkDPADBService(ArkService):
183
191
  """
184
192
  self._logger.info('Generating oracle tns names')
185
193
  assets_data = self.__generate_assets(
186
- ArkDPADBDatabaseFamilyType.Oracle,
187
- generate_oracle_assets.connection_method,
188
- generate_oracle_assets.response_format,
189
- generate_oracle_assets.include_sso,
190
- {'folder': generate_oracle_assets.folder},
194
+ asset_type=ArkDPADBAssetsType.OracleTNSAssets,
195
+ connection_method=generate_oracle_assets.connection_method,
196
+ response_format=generate_oracle_assets.response_format,
197
+ generation_hints={'folder': generate_oracle_assets.folder},
198
+ include_sso=generate_oracle_assets.include_sso,
199
+ resource_type=ArkDPADBDatabaseFamilyType.Oracle,
191
200
  )
192
201
  if isinstance(assets_data, ArkDPADBGeneratedAssets):
193
202
  assets_data = assets_data.assets['generated_assets']
@@ -202,6 +211,29 @@ class ArkDPADBService(ArkService):
202
211
  with zipfile.ZipFile(assets_bytes, 'r') as zipf:
203
212
  zipf.extractall(generate_oracle_assets.folder)
204
213
 
214
+ def generate_proxy_fullchain(self, generate_proxy_fullchain: ArkDPADBProxyFullchainGenerateAssets) -> None:
215
+ """
216
+ Generates the proxy fullchain certificates for full certificate validation.
217
+
218
+ Args:
219
+ generate_proxy_fullchain (ArkDPADBProxyFullchainGenerateAssets): _description_
220
+
221
+ Raises:
222
+ ArkServiceException: _description_
223
+ """
224
+ self._logger.info('Generating proxy fullchain')
225
+ assets_data = self.__generate_assets(
226
+ asset_type=ArkDPADBAssetsType.ProxyFullChain,
227
+ connection_method=generate_proxy_fullchain.connection_method,
228
+ response_format=generate_proxy_fullchain.response_format,
229
+ )
230
+ if isinstance(assets_data, ArkDPADBGeneratedAssets):
231
+ assets_data = assets_data.assets['generated_assets']
232
+ if not os.path.exists(generate_proxy_fullchain.folder):
233
+ os.makedirs(generate_proxy_fullchain.folder)
234
+ with open(f'{generate_proxy_fullchain.folder}{os.path.sep}proxy_fullchain.pem', 'w', encoding='utf-8') as file_handle:
235
+ file_handle.write(assets_data)
236
+
205
237
  @staticmethod
206
238
  @overrides
207
239
  def service_config() -> ArkServiceConfig: