Skip to content

Commit dcbc8e4

Browse files
richardambridgeMaxrovr
authored andcommitted
Added - Support for Management Agent: Centralized management of Named Credentials from Management Agent Cloud Service
1 parent 1a98800 commit dcbc8e4

File tree

32 files changed

+2314
-41
lines changed

32 files changed

+2314
-41
lines changed
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
# Overview
22
This is a Terraform configuration that creates the Management Agent service on Oracle Cloud Infrastructure.
33

4-
The Terraform code is used to create a Resource Manager stack, that creates the required resources and configures the application on the created resources.
4+
The Terraform code is used to create a Resource Manager stack, that creates the required resources and configures the application on the created resources.
5+
6+
See notes in https://confluence.oraclecorp.com/confluence/display/MGMTAGENT/How+to+complete+TERSI+tickets

examples/management_agent/management_agent.tf

Lines changed: 59 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,24 @@
1-
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
1+
// Copyright (c) 2017, 2025, Oracle and/or its affiliates. All rights reserved.
22
// Licensed under the Mozilla Public License v2.0
33

4+
5+
6+
///
7+
///
8+
// If running tests against devtest-ashburn, set is_production_test = false
9+
///
10+
locals {
11+
is_production_test = false
12+
13+
oca_devtest_ashburn = base64encode(file("${path.module}/oca_to_devtest-ashburn.txt"))
14+
oca_devtest_london = base64encode(file("${path.module}/oca_to_devtest-london.txt"))
15+
16+
cloud_init_script = local.is_production_test ? null : local.oca_devtest_london
17+
plugin_name = local.is_production_test ? "Logging Analytics" : "Test Plugin Ric"
18+
}
19+
20+
21+
422
variable "tenancy_ocid" {}
523
variable "region" {}
624
variable "compartment_ocid" {}
@@ -17,40 +35,50 @@ provider "oci" {
1735
auth = "SecurityToken"
1836
config_file_profile = "terraform-federation-test"
1937
region = var.region
38+
# version = "7.2.0"
2039
}
2140

22-
41+
// Agent simulator must be running against the compartment, see https://confluence.oraclecorp.com/confluence/display/MGMTAGENT/How+to+complete+TERSI+tickets
42+
// Otherwise this will fail with
43+
# Error: Invalid index
44+
#
45+
# on management_agent.tf line 114, in data "oci_management_agent_management_agent_plugins" "test_management_agent_plugins":
46+
# 114: agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
47+
# |----------------
48+
# | data.oci_management_agent_management_agents.find_agent.management_agents is empty list of object
2349
data "oci_management_agent_management_agents" "find_agent" {
24-
#Required
2550
compartment_id = var.compartment_ocid
26-
27-
#Optional
2851
availability_status = "ACTIVE"
2952
display_name = "terraformTest"
3053
state = "ACTIVE"
3154
}
3255

33-
resource "oci_management_agent_management_agent" "test_management_agent" {
34-
#Required
35-
managed_agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
3656

37-
#Optional
38-
deploy_plugins_id = [data.oci_management_agent_management_agent_plugins.test_management_agent_plugins.management_agent_plugins.1.id]
39-
freeform_tags = {"tagKey":"tagValue"}
57+
// Find a plugin in the MACS environment
58+
data "oci_management_agent_management_agent_plugins" "test_management_agent_plugins" {
59+
compartment_id = var.compartment_ocid
60+
display_name = local.plugin_name
61+
agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
4062

4163
}
4264

65+
// Using one of the simulator agents, add it to terraform and deploy plugin to it
66+
// also modify the freeform tags
67+
resource "oci_management_agent_management_agent" "test_management_agent" {
68+
managed_agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
69+
deploy_plugins_id = [data.oci_management_agent_management_agent_plugins.test_management_agent_plugins.management_agent_plugins.0.id]
70+
freeform_tags = {"tagKey":"tagValue"}
71+
}
4372

73+
// Test data load of all agents with subtree
4474
data "oci_management_agent_management_agents" "test_management_agents_subtree" {
45-
#Required
4675
compartment_id = var.root_compartment_ocid
47-
48-
#Optional
4976
access_level = "ACCESSIBLE"
5077
availability_status = "ACTIVE"
5178
compartment_id_in_subtree = true
5279
}
5380

81+
// Test data load for specific agent
5482
data "oci_management_agent_management_agents" "test_management_agents" {
5583
#Required
5684
compartment_id = var.compartment_ocid
@@ -69,65 +97,53 @@ data "oci_management_agent_management_agents" "test_management_agents" {
6997
version = ["210101.0101"]
7098
}
7199

100+
// Create an install key
101+
// NOTE this can fail if the time_expires is older than today.. you may have to change this value
72102
resource "oci_management_agent_management_agent_install_key" "test_management_agent_install_key" {
73-
#Required
74103
compartment_id = var.compartment_ocid
75-
76-
#Optional
77104
allowed_key_install_count = "200"
78105
display_name = "terraformTest"
79-
time_expires = "2026-02-23T17:27:44.398Z"
106+
time_expires = "2026-02-19T17:27:44.398Z"
80107
}
81108

109+
// Create unlimited install key
82110
resource "oci_management_agent_management_agent_install_key" "test_management_agent_install_key_unlimited" {
83-
#Required
84111
compartment_id = var.compartment_ocid
85-
86-
#Optional
87112
display_name = "terraformTest"
88113
is_unlimited = true
89114
}
90115

116+
// Test data load for install keys
91117
data "oci_management_agent_management_agent_install_keys" "test_management_agent_install_keys" {
92-
#Required
93118
compartment_id = var.compartment_ocid
94119
}
95120

121+
// Test data load for specific install key
96122
data "oci_management_agent_management_agent_install_key" "test_management_agent_install_key" {
97-
#Required
98123
management_agent_install_key_id = oci_management_agent_management_agent_install_key.test_management_agent_install_key.id
99124
}
100125

101-
data "oci_management_agent_management_agent_plugins" "test_management_agent_plugins" {
102-
#Required
103-
compartment_id = var.compartment_ocid
104-
105-
#Optional
106-
agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
107-
108-
}
109-
126+
// Test data load for agent images
110127
data "oci_management_agent_management_agent_images" "test_management_agent_images" {
111-
#Required
112128
compartment_id = var.compartment_ocid
113129
}
114130

131+
// Load history agent
115132
data "oci_management_agent_management_agent_available_histories" "test_management_agent_available_histories" {
116-
#Required
117133
management_agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
118-
119-
#Optional
120134
time_availability_status_ended_greater_than = "2020-01-15T01:01:01.000Z"
121135
time_availability_status_started_less_than = "2029-09-28T01:01:01.000Z"
122136

123137
}
124138

139+
// load auto upgrade config for tenancy
125140
data "oci_management_agent_management_agent_get_auto_upgradable_config" "test_management_agent_get_auto_upgradable_config" {
126-
#Required
127141
compartment_id = var.tenancy_ocid
128142
}
129143

130144

145+
// Create a compute instance, with OCA plugin enabled for management agent
146+
// If in devtest-ashburn, add cloud-init script to change endpoint of OCA
131147
resource "oci_core_instance" "instance" {
132148

133149
agent_config {
@@ -139,7 +155,11 @@ resource "oci_core_instance" "instance" {
139155
}
140156

141157
}
158+
metadata = {
159+
user_data = local.cloud_init_script
160+
#ssh_authorized_keys = file("/Users/rambridg/.oci/macs_test_host1.pub")
142161

162+
}
143163
availability_domain = data.oci_identity_availability_domains.ads.availability_domains[0].name
144164
compartment_id = var.compartment_ocid
145165
shape = var.shape
@@ -157,7 +177,6 @@ resource "oci_core_instance" "instance" {
157177
subnet_id = var.subnet
158178
display_name = "example_vnic"
159179
assign_public_ip = false
160-
skip_source_dest_check = false
161180
}
162181

163182
display_name = "Terraform example Agent host"
@@ -174,14 +193,15 @@ data "oci_core_images" "compute_images" {
174193
}
175194

176195

196+
// Find the management agent created by the compute instance, it will wait for 10 minutes for the agent to appear
177197
data "oci_management_agent_management_agents" "find_compute_agent" {
178198
compartment_id = var.compartment_ocid
179199
host_id = oci_core_instance.instance.id
180200
wait_for_host_id = 10
181201
}
182202

183203

184-
204+
// Update the OCA management agent, deploy plugin and update freeform tags
185205
resource "oci_management_agent_management_agent" "test_compute_management_agent" {
186206
freeform_tags = { "TestingTag" : "TestingValue" }
187207
managed_agent_id = data.oci_management_agent_management_agents.find_compute_agent.management_agents[0].id
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
// For named credential, we need a vault and secrets to setup
2+
// In macs tenancies, S1 tests will have created secrets in the macs s1_c2 compartment, using vault in root compartment
3+
4+
data "oci_identity_compartments" "compartments" {
5+
compartment_id = var.tenancy_ocid
6+
compartment_id_in_subtree = true
7+
access_level = "ANY"
8+
name = "macs_test_s1_c1"
9+
}
10+
11+
data "oci_vault_secrets" "find_secrets" {
12+
compartment_id = lookup(data.oci_identity_compartments.compartments.compartments[0], "id")
13+
}
14+
15+
output "secrets" {
16+
value=data.oci_vault_secrets.find_secrets
17+
}
18+
19+
output "comp" {
20+
value = data.oci_identity_compartments.compartments
21+
}
22+
23+
resource "oci_management_agent_named_credential" "test_named_credential" {
24+
management_agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
25+
name = "nc_from_example_tf"
26+
description = "desc"
27+
properties {
28+
#Required
29+
name = "DBUserName"
30+
value = data.oci_vault_secrets.find_secrets.secrets[0].id
31+
value_category = "SECRET_IDENTIFIER"
32+
}
33+
properties {
34+
#Required
35+
name = "DBPassword"
36+
value = data.oci_vault_secrets.find_secrets.secrets[0].id
37+
value_category = "SECRET_IDENTIFIER"
38+
}
39+
type = "DBCREDS"
40+
41+
}
42+
43+
data "oci_management_agent_named_credentials" "test_named_credentials" {
44+
management_agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
45+
name = ["name"]
46+
state = ["ACTIVE"]
47+
type = ["DBCREDS"]
48+
}
49+
50+
data "oci_management_agent_management_agent_named_credentials_metadata" "test_nc_metadata" {
51+
management_agent_id = data.oci_management_agent_management_agents.find_agent.management_agents[0].id
52+
compartment_id = var.compartment_ocid
53+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
Content-Type: multipart/mixed; boundary=MIMEBOUNDARY
2+
MIME-Version: 1.0
3+
4+
--MIMEBOUNDARY
5+
Content-Transfer-Encoding: 7bit
6+
Content-Type: text/cloud-config
7+
Mime-Version: 1.0
8+
9+
#cloud-config
10+
11+
output: {all: '| tee -a /var/log/cloud-init-output.log'}
12+
13+
logcfg: |
14+
[formatters]
15+
format=%(levelname)s %(asctime)s::: %(message)s
16+
17+
18+
--MIMEBOUNDARY
19+
Content-Transfer-Encoding: 7bit
20+
Content-Type: text/x-shellscript
21+
Mime-Version: 1.0
22+
23+
#!/bin/bash
24+
set -e
25+
set -o pipefail
26+
27+
echo "MACS OCA update sleep"
28+
29+
sleep 120
30+
echo "MACS OCA update begins"
31+
32+
sudo systemctl stop oracle-cloud-agent
33+
# clean up the old management agent
34+
cd /var/log/oracle-cloud-agent/plugins/
35+
rm -rf oci-managementagent/*
36+
cd /var/lib/oracle-cloud-agent/plugins/
37+
rm -rf oci-managementagent/*
38+
39+
# Define the file path
40+
FILE="/etc/oracle-cloud-agent/agent.yml"
41+
FILE2="/etc/oracle-cloud-agent/plugins/oci-managementagent/config.yml"
42+
43+
awk '
44+
/^\s*oci-managementagent:/ { in_block = 1 }4
45+
in_block && /^\s*args:\s*\[\]/ {
46+
sub(/\[\]/, "[ \"-staging\" ]")
47+
in_block = 0
48+
}
49+
/^$/ { in_block = 0 }
50+
{ print }
51+
' "$FILE" > temp_file && mv temp_file "$FILE"
52+
53+
cat > "$FILE2" <<EOF
54+
logDir: /var/log/oracle-cloud-agent/plugins/oci-managementagent
55+
macsEnvOverrideHost: https://management-agent-devtest.us-ashburn-1.oci.oc-test.com
56+
objStoreOverrideHost: https://objectstorage.us-ashburn-1.oraclecloud.com
57+
EOF
58+
59+
echo "restarting"
60+
sudo systemctl start oracle-cloud-agent
61+
62+
--MIMEBOUNDARY--
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
Content-Type: multipart/mixed; boundary=MIMEBOUNDARY
2+
MIME-Version: 1.0
3+
4+
--MIMEBOUNDARY
5+
Content-Transfer-Encoding: 7bit
6+
Content-Type: text/cloud-config
7+
Mime-Version: 1.0
8+
9+
#cloud-config
10+
11+
output: {all: '| tee -a /var/log/cloud-init-output.log'}
12+
13+
logcfg: |
14+
[formatters]
15+
format=%(levelname)s %(asctime)s::: %(message)s
16+
17+
18+
--MIMEBOUNDARY
19+
Content-Transfer-Encoding: 7bit
20+
Content-Type: text/x-shellscript
21+
Mime-Version: 1.0
22+
23+
#!/bin/bash
24+
set -e
25+
set -o pipefail
26+
27+
echo "MACS OCA update sleep"
28+
29+
sleep 120
30+
echo "MACS OCA update begins"
31+
32+
sudo systemctl stop oracle-cloud-agent
33+
# clean up the old management agent
34+
cd /var/log/oracle-cloud-agent/plugins/
35+
rm -rf oci-managementagent/*
36+
cd /var/lib/oracle-cloud-agent/plugins/
37+
rm -rf oci-managementagent/*
38+
39+
# Define the file path
40+
FILE="/etc/oracle-cloud-agent/agent.yml"
41+
FILE2="/etc/oracle-cloud-agent/plugins/oci-managementagent/config.yml"
42+
43+
awk '
44+
/^\s*oci-managementagent:/ { in_block = 1 }4
45+
in_block && /^\s*args:\s*\[\]/ {
46+
sub(/\[\]/, "[ \"-staging\" ]")
47+
in_block = 0
48+
}
49+
/^$/ { in_block = 0 }
50+
{ print }
51+
' "$FILE" > temp_file && mv temp_file "$FILE"
52+
53+
cat > "$FILE2" <<EOF
54+
logDir: /var/log/oracle-cloud-agent/plugins/oci-managementagent
55+
macsEnvOverrideHost: https://management-agent-devtest.uk-london-1.oci.oraclecloud.com
56+
objStoreOverrideHost: https://objectstorage.uk-london-1.oraclecloud.com
57+
EOF
58+
59+
echo "restarting"
60+
sudo systemctl start oracle-cloud-agent
61+
62+
--MIMEBOUNDARY--

0 commit comments

Comments
 (0)