mtn-cloud 0.2.7__tar.gz → 0.2.10__tar.gz

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 (63) hide show
  1. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/PKG-INFO +2 -11
  2. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/README.md +1 -10
  3. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/advanced-cookbook.md +2 -1
  4. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/instances.md +3 -3
  5. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/quickstart.md +1 -0
  6. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/_version.py +1 -1
  7. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/client.py +1 -0
  8. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/instance.py +5 -4
  9. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/instances.py +2 -2
  10. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_config.py +19 -0
  11. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_instances.py +4 -0
  12. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/.gitignore +0 -0
  13. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/LICENSE +0 -0
  14. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-overview.md +0 -0
  15. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/archive-buckets.md +0 -0
  16. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/client.md +0 -0
  17. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/clouds.md +0 -0
  18. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/groups.md +0 -0
  19. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/index.md +0 -0
  20. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/instance-types.md +0 -0
  21. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/networks.md +0 -0
  22. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/plans.md +0 -0
  23. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/api-reference/storage-buckets.md +0 -0
  24. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/docstring-style.md +0 -0
  25. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/index.md +0 -0
  26. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/instances.md +0 -0
  27. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/networking.md +0 -0
  28. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/storage.md +0 -0
  29. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/docs/stylesheets/extra.css +0 -0
  30. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/pyproject.toml +0 -0
  31. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/__init__.py +0 -0
  32. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/config.py +0 -0
  33. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/exceptions.py +0 -0
  34. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/http.py +0 -0
  35. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/__init__.py +0 -0
  36. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/archive.py +0 -0
  37. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/base.py +0 -0
  38. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/cloud.py +0 -0
  39. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/group.py +0 -0
  40. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/instance_type.py +0 -0
  41. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/network.py +0 -0
  42. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/plan.py +0 -0
  43. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/storage_bucket.py +0 -0
  44. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/user.py +0 -0
  45. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/models/volume.py +0 -0
  46. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/__init__.py +0 -0
  47. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/archive_buckets.py +0 -0
  48. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/base.py +0 -0
  49. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/clouds.py +0 -0
  50. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/groups.py +0 -0
  51. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/instance_types.py +0 -0
  52. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/networks.py +0 -0
  53. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/plans.py +0 -0
  54. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/src/mtn_cloud/resources/storage_buckets.py +0 -0
  55. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/__init__.py +0 -0
  56. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/conftest.py +0 -0
  57. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_archive_buckets.py +0 -0
  58. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_client.py +0 -0
  59. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_clouds.py +0 -0
  60. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_exceptions.py +0 -0
  61. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_instance_types.py +0 -0
  62. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_networks.py +0 -0
  63. {mtn_cloud-0.2.7 → mtn_cloud-0.2.10}/tests/test_storage_buckets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mtn-cloud
3
- Version: 0.2.7
3
+ Version: 0.2.10
4
4
  Summary: Community Python SDK for MTN Cloud - Deploy and manage cloud resources with ease
5
5
  Project-URL: Homepage, https://github.com/mahveotm/mtn-cloud-python
6
6
  Project-URL: Documentation, https://github.com/mahveotm/mtn-cloud-python#readme
@@ -132,20 +132,10 @@ groups = cloud.groups.list()
132
132
  for group in groups[:5]:
133
133
  print(group.id, group.name)
134
134
 
135
- # Clouds/zones
136
- clouds = cloud.clouds.list_openstack()
137
- for c in clouds[:5]:
138
- print(c.id, c.name, c.type_code)
139
-
140
135
  # Instance types
141
136
  types = cloud.instance_types.list_os()
142
137
  for t in types[:5]:
143
138
  print(t.code, t.name, t.default_layout_id)
144
-
145
- # Service plans
146
- plans = cloud.plans.list()
147
- for p in plans[:5]:
148
- print(p.id, p.name, p.cores, p.memory_gb)
149
139
  ```
150
140
 
151
141
  ### 2. Create an Instance
@@ -158,6 +148,7 @@ instance = cloud.instances.create(
158
148
  group="MTNNG_CLOUD_AZ_1",
159
149
  layout=327,
160
150
  plan=6776,
151
+ resource_pool_id="pool-214",
161
152
  labels=["production", "web"],
162
153
  )
163
154
 
@@ -88,20 +88,10 @@ groups = cloud.groups.list()
88
88
  for group in groups[:5]:
89
89
  print(group.id, group.name)
90
90
 
91
- # Clouds/zones
92
- clouds = cloud.clouds.list_openstack()
93
- for c in clouds[:5]:
94
- print(c.id, c.name, c.type_code)
95
-
96
91
  # Instance types
97
92
  types = cloud.instance_types.list_os()
98
93
  for t in types[:5]:
99
94
  print(t.code, t.name, t.default_layout_id)
100
-
101
- # Service plans
102
- plans = cloud.plans.list()
103
- for p in plans[:5]:
104
- print(p.id, p.name, p.cores, p.memory_gb)
105
95
  ```
106
96
 
107
97
  ### 2. Create an Instance
@@ -114,6 +104,7 @@ instance = cloud.instances.create(
114
104
  group="MTNNG_CLOUD_AZ_1",
115
105
  layout=327,
116
106
  plan=6776,
107
+ resource_pool_id="pool-214",
117
108
  labels=["production", "web"],
118
109
  )
119
110
 
@@ -154,6 +154,7 @@ instance = cloud.instances.create(
154
154
  group="MTNNG_CLOUD_AZ_1",
155
155
  layout=target_type.default_layout_id,
156
156
  plan=target_plan.id,
157
+ resource_pool_id="pool-214",
157
158
  )
158
159
  ```
159
160
 
@@ -172,7 +173,7 @@ instance = cloud.instances.create(
172
173
  group="MTNNG_CLOUD_AZ_1",
173
174
  layout=309,
174
175
  plan=6776,
176
+ resource_pool_id="pool-214",
175
177
  )
176
178
  logger.info("instance-created id=%s status=%s", instance.id, instance.status)
177
179
  ```
178
-
@@ -32,7 +32,7 @@
32
32
  - common API exceptions
33
33
  - `NotFoundError` when no instance matches
34
34
 
35
- ### `create(name: str, *, cloud: str, type: str, group: str, layout: int, plan: int, description=None, environment=None, labels=None, tags=None, copies=1, layout_size=1, resource_pool_id=None, availability_zone=None, security_group="default", os_external_network_id=None, create_user=True, workflow_id=None, shutdown_days=None, expire_days=None, create_backup=None, security_groups=None, ports=None, volumes=None, network_interfaces=None, options=None) -> Instance`
35
+ ### `create(name: str, *, cloud: str, type: str, group: str, layout: int, plan: int, resource_pool_id: str, description=None, environment=None, labels=None, tags=None, copies=1, layout_size=1, availability_zone=None, security_group="default", os_external_network_id=None, create_user=True, workflow_id=None, shutdown_days=None, expire_days=None, create_backup=None, security_groups=None, ports=None, volumes=None, network_interfaces=None, options=None) -> Instance`
36
36
 
37
37
  - Endpoint sequence:
38
38
  - `GET /api/groups?name=<group>&max=1` (resolve group name to `group_id`)
@@ -45,12 +45,13 @@
45
45
  - `group`: group/site name (resolved to ID)
46
46
  - `layout`: layout ID
47
47
  - `plan`: service plan ID
48
+ - `resource_pool_id`: project resource pool ID
48
49
  - Optional metadata:
49
50
  - `description`, `environment`, `labels`, `tags`
50
51
  - Optional sizing/provisioning:
51
52
  - `copies`, `layout_size`
52
53
  - Optional MTN/OpenStack-specific provisioning:
53
- - `resource_pool_id`, `availability_zone`, `security_group`, `os_external_network_id`, `create_user`
54
+ - `availability_zone`, `security_group`, `os_external_network_id`, `create_user`
54
55
  - Optional automation:
55
56
  - `workflow_id`, `shutdown_days`, `expire_days`, `create_backup`
56
57
  - Optional networking/storage details:
@@ -164,4 +165,3 @@ Client-side polling helper.
164
165
  - `max_results`: maps to query `max`
165
166
  - Returns: list from response key `processes`
166
167
  - Raises: common API exceptions
167
-
@@ -70,6 +70,7 @@ instance = cloud.instances.create(
70
70
  group="MTNNG_CLOUD_AZ_1",
71
71
  layout=327,
72
72
  plan=6923,
73
+ resource_pool_id="pool-214", # from your project order context
73
74
  )
74
75
 
75
76
  print(instance.id, instance.name, instance.status, instance.primary_ip)
@@ -1,3 +1,3 @@
1
1
  """Package version metadata."""
2
2
 
3
- __version__ = "0.2.7"
3
+ __version__ = "0.2.10"
@@ -46,6 +46,7 @@ class MTNCloud:
46
46
  group="MTNNG_CLOUD_AZ_1",
47
47
  layout=327,
48
48
  plan=6923,
49
+ resource_pool_id="pool-214",
49
50
  )
50
51
 
51
52
  # Use as context manager
@@ -329,8 +329,10 @@ class InstanceCreate(BaseModel):
329
329
  )
330
330
 
331
331
  # MTN Cloud Config Options
332
- resource_pool_id: str | None = Field(
333
- default=None, description="Resource pool ID (e.g., 'pool-214')"
332
+ resource_pool_id: str = Field(
333
+ ...,
334
+ min_length=1,
335
+ description="Resource pool ID (e.g., 'pool-214')",
334
336
  )
335
337
  availability_zone: str | None = Field(
336
338
  default=None, description="Availability zone (e.g., 'Lagos-AZ-1-fd1')"
@@ -416,8 +418,7 @@ class InstanceCreate(BaseModel):
416
418
  # MTN Cloud config at root level
417
419
  config: dict[str, Any] = {}
418
420
 
419
- if self.resource_pool_id is not None:
420
- config["resourcePoolId"] = self.resource_pool_id
421
+ config["resourcePoolId"] = self.resource_pool_id
421
422
  if self.availability_zone is not None:
422
423
  config["availabilityZone"] = self.availability_zone
423
424
  if self.security_group is not None:
@@ -170,6 +170,7 @@ class InstancesResource(BaseResource[Instance]):
170
170
  group: str,
171
171
  layout: int,
172
172
  plan: int,
173
+ resource_pool_id: str,
173
174
  description: str | None = None,
174
175
  environment: str | None = None,
175
176
  labels: List[str] | None = None,
@@ -177,7 +178,6 @@ class InstancesResource(BaseResource[Instance]):
177
178
  copies: int = 1,
178
179
  layout_size: int = 1,
179
180
  # MTN Cloud config options
180
- resource_pool_id: str | None = None,
181
181
  availability_zone: str | None = None,
182
182
  security_group: str = "default",
183
183
  os_external_network_id: str | None = None,
@@ -205,13 +205,13 @@ class InstancesResource(BaseResource[Instance]):
205
205
  group: Group name (e.g., 'MTNNG_CLOUD_AZ_1') - will be resolved to ID automatically
206
206
  layout: Layout ID (e.g., 327)
207
207
  plan: Service plan ID (e.g., 6923)
208
+ resource_pool_id: Resource pool ID (e.g., 'pool-214')
208
209
  description: Instance description
209
210
  environment: Environment code
210
211
  labels: Labels (keywords) list
211
212
  tags: Metadata tags dict (e.g., {"env": "prod"})
212
213
  copies: Number of copies to provision
213
214
  layout_size: Multiply factor of containers/vms
214
- resource_pool_id: Resource pool ID (e.g., 'pool-214')
215
215
  availability_zone: Availability zone (e.g., 'Lagos-AZ-1-fd1')
216
216
  security_group: Security group name (default: 'default')
217
217
  os_external_network_id: External network for floating IP (e.g., 'public-network-01')
@@ -13,6 +13,25 @@ from mtn_cloud.config import MTNCloudConfig
13
13
  class TestMTNCloudConfig:
14
14
  """Tests for configuration."""
15
15
 
16
+ @pytest.fixture(autouse=True)
17
+ def _clear_mtn_cloud_env(self, monkeypatch):
18
+ """Ensure host MTN_CLOUD_* env vars do not leak into config tests."""
19
+ keys = (
20
+ "MTN_CLOUD_TOKEN",
21
+ "MTN_CLOUD_USERNAME",
22
+ "MTN_CLOUD_PASSWORD",
23
+ "MTN_CLOUD_URL",
24
+ "MTN_CLOUD_API_VERSION",
25
+ "MTN_CLOUD_TIMEOUT",
26
+ "MTN_CLOUD_MAX_RETRIES",
27
+ "MTN_CLOUD_RETRY_DELAY",
28
+ "MTN_CLOUD_VERIFY_SSL",
29
+ "MTN_CLOUD_USER_AGENT",
30
+ "MTN_CLOUD_DEBUG",
31
+ )
32
+ for key in keys:
33
+ monkeypatch.delenv(key, raising=False)
34
+
16
35
  def test_default_values(self):
17
36
  """Test default configuration values."""
18
37
  config = MTNCloudConfig()
@@ -63,6 +63,7 @@ class TestInstanceCreate:
63
63
  group_id=621, # Group ID is resolved by the resource
64
64
  layout=327,
65
65
  plan=6923,
66
+ resource_pool_id="pool-214",
66
67
  )
67
68
 
68
69
  payload = create.to_api_payload()
@@ -74,6 +75,7 @@ class TestInstanceCreate:
74
75
  assert payload["instance"]["site"]["id"] == 621
75
76
  assert payload["instance"]["layout"]["id"] == 327
76
77
  assert payload["instance"]["plan"]["id"] == 6923
78
+ assert payload["config"]["resourcePoolId"] == "pool-214"
77
79
 
78
80
  def test_create_with_mtn_cloud_config(self):
79
81
  """Test create payload with MTN Cloud config options."""
@@ -108,6 +110,7 @@ class TestInstanceCreate:
108
110
  group_id=621,
109
111
  layout=327,
110
112
  plan=6923,
113
+ resource_pool_id="pool-214",
111
114
  volumes=volumes,
112
115
  )
113
116
 
@@ -128,6 +131,7 @@ class TestInstanceCreate:
128
131
  group_id=621,
129
132
  layout=327,
130
133
  plan=6923,
134
+ resource_pool_id="pool-214",
131
135
  network_interfaces=networks,
132
136
  )
133
137
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes