Skip to content

Commit 58e16c7

Browse files
ctolon22Ben Lucas
andauthored
feat(legacy scanning policies and assignments): Add scanning policies and assignments for legacy engine (#248)
* Add old scanning engine policies resource * added scanning policies acctests * Adding Scanning Policy Assignment support for terraform provider * Adding scanning policy and scanning policy assignment docs * fix policy assingment url * corrected scanning policy assignment acctest * removed unused acctest from scanning policy assignments * adding expected plan for scanning policy assignment * removing expected plan for scanning policy assignment * simplying acctest for scanning policy assignment * Update sysdig/resource_sysdig_secure_scanningpolicies.go Co-authored-by: Ben Lucas <[email protected]> --------- Co-authored-by: Ben Lucas <[email protected]>
1 parent b22471b commit 58e16c7

10 files changed

+1078
-0
lines changed

sysdig/internal/client/secure/client.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,15 @@ type SysdigSecureClient interface {
6363
GetBenchmarkTask(context.Context, string) (*BenchmarkTask, error)
6464
DeleteBenchmarkTask(context.Context, string) error
6565
SetBenchmarkTaskEnabled(context.Context, string, bool) error
66+
67+
CreateScanningPolicy(context.Context, ScanningPolicy) (ScanningPolicy, error)
68+
GetScanningPolicyById(context.Context, string) (ScanningPolicy, error)
69+
DeleteScanningPolicyById(context.Context, string) error
70+
UpdateScanningPolicyById(context.Context, ScanningPolicy) (ScanningPolicy, error)
71+
72+
CreateScanningPolicyAssignmentList(context.Context, ScanningPolicyAssignmentList) (ScanningPolicyAssignmentList, error)
73+
GetScanningPolicyAssignmentList(context.Context) (ScanningPolicyAssignmentList, error)
74+
DeleteScanningPolicyAssignmentList(context.Context, ScanningPolicyAssignmentList) error
6675
}
6776

6877
func WithExtraHeaders(client SysdigSecureClient, extraHeaders map[string]string) SysdigSecureClient {

sysdig/internal/client/secure/models.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,3 +417,68 @@ func BenchmarkTaskFromJSON(body []byte) *BenchmarkTask {
417417

418418
return &result
419419
}
420+
421+
// -------- Scanning Policies --------
422+
type ScanningPolicy struct {
423+
ID string `json:"id,omitempty"`
424+
Version string `json:"version,omitempty"`
425+
Name string `json:"name"`
426+
Comment string `json:"comment"`
427+
IsDefault bool `json:"isDefault,omitempty"`
428+
PolicyBundleId string `json:"policyBundleId,omitempty"`
429+
Rules []ScanningGate `json:"rules"`
430+
}
431+
432+
type ScanningGate struct {
433+
ID string `json:"id,omitempty"`
434+
Gate string `json:"gate"`
435+
Trigger string `json:"trigger"`
436+
Action string `json:"action"`
437+
Params []ScanningGateParam `json:"params"`
438+
}
439+
440+
type ScanningGateParam struct {
441+
Name string `json:"name"`
442+
Value string `json:"value"`
443+
}
444+
445+
func (policy *ScanningPolicy) ToJSON() io.Reader {
446+
payload, _ := json.Marshal(policy)
447+
return bytes.NewBuffer(payload)
448+
}
449+
450+
func ScanningPolicyFromJSON(body []byte) (result ScanningPolicy) {
451+
_ = json.Unmarshal(body, &result)
452+
return result
453+
}
454+
455+
// -------- Scanning Policy Assignments --------
456+
type ScanningPolicyAssignmentList struct {
457+
Items []ScanningPolicyAssignment `json:"items"`
458+
PolicyBundleId string `json:"policyBundleId"`
459+
}
460+
461+
type ScanningPolicyAssignment struct {
462+
ID string `json:"id,omitempty"`
463+
Name string `json:"name"`
464+
Registry string `json:"registry"`
465+
Repository string `json:"repository"`
466+
Image ScanningPolicyAssignmentImage `json:"image"`
467+
PolicyIDs []string `json:"policy_ids"`
468+
WhitelistIDs []string `json:"whitelist_ids"`
469+
}
470+
471+
type ScanningPolicyAssignmentImage struct {
472+
Type string `json:"type"`
473+
Value string `json:"value"`
474+
}
475+
476+
func (policy *ScanningPolicyAssignmentList) ToJSON() io.Reader {
477+
payload, _ := json.Marshal(policy)
478+
return bytes.NewBuffer(payload)
479+
}
480+
481+
func ScanningPolicyAssignmentFromJSON(body []byte) (result ScanningPolicyAssignmentList) {
482+
_ = json.Unmarshal(body, &result)
483+
return result
484+
}
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
package secure
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"io"
7+
"net/http"
8+
)
9+
10+
func (client *sysdigSecureClient) scanningPoliciesURL() string {
11+
return fmt.Sprintf("%s/api/scanning/v1/policies", client.URL)
12+
}
13+
14+
func (client *sysdigSecureClient) scanningPolicyAssignmentURL() string {
15+
return fmt.Sprintf("%s/api/scanning/v1/mappings?bundleId=default", client.URL)
16+
}
17+
18+
func (client *sysdigSecureClient) scanningPolicyURL(scanningPolicyId string) string {
19+
return fmt.Sprintf("%s/api/scanning/v1/policies/%s", client.URL, scanningPolicyId)
20+
}
21+
22+
// Scanning Policies
23+
24+
func (client *sysdigSecureClient) CreateScanningPolicy(ctx context.Context, scanningPolicyRequest ScanningPolicy) (scanningPolicy ScanningPolicy, err error) {
25+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPost, client.scanningPoliciesURL(), scanningPolicyRequest.ToJSON())
26+
if err != nil {
27+
return
28+
}
29+
defer response.Body.Close()
30+
31+
if response.StatusCode != http.StatusOK {
32+
err = errorFromResponse(response)
33+
return
34+
}
35+
36+
body, err := io.ReadAll(response.Body)
37+
if err != nil {
38+
return
39+
}
40+
41+
return ScanningPolicyFromJSON(body), nil
42+
}
43+
44+
func (client *sysdigSecureClient) GetScanningPolicyById(ctx context.Context, scanningPolicyID string) (scanningPolicy ScanningPolicy, err error) {
45+
response, err := client.doSysdigSecureRequest(ctx, http.MethodGet, client.scanningPolicyURL(scanningPolicyID), nil)
46+
if err != nil {
47+
return
48+
}
49+
defer response.Body.Close()
50+
51+
if response.StatusCode != http.StatusOK {
52+
return ScanningPolicy{}, errorFromResponse(response)
53+
}
54+
55+
body, err := io.ReadAll(response.Body)
56+
if err != nil {
57+
return
58+
}
59+
return ScanningPolicyFromJSON(body), nil
60+
}
61+
62+
func (client *sysdigSecureClient) UpdateScanningPolicyById(ctx context.Context, scanningPolicyRequest ScanningPolicy) (scanningPolicy ScanningPolicy, err error) {
63+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPut, client.scanningPolicyURL(scanningPolicyRequest.ID), scanningPolicyRequest.ToJSON())
64+
if err != nil {
65+
return
66+
}
67+
defer response.Body.Close()
68+
69+
if response.StatusCode != http.StatusOK {
70+
return ScanningPolicy{}, errorFromResponse(response)
71+
}
72+
73+
body, err := io.ReadAll(response.Body)
74+
if err != nil {
75+
return
76+
}
77+
return ScanningPolicyFromJSON(body), nil
78+
}
79+
80+
func (client *sysdigSecureClient) DeleteScanningPolicyById(ctx context.Context, scanningPolicyID string) error {
81+
response, err := client.doSysdigSecureRequest(ctx, http.MethodDelete, client.scanningPolicyURL(scanningPolicyID), nil)
82+
if err != nil {
83+
return err
84+
}
85+
defer response.Body.Close()
86+
87+
if response.StatusCode != http.StatusNoContent && response.StatusCode != http.StatusOK {
88+
return errorFromResponse(response)
89+
}
90+
91+
return err
92+
}
93+
94+
// Scanning Policy Assignments
95+
96+
func (client *sysdigSecureClient) CreateScanningPolicyAssignmentList(ctx context.Context, scanningPolicyAssignmentRequest ScanningPolicyAssignmentList) (scanningPolicyAssignmentList ScanningPolicyAssignmentList, err error) {
97+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPut, client.scanningPolicyAssignmentURL(), scanningPolicyAssignmentRequest.ToJSON())
98+
if err != nil {
99+
return
100+
}
101+
defer response.Body.Close()
102+
103+
if response.StatusCode != http.StatusOK {
104+
err = errorFromResponse(response)
105+
return
106+
}
107+
108+
body, err := io.ReadAll(response.Body)
109+
if err != nil {
110+
return
111+
}
112+
113+
return ScanningPolicyAssignmentFromJSON(body), nil
114+
}
115+
116+
func (client *sysdigSecureClient) DeleteScanningPolicyAssignmentList(ctx context.Context, scanningPolicyAssignmentList ScanningPolicyAssignmentList) error {
117+
response, err := client.doSysdigSecureRequest(ctx, http.MethodPut, client.scanningPolicyAssignmentURL(), scanningPolicyAssignmentList.ToJSON())
118+
if err != nil {
119+
return err
120+
}
121+
defer response.Body.Close()
122+
123+
if response.StatusCode != http.StatusNoContent && response.StatusCode != http.StatusOK {
124+
return errorFromResponse(response)
125+
}
126+
127+
return err
128+
}
129+
130+
func (client *sysdigSecureClient) GetScanningPolicyAssignmentList(ctx context.Context) (scanningPolicyAssignmentList ScanningPolicyAssignmentList, err error) {
131+
response, err := client.doSysdigSecureRequest(ctx, http.MethodGet, client.scanningPolicyAssignmentURL(), nil)
132+
if err != nil {
133+
return
134+
}
135+
defer response.Body.Close()
136+
137+
if response.StatusCode != http.StatusOK {
138+
return ScanningPolicyAssignmentList{}, errorFromResponse(response)
139+
}
140+
141+
body, err := io.ReadAll(response.Body)
142+
if err != nil {
143+
return
144+
}
145+
return ScanningPolicyAssignmentFromJSON(body), nil
146+
}

sysdig/provider.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ func Provider() *schema.Provider {
7272
"sysdig_secure_vulnerability_exception_list": resourceSysdigSecureVulnerabilityExceptionList(),
7373
"sysdig_secure_cloud_account": resourceSysdigSecureCloudAccount(),
7474
"sysdig_secure_benchmark_task": resourceSysdigSecureBenchmarkTask(),
75+
"sysdig_secure_scanning_policy": resourceSysdigSecureScanningPolicy(),
76+
"sysdig_secure_scanning_policy_assignment": resourceSysdigSecureScanningPolicyAssignment(),
7577

7678
"sysdig_monitor_alert_downtime": resourceSysdigMonitorAlertDowntime(),
7779
"sysdig_monitor_alert_metric": resourceSysdigMonitorAlertMetric(),

0 commit comments

Comments
 (0)