Skip to content

Commit

Permalink
Add NetworkPeering resource to Vmwareengine
Browse files Browse the repository at this point in the history
  • Loading branch information
swamitagupta committed Nov 21, 2023
1 parent 8364b77 commit c110e0f
Show file tree
Hide file tree
Showing 9 changed files with 422 additions and 10 deletions.
177 changes: 177 additions & 0 deletions mmv1/products/vmwareengine/NetworkPeering.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
# Copyright 2023 Google Inc.
# 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.

--- !ruby/object:Api::Resource
name: 'NetworkPeering'
base_url: 'projects/{{project}}/locations/global/networkPeering'
self_link: 'projects/{{project}}/locations/global/networkPeerings/{{name}}'
create_url: 'projects/{{project}}/locations/global/networkPeerings?networkPeeringId={{name}}'
update_verb: :PATCH
references: !ruby/object:Api::Resource::ReferenceLinks
api: 'https://cloud.google.com/compute/docs/reference/rest/v1/networks/addPeering'
description: |
Represents a network peering resource. Network peerings are global resources.
async: !ruby/object:Api::OpAsync
operation: !ruby/object:Api::OpAsync::Operation
path: "name"
base_url: "{{op_id}}"
wait_ms: 1000
result: !ruby/object:Api::OpAsync::Result
path: "response"
status: !ruby/object:Api::OpAsync::Status
path: "done"
complete: true
allowed:
- true
- false
error: !ruby/object:Api::OpAsync::Error
path: "error"
message: "message"

import_format: ["projects/{{project}}/locations/global/networkPeerings/{{name}}"]
autogen_async: true

examples:
- !ruby/object:Provider::Terraform::Examples
name: "vmware_engine_network_peering_ven"
primary_resource_id: "vmw-engine-network-peering"
vars:
name: "sample-network-peering"
test_env_vars:
region: :REGION
- !ruby/object:Provider::Terraform::Examples
name: "vmware_engine_network_peering_standard"
primary_resource_id: "vmw-engine-network-peering"
vars:
name: "sample-network-peering"
test_env_vars:
region: :REGION

parameters:
- !ruby/object:Api::Type::String
name: "name"
required: true
immutable: true
url_param_only: true
description: |
The ID of the Network Peering.
properties:
- !ruby/object:Api::Type::Time
name: 'createTime'
output: true
description: |
Creation time of this resource.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and
up to nine fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
- !ruby/object:Api::Type::Time
name: 'updateTime'
output: true
description: |
Last updated time of this resource.
A timestamp in RFC3339 UTC "Zulu" format, with nanosecond resolution and up to nine
fractional digits. Examples: "2014-10-02T15:01:23Z" and "2014-10-02T15:01:23.045123456Z".
- !ruby/object:Api::Type::String
name: 'peerNetwork'
required: true
description: |
The relative resource name of the network to peer with a standard VMware Engine network.
The provided network can be a consumer VPC network or another standard VMware Engine network.
- !ruby/object:Api::Type::Boolean
name: exportCustomRoutes
default_value: true
send_empty_value: true
description: |
True if custom routes are exported to the peered network; false otherwise.
- !ruby/object:Api::Type::Boolean
name: importCustomRoutes
default_value: true
send_empty_value: true
description: |
True if custom routes are imported from the peered network; false otherwise.
- !ruby/object:Api::Type::Boolean
name: exportCustomRoutesWithPublicIp
default_value: true
send_empty_value: true
description: |
True if all subnet routes with a public IP address range are exported; false otherwise.
- !ruby/object:Api::Type::Boolean
name: importCustomRoutesWithPublicIp
default_value: true
send_empty_value: true
description: |
True if custom routes are imported from the peered network; false otherwise.
- !ruby/object:Api::Type::Enum
name: 'state'
output: true
description: |
State of the network peering.
This field has a value of 'ACTIVE' when there's a matching configuration in the peer network.
New values may be added to this enum when appropriate.
values:
- :INACTIVE
- :ACTIVE
- :CREATING
- :DELETING

- !ruby/object:Api::Type::String
name: 'stateDetails'
output: true
description: |
Details about the current state of the network peering.
- !ruby/object:Api::Type::Enum
name: 'peerNetworkType'
required: true
description: |
The type of the network to peer with the VMware Engine network.
values:
- :STANDARD
- :VMWARE_ENGINE_NETWORK
- :PRIVATE_SERVICES_ACCESS
- :NETAPP_CLOUD_VOLUMES
- :THIRD_PARTY_SERVICE
- :DELL_POWERSCALE

- !ruby/object:Api::Type::String
name: 'uid'
output: true
description: |
System-generated unique identifier for the resource.
- !ruby/object:Api::Type::String
name: 'vmwareEngineNetwork'
required: true
description: |
The relative resource name of the VMware Engine network. Specify the name in the following form:
projects/{project}/locations/{location}/vmwareEngineNetworks/{vmwareEngineNetworkId} where {project}
can either be a project number or a project ID.
- !ruby/object:Api::Type::String
name: 'description'
description: |
User-provided description for this network peering.
- !ruby/object:Api::Type::String
name: 'vmwareEngineNetworkCanonical'
output: true
description: |
The canonical name of the VMware Engine network in the form:
projects/{project_number}/locations/{location}/vmwareEngineNetworks/{vmwareEngineNetworkId}
20 changes: 10 additions & 10 deletions mmv1/products/vmwareengine/NetworkPolicy.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -127,11 +127,11 @@ properties:
description: |
Network service that allows VMware workloads to access the internet.
properties:
- !ruby/object:Api::Type::Boolean
name: enabled
send_empty_value: true
description: |
True if the service is enabled; false otherwise.
- !ruby/object:Api::Type::Boolean
name: enabled
send_empty_value: true
description: |
True if the service is enabled; false otherwise.
- !ruby/object:Api::Type::Enum
name: 'state'
Expand All @@ -149,11 +149,11 @@ properties:
Network service that allows External IP addresses to be assigned to VMware workloads.
This service can only be enabled when internetAccess is also enabled.
properties:
- !ruby/object:Api::Type::Boolean
name: enabled
send_empty_value: true
description: |
True if the service is enabled; false otherwise.
- !ruby/object:Api::Type::Boolean
name: enabled
send_empty_value: true
description: |
True if the service is enabled; false otherwise.
- !ruby/object:Api::Type::Enum
name: 'state'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
resource "google_compute_network" "network-peering-vpc" {
name = "default-vpc"
}
resource "google_vmwareengine_network" "network-peering-nw" {
name = "default-nw-np"
location = "global"
type = "STANDARD"
}
resource "google_vmwareengine_network_peering" "<%= ctx[:primary_resource_id] %>" {
name = "<%= ctx[:vars]['name'] %>"
description = "Sample description"
peer_network = google_compute_network.network-peering-vpc.id
peer_network_type = "STANDARD"
vmware_engine_network = google_vmwareengine_network.network-peering-nw.id
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
resource "google_vmwareengine_network" "network-peering-nw" {
name = "default-np-nw"
location = "global"
type = "STANDARD"
}
resource "google_vmwareengine_network" "network-peering-peer-nw" {
name = "peer-np-nw"
location = "global"
type = "STANDARD"
}
resource "google_vmwareengine_network_peering" "<%= ctx[:primary_resource_id] %>" {
name = "<%= ctx[:vars]['name'] %>"
description = "Sample description"
vmware_engine_network = google_vmwareengine_network.network-peering-nw.id
peer_network = google_vmwareengine_network.network-peering-peer-nw.id
peer_network_type = "VMWARE_ENGINE_NETWORK"
export_custom_routes = false
import_custom_routes = false
export_custom_routes_with_public_ip = false
import_custom_routes_with_public_ip = false
}
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,8 @@ var handwrittenDatasources = map[string]*schema.Resource{
"google_vmwareengine_private_cloud": vmwareengine.DataSourceVmwareenginePrivateCloud(),
"google_vmwareengine_cluster": vmwareengine.DataSourceVmwareengineCluster(),
<% end -%>
"google_vmwareengine_network_policy": vmwareengine.DataSourceVmwareengineNetworkPolicy(),
"google_vmwareengine_network_peering": vmwareengine.DataSourceVmwareengineNetworkPeering(),
// ####### END handwritten datasources ###########
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package vmwareengine

import (
"fmt"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
transport_tpg "github.com/hashicorp/terraform-provider-google/google/transport"
)

func DataSourceVmwareengineNetworkPeering() *schema.Resource {

dsSchema := tpgresource.DatasourceSchemaFromResourceSchema(ResourceVmwareengineNetworkPeering().Schema)
tpgresource.AddRequiredFieldsToSchema(dsSchema, "name")
return &schema.Resource{
Read: dataSourceVmwareengineNetworkPeeringRead,
Schema: dsSchema,
}
}

func dataSourceVmwareengineNetworkPeeringRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*transport_tpg.Config)

// Store the ID now
id, err := tpgresource.ReplaceVars(d, config, "projects/{{project}}/locations/global/networkPeerings/{{name}}")
if err != nil {
return fmt.Errorf("Error constructing id: %s", err)
}
d.SetId(id)
err = resourceVmwareengineNetworkPeeringRead(d, meta)
if err != nil {
return err
}

if d.Id() == "" {
return fmt.Errorf("%s not found", id)
}
return nil
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package vmwareengine_test

import (
"testing"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-provider-google/google/acctest"
)

func TestAccDataSourceVmwareengineNetworkPeering_basic(t *testing.T) {
t.Parallel()

context := map[string]interface{}{
"random_suffix": acctest.RandString(t, 10),
}

acctest.VcrTest(t, resource.TestCase{
PreCheck: func() { acctest.AccTestPreCheck(t) },
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
CheckDestroy: testAccCheckVmwareengineNetworkPeeringDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccVmwareengineNetworkPeering_ds(context),
Check: resource.ComposeTestCheckFunc(
acctest.CheckDataSourceStateMatchesResourceStateWithIgnores("data.google_vmwareengine_network_peering.ds", "google_vmwareengine_network_peering.vmw-engine-network-peering", map[string]struct{}{}),
),
},
},
})
}

func testAccVmwareengineNetworkPeering_ds(context map[string]interface{}) string {
return acctest.Nprintf(`
resource "google_vmwareengine_network" "network-peering-nw" {
name = "tf-test-sample-nw%{random_suffix}"
location = "global"
type = "STANDARD"
}
resource "google_vmwareengine_network" "network-peering-peer-nw" {
name = "tf-test-peer-nw%{random_suffix}"
location = "global"
type = "STANDARD"
}
resource "google_vmwareengine_network_peering" "vmw-engine-network-peering" {
name = "tf-test-sample-network-peering%{random_suffix}"
description = "Sample description"
vmware_engine_network = google_vmwareengine_network.network-peering-nw.id
peer_network = google_vmwareengine_network.network-peering-peer-nw.id
peer_network_type = "VMWARE_ENGINE_NETWORK"
}
data "google_vmwareengine_network_peering" "ds" {
name = google_vmwareengine_network_peering.vmw-engine-network-peering.name
depends_on = [
google_vmwareengine_network_peering.vmw-engine-network-peering,
]
}
`, context)
}
Loading

0 comments on commit c110e0f

Please sign in to comment.