CChenyt26
aa395f82创建于 2022年8月9日历史提交
import * as core from '@actions/core';
import * as utils from '../utils';
import * as context from '../context';
import {ElbClient} from './ElbClient';
import {CreateLoadbalancerRequest} from './model/CreateLoadbalancerRequest';
import {CreateLoadbalancerResponse} from './model/CreateLoadbalancerResponse';
import {CreateLoadbalancerRequestBody} from './model/CreateLoadbalancerRequestBody';
import {CreateLoadbalancerLoadbalancerOption} from './model/CreateLoadbalancerLoadbalancerOption';

/**
 * 获取负载均衡器的VipPortId
 * @param LoadbalancerResponse
 * @returns
 */
export async function getLoadbalancerVipPortIdByLoadbalancer(
  createLoadbalancerResponse: CreateLoadbalancerResponse
): Promise<string> {
  let loadbalancerResp;
  if (
    createLoadbalancerResponse !== null &&
    createLoadbalancerResponse !== undefined
  ) {
    loadbalancerResp = createLoadbalancerResponse.loadbalancer;
  }

  let vipPortId;
  if (loadbalancerResp !== null && loadbalancerResp !== undefined) {
    vipPortId = loadbalancerResp.vip_port_id;
  }

  if (vipPortId === null || vipPortId === undefined) {
    throw new Error(
      'Get Loadbanlancer vipPortId Faild: ' + JSON.stringify(loadbalancerResp)
    );
  }

  return Promise.resolve(vipPortId || '');
}

/**
 * 获取负载均衡器的id
 * @param LoadbalancerResponse
 * @returns
 */
export async function getLoadbalancerIdByLoadbalancer(
  createLoadbalancerResponse: CreateLoadbalancerResponse
): Promise<string> {
  let loadbalancerResp;
  if (
    createLoadbalancerResponse !== null &&
    createLoadbalancerResponse !== undefined
  ) {
    loadbalancerResp = createLoadbalancerResponse.loadbalancer;
  }

  let id;
  if (loadbalancerResp !== null && loadbalancerResp !== undefined) {
    id = loadbalancerResp.id;
  }

  if (id === null || id === undefined) {
    throw new Error(
      'get Loadbanlancer ID Faild: ' + JSON.stringify(loadbalancerResp)
    );
  }

  return Promise.resolve(id || '');
}

/**
 * 创建私网类型的负载均衡器
 * @param inputs
 * @returns
 */
export async function createLoadbalancer(
  vipSubnetId: string,
  inputs: context.Inputs
): Promise<CreateLoadbalancerResponse> {
  const client = ElbClient.newBuilder()
    .withCredential(utils.getBasicCredentials(inputs))
    .withEndpoint(
      utils.getEndpoint(inputs.region, context.EndpointServiceName.ELB)
    )
    .withOptions({customUserAgent: context.CUSTOM_USER_AGENT})
    .build();
  const request = new CreateLoadbalancerRequest();
  const body = new CreateLoadbalancerRequestBody();
  const loadbalancerbody = new CreateLoadbalancerLoadbalancerOption();
  loadbalancerbody
    .withName('elb-' + utils.getRandomByDigit(8))
    .withVipSubnetId(vipSubnetId);
  body.withLoadbalancer(loadbalancerbody);
  request.withBody(body);
  try {
    return await client.createLoadbalancer(request);
  } catch (error) {
    core.setFailed('Create Loadbalancer Error.');
  }
  throw new Error('Create Loadbalancer Failed.');
}