@hashgraph/solo
Version:
An opinionated CLI tool to deploy and manage private Hedera Networks.
104 lines • 4.58 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
/**
* SPDX-License-Identifier: Apache-2.0
*/
import { Flags as flags } from '../../commands/flags.js';
import { IntervalLease } from './interval_lease.js';
import { LeaseHolder } from './lease_holder.js';
import { LeaseAcquisitionError } from './lease_errors.js';
import { inject, injectable } from 'tsyringe-neo';
import { patchInject } from '../dependency_injection/container_helper.js';
import { InjectTokens } from '../dependency_injection/inject_tokens.js';
/**
* Manages the acquisition and renewal of leases.
*/
let LeaseManager = class LeaseManager {
_renewalService;
_logger;
k8Factory;
configManager;
/**
* Creates a new lease manager.
*
* @param _renewalService - the lease renewal service.
* @param _logger - the logger.
* @param k8Factory - the Kubernetes client.
* @param configManager - the configuration manager.
*/
constructor(_renewalService, _logger, k8Factory, configManager) {
this._renewalService = _renewalService;
this._logger = _logger;
this.k8Factory = k8Factory;
this.configManager = configManager;
this._renewalService = patchInject(_renewalService, InjectTokens.LeaseRenewalService, this.constructor.name);
this._logger = patchInject(_logger, InjectTokens.SoloLogger, this.constructor.name);
this.k8Factory = patchInject(k8Factory, InjectTokens.K8Factory, this.constructor.name);
this.configManager = patchInject(configManager, InjectTokens.ConfigManager, this.constructor.name);
}
/**
* Creates a new lease. This lease is not acquired until the `acquire` method is called.
*
* @returns a new lease instance.
*/
async create() {
return new IntervalLease(this.k8Factory, this._renewalService, LeaseHolder.default(), await this.currentNamespace());
}
/**
* Retrieves the renewal service implementation.
*
* @returns the lease renewal service.
*/
get renewalService() {
return this._renewalService;
}
/**
* Retrieves the logger instance.
*
* @returns the logger.
*/
get logger() {
return this._logger;
}
/**
* Retrieves the user or configuration supplied namespace to use for lease acquisition.
*
* @returns the namespace to use for lease acquisition or null if no namespace is specified.
* @throws LeaseAcquisitionError if the namespace does not exist and cannot be created.
*/
async currentNamespace() {
const deploymentNamespace = this.configManager.getFlag(flags.namespace);
const clusterSetupNamespace = this.configManager.getFlag(flags.clusterSetupNamespace);
if (!deploymentNamespace && !clusterSetupNamespace) {
return null;
}
const namespace = deploymentNamespace ? deploymentNamespace : clusterSetupNamespace;
if (!(await this.k8Factory.default().namespaces().has(namespace))) {
await this.k8Factory.default().namespaces().create(namespace);
if (!(await this.k8Factory.default().namespaces().has(namespace))) {
throw new LeaseAcquisitionError(`failed to create the '${namespace}' namespace`);
}
}
return namespace;
}
};
LeaseManager = __decorate([
injectable(),
__param(0, inject(InjectTokens.LeaseRenewalService)),
__param(1, inject(InjectTokens.SoloLogger)),
__param(2, inject(InjectTokens.K8Factory)),
__param(3, inject(InjectTokens.ConfigManager)),
__metadata("design:paramtypes", [Object, Function, Object, Function])
], LeaseManager);
export { LeaseManager };
//# sourceMappingURL=lease_manager.js.map