Skip to content

Commit e154029

Browse files
Lei Wangsagarp337
authored andcommitted
Added - Support for Marketplace Metadata for Attribution and Attestation
1 parent 2c22c74 commit e154029

11 files changed

+549
-0
lines changed

examples/marketplace/main.tf

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@ variable "compartment_ocid" {
2020
variable "region" {
2121
}
2222

23+
variable "instance_ocid" {
24+
}
25+
2326
provider "oci" {
2427
region = var.region
2528
tenancy_ocid = var.tenancy_ocid
@@ -47,6 +50,12 @@ resource "oci_marketplace_listing_package_agreement" "test_listing_package_agree
4750
compartment_id = var.compartment_ocid
4851
}
4952

53+
resource "oci_marketplace_marketplace_external_attested_metadata" "test_marketplace_external_attested_metadata" {
54+
#Required
55+
compartment_id = var.compartment_ocid
56+
instance_id = var.instance_ocid
57+
}
58+
5059
data "oci_marketplace_listing_package_agreements" "test_listing_package_agreements" {
5160
#Required
5261
listing_id = data.oci_marketplace_listing.test_listing.id
@@ -101,3 +110,6 @@ data "oci_marketplace_listing_taxes" "test_listing_taxes" {
101110
#Optional
102111
compartment_id = var.compartment_ocid
103112
}
113+
114+
data "oci_marketplace_marketplace_metadata_public_keys" "test_marketplace_metadata_public_keys" {
115+
}
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"strconv"
9+
"testing"
10+
11+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
12+
"github.com/hashicorp/terraform-plugin-testing/terraform"
13+
14+
"github.com/oracle/terraform-provider-oci/httpreplay"
15+
"github.com/oracle/terraform-provider-oci/internal/acctest"
16+
17+
"github.com/oracle/terraform-provider-oci/internal/resourcediscovery"
18+
19+
"github.com/oracle/terraform-provider-oci/internal/utils"
20+
)
21+
22+
var (
23+
MarketplaceMarketplaceExternalAttestedMetadataRepresentation = map[string]interface{}{
24+
"compartment_id": acctest.Representation{RepType: acctest.Required, Create: `${var.compartment_id}`},
25+
"instance_id": acctest.Representation{RepType: acctest.Required, Create: `${var.instance_id}`},
26+
}
27+
28+
// MarketplaceMarketplaceExternalAttestedMetadataResourceDependencies = utils.OciImageIdsVariable +
29+
// acctest.GenerateResourceFromRepresentationMap("oci_core_instance", "test_instance", acctest.Required, acctest.Create, CoreInstanceRepresentation) +
30+
// AvailabilityDomainConfig + acctest.GenerateResourceFromRepresentationMap("oci_core_subnet", "test_subnet", acctest.Required, acctest.Create, CoreSubnetRepresentation) +
31+
// acctest.GenerateResourceFromRepresentationMap("oci_core_vcn", "test_vcn", acctest.Required, acctest.Create, CoreVcnRepresentation)
32+
)
33+
34+
// issue-routing-tag: marketplace/default
35+
func TestMarketplaceMarketplaceExternalAttestedMetadataResource_basic(t *testing.T) {
36+
httpreplay.SetScenario("TestMarketplaceMarketplaceExternalAttestedMetadataResource_basic")
37+
defer httpreplay.SaveScenario()
38+
39+
config := acctest.ProviderTestConfig()
40+
41+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
42+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
43+
44+
instanceId := utils.GetEnvSettingWithBlankDefault("instance_ocid")
45+
instanceIdVariableStr := fmt.Sprintf("variable \"instance_id\" { default = \"%s\" }\n", instanceId)
46+
47+
resourceName := "oci_marketplace_marketplace_external_attested_metadata.test_marketplace_external_attested_metadata"
48+
49+
var resId string
50+
// Save TF content to Create resource with only required properties. This has to be exactly the same as the config part in the create step in the test.
51+
acctest.SaveConfigContent(config+compartmentIdVariableStr+instanceIdVariableStr+
52+
acctest.GenerateResourceFromRepresentationMap("oci_marketplace_marketplace_external_attested_metadata", "test_marketplace_external_attested_metadata", acctest.Required, acctest.Create, MarketplaceMarketplaceExternalAttestedMetadataRepresentation), "marketplace", "marketplaceExternalAttestedMetadata", t)
53+
54+
acctest.ResourceTest(t, nil, []resource.TestStep{
55+
// verify Create
56+
{
57+
Config: config + compartmentIdVariableStr + instanceIdVariableStr +
58+
acctest.GenerateResourceFromRepresentationMap("oci_marketplace_marketplace_external_attested_metadata", "test_marketplace_external_attested_metadata", acctest.Required, acctest.Create, MarketplaceMarketplaceExternalAttestedMetadataRepresentation),
59+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
60+
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
61+
resource.TestCheckResourceAttr(resourceName, "instance_id", instanceId),
62+
63+
func(s *terraform.State) (err error) {
64+
resId, err = acctest.FromInstanceState(s, resourceName, "id")
65+
if isEnableExportCompartment, _ := strconv.ParseBool(utils.GetEnvSettingWithDefault("enable_export_compartment", "true")); isEnableExportCompartment {
66+
if errExport := resourcediscovery.TestExportCompartmentWithResourceName(&resId, &compartmentId, resourceName); errExport != nil {
67+
return errExport
68+
}
69+
}
70+
return err
71+
},
72+
),
73+
},
74+
})
75+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package integrationtest
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
11+
12+
"github.com/oracle/terraform-provider-oci/httpreplay"
13+
"github.com/oracle/terraform-provider-oci/internal/acctest"
14+
15+
"github.com/oracle/terraform-provider-oci/internal/utils"
16+
)
17+
18+
var (
19+
MarketplaceMarketplaceMetadataPublicKeyDataSourceRepresentation = map[string]interface{}{
20+
"compartment_id": acctest.Representation{RepType: acctest.Optional, Create: `${var.compartment_id}`},
21+
}
22+
23+
MarketplaceMarketplaceMetadataPublicKeyResourceConfig = ""
24+
)
25+
26+
// issue-routing-tag: marketplace/default
27+
func TestMarketplaceMarketplaceMetadataPublicKeyResource_basic(t *testing.T) {
28+
httpreplay.SetScenario("TestMarketplaceMarketplaceMetadataPublicKeyResource_basic")
29+
defer httpreplay.SaveScenario()
30+
31+
config := acctest.ProviderTestConfig()
32+
33+
compartmentId := utils.GetEnvSettingWithBlankDefault("compartment_ocid")
34+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
35+
36+
datasourceName := "data.oci_marketplace_marketplace_metadata_public_keys.test_marketplace_metadata_public_keys"
37+
38+
acctest.SaveConfigContent("", "", "", t)
39+
40+
acctest.ResourceTest(t, nil, []resource.TestStep{
41+
// verify datasource
42+
{
43+
Config: config +
44+
acctest.GenerateDataSourceFromRepresentationMap("oci_marketplace_marketplace_metadata_public_keys", "test_marketplace_metadata_public_keys", acctest.Required, acctest.Create, MarketplaceMarketplaceMetadataPublicKeyDataSourceRepresentation) +
45+
compartmentIdVariableStr + MarketplaceMarketplaceMetadataPublicKeyResourceConfig,
46+
Check: acctest.ComposeAggregateTestCheckFuncWrapper(
47+
48+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.#"),
49+
resource.TestCheckResourceAttr(datasourceName, "marketplace_metadata_public_keys.0.certificate_chain.#", "1"),
50+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.certificate_thumbprint"),
51+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.exponent"),
52+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.key_algorithm"),
53+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.key_id"),
54+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.key_type"),
55+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.key_use"),
56+
resource.TestCheckResourceAttrSet(datasourceName, "marketplace_metadata_public_keys.0.modulus"),
57+
),
58+
},
59+
})
60+
}

internal/service/marketplace/marketplace_export.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ var exportMarketplacePublicationHints = &tf_export.TerraformResourceHints{
3737
},
3838
}
3939

40+
var exportMarketplaceMarketplaceExternalAttestedMetadataHints = &tf_export.TerraformResourceHints{
41+
ResourceClass: "oci_marketplace_marketplace_external_attested_metadata",
42+
ResourceAbbreviation: "marketplace_external_attested_metadata",
43+
}
44+
4045
var marketplaceResourceGraph = tf_export.TerraformResourceGraph{
4146
"oci_identity_compartment": {
4247
{TerraformResourceHints: exportMarketplaceAcceptedAgreementHints},
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package marketplace
5+
6+
import (
7+
"context"
8+
"fmt"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
11+
12+
oci_marketplace "github.com/oracle/oci-go-sdk/v65/marketplace"
13+
14+
"github.com/oracle/terraform-provider-oci/internal/client"
15+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
16+
)
17+
18+
func MarketplaceMarketplaceExternalAttestedMetadataResource() *schema.Resource {
19+
return &schema.Resource{
20+
Importer: &schema.ResourceImporter{
21+
State: schema.ImportStatePassthrough,
22+
},
23+
Timeouts: tfresource.DefaultTimeout,
24+
Create: createMarketplaceMarketplaceExternalAttestedMetadata,
25+
Read: readMarketplaceMarketplaceExternalAttestedMetadata,
26+
Delete: deleteMarketplaceMarketplaceExternalAttestedMetadata,
27+
Schema: map[string]*schema.Schema{
28+
// Required
29+
"compartment_id": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
ForceNew: true,
33+
},
34+
"instance_id": {
35+
Type: schema.TypeString,
36+
Required: true,
37+
ForceNew: true,
38+
},
39+
40+
// Optional
41+
42+
// Computed
43+
"serialized_jwt": {
44+
Type: schema.TypeString,
45+
Computed: true,
46+
},
47+
},
48+
}
49+
}
50+
51+
func createMarketplaceMarketplaceExternalAttestedMetadata(d *schema.ResourceData, m interface{}) error {
52+
sync := &MarketplaceMarketplaceExternalAttestedMetadataResourceCrud{}
53+
sync.D = d
54+
sync.Client = m.(*client.OracleClients).MarketplaceClient()
55+
56+
return tfresource.CreateResource(d, sync)
57+
}
58+
59+
func readMarketplaceMarketplaceExternalAttestedMetadata(d *schema.ResourceData, m interface{}) error {
60+
return nil
61+
}
62+
63+
func deleteMarketplaceMarketplaceExternalAttestedMetadata(d *schema.ResourceData, m interface{}) error {
64+
return nil
65+
}
66+
67+
type MarketplaceMarketplaceExternalAttestedMetadataResourceCrud struct {
68+
tfresource.BaseCrud
69+
Client *oci_marketplace.MarketplaceClient
70+
Res *oci_marketplace.MarketplaceExternalAttestedMetadata
71+
DisableNotFoundRetries bool
72+
}
73+
74+
func (s *MarketplaceMarketplaceExternalAttestedMetadataResourceCrud) ID() string {
75+
return fmt.Sprintf("%s/%s", s.D.Get("compartment_id").(string), s.D.Get("instance_id").(string))
76+
}
77+
78+
func (s *MarketplaceMarketplaceExternalAttestedMetadataResourceCrud) Create() error {
79+
request := oci_marketplace.CreateMarketplaceExternalAttestedMetadataRequest{}
80+
81+
if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok {
82+
tmp := compartmentId.(string)
83+
request.CompartmentId = &tmp
84+
}
85+
86+
if instanceId, ok := s.D.GetOkExists("instance_id"); ok {
87+
tmp := instanceId.(string)
88+
request.InstanceId = &tmp
89+
}
90+
91+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(s.DisableNotFoundRetries, "marketplace")
92+
93+
response, err := s.Client.CreateMarketplaceExternalAttestedMetadata(context.Background(), request)
94+
if err != nil {
95+
return err
96+
}
97+
98+
s.Res = &response.MarketplaceExternalAttestedMetadata
99+
return nil
100+
}
101+
102+
func (s *MarketplaceMarketplaceExternalAttestedMetadataResourceCrud) SetData() error {
103+
if s.Res.SerializedJwt != nil {
104+
s.D.Set("serialized_jwt", *s.Res.SerializedJwt)
105+
}
106+
107+
return nil
108+
}

0 commit comments

Comments
 (0)