Skip to content

Commit 6c78a6a

Browse files
Merge pull request #62 from softwareone-platform/feature/MPT-6729-sync-with-integration-20250205
Feature/mpt 6729 sync with integration 20250205
2 parents 562c29f + d0c0088 commit 6c78a6a

File tree

240 files changed

+11429
-13184
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

240 files changed

+11429
-13184
lines changed

auth/auth_server/controllers/user.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ def _get_input(self, **input_):
3838
'is_password_autogenerated', False)
3939
self_registration = input_.get('self_registration', False)
4040
verified = input_.get('verified', False)
41+
if self._config.disable_email_verification():
42+
verified = True
4143
if self_registration:
4244
root_type = self.session.query(Type).filter(
4345
and_(

auth/auth_server/tests/unittests/test_api_base.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ def setUp(self, version='v1'):
4444
return_value=secret).start()
4545
patch('optscale_client.config_client.client.Client.zoho_params',
4646
return_value={}).start()
47+
patch('optscale_client.config_client.client.'
48+
'Client.disable_email_verification',
49+
return_value=None).start()
4750
patch('auth.auth_server.utils.get_encryption_salt',
4851
return_value=gen_salt()).start()
4952
patch('auth.auth_server.controllers.token.TokenController.expiration',

auth/auth_server/tests/unittests/test_api_user.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -872,3 +872,12 @@ def test_create_verified_user(self):
872872
display_name='test',
873873
verified=True)
874874
self.assertTrue(user['verified'])
875+
876+
def test_disabled_email_verification(self):
877+
patch('optscale_client.config_client.client.'
878+
'Client.disable_email_verification',
879+
return_value=True).start()
880+
self.user_verified_mock.stop()
881+
code, user = self.client.user_create('[email protected]', 'pass1',
882+
display_name='test')
883+
self.assertTrue(user['verified'])

bulldozer/bulldozer_api/server.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import datetime
21
import asyncio
32
from typing import Tuple
43
from urllib.parse import urlparse

bulldozer/bulldozer_worker/generator/aws.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ def __init__(self, seed,
4848
key=None,
4949
tags=None,
5050
open_ingress=False,
51+
spot_price=None,
5152
):
5253
if tags is None:
5354
tags = dict()
@@ -63,6 +64,7 @@ def __init__(self, seed,
6364
self.user_data = user_data
6465
self.tags = tags
6566
self.open_ingress = open_ingress
67+
self.spot_price = spot_price
6668

6769
@property
6870
def image(self):
@@ -102,6 +104,8 @@ def generate_payload(self, spot=False):
102104
}
103105
if self.user_data:
104106
d.update({"user_data": self.user_data})
107+
if self.spot_price:
108+
d.update({"spot_price": self.spot_price})
105109
return d
106110

107111

bulldozer/bulldozer_worker/generator/templates/aws.tft

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,9 @@ resource "aws_spot_instance_request" "optscale_instance_{{seed}}" {
5151
{{#key}}
5252
key_name = "{{key_name}}"
5353
{{/key}}
54+
{{#spot_price}}
55+
spot_price = "{{spot_price}}"
56+
{{/spot_price}}
5457
instance_type = "{{instance_type}}"
5558
vpc_security_group_ids = ["${aws_security_group.optscale_sg_{{seed}}.id}"]
5659
root_block_device {

bulldozer/bulldozer_worker/infra.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -211,6 +211,7 @@ def start(
211211
key=None,
212212
tags=None,
213213
open_ingress=False,
214+
spot_price=None,
214215
):
215216
gen_cls = self.generator
216217
gen = gen_cls(
@@ -223,7 +224,8 @@ def start(
223224
user_data,
224225
key,
225226
tags,
226-
open_ingress
227+
open_ingress,
228+
spot_price
227229
)
228230
template = gen.render()
229231
path = os.path.join(os.path.dirname(self.path), self.seed)

bulldozer/bulldozer_worker/tasks.py

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import datetime
21
import logging
32

43
from bulldozer.bulldozer_worker.infra import Infra, InfraException
@@ -74,7 +73,7 @@ class RunsetState:
7473

7574

7675
class TaskReason:
77-
COMPLETED = "task completed successfully"
76+
COMPLETED = "Task completed successfully"
7877

7978

8079
class Base:
@@ -237,7 +236,7 @@ def check_destroy_conditions(self):
237236
_, runner = self.bulldozer_cl.get_runner(runner_id)
238237
# check for destroy flag set
239238
if runner.get("destroy"):
240-
raise DestroyFlagSet("Destroy flag is set")
239+
raise DestroyFlagSet("Aborted - Destroy flag is set")
241240

242241
destroy_conditions = runner.get("destroy_conditions", {})
243242
# check budget condition
@@ -250,7 +249,8 @@ def check_destroy_conditions(self):
250249
"current (estimated): %f", runner_id, max_budget, cost)
251250
if max_budget < cost:
252251
raise BudgetExceeded(
253-
f"Budget exceeded max: {max_budget}, current: {cost}")
252+
f"Aborted - Budget exceeded max: {max_budget}, "
253+
f"current: {cost}")
254254
max_duration = destroy_conditions.get("max_duration")
255255
if max_duration:
256256
LOG.info("checking for max duration %d for runner %s",
@@ -263,7 +263,7 @@ def check_destroy_conditions(self):
263263
runner_id, now, threshold)
264264
if now > threshold:
265265
raise TimeoutConditionExceeded(
266-
f"Duration exceeded: current time: {now} "
266+
f"Aborted - Duration exceeded: current time: {now} "
267267
f"threshold: {threshold}"
268268
)
269269

@@ -366,15 +366,18 @@ def _exec(self):
366366
}
367367
)
368368
infra.destroy()
369-
369+
self.bulldozer_cl.update_runner(
370+
runner_id,
371+
state=TaskState.DESTROYED,
372+
destroyed_at=utcnow_timestamp()
373+
)
370374
except Exception as exc:
371375
# basically exception
372376
LOG.exception("Cleanup problem: %s", str(exc))
373-
finally:
374377
self.bulldozer_cl.update_runner(
375378
runner_id,
376-
state=TaskState.ERROR,
377-
destroyed_at=utcnow_timestamp())
379+
state=TaskState.ERROR)
380+
finally:
378381
self.update_reason()
379382
self.message.ack()
380383

@@ -402,6 +405,11 @@ def _exec(self):
402405
tags = runner.get("tags", dict())
403406
# opens ingress ports for runner instance
404407
open_ingress = runner.get("open_ingress", False)
408+
_, runset = self.bulldozer_cl.runset_get(runner["runset_id"])
409+
spot_settings = runset.get("spot_settings")
410+
spot_price = None
411+
if spot_settings:
412+
spot_price = spot_settings.get("spot_price")
405413

406414
if hp is not None and isinstance(hp, dict):
407415
for k, v in hp.items():
@@ -413,7 +421,7 @@ def _exec(self):
413421
state=TaskState.STARTING)
414422
_, cloud_account = self.rest_cl.cloud_account_get(
415423
cloud_account_id, True)
416-
# TODO: get cloud type form cloud account to support multi-cloud
424+
# TODO: get cloud type from cloud account to support multi-cloud
417425
# Now only AWS is supported
418426
c_type = "AWS"
419427
if not self.body.get("type"):
@@ -448,6 +456,7 @@ def _exec(self):
448456
key=None,
449457
tags=tags,
450458
open_ingress=open_ingress,
459+
spot_price=spot_price
451460
)
452461

453462
LOG.info("Created runner id=%s, instance=%s, ip=%s",
@@ -494,7 +503,7 @@ def _exec(self):
494503
current_time, wait_time)
495504
if current_time > wait_time:
496505
# TODO: Do we need automatically destroy env?
497-
raise ArceeWaitException("Arcee wait exceeded")
506+
raise ArceeWaitException("Aborted - Arcee wait exceeded")
498507
else:
499508
self.update_run_info(run_id, runner)
500509
self.bulldozer_cl.update_runner(

bumiworker/bumiworker/modules/rightsizing_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ def get_recommended_cpu(self, flavor_cpu, instance_metrics,
9393
flavor_cpu, instance_metrics, optimization_metric)
9494
if min_recommended:
9595
recommended_cpu_list = [
96-
x for x in range(int(min_recommended), flavor_cpu)
96+
x for x in range(int(min_recommended), int(flavor_cpu))
9797
if x >= recommended_flavor_cpu_min and bool(
9898
x == 1 or x > 1 and x % 2 == 0)]
9999
return recommended_cpu_list

diworker/diworker/importers/aws.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,8 @@ def extract_data_transfer():
756756
volume_type: usage_type and volume_type in usage_type,
757757
'Bucket': product and 'AmazonS3' in product and (
758758
bool(resource_id) and bucket_type in operation),
759-
ip_address_type: extract_type_by_product_type(ip_address_type),
759+
ip_address_type: (extract_type_by_product_type(ip_address_type) or
760+
'PublicIP' in usage_type),
760761
sp_type: bool(sp_id) and 'SavingsPlan' in item_type,
761762
ri_type: bool(ri_id),
762763
'Other': (tax_type or resource_type or product_family or
@@ -915,6 +916,16 @@ def _get_cloud_extras(self, info):
915916
res['meta'][k] = val
916917
return res
917918

919+
def update_cloud_account_config(self):
920+
config = self.cloud_acc.get('config')
921+
if not config.get('cur_version'):
922+
cur_version = self.cloud_adapter.config.get('cur_version')
923+
if cur_version:
924+
config.pop('region_name', None)
925+
config.update({'cur_version': cur_version})
926+
self.rest_cl.cloud_account_update(
927+
self.cloud_acc_id, {'config': config})
928+
918929
def create_traffic_processing_tasks(self):
919930
self._create_traffic_processing_tasks()
920931

0 commit comments

Comments
 (0)