Skip to content

Commit

Permalink
refactor(mpc): refactor transcoding template resource create method c…
Browse files Browse the repository at this point in the history
…ode style
  • Loading branch information
ruwenqiang123 committed Feb 8, 2025
1 parent daa8676 commit ebfc277
Showing 1 changed file with 97 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,9 @@ import (
"context"
"log"
"strconv"
"strings"

"github.com/chnsz/golangsdk"

Check failure on line 9 in huaweicloud/services/mpc/resource_huaweicloud_mpc_transcoding_template.go

View workflow job for this annotation

GitHub Actions / golangci

File is not properly formatted (gci)
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
Expand Down Expand Up @@ -262,30 +264,112 @@ func buildVideoOutputPolicyOpts(outputPolicy string) *mpc.VideoOutputPolicy {
return &outputPolicyOpts
}

func buildCreateTemplateBodyParams(d *schema.ResourceData) map[string]interface{} {
templateGroupParams := map[string]interface{}{
"template_name": d.Get("name"),
"video": buildTemplateVideoBodyParams(d.Get("video").([]interface{})),
"audio": buildTemplateAudioBodyParams(d.Get("audio").([]interface{})),
"common": buildTemplateCommonBodyParams(d),
}

return templateGroupParams
}

func buildTemplateVideoBodyParams(rawVideo []interface{}) map[string]interface{} {
if len(rawVideo) == 0 {
return nil
}

video := rawVideo[0].(map[string]interface{})
videoParams := map[string]interface{}{
"output_policy": buildTemplateOutputPolicy(video["output_policy"].(string)),
"codec": video["codec"],
"bitrate": video["bitrate"],
"profile": video["profile"],
"level": video["level"],
"preset": video["quality"],
"max_iframes_interval": video["max_iframes_interval"],
"bframes_count": video["max_consecutive_bframes"],
"frame_rate": video["fps"],
"width": video["width"],
"height": video["height"],
"black_cut": video["black_bar_removal"],
}

return videoParams
}

func buildTemplateOutputPolicy(outputPolicy string) interface{} {
if outputPolicy == "discard" || outputPolicy == "transcode" {
return outputPolicy
}

return nil
}

func buildTemplateAudioBodyParams(rawAudio []interface{}) map[string]interface{} {
if len(rawAudio) == 0 {
return nil
}

audio := rawAudio[0].(map[string]interface{})
audioParams := map[string]interface{}{
"output_policy": buildTemplateOutputPolicy(audio["output_policy"].(string)),
"codec": audio["codec"],
"sample_rate": audio["sample_rate"],
"bitrate": audio["bitrate"],
"channels": audio["channels"],
}

return audioParams
}

func buildTemplateCommonBodyParams(d *schema.ResourceData) map[string]interface{} {
commonParams := map[string]interface{}{
"PVC": d.Get("low_bitrate_hd"),
"hls_interval": d.Get("hls_segment_duration"),
"dash_interval": d.Get("dash_segment_duration"),
"pack_type": d.Get("output_format"),
}

return commonParams
}

func resourceTranscodingTemplateCreate(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
config := meta.(*config.Config)
client, err := config.HcMpcV1Client(config.GetRegion(d))
var (
cfg = meta.(*config.Config)
region = cfg.GetRegion(d)
httpUrl = "v1/{project_id}/template/transcodings"
)

client, err := cfg.NewServiceClient("mpc", region)
if err != nil {
return diag.Errorf("error creating MPC client : %s", err)
return diag.Errorf("error creating MPC client: %s", err)
}

createOpts := mpc.TransTemplate{
TemplateName: d.Get("name").(string),
Video: buildVideoOpts(d.Get("video").([]interface{})),
Audio: buildAudioOpts(d.Get("audio").([]interface{})),
Common: buildCommonOpts(d),
createPath := client.Endpoint + httpUrl
createPath = strings.ReplaceAll(createPath, "{project_id}", client.ProjectID)
createOpt := golangsdk.RequestOpts{
KeepResponseBody: true,
JSONBody: utils.RemoveNil(buildCreateTemplateBodyParams(d)),
}

createReq := mpc.CreateTransTemplateRequest{
Body: &createOpts,
resp, err := client.Request("POST", createPath, &createOpt)
if err != nil {
return diag.Errorf("error creating MPC transcoding template: %s", err)
}

resp, err := client.CreateTransTemplate(&createReq)
respBody, err := utils.FlattenResponse(resp)
if err != nil {
return diag.Errorf("error creating MPC transcoding template: %s", err)
return diag.FromErr(err)
}

templateId := utils.PathSearch("template_id", respBody, float64(0)).(float64)
if templateId == 0 {
return diag.Errorf("error creating MPC transcoding template group: ID is not found in API response")
}

d.SetId(strconv.FormatInt(int64(*resp.TemplateId), 10))
d.SetId(strconv.FormatInt(int64(templateId), 10))

return resourceTranscodingTemplateRead(ctx, d, meta)
}
Expand Down

0 comments on commit ebfc277

Please sign in to comment.