From 2da3a7330831ba2050830848cee35e1f23a28411 Mon Sep 17 00:00:00 2001 From: Gianluca Zuccarelli Date: Tue, 23 Jul 2024 17:17:00 +0100 Subject: [PATCH] cloudapi: json tailoring options Add support for json tailoring files in the cloudapi. Expand the tests to check that the options returned are okay and that tailoring options and json tailoring options can't be provided at the same time. --- internal/cloudapi/v2/compose.go | 18 ++ internal/cloudapi/v2/compose_test.go | 43 +++ internal/cloudapi/v2/openapi.v2.gen.go | 362 +++++++++++++------------ internal/cloudapi/v2/openapi.v2.yml | 14 + 4 files changed, 260 insertions(+), 177 deletions(-) diff --git a/internal/cloudapi/v2/compose.go b/internal/cloudapi/v2/compose.go index f07d190aa..9fa68bf5f 100644 --- a/internal/cloudapi/v2/compose.go +++ b/internal/cloudapi/v2/compose.go @@ -233,6 +233,9 @@ func (request *ComposeRequest) GetCustomizationsFromBlueprintRequest() (*bluepri if rbpc.Openscap.Datastream != nil { oscap.DataStream = *rbpc.Openscap.Datastream } + if rbpc.Openscap.Tailoring != nil && rbpc.Openscap.JsonTailoring != nil { + return nil, fmt.Errorf("OpenSCAP customization error: choose one option between OpenSCAP tailoring and OpenSCAP json tailoring") + } if tailoring := rbpc.Openscap.Tailoring; tailoring != nil { tc := blueprint.OpenSCAPTailoringCustomizations{} if tailoring.Selected != nil && len(*tailoring.Selected) > 0 { @@ -243,6 +246,12 @@ func (request *ComposeRequest) GetCustomizationsFromBlueprintRequest() (*bluepri } oscap.Tailoring = &tc } + if jsonTailoring := rbpc.Openscap.JsonTailoring; jsonTailoring != nil { + oscap.JSONTailoring = &blueprint.OpenSCAPJSONTailoringCustomizations{ + ProfileID: jsonTailoring.ProfileId, + Filepath: jsonTailoring.Filepath, + } + } c.OpenSCAP = oscap } @@ -684,6 +693,9 @@ func (request *ComposeRequest) GetBlueprintFromCustomizations() (blueprint.Bluep openSCAPCustomization := &blueprint.OpenSCAPCustomization{ ProfileID: request.Customizations.Openscap.ProfileId, } + if request.Customizations.Openscap.Tailoring != nil && request.Customizations.Openscap.JsonTailoring != nil { + return bp, fmt.Errorf("OpenSCAP customization error: choose one option between OpenSCAP tailoring and OpenSCAP json tailoring") + } if tailoring := request.Customizations.Openscap.Tailoring; tailoring != nil { tailoringCustomizations := blueprint.OpenSCAPTailoringCustomizations{} if tailoring.Selected != nil && len(*tailoring.Selected) > 0 { @@ -694,6 +706,12 @@ func (request *ComposeRequest) GetBlueprintFromCustomizations() (blueprint.Bluep } openSCAPCustomization.Tailoring = &tailoringCustomizations } + if jsonTailoring := request.Customizations.Openscap.JsonTailoring; jsonTailoring != nil { + openSCAPCustomization.JSONTailoring = &blueprint.OpenSCAPJSONTailoringCustomizations{ + ProfileID: jsonTailoring.ProfileId, + Filepath: jsonTailoring.Filepath, + } + } bp.Customizations.OpenSCAP = openSCAPCustomization } diff --git a/internal/cloudapi/v2/compose_test.go b/internal/cloudapi/v2/compose_test.go index bbb572d64..47fc94c5e 100644 --- a/internal/cloudapi/v2/compose_test.go +++ b/internal/cloudapi/v2/compose_test.go @@ -785,4 +785,47 @@ func TestOpenSCAPTailoringOptions(t *testing.T) { bp, err := cr.GetBlueprintFromCustomizations() assert.NoError(t, err) assert.Equal(t, expectedOscap, bp.Customizations.OpenSCAP) + + cr = ComposeRequest{ + Customizations: &Customizations{ + Openscap: &OpenSCAP{ + ProfileId: "test-123", + JsonTailoring: &OpenSCAPJSONTailoring{ + ProfileId: "test-123-tailoring", + Filepath: "/some/filepath", + }, + }, + }, + } + + expectedOscap = &blueprint.OpenSCAPCustomization{ + ProfileID: "test-123", + JSONTailoring: &blueprint.OpenSCAPJSONTailoringCustomizations{ + ProfileID: "test-123-tailoring", + Filepath: "/some/filepath", + }, + } + + bp, err = cr.GetBlueprintFromCustomizations() + assert.NoError(t, err) + assert.Equal(t, expectedOscap, bp.Customizations.OpenSCAP) + + cr = ComposeRequest{ + Customizations: &Customizations{ + Openscap: &OpenSCAP{ + ProfileId: "test-123", + Tailoring: &OpenSCAPTailoring{ + Selected: common.ToPtr([]string{"one", "two", "three"}), + Unselected: common.ToPtr([]string{"four", "five", "six"}), + }, + JsonTailoring: &OpenSCAPJSONTailoring{ + ProfileId: "test-123-tailoring", + Filepath: "/some/filepath", + }, + }, + }, + } + + bp, err = cr.GetBlueprintFromCustomizations() + assert.Error(t, err) } diff --git a/internal/cloudapi/v2/openapi.v2.gen.go b/internal/cloudapi/v2/openapi.v2.gen.go index 4802c57d4..f123c9840 100644 --- a/internal/cloudapi/v2/openapi.v2.gen.go +++ b/internal/cloudapi/v2/openapi.v2.gen.go @@ -344,9 +344,10 @@ type BlueprintFirewall struct { // BlueprintOpenSCAP defines model for BlueprintOpenSCAP. type BlueprintOpenSCAP struct { - Datastream *string `json:"datastream,omitempty"` - ProfileId string `json:"profile_id"` - Tailoring *OpenSCAPTailoring `json:"tailoring,omitempty"` + Datastream *string `json:"datastream,omitempty"` + JsonTailoring *OpenSCAPJSONTailoring `json:"json_tailoring,omitempty"` + ProfileId string `json:"profile_id"` + Tailoring *OpenSCAPTailoring `json:"tailoring,omitempty"` } // BlueprintRepository defines model for BlueprintRepository. @@ -905,8 +906,15 @@ type ObjectReference struct { // OpenSCAP defines model for OpenSCAP. type OpenSCAP struct { - ProfileId string `json:"profile_id"` - Tailoring *OpenSCAPTailoring `json:"tailoring,omitempty"` + JsonTailoring *OpenSCAPJSONTailoring `json:"json_tailoring,omitempty"` + ProfileId string `json:"profile_id"` + Tailoring *OpenSCAPTailoring `json:"tailoring,omitempty"` +} + +// OpenSCAPJSONTailoring defines model for OpenSCAPJSONTailoring. +type OpenSCAPJSONTailoring struct { + Filepath string `json:"filepath"` + ProfileId string `json:"profile_id"` } // OpenSCAPTailoring defines model for OpenSCAPTailoring. @@ -1355,178 +1363,178 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "Q7gxabkAAA==", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/internal/cloudapi/v2/openapi.v2.yml b/internal/cloudapi/v2/openapi.v2.yml index e6f4441af..499880576 100644 --- a/internal/cloudapi/v2/openapi.v2.yml +++ b/internal/cloudapi/v2/openapi.v2.yml @@ -979,6 +979,8 @@ components: type: string tailoring: $ref: '#/components/schemas/OpenSCAPTailoring' + json_tailoring: + $ref: '#/components/schemas/OpenSCAPJSONTailoring' BlueprintOpenSCAP: type: object required: @@ -990,6 +992,8 @@ components: type: string tailoring: $ref: '#/components/schemas/OpenSCAPTailoring' + json_tailoring: + $ref: '#/components/schemas/OpenSCAPJSONTailoring' OpenSCAPTailoring: type: object properties: @@ -1001,6 +1005,16 @@ components: type: array items: type: string + OpenSCAPJSONTailoring: + type: object + required: + - profile_id + - filepath + properties: + profile_id: + type: string + filepath: + type: string Installer: type: object properties: