Пример #1
0
func createOrModify(args intf.Command) (result string, err error) {
	subs := args.Subs()
	typeName := subs[0]
	ciName := subs[1]

	ciType, err := metadata.Type(typeName)
	if err != nil {
		return
	}

	// put this as the root in a map containing a map
	// do this AFTER the for loop

	// create new map and put the below in it

	mapProps := make(map[string]interface{})

	props := args.Arguments()
	for _, prop := range props {
		key := prop.Name()

		mapProps[key], err = translateProp(ciType, prop)
		if err != nil {
			return
		}
	}

	id := ciName
	id = AntiAbbreviate(id)
	if ciType.Root != "" && !strings.HasPrefix(id, ciType.Root) {
		id = ciType.Root + "/" + id
	}
	mapProps["-id"] = id

	final := map[string]interface{}{ciType.Type: mapProps}

	// TODO Make this a util?
	json, _ := j2x.MapToJson(final)
	xml, _ := j2x.JsonToXml(json)

	switch args.Main() {
	case "create":
		body, err := http.Create("/repository/ci/"+id, bytes.NewBuffer(xml))
		if err != nil {
			return "error", err
		}
		return Xml2CleanJson(body)
	case "modify-sub":
		body, err := http.Update("/repository/ci/"+id, bytes.NewBuffer(xml))
		if err != nil {
			return "error", err
		}
		return Xml2CleanJson(body)
	}
	return "error", errors.New("Unknown command " + args.Main())

}
Пример #2
0
func execute(args intf.Command, depType string) (result string, err error) {
	result, err = prepare(args, depType)
	if err != nil {
		return
	}

	body, err := http.Create("/task/"+result+"/start", nil)
	if err != nil {
		return
	}

	displayStatus(result)
	return string(body), err
}
Пример #3
0
func undeploy(args intf.Command) (result string, err error) {
	subs := args.Subs()
	appToUndeploy := repo.AntiAbbreviate(subs[0])
	body, err := http.Read("/deployment/prepare/undeploy?deployedApplication=" + appToUndeploy)
	if err != nil {
		return
	}

	body, err = http.Create("/deployment", bytes.NewBuffer(body))
	if err != nil {
		return
	}

	taskId := string(body)

	body, err = http.Create("/task/"+string(body)+"/start", nil)
	if err != nil {
		return
	}

	displayStatus(taskId)

	return string(body), err
}
Пример #4
0
func prepare(args intf.Command, depType string) (result string, err error) {
	subs := args.Subs()
	appVersion := repo.AntiAbbreviate(subs[0])
	targetEnv := repo.AntiAbbreviate(subs[1])

	parts := strings.Split(appVersion, "/")

	app := parts[len(parts)-2]

	targetDeployed := targetEnv + "/" + app

	if depType == "*" {
		statusCode, _, err := http.Get("/repository/ci/" + targetDeployed)
		if err != nil {
			return "error", err
		} else if statusCode == 200 {
			depType = "UPDATE"
		} else if statusCode == 404 {
			depType = "INITIAL"
		} else {
			return "error", errors.New("Unexpected http status code " + strconv.Itoa(statusCode) + " while checking the existance of " + targetDeployed)
		}
	}

	deployedApplication := map[string]interface{}{
		"-id": targetDeployed,
		"version": map[string]interface{}{
			"-ref": appVersion,
		},
		"environment": map[string]interface{}{
			"-ref": targetEnv,
		},
		"optimizePlan": "true",
	}

	deployment := map[string]interface{}{
		"deployment": map[string]interface{}{
			"-type": depType,
			"application": map[string]interface{}{
				"udm.DeployedApplication": deployedApplication,
			},
		},
	}

	for _, arg := range args.Arguments() {
		if arg.Name() == "orchestrator" {
			deployedApplication["orchestrator"] =
				repo.MapSetOfStrings(arg.Values())
		}
	}

	// TODO Make this a util?
	json, _ := j2x.MapToJson(deployment)
	xml, _ := j2x.JsonToXml(json)

	body, err := http.Create("/deployment/prepare/deployeds", bytes.NewBuffer(xml))
	if err != nil {
		return "error", err
	}

	body, err = http.Create("/deployment", bytes.NewBuffer(body))

	return string(body), err
}