Skip to main content

G1 Intergenerational


G1代际变更接入SDK

G1代际只做单节点的变更前后切面管控。

在SDK中,上游需要接入两个接口,即变更开始和变更结束。相关定义如下。

变更开始

/**
* 提交阶段变更开始通知.并同步返回检查结果。
* 如果返回对象 {@link ChangeNotifySubmitResult#isSkipCheck()} 为true。则不需要检查防御结果。
*
* @param request
*/
Result<ChangeExecOrderSubmitAndStartResult> submitChangeStartNotify(ChangeExecOrderSubmitAndStartRequest request);

其请求入参结构如下:

public class ChangeExecOrderSubmitAndStartRequest {

/**
* 变更场景标识。
*/
@NotBlank
protected String changeSceneKey;

/**
* 上游变更执行系统的唯一单据号。
*/
@NotBlank
protected String bizExecOrderId;

/**
* 上游变更执行平台名称。
*/
@NotBlank
protected String platform;

/**
* 变更执行人。
*/
@NotNull
private String executor;

/**
* 变更开始时间。如果为null,则使用当前使用。
*/
@NotNull
private Date startTime;

/**
* 变更执行单标题。
*/
@NotBlank
private String changeTitle;

/**
* 变更单地址。推荐填写。
* [optional]
*/
private String changeUrl;

/**
* 变更单创建人。
*/
@NotBlank
private String creator;

/**
* 变更情景码。
*/
@NotBlank
private String changeScenarioCode = ChangeScenarioEnum.DAILY.getCode();

/**
* 变更执行单涉及的环境。
*/
@NotNull
private Set<String> changePhases;

/**
* 变更目标信息。
*/
@NotNull
private ChangeTarget[] changeTargets;

/**
* 变更内容实体信息。
*/
@NotNull
private ChangeContent[] changeContents;

/**
* 变更内容参数。json格式。
*/
@NotBlank
private String changeParamJson;

/**
* [optional] 变更影响的系统。
*/
private Set<String> changeApps;

/**
* [optional] 变更单父工单信息。
*/
private ChangeParentOrderInfo parentOrderInfo;

/**
* [optional] 变更trace。如果不需要单独生成,则保持null,否则由业务侧自己控制trace。
*/
private OpsChngTrace trace;
}

其中一些字段对应的枚举值及子类定义如下。

变更情景码:changeScenarioCode

public enum OpsCloudChangeScenarioEnum {

/**
* 默认场景。
*/
DEFAULT("XX"),

/**
* 日常运维场景。
*/
DAILY("00"),
/** 故障应急 */
EMERGE("01"),
/** 大促正式 */
DACU("02"),

// ---------------- 演练类 ----------------
/** state instance failed */
FAULT_INJECT("10"),
/** 大促演练 */
DACU_PRACTICE("11"),
/** 容灾演练 */
FO_PRACTICE("12"),
/** 故障演练 用户发起*/
FAULT_MOCK_INJECT("13"),

// ---------------- 无人值守类 ----------------
/** 无人值守 */
UNATTENDED("30");
}

变更执行单涉及的环境:changePhases

public enum OpsCloudChangePhaseEnum {

/**
* 预发阶段。
*/
PRE_PHASE("pre_phase"),

/**
* 灰度阶段。
*/
GRAY_PHASE("gray_phase"),

/**
* [推荐使用] 线上环境第一批次。
*/
PROD_BETA_PHASE("prod_beta_phase"),

/**
* 线上阶段。
*/
PROD_PHASE("prod_phase");
}

变更对象:changeTargets

public class ChangeTarget {

@NotBlank
private String instanceName;

@NotNull
@Valid
private String changeTargetType;
}

变更内容:changeContents

public class ChangeContent {

@NotBlank
private String instanceName;

@NotNull
@Valid
private String changeContentType;
}

变更单父工单信息:parentOrderInfo

public class ChangeParentOrderInfo {

/**
* 父工单唯一单据号。
*/
@NotNull
private String orderId;

/**
* 父工单标题。
*/
@NotNull
private String orderTitle;

/**
* 父工单url。
*/
@NotNull
private String orderUrl;
}

其返回值结构如下。

public class ChangeExecOrderSubmitAndStartResult {

/**
* 变更管控系统生成的变更节点id,用于获取检查结果。
*/
private String nodeId;

/**
* 变更节点对应页面url。
*/
private String url;

/**
* 变更管控系统内部变更工单Id。
*
* 注:对于G1场景,一个工单下只有一个节点。
*/
private String orderId;

/**
* 校验结果信息。
*
* 用于判断风险校验是否通过。
*/
private ChangeCheckVerdict verdict;
}

其中,校验结果信息对应结构定义如下。

public class ChangeCheckVerdict {

/**
* 检查结果枚举。
*/
private String verdict = ChangeCheckVerdictEnum.PASS.getVerdict();

/**
* 若verdict=FAIL,则可以根据此属性判断是否可以直接回滚。
*/
private boolean rollback = false;

/**
* 是否应急变更。
*/
private boolean emergency = false;

/**
* 是否所有规则都执行完毕。
*/
private boolean allFinish = false;

/**
* 检查执行消息。
*/
private String msg;
}

校验结果枚举定义如下。

public enum OpsCloudChangeCheckVerdictEnum {

/**
* 暂无校验结果,需要等待。
*/
NONE("none"),

/**
* 校验通过。
*/
PASS("pass"),

/**
* 无法判断,因为部分校验规则出现异常。
*/
INCONC("inconc"),

/**
* 校验不通过。
*/
FAIL("fail"),
;
}

变更结束

/**
* 变更单执行。
* @param request
* @return
*/
Result<FinishChangeExecOrderResult> finishChangeExecOrder(ChangeExecOrderFinishRequest request);

其请求入参结构如下。

public class OpsCloudChangeExecOrderFinishRequest extends OpsCloudChangeBaseRequest {

/**
* 变更结束状态标识。
*/
@NotBlank
private String finishState;

/**
* [optional] 变更本身的执行结果 json string。
*/
@JsonFormat
private String changeResultJsn;

/**
* 变更执行信息。
*/
@StringLength(max = 16384)
private String msg;

/**
* 变更结束时间。如果为null,则使用当前时间。
*/
private Date finishTime;

/**
* 变更场景标识。
*/
@NotBlank
@StringLength(max = 256)
protected String changeSceneKey;

/**
* 上游变更执行单唯一单据号。
*/
@NotBlank
@StringLength(max = 128)
protected String bizExecOrderId;

/**
* 变更执行系统名称。
*/
@NotBlank
@StringLength(max = 32)
protected String platform;
}

变更结束状态标识对应枚举如下。

public enum OpsCloudChangeFinishStateEnum {

/**
* 变更成功
*/
SUCCESS("SUCCESS", true),

/**
* 变更回滚
*/
ROLLBACK("ROLLBACK", false),

/**
* 变更取消
*/
CANCEL("CANCEL", false);
}