Skip to content

Commit

Permalink
feat: added read functionality
Browse files Browse the repository at this point in the history
Signed-off-by: Matthias Theuermann <[email protected]>
  • Loading branch information
mati007thm committed Dec 18, 2024
1 parent 4778115 commit 04f71b2
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 37 deletions.
37 changes: 23 additions & 14 deletions internal/provider/gql.go
Original file line number Diff line number Diff line change
Expand Up @@ -651,27 +651,36 @@ type EmailRecipient struct {
ReferenceURL string
}

type MicrosoftDefenderConfigurationOptionsInput struct {
type MicrosoftDefenderConfigurationOptions struct {
TenantId string
ClientId string
SubscriptionsAllowlist []string
SubscriptionsDenylist []string
}

// OciConfigurationOptionsInput represents oCI integration input.
type OciConfigurationOptions struct {
TenancyOcid string
UserOcid string
Region string
Fingerprint string
}

type ClientIntegrationConfigurationOptions struct {
AzureConfigurationOptions AzureConfigurationOptions `graphql:"... on AzureConfigurationOptions"`
HostConfigurationOptions HostConfigurationOptions `graphql:"... on HostConfigurationOptions"`
Ms365ConfigurationOptions Ms365ConfigurationOptions `graphql:"... on Ms365ConfigurationOptions"`
GcpConfigurationOptions GcpConfigurationOptions `graphql:"... on GcpConfigurationOptions"`
SlackConfigurationOptions SlackConfigurationOptions `graphql:"... on SlackConfigurationOptions"`
GithubConfigurationOptions GithubConfigurationOptions `graphql:"... on GithubConfigurationOptions"`
HostedAwsConfigurationOptions HostedAwsConfigurationOptions `graphql:"... on HostedAwsConfigurationOptions"`
ShodanConfigurationOptions ShodanConfigurationOptions `graphql:"... on ShodanConfigurationOptions"`
ZendeskConfigurationOptions ZendeskConfigurationOptions `graphql:"... on ZendeskConfigurationOptions"`
JiraConfigurationOptions JiraConfigurationOptions `graphql:"... on JiraConfigurationOptions"`
EmailConfigurationOptions EmailConfigurationOptions `graphql:"... on EmailConfigurationOptions"`
GitlabConfigurationOptions GitlabConfigurationOptions `graphql:"... on GitlabConfigurationOptions"`
MicrosoftDefenderConfigurationOptionsInput MicrosoftDefenderConfigurationOptionsInput `graphql:"... on MicrosoftDefenderConfigurationOptions"`
AzureConfigurationOptions AzureConfigurationOptions `graphql:"... on AzureConfigurationOptions"`
HostConfigurationOptions HostConfigurationOptions `graphql:"... on HostConfigurationOptions"`
Ms365ConfigurationOptions Ms365ConfigurationOptions `graphql:"... on Ms365ConfigurationOptions"`
GcpConfigurationOptions GcpConfigurationOptions `graphql:"... on GcpConfigurationOptions"`
SlackConfigurationOptions SlackConfigurationOptions `graphql:"... on SlackConfigurationOptions"`
GithubConfigurationOptions GithubConfigurationOptions `graphql:"... on GithubConfigurationOptions"`
HostedAwsConfigurationOptions HostedAwsConfigurationOptions `graphql:"... on HostedAwsConfigurationOptions"`
ShodanConfigurationOptions ShodanConfigurationOptions `graphql:"... on ShodanConfigurationOptions"`
ZendeskConfigurationOptions ZendeskConfigurationOptions `graphql:"... on ZendeskConfigurationOptions"`
JiraConfigurationOptions JiraConfigurationOptions `graphql:"... on JiraConfigurationOptions"`
EmailConfigurationOptions EmailConfigurationOptions `graphql:"... on EmailConfigurationOptions"`
GitlabConfigurationOptions GitlabConfigurationOptions `graphql:"... on GitlabConfigurationOptions"`
MicrosoftDefenderConfigurationOptions MicrosoftDefenderConfigurationOptions `graphql:"... on MicrosoftDefenderConfigurationOptions"`
OciConfigurationOptions OciConfigurationOptions `graphql:"... on OciConfigurationOptions"`
// Add other configuration options here
}

Expand Down
8 changes: 4 additions & 4 deletions internal/provider/integration_msdefender_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -292,15 +292,15 @@ func (r *integrationMsDefenderResource) ImportState(ctx context.Context, req res
return
}

allowList := ConvertListValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptionsInput.SubscriptionsAllowlist)
denyList := ConvertListValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptionsInput.SubscriptionsDenylist)
allowList := ConvertListValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptions.SubscriptionsAllowlist)
denyList := ConvertListValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptions.SubscriptionsDenylist)

model := integrationMsDefenderResourceModel{
Mrn: types.StringValue(integration.Mrn),
Name: types.StringValue(integration.Name),
SpaceID: types.StringValue(integration.SpaceID()),
ClientId: types.StringValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptionsInput.ClientId),
TenantId: types.StringValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptionsInput.TenantId),
ClientId: types.StringValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptions.ClientId),
TenantId: types.StringValue(integration.ConfigurationOptions.MicrosoftDefenderConfigurationOptions.TenantId),
SubscriptionAllowList: allowList,
SubscriptionDenyList: denyList,
Credential: integrationMsDefenderCredentialModel{
Expand Down
60 changes: 41 additions & 19 deletions internal/provider/integration_oci_tenant.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,18 @@ type integrationOciCredentialModel struct {
PrivateKey types.String `tfsdk:"private_key"`
}

func (m integrationOciTenantResourceModel) GetConfigurationOptions() *mondoov1.OciConfigurationOptionsInput {
opts := &mondoov1.OciConfigurationOptionsInput{
TenancyOcid: mondoov1.String(m.Tenancy.ValueString()),
UserOcid: mondoov1.String(m.User.ValueString()),
Region: mondoov1.String(m.Region.ValueString()),
Fingerprint: mondoov1.String(m.Credential.Fingerprint.ValueString()),
PrivateKey: mondoov1.NewStringPtr(mondoov1.String(m.Credential.PrivateKey.ValueString())),
}

return opts
}

func (r *integrationOciTenantResource) Metadata(ctx context.Context, req resource.MetadataRequest, resp *resource.MetadataResponse) {
resp.TypeName = req.ProviderTypeName + "_integration_oci_tenant"
}
Expand All @@ -61,7 +73,6 @@ func (r *integrationOciTenantResource) Schema(ctx context.Context, req resource.
resp.Schema = schema.Schema{
// This description is used by the documentation generator and the language server.
MarkdownDescription: "Example resource",

Attributes: map[string]schema.Attribute{
"space_id": schema.StringAttribute{
MarkdownDescription: "Mondoo Space Identifier. If it is not provided, the provider space is used.",
Expand Down Expand Up @@ -158,13 +169,7 @@ func (r *integrationOciTenantResource) Create(ctx context.Context, req resource.
data.Name.ValueString(),
mondoov1.ClientIntegrationTypeOci,
mondoov1.ClientIntegrationConfigurationInput{
OciConfigurationOptions: &mondoov1.OciConfigurationOptionsInput{
TenancyOcid: mondoov1.String(data.Tenancy.ValueString()),
UserOcid: mondoov1.String(data.User.ValueString()),
Region: mondoov1.String(data.Region.ValueString()),
Fingerprint: mondoov1.String(data.Credential.Fingerprint.ValueString()),
PrivateKey: mondoov1.NewStringPtr(mondoov1.String(data.Credential.PrivateKey.ValueString())),
},
OciConfigurationOptions: data.GetConfigurationOptions(),
})
if err != nil {
resp.Diagnostics.
Expand All @@ -182,7 +187,6 @@ func (r *integrationOciTenantResource) Create(ctx context.Context, req resource.
AddWarning("Client Error",
fmt.Sprintf("Unable to trigger integration, got error: %s", err),
)
return
}

// Save space mrn into the Terraform state.
Expand All @@ -204,11 +208,28 @@ func (r *integrationOciTenantResource) Read(ctx context.Context, req resource.Re
return
}

// Write logs using the tflog package
tflog.Trace(ctx, "read a OCI integration resource")
// Do GraphQL request to API to get the resource.
integration, err := r.client.GetClientIntegration(ctx, data.Mrn.ValueString())
if err != nil {
resp.State.RemoveResource(ctx)
return
}

model := integrationOciTenantResourceModel{
Mrn: types.StringValue(integration.Mrn),
Name: types.StringValue(integration.Name),
SpaceID: types.StringValue(integration.SpaceID()),
Tenancy: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.TenancyOcid),
Region: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.Region),
User: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.UserOcid),
Credential: integrationOciCredentialModel{
Fingerprint: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.Fingerprint),
PrivateKey: types.StringValue(data.Credential.PrivateKey.ValueString()),
},
}

// Save updated data into Terraform state
resp.Diagnostics.Append(resp.State.Set(ctx, &data)...)
resp.Diagnostics.Append(resp.State.Set(ctx, &model)...)
}

func (r *integrationOciTenantResource) Update(ctx context.Context, req resource.UpdateRequest, resp *resource.UpdateResponse) {
Expand All @@ -222,13 +243,7 @@ func (r *integrationOciTenantResource) Update(ctx context.Context, req resource.
}

opts := mondoov1.ClientIntegrationConfigurationInput{
OciConfigurationOptions: &mondoov1.OciConfigurationOptionsInput{
TenancyOcid: mondoov1.String(data.Tenancy.ValueString()),
UserOcid: mondoov1.String(data.User.ValueString()),
Region: mondoov1.String(data.Region.ValueString()),
Fingerprint: mondoov1.String(data.Credential.Fingerprint.ValueString()),
PrivateKey: mondoov1.NewStringPtr(mondoov1.String(data.Credential.PrivateKey.ValueString())),
},
OciConfigurationOptions: data.GetConfigurationOptions(),
}

// Do GraphQL request to API to update the resource.
Expand Down Expand Up @@ -299,6 +314,13 @@ func (r *integrationOciTenantResource) ImportState(ctx context.Context, req reso
Mrn: types.StringValue(integration.Mrn),
Name: types.StringValue(integration.Name),
SpaceID: types.StringValue(spaceID),
Tenancy: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.TenancyOcid),
Region: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.Region),
User: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.UserOcid),
Credential: integrationOciCredentialModel{
Fingerprint: types.StringValue(integration.ConfigurationOptions.OciConfigurationOptions.Fingerprint),
PrivateKey: types.StringPointerValue(nil),
},
}

resp.State.Set(ctx, &model)
Expand Down

0 comments on commit 04f71b2

Please sign in to comment.