Skip to content

Commit

Permalink
Merge pull request #129 from JupiterOne/int-5223-read-question-updates
Browse files Browse the repository at this point in the history
feat: read updates to jupiterone_questions
  • Loading branch information
zemberdotnet authored Dec 9, 2022
2 parents b46cabc + 6a97575 commit 36f82db
Show file tree
Hide file tree
Showing 6 changed files with 480 additions and 123 deletions.
523 changes: 413 additions & 110 deletions jupiterone/cassettes/TestQuestion_Basic.yaml

Large diffs are not rendered by default.

3 changes: 3 additions & 0 deletions jupiterone/internal/client/question.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ func (c *JupiterOneClient) GetQuestion(id string) (*Question, error) {
title
description
queries {
name
query
version
}
Expand Down Expand Up @@ -85,6 +86,7 @@ func (c *JupiterOneClient) CreateQuestion(properties QuestionProperties) (*Quest
title
description
queries {
name
query
version
}
Expand Down Expand Up @@ -130,6 +132,7 @@ func (c *JupiterOneClient) UpdateQuestion(id string, properties QuestionProperti
title
description
queries {
name
query
version
}
Expand Down
10 changes: 5 additions & 5 deletions jupiterone/internal/client/rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ type QuestionRuleInstance struct {
Deleted bool `json:"deleted,omitempty"`
Type string `json:"type,omitempty"`
PollingInterval string `json:"pollingInterval"`
Templates interface{} `json:"templates"` // <Diff type - BaseQuestionRuleInstance
Question map[string]interface{} `json:"question,omitempty"` // Diff type - *RuleQuestion
QuestionId string `json:"questionId,omitempty"` // diff type - *string `json:"questionId"`
QuestionName string `json:"questionName,omitempty"` // diff type - *string `json:"questionName"`
Operations []RuleOperation `json:"operations"` // < Diff type - string - BaseQuestionRuleInstance
Templates interface{} `json:"templates"`
Question map[string]interface{} `json:"question,omitempty"`
QuestionId string `json:"questionId,omitempty"`
QuestionName string `json:"questionName,omitempty"`
Operations []RuleOperation `json:"operations"`
Outputs []string `json:"outputs"`
Tags []string `json:"tags"`
}
Expand Down
33 changes: 33 additions & 0 deletions jupiterone/resource_question.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,39 @@ func resourceQuestionRead(_ context.Context, d *schema.ResourceData, m interface
if err != nil {
return diag.Errorf("failed to read existing question: %s", err.Error())
}
err = d.Set("title", question.Title)
if err != nil {
return diag.FromErr(err)
}

err = d.Set("description", question.Description)
if err != nil {
return diag.FromErr(err)
}

err = d.Set("tags", question.Tags)
if err != nil {
return diag.FromErr(err)
}

convertedQueries, err := queriesToMapStringInterface(question.Queries)
if err != nil {
return diag.FromErr(err)
}

err = d.Set("query", convertedQueries)
if err != nil {
return diag.FromErr(err)
}

/*
TODO @zemberdotnet: read updates once compliance is actually supported in the
internal client
err = d.Set("compliance", question.Compliance)
if err != nil {
return diag.FromErr(err)
}
*/

d.SetId(question.Id)
return nil
Expand Down
15 changes: 7 additions & 8 deletions jupiterone/resource_question_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"testing"
"time"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
Expand All @@ -18,8 +17,8 @@ func TestQuestion_Basic(t *testing.T) {
accProviders, cleanup := testAccProviders(t)
defer cleanup(t)
accProvider := testAccProvider(t, accProviders)
rName := acctest.RandomWithPrefix("tf-acc-test")
resourceName := "jupiterone_question.test"
title := "tf-test-question"
ctx := context.Background()

resource.Test(t, resource.TestCase{
Expand All @@ -28,29 +27,29 @@ func TestQuestion_Basic(t *testing.T) {
CheckDestroy: testAccCheckQuestionDestroy(ctx, accProvider),
Steps: []resource.TestStep{
{
Config: testQuestionBasicConfigWithTags(rName, rName),
Config: testQuestionBasicConfigWithTags(title, "testing-tag-1"),
Check: resource.ComposeTestCheckFunc(
testAccCheckQuestionExists(ctx, accProvider),
resource.TestCheckResourceAttrSet(resourceName, "id"),
resource.TestCheckResourceAttr(resourceName, "title", rName),
resource.TestCheckResourceAttr(resourceName, "title", title),
resource.TestCheckResourceAttr(resourceName, "description", "Test"),
resource.TestCheckResourceAttr(resourceName, "tags.#", "1"),
resource.TestCheckResourceAttr(resourceName, "tags.0", rName),
resource.TestCheckResourceAttr(resourceName, "tags.0", "testing-tag-1"),
resource.TestCheckResourceAttr(resourceName, "query.#", "1"),
resource.TestCheckResourceAttr(resourceName, "query.0.name", "query0"),
resource.TestCheckResourceAttr(resourceName, "query.0.version", "v1"),
resource.TestCheckResourceAttr(resourceName, "query.0.query", "Find DataStore with classification=('critical' or 'sensitive' or 'confidential' or 'restricted') and encrypted!=true"),
),
},
{
Config: testQuestionBasicConfigWithTags(rName, rName+"-1"),
Config: testQuestionBasicConfigWithTags(title, "testing-tag-2"),
Check: resource.ComposeTestCheckFunc(
testAccCheckQuestionExists(ctx, accProvider),
resource.TestCheckResourceAttrSet(resourceName, "id"),
resource.TestCheckResourceAttr(resourceName, "title", rName),
resource.TestCheckResourceAttr(resourceName, "title", title),
resource.TestCheckResourceAttr(resourceName, "description", "Test"),
resource.TestCheckResourceAttr(resourceName, "tags.#", "1"),
resource.TestCheckResourceAttr(resourceName, "tags.0", rName+"-1"),
resource.TestCheckResourceAttr(resourceName, "tags.0", "testing-tag-2"),
resource.TestCheckResourceAttr(resourceName, "query.#", "1"),
resource.TestCheckResourceAttr(resourceName, "query.0.name", "query0"),
resource.TestCheckResourceAttr(resourceName, "query.0.version", "v1"),
Expand Down
19 changes: 19 additions & 0 deletions jupiterone/util.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package jupiterone

import (
"bytes"
"encoding/json"
"reflect"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/jupiterone/terraform-provider-jupiterone/jupiterone/internal/client"
)

func removeCRFromString(s string) string {
Expand Down Expand Up @@ -39,3 +41,20 @@ func jsonDiffSuppressFunc(k, oldValue, newValue string, d *schema.ResourceData)

return reflect.DeepEqual(old, new)
}

func queriesToMapStringInterface(c []client.QuestionQuery) ([]map[string]interface{}, error) {
buf := new(bytes.Buffer)
enc := json.NewEncoder(buf)
enc.SetEscapeHTML(false)
err := enc.Encode(c)
if err != nil {
return nil, err
}

msi := []map[string]interface{}{}
err = json.Unmarshal(buf.Bytes(), &msi)
if err != nil {
return nil, err
}
return msi, nil
}

0 comments on commit 36f82db

Please sign in to comment.