diff --git a/assets/pango/xml/utils.go b/assets/pango/xml/utils.go new file mode 100644 index 00000000..bb2cf71c --- /dev/null +++ b/assets/pango/xml/utils.go @@ -0,0 +1,15 @@ +package xml + +import "bytes" + +func StripEntryElement(data []byte) []byte { + if !bytes.HasPrefix(data, []byte("")) { + return data + } + + var startIdx, endIdx int + startIdx = bytes.Index(data, []byte(">")) + endIdx = len(data) - len("") + + return data[startIdx+1 : endIdx] +} diff --git a/pkg/translate/imports.go b/pkg/translate/imports.go index 1974ed3d..d75dac65 100644 --- a/pkg/translate/imports.go +++ b/pkg/translate/imports.go @@ -24,10 +24,12 @@ func RenderImports(templateTypes ...string) (string, error) { manager.AddSdkImport("github.com/PaloAltoNetworks/pango/version", "") case "service": manager.AddStandardImport("context", "") + manager.AddStandardImport("encoding/xml", "") manager.AddStandardImport("fmt", "") manager.AddSdkImport("github.com/PaloAltoNetworks/pango/errors", "") manager.AddSdkImport("github.com/PaloAltoNetworks/pango/util", "") manager.AddSdkImport("github.com/PaloAltoNetworks/pango/xmlapi", "") + manager.AddSdkImport("github.com/PaloAltoNetworks/pango/xml", "pangoxml") case "filtering": manager.AddSdkImport("github.com/PaloAltoNetworks/pango/filtering", "") case "audit": diff --git a/templates/sdk/service.tmpl b/templates/sdk/service.tmpl index 3a5b6a4f..b94e1372 100644 --- a/templates/sdk/service.tmpl +++ b/templates/sdk/service.tmpl @@ -70,10 +70,19 @@ if err != nil { return nil, err } +data, err := xml.Marshal(createSpec) +if err != nil { + return nil, err +} + +// Optionally remove top entry element from marshalled data to fullfill +// PAN-OS API requirements. +data = pangoxml.StripEntryElement(data) + cmd := &xmlapi.Config{ Action: "set", -Xpath: util.AsXpath(path[:len(path)-1]), -Element: createSpec, +Xpath: util.AsXpath(path), +Element: string(data), Target: s.client.GetTarget(), } @@ -1302,4 +1311,4 @@ func (s *Service) RemoveFromImport(ctx context.Context, loc Location, entry Entr return resp.Comments, nil } {{- end}} -{{- end}} \ No newline at end of file +{{- end}}