Skip to content

Commit ab3ea18

Browse files
committed
Support for vulnerability scanning- container scan recipes and targets
1 parent c9ddcc4 commit ab3ea18

19 files changed

+2930
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
### Added
44
- Support for service AI Anomaly detection added
5+
- Support for container scan recipe and target for vulnerability scanning.
56

67
## 4.39.0 (August 11, 2021)
78

examples/vulnerability_scanning_service/main.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ variable "host_scan_instance_ocid" {
2222

2323
}
2424

25+
variable "container_repo_name" {
26+
27+
}
2528

2629
provider "oci" {
2730
tenancy_ocid = var.tenancy_ocid
@@ -79,3 +82,36 @@ resource "oci_vulnerability_scanning_host_scan_target" "test_host_scan_target" {
7982
freeform_tags = {"bar-key"= "value"}
8083
instance_ids = [var.host_scan_instance_ocid]
8184
}
85+
86+
resource "oci_vulnerability_scanning_container_scan_target" "test_container_scan_target" {
87+
#Required
88+
compartment_id = var.compartment_ocid
89+
container_scan_recipe_id = oci_vulnerability_scanning_container_scan_recipe.test_container_scan_recipe.id
90+
target_registry {
91+
#Required
92+
compartment_id = var.compartment_ocid
93+
type = "OCIR"
94+
95+
#Optional
96+
repositories = [var.container_repo_name]
97+
url = "https://us-ashburn-1.ocir.io/"
98+
}
99+
100+
#Optional
101+
description = "Container scan target example"
102+
display_name = "TestContainerScanTarget"
103+
}
104+
105+
resource "oci_vulnerability_scanning_container_scan_recipe" "test_container_scan_recipe" {
106+
#Required
107+
compartment_id = var.compartment_ocid
108+
scan_settings {
109+
#Required
110+
scan_level = "NONE"
111+
}
112+
113+
#Optional
114+
defined_tags = {"foo-namespace.bar-key"= "value"}
115+
display_name = "TestContainerScanRecipe"
116+
freeform_tags = {"bar-key"= "value"}
117+
}

oci/export_definitions.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2362,6 +2362,30 @@ var exportVulnerabilityScanningHostScanTargetHints = &TerraformResourceHints{
23622362
},
23632363
}
23642364

2365+
var exportVulnerabilityScanningContainerScanRecipeHints = &TerraformResourceHints{
2366+
resourceClass: "oci_vulnerability_scanning_container_scan_recipe",
2367+
datasourceClass: "oci_vulnerability_scanning_container_scan_recipes",
2368+
datasourceItemsAttr: "container_scan_recipe_summary_collection",
2369+
isDatasourceCollection: true,
2370+
resourceAbbreviation: "container_scan_recipe",
2371+
requireResourceRefresh: true,
2372+
discoverableLifecycleStates: []string{
2373+
string(oci_vulnerability_scanning.LifecycleStateActive),
2374+
},
2375+
}
2376+
2377+
var exportVulnerabilityScanningContainerScanTargetHints = &TerraformResourceHints{
2378+
resourceClass: "oci_vulnerability_scanning_container_scan_target",
2379+
datasourceClass: "oci_vulnerability_scanning_container_scan_targets",
2380+
datasourceItemsAttr: "container_scan_target_summary_collection",
2381+
isDatasourceCollection: true,
2382+
resourceAbbreviation: "container_scan_target",
2383+
requireResourceRefresh: true,
2384+
discoverableLifecycleStates: []string{
2385+
string(oci_vulnerability_scanning.LifecycleStateActive),
2386+
},
2387+
}
2388+
23652389
var exportWaasAddressListHints = &TerraformResourceHints{
23662390
resourceClass: "oci_waas_address_list",
23672391
datasourceClass: "oci_waas_address_lists",

oci/export_graphs.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,6 +1010,8 @@ var vulnerabilityScanningResourceGraph = TerraformResourceGraph{
10101010
"oci_identity_compartment": {
10111011
{TerraformResourceHints: exportVulnerabilityScanningHostScanRecipeHints},
10121012
{TerraformResourceHints: exportVulnerabilityScanningHostScanTargetHints},
1013+
{TerraformResourceHints: exportVulnerabilityScanningContainerScanRecipeHints},
1014+
{TerraformResourceHints: exportVulnerabilityScanningContainerScanTargetHints},
10131015
},
10141016
}
10151017

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_vulnerability_scanning "github.com/oracle/oci-go-sdk/v45/vulnerabilityscanning"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_vulnerability_scanning_container_scan_recipe", VulnerabilityScanningContainerScanRecipeDataSource())
15+
}
16+
17+
func VulnerabilityScanningContainerScanRecipeDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["container_scan_recipe_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
return GetSingularDataSourceItemSchema(VulnerabilityScanningContainerScanRecipeResource(), fieldMap, readSingularVulnerabilityScanningContainerScanRecipe)
24+
}
25+
26+
func readSingularVulnerabilityScanningContainerScanRecipe(d *schema.ResourceData, m interface{}) error {
27+
sync := &VulnerabilityScanningContainerScanRecipeDataSourceCrud{}
28+
sync.D = d
29+
sync.Client = m.(*OracleClients).vulnerabilityScanningClient()
30+
31+
return ReadResource(sync)
32+
}
33+
34+
type VulnerabilityScanningContainerScanRecipeDataSourceCrud struct {
35+
D *schema.ResourceData
36+
Client *oci_vulnerability_scanning.VulnerabilityScanningClient
37+
Res *oci_vulnerability_scanning.GetContainerScanRecipeResponse
38+
}
39+
40+
func (s *VulnerabilityScanningContainerScanRecipeDataSourceCrud) VoidState() {
41+
s.D.SetId("")
42+
}
43+
44+
func (s *VulnerabilityScanningContainerScanRecipeDataSourceCrud) Get() error {
45+
request := oci_vulnerability_scanning.GetContainerScanRecipeRequest{}
46+
47+
if containerScanRecipeId, ok := s.D.GetOkExists("container_scan_recipe_id"); ok {
48+
tmp := containerScanRecipeId.(string)
49+
request.ContainerScanRecipeId = &tmp
50+
}
51+
52+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "vulnerability_scanning")
53+
54+
response, err := s.Client.GetContainerScanRecipe(context.Background(), request)
55+
if err != nil {
56+
return err
57+
}
58+
59+
s.Res = &response
60+
return nil
61+
}
62+
63+
func (s *VulnerabilityScanningContainerScanRecipeDataSourceCrud) SetData() error {
64+
if s.Res == nil {
65+
return nil
66+
}
67+
68+
s.D.SetId(*s.Res.Id)
69+
70+
if s.Res.CompartmentId != nil {
71+
s.D.Set("compartment_id", *s.Res.CompartmentId)
72+
}
73+
74+
if s.Res.DefinedTags != nil {
75+
s.D.Set("defined_tags", definedTagsToMap(s.Res.DefinedTags))
76+
}
77+
78+
if s.Res.DisplayName != nil {
79+
s.D.Set("display_name", *s.Res.DisplayName)
80+
}
81+
82+
s.D.Set("freeform_tags", s.Res.FreeformTags)
83+
84+
if s.Res.ScanSettings != nil {
85+
s.D.Set("scan_settings", []interface{}{ContainerScanSettingsToMap(s.Res.ScanSettings)})
86+
} else {
87+
s.D.Set("scan_settings", nil)
88+
}
89+
90+
s.D.Set("state", s.Res.LifecycleState)
91+
92+
if s.Res.SystemTags != nil {
93+
s.D.Set("system_tags", systemTagsToMap(s.Res.SystemTags))
94+
}
95+
96+
if s.Res.TimeCreated != nil {
97+
s.D.Set("time_created", s.Res.TimeCreated.String())
98+
}
99+
100+
if s.Res.TimeUpdated != nil {
101+
s.D.Set("time_updated", s.Res.TimeUpdated.String())
102+
}
103+
104+
return nil
105+
}

0 commit comments

Comments
 (0)