From 7713de1dd7c92476b153085fb0f9b4e7f8fa4d96 Mon Sep 17 00:00:00 2001 From: Kolbeinn Date: Fri, 23 Jun 2023 11:36:36 +0000 Subject: [PATCH] feat(cli): cloud-account: oci integration (#1296) --- cli/cmd/cloud_account.go | 3 ++ cli/cmd/integration_oci.go | 99 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 cli/cmd/integration_oci.go diff --git a/cli/cmd/cloud_account.go b/cli/cmd/cloud_account.go index 3ac29d6b1..84425ea5b 100644 --- a/cli/cmd/cloud_account.go +++ b/cli/cmd/cloud_account.go @@ -278,6 +278,7 @@ func promptCreateCloudAccount() error { "GCP Audit Log PubSub", "Azure Config", "Azure Activity Log", + "OCI Config", }, } err = survey.AskOne(prompt, &cloudAccount) @@ -305,6 +306,8 @@ func promptCreateCloudAccount() error { return createAzureConfigIntegration() case "Azure Activity Log": return createAzureActivityLogIntegration() + case "OCI Config": + return createOciConfigIntegration() default: return errors.New("unknown cloud account type") } diff --git a/cli/cmd/integration_oci.go b/cli/cmd/integration_oci.go new file mode 100644 index 000000000..12e2067d8 --- /dev/null +++ b/cli/cmd/integration_oci.go @@ -0,0 +1,99 @@ +// +// Author:: Kolbeinn Karlsson () +// Copyright:: Copyright 2023, Lacework Inc. +// License:: Apache License, Version 2.0 +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +package cmd + +import ( + "github.com/AlecAivazis/survey/v2" + "github.com/lacework/go-sdk/api" +) + +func createOciConfigIntegration() error { + questions := []*survey.Question{ + { + Name: "name", + Prompt: &survey.Input{Message: "Name:"}, + Validate: survey.Required, + }, + { + Name: "tenant_id", + Prompt: &survey.Input{Message: "Tenant ID:"}, + Validate: survey.Required, + }, + { + Name: "tenant_name", + Prompt: &survey.Input{Message: "Tenant Name:"}, + Validate: survey.Required, + }, + { + Name: "home_region", + Prompt: &survey.Input{Message: "Home Region:"}, + Validate: survey.Required, + }, + { + Name: "user_ocid", + Prompt: &survey.Input{Message: "User OCID:"}, + Validate: survey.Required, + }, + { + Name: "fingerprint", + Prompt: &survey.Input{Message: "Public Key Fingerprint:"}, + Validate: survey.Required, + }, + { + Name: "private_key", + Prompt: &survey.Input{Message: "Private Key:"}, + Validate: survey.Required, + }, + } + + answers := struct { + Name string + TenantID string `survey:"tenant_id"` + TenantName string `survey:"tenant_name"` + HomeRegion string `survey:"home_region"` + UserOCID string `survey:"user_ocid"` + Fingerprint string `survey:"fingerprint"` + PrivateKey string `survey:"private_key"` + }{} + + err := survey.Ask(questions, &answers, survey.WithIcons(promptIconsFunc)) + if err != nil { + return err + } + + oci := api.NewCloudAccount( + answers.Name, + api.OciCfgCloudAccount, + api.OciCfgData{ + TenantID: answers.TenantID, + TenantName: answers.TenantName, + HomeRegion: answers.HomeRegion, + UserOCID: answers.UserOCID, + Credentials: api.OciCfgCredentials{ + Fingerprint: answers.Fingerprint, + PrivateKey: answers.PrivateKey, + }, + }, + ) + + cli.StartProgress(" Creating integration...") + _, err = cli.LwApi.V2.CloudAccounts.Create(oci) + cli.StopProgress() + return err +}