Skip to content

Commit 180cf2c

Browse files
committed
OS management support for new Count API
1 parent 0f63f88 commit 180cf2c

22 files changed

+771
-20
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Added
44
- Support change compartment using lifecycle state
55
- Support retry for Eventually consistency failure
6+
- Support for Count API added to `os_management` resource
67

78
## 4.42.0 (September 01, 2021)
89

examples/management_agent/management_agent.tf

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ resource "oci_management_agent_management_agent_install_key" "test_management_ag
3838
#Optional
3939
allowed_key_install_count = "200"
4040
display_name = "displayName"
41-
time_expires = "2021-05-27T17:27:44.398Z"
41+
time_expires = "2022-05-27T17:27:44.398Z"
4242
}
4343

4444
data "oci_management_agent_management_agent_install_keys" "test_management_agent_install_keys" {
@@ -67,5 +67,6 @@ data "oci_management_agent_management_agent_available_histories" "test_managemen
6767

6868
#Optional
6969
time_availability_status_ended_greater_than = "2020-01-15T01:01:01.000Z"
70-
time_availability_status_started_less_than = "2020-09-28T01:01:01.000Z"
71-
}
70+
time_availability_status_started_less_than = "2029-09-28T01:01:01.000Z"
71+
72+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
data "oci_management_agent_management_agent_count" "test_management_agent_count" {
5+
#Required
6+
compartment_id = var.compartment_ocid
7+
group_by = ["version"]
8+
}
9+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
data "oci_management_agent_management_agent_plugin_count" "test_management_agent_plugin_count" {
5+
#Required
6+
compartment_id = var.compartment_ocid
7+
group_by = "pluginName"
8+
}
Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
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_management_agent "github.com/oracle/oci-go-sdk/v46/managementagent"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_management_agent_management_agent_count", ManagementAgentManagementAgentCountDataSource())
15+
}
16+
17+
func ManagementAgentManagementAgentCountDataSource() *schema.Resource {
18+
return &schema.Resource{
19+
Read: readSingularManagementAgentManagementAgentCount,
20+
Schema: map[string]*schema.Schema{
21+
"compartment_id": {
22+
Type: schema.TypeString,
23+
Required: true,
24+
},
25+
"group_by": {
26+
Type: schema.TypeList,
27+
Required: true,
28+
Elem: &schema.Schema{
29+
Type: schema.TypeString,
30+
},
31+
},
32+
"has_plugins": {
33+
Type: schema.TypeBool,
34+
Optional: true,
35+
},
36+
// Computed
37+
"items": {
38+
Type: schema.TypeList,
39+
Computed: true,
40+
Elem: &schema.Resource{
41+
Schema: map[string]*schema.Schema{
42+
// Required
43+
44+
// Optional
45+
46+
// Computed
47+
"count": {
48+
Type: schema.TypeInt,
49+
Computed: true,
50+
},
51+
"dimensions": {
52+
Type: schema.TypeList,
53+
Computed: true,
54+
MaxItems: 1,
55+
MinItems: 1,
56+
Elem: &schema.Resource{
57+
Schema: map[string]*schema.Schema{
58+
// Required
59+
60+
// Optional
61+
62+
// Computed
63+
"availability_status": {
64+
Type: schema.TypeString,
65+
Computed: true,
66+
},
67+
"has_plugins": {
68+
Type: schema.TypeBool,
69+
Computed: true,
70+
},
71+
"platform_type": {
72+
Type: schema.TypeString,
73+
Computed: true,
74+
},
75+
"version": {
76+
Type: schema.TypeString,
77+
Computed: true,
78+
},
79+
},
80+
},
81+
},
82+
},
83+
},
84+
},
85+
},
86+
}
87+
}
88+
89+
func readSingularManagementAgentManagementAgentCount(d *schema.ResourceData, m interface{}) error {
90+
sync := &ManagementAgentManagementAgentCountDataSourceCrud{}
91+
sync.D = d
92+
sync.Client = m.(*OracleClients).managementAgentClient()
93+
94+
return ReadResource(sync)
95+
}
96+
97+
type ManagementAgentManagementAgentCountDataSourceCrud struct {
98+
D *schema.ResourceData
99+
Client *oci_management_agent.ManagementAgentClient
100+
Res *oci_management_agent.SummarizeManagementAgentCountsResponse
101+
}
102+
103+
func (s *ManagementAgentManagementAgentCountDataSourceCrud) VoidState() {
104+
s.D.SetId("")
105+
}
106+
107+
func (s *ManagementAgentManagementAgentCountDataSourceCrud) Get() error {
108+
request := oci_management_agent.SummarizeManagementAgentCountsRequest{}
109+
110+
if compartmentId, ok := s.D.GetOkExists("compartment_id"); ok {
111+
tmp := compartmentId.(string)
112+
request.CompartmentId = &tmp
113+
}
114+
115+
if groupBy, ok := s.D.GetOkExists("group_by"); ok {
116+
interfaces := groupBy.([]interface{})
117+
tmp := make([]oci_management_agent.ManagementAgentGroupByEnum, len(interfaces))
118+
for i := range interfaces {
119+
if interfaces[i] != nil {
120+
tmp[i] = oci_management_agent.ManagementAgentGroupByEnum(interfaces[i].(string))
121+
}
122+
}
123+
if len(tmp) != 0 || s.D.HasChange("group_by") {
124+
request.GroupBy = tmp
125+
}
126+
}
127+
128+
if hasPlugins, ok := s.D.GetOkExists("has_plugins"); ok {
129+
tmp := hasPlugins.(bool)
130+
request.HasPlugins = &tmp
131+
}
132+
133+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "management_agent")
134+
135+
response, err := s.Client.SummarizeManagementAgentCounts(context.Background(), request)
136+
if err != nil {
137+
return err
138+
}
139+
140+
s.Res = &response
141+
return nil
142+
}
143+
144+
func (s *ManagementAgentManagementAgentCountDataSourceCrud) SetData() error {
145+
if s.Res == nil {
146+
return nil
147+
}
148+
149+
s.D.SetId(GenerateDataSourceHashID("ManagementAgentManagementAgentCountDataSource-", ManagementAgentManagementAgentCountDataSource(), s.D))
150+
151+
items := []interface{}{}
152+
for _, item := range s.Res.Items {
153+
items = append(items, ManagementAgentAggregationToMap(item))
154+
}
155+
s.D.Set("items", items)
156+
157+
return nil
158+
}
159+
160+
func ManagementAgentAggregationToMap(obj oci_management_agent.ManagementAgentAggregation) map[string]interface{} {
161+
result := map[string]interface{}{}
162+
163+
if obj.Count != nil {
164+
result["count"] = int(*obj.Count)
165+
}
166+
167+
if obj.Dimensions != nil {
168+
result["dimensions"] = []interface{}{ManagementAgentAggregationDimensionsToMap(obj.Dimensions)}
169+
}
170+
171+
return result
172+
}
173+
174+
func ManagementAgentAggregationDimensionsToMap(obj *oci_management_agent.ManagementAgentAggregationDimensions) map[string]interface{} {
175+
result := map[string]interface{}{}
176+
177+
result["availability_status"] = string(obj.AvailabilityStatus)
178+
179+
if obj.HasPlugins != nil {
180+
result["has_plugins"] = bool(*obj.HasPlugins)
181+
}
182+
183+
result["platform_type"] = string(obj.PlatformType)
184+
185+
if obj.Version != nil {
186+
result["version"] = string(*obj.Version)
187+
}
188+
189+
return result
190+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
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+
"fmt"
8+
"testing"
9+
10+
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
11+
"github.com/hashicorp/terraform-plugin-sdk/terraform"
12+
13+
"github.com/terraform-providers/terraform-provider-oci/httpreplay"
14+
)
15+
16+
var (
17+
managementAgentCountSingularDataSourceRepresentation = map[string]interface{}{
18+
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
19+
"group_by": Representation{repType: Required, create: []string{`version`}},
20+
"has_plugins": Representation{repType: Required, create: `true`},
21+
}
22+
23+
ManagementAgentCountResourceConfig = ""
24+
)
25+
26+
// issue-routing-tag: management_agent/default
27+
func TestManagementAgentManagementAgentCountResource_basic(t *testing.T) {
28+
httpreplay.SetScenario("TestManagementAgentManagementAgentCountResource_basic")
29+
defer httpreplay.SaveScenario()
30+
31+
provider := testAccProvider
32+
config := testProviderConfig()
33+
34+
compartmentId := getEnvSettingWithBlankDefault("compartment_ocid")
35+
compartmentIdVariableStr := fmt.Sprintf("variable \"compartment_id\" { default = \"%s\" }\n", compartmentId)
36+
37+
singularDatasourceName := "data.oci_management_agent_management_agent_count.test_management_agent_count"
38+
39+
saveConfigContent("", "", "", t)
40+
41+
resource.Test(t, resource.TestCase{
42+
PreCheck: func() { testAccPreCheck(t) },
43+
Providers: map[string]terraform.ResourceProvider{
44+
"oci": provider,
45+
},
46+
Steps: []resource.TestStep{
47+
// verify singular datasource
48+
{
49+
Config: config +
50+
generateDataSourceFromRepresentationMap("oci_management_agent_management_agent_count", "test_management_agent_count", Required, Create, managementAgentCountSingularDataSourceRepresentation) +
51+
compartmentIdVariableStr + ManagementAgentCountResourceConfig,
52+
Check: ComposeAggregateTestCheckFuncWrapper(
53+
resource.TestCheckResourceAttr(singularDatasourceName, "compartment_id", compartmentId),
54+
resource.TestCheckResourceAttr(singularDatasourceName, "has_plugins", "true"),
55+
56+
resource.TestCheckResourceAttrSet(singularDatasourceName, "items.#"),
57+
),
58+
},
59+
},
60+
})
61+
}

oci/management_agent_management_agent_data_source.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,10 @@ func (s *ManagementAgentManagementAgentDataSourceCrud) SetData() error {
8787
s.D.Set("host", *s.Res.Host)
8888
}
8989

90+
if s.Res.HostId != nil {
91+
s.D.Set("host_id", *s.Res.HostId)
92+
}
93+
9094
if s.Res.InstallKeyId != nil {
9195
s.D.Set("install_key_id", *s.Res.InstallKeyId)
9296
}
@@ -99,6 +103,10 @@ func (s *ManagementAgentManagementAgentDataSourceCrud) SetData() error {
99103
s.D.Set("is_agent_auto_upgradable", *s.Res.IsAgentAutoUpgradable)
100104
}
101105

106+
if s.Res.IsCustomerDeployed != nil {
107+
s.D.Set("is_customer_deployed", *s.Res.IsCustomerDeployed)
108+
}
109+
102110
if s.Res.LifecycleDetails != nil {
103111
s.D.Set("lifecycle_details", *s.Res.LifecycleDetails)
104112
}

0 commit comments

Comments
 (0)