CChenyt26
aa395f82创建于 2022年8月9日历史提交
import * as core from '@actions/core';
import * as utils from '../utils';
import * as context from '../context';

const eip = require('@huaweicloud/huaweicloud-sdk-eip');

/**
 * 购买弹性公网IP
 * @param
 * @returns
 */
export async function createPublicip(inputs: context.Inputs): Promise<string> {
  const bandwidthName = 'bandwidth-' + utils.getRandomByDigit(8);

  const client = eip.EipClient.newBuilder()
    .withCredential(utils.getBasicCredentials(inputs))
    .withEndpoint(
      utils.getEndpoint(inputs.region, context.EndpointServiceName.VPC)
    )
    .withOptions({customUserAgent: context.CUSTOM_USER_AGENT})
    .build();
  const request = new eip.CreatePublicipRequest();
  const body = new eip.CreatePublicipRequestBody();
  const publicipbody = new eip.CreatePublicipOption();
  publicipbody.withType('5_bgp');
  const bandwidthbody = new eip.CreatePublicipBandwidthOption();
  bandwidthbody
    .withChargeMode('traffic')
    .withName(bandwidthName)
    .withShareType('PER')
    .withSize(5);
  body.withPublicip(publicipbody);
  body.withBandwidth(bandwidthbody);
  request.withBody(body);
  try {
    const result = await client.createPublicip(request);
    if (result.httpStatusCode != 200) {
      core.setFailed('Create Public IP Failed.');
    }
    if (Object.prototype.hasOwnProperty.call(result, 'publicip')) {
      const id = result.publicip.id;
      if (typeof id === 'string') {
        return Promise.resolve(id);
      }
    }
  } catch (error) {
    core.setFailed('Create Public IP Error.');
  }
  
  throw new Error('Create Public IP Failed.');
}

/**
 * 更新弹性公网IP。更新EIP,将EIP跟一个网卡绑定或者解绑定,转换IP地址版本类型。
 * @param
 * @returns
 */
export async function updatePublicip(
  publicipId: string,
  portId: string,
  inputs: context.Inputs
): Promise<void> {
  const client = eip.EipClient.newBuilder()
    .withCredential(utils.getBasicCredentials(inputs))
    .withEndpoint(
      utils.getEndpoint(inputs.region, context.EndpointServiceName.VPC)
    )
    .withOptions({customUserAgent: context.CUSTOM_USER_AGENT})
    .build();
  const request = new eip.UpdatePublicipRequest();
  request.publicipId = publicipId;
  const body = new eip.UpdatePublicipsRequestBody();
  const publicipbody = new eip.UpdatePublicipOption();
  publicipbody.withPortId(portId);
  body.withPublicip(publicipbody);
  request.withBody(body);
  try {
    const result = await client.updatePublicip(request);
    if (result.httpStatusCode >= 300) {
      core.setFailed('Update Public IP Failed.');
    }
  } catch (error) {
    core.setFailed('Update Public IP Error.');
  }
}