Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Instance lease: Allow deployment of instances with lease duration and leaseexpiry action #10560

Draft
wants to merge 13 commits into
base: main
Choose a base branch
from

Conversation

sudo87
Copy link
Contributor

@sudo87 sudo87 commented Mar 13, 2025

Description

This PR enables Administrator to provision Lease based instances, which will self destroyed or stopped once lease is over. This will improve efficient utilization of cloud infrastructure.

Feature can be enabled by updating value for following key to true:
instance.lease.enabled: true
default: false

There are additional configuration keys:

instance.lease.scheduler.interval: when scheduler will run to execute expiryaction, default value: 86400 (seconds)
instance.lease.alertscheduler.interval: alert scheduler interval, sends alerts for any instance which are about to expire in next 7 days (default: 86400)

Feature introduces new parameters in following APIs:
leaseduration: duration in days for which instance is provisioned
leaseexpiryaction: action will be executed once expiry is over

  1. DeployVMCmd
deploy virtualmachine name=test-vm templateid=e6962fb7-fa6f-11ef-86b8-50eb71576f75 serviceofferingid=8fcc7ba4-298c-4c21-b5f6-c3c4e1d2afe7 leaseduration=10 leaseexpiryaction=STOP zoneid=988db21e-ffc9-4708-9546-797cb7592cb9
  1. CreateServiceOfferingCmd
create serviceoffering name=cmd-lease leaseduration=10 leaseexpiryaction=STOP
  1. UpdateVMCmd
update virtualmachine id=e22a2b2b-66c0-4566-9648-ec3219dbcb96 leaseduration=-1

Valid values for
leaseduration: positive number and -1 (special, to allow removing lease from instance)
leaseexpiryaction: STOP | DESTROY

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)
  • build/CI
  • test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

Bug Severity

  • BLOCKER
  • Critical
  • Major
  • Minor
  • Trivial

Screenshots (if appropriate):

Screenshot from 2025-03-10 11-54-08
Screenshot from 2025-03-10 11-54-03
Screenshot from 2025-03-10 11-53-47
Screenshot from 2025-03-10 11-53-07
Screenshot from 2025-03-10 11-52-45
Screenshot from 2025-03-10 11-52-33
Screenshot from 2025-03-10 11-52-27
Screenshot from 2025-03-10 11-51-58-1
Screenshot from 2025-03-10 11-51-58
Screenshot from 2025-03-10 11-51-19
Screenshot from 2025-03-10 11-50-58
Screenshot from 2025-03-10 11-50-43
Screenshot from 2025-03-10 11-50-30

How Has This Been Tested?

How did you try to break this feature and the system with this change?

@sudo87
Copy link
Contributor Author

sudo87 commented Mar 13, 2025

@blueorangutan package

@blueorangutan
Copy link

@sudo87 a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 12761


@Parameter(name = ApiConstants.INSTANCE_LEASE_EXPIRY_ACTION, type = CommandType.STRING, since = "4.21.0",
description = "Lease expiry action")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add posible choices in the description.

Copy link

codecov bot commented Mar 13, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 3.98%. Comparing base (864751d) to head (62397cc).
Report is 70 commits behind head on main.

❗ There is a different number of reports uploaded between BASE (864751d) and HEAD (62397cc). Click for more details.

HEAD has 1 upload less than BASE
Flag BASE (864751d) HEAD (62397cc)
unittests 1 0
Additional details and impacted files
@@              Coverage Diff              @@
##               main   #10560       +/-   ##
=============================================
- Coverage     16.15%    3.98%   -12.17%     
=============================================
  Files          5666      398     -5268     
  Lines        497960    32644   -465316     
  Branches      60241     5801    -54440     
=============================================
- Hits          80459     1302    -79157     
+ Misses       408499    31192   -377307     
+ Partials       9002      150     -8852     
Flag Coverage Δ
uitests 3.98% <ø> (-0.02%) ⬇️
unittests ?

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
Contributor

@shwstppr shwstppr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sudo87 build failing with unit tests failure. Please check

}

@Test
public void testAlert() {
Copy link
Contributor

@shwstppr shwstppr Mar 13, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You may have to mock global config to true for this case?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants