Skip to content
4 changes: 2 additions & 2 deletions .github/workflows/acctest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
name: Run acceptance tests
runs-on: ubuntu-latest
env:
ACC_TEST_SERVICE_ACCOUNT: ${{ secrets.ACC_TEST_SERVICE_ACCOUNT }}
E2E_TEST_ORG_OAUTH: ${{ secrets.E2E_TEST_ORG_OAUTH }}
GLOBAL_DEFAULT_API_SERVER: https://api.test.cloud.gcp.streamnative.dev
GLOBAL_DEFAULT_AUDIENCE: https://api.test.cloud.gcp.streamnative.dev
GLOBAL_DEFAULT_ISSUER: https://auth.test.cloud.gcp.streamnative.dev/
Expand Down Expand Up @@ -55,6 +55,6 @@ jobs:

- name: Run Acceptance Tests for the Provider
run: |
echo $ACC_TEST_SERVICE_ACCOUNT > $HOME/service_account.json
echo $E2E_TEST_ORG_OAUTH > $HOME/service_account.json
export KEY_FILE_PATH=$HOME/service_account.json
make testacc
12 changes: 5 additions & 7 deletions cloud/apikey_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,9 @@ func TestApiKey(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testResourceDataSourceApiKey(
"sndev",
orgId,
apiKeyGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
Check: resource.ComposeTestCheckFunc(
testCheckApiKeyExists("streamnative_apikey.test-terraform-api-key"),
Expand Down Expand Up @@ -111,16 +110,15 @@ func testCheckApiKeyExists(resourceName string) resource.TestCheckFunc {
}
}

func testResourceDataSourceApiKey(organization, name, poolName, poolNamespace, location, releaseChannel string) string {
func testResourceDataSourceApiKey(organization, name, cloudConnectionName, location, releaseChannel string) string {
return fmt.Sprintf(`
provider "streamnative" {
}
resource "streamnative_pulsar_instance" "test-api-key-pulsar-instance" {
organization = "%s"
name = "%s"
availability_mode = "zonal"
pool_name = "%s"
pool_namespace = "%s"
cloud_connection_name = "%s"
type = "dedicated"
}
resource "streamnative_pulsar_cluster" "test-api-key-pulsar-cluster" {
Expand Down Expand Up @@ -170,5 +168,5 @@ data "streamnative_apikey" "test-terraform-api-key" {
name = streamnative_apikey.test-terraform-api-key.name
private_key = streamnative_apikey.test-terraform-api-key.private_key
}
`, organization, name, poolName, poolNamespace, organization, name, name, location, releaseChannel, organization, name, name)
`, organization, name, cloudConnectionName, organization, name, name, location, releaseChannel, organization, name, name)
}
3 changes: 2 additions & 1 deletion cloud/data_source_apikey.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,12 @@ import (
"context"
"encoding/base64"
"fmt"
"github.com/streamnative/cloud-api-server/pkg/apis/cloud/v1alpha1"
"net/url"
"os"
"strings"

"github.com/streamnative/cloud-api-server/pkg/apis/cloud/v1alpha1"

"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/lestrrat-go/jwx/v2/jwa"
Expand Down
2 changes: 2 additions & 0 deletions cloud/provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ var (
testAccProvider *schema.Provider
testAccProviderFactories map[string]func() (*schema.Provider, error)
)
var orgId = "o-q77cp"
var cloudConnectionName = "terraform-provider-test-gcp"

func init() {
testAccProvider = Provider()
Expand Down
44 changes: 18 additions & 26 deletions cloud/pulsar_cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,9 @@ func TestPulsarCluster(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testResourceDataSourcePulsarCluster(
"sndev",
orgId,
clusterGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
Check: resource.ComposeTestCheckFunc(
testCheckPulsarClusterExists("streamnative_pulsar_cluster.test-pulsar-cluster"),
Expand All @@ -64,10 +63,9 @@ func TestPulsarClusterNoConfig(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testResourceDataSourcePulsarClusterWithoutConfig(
"sndev",
orgId,
clusterGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
Check: resource.ComposeTestCheckFunc(
testCheckPulsarClusterExists("streamnative_pulsar_cluster.test-pulsar-cluster"),
Expand Down Expand Up @@ -150,21 +148,19 @@ func TestPulsarClusterConfigDrift(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testResourceDataSourcePulsarCluster(
"sndev",
orgId,
clusterGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
Check: resource.ComposeTestCheckFunc(
testCheckPulsarClusterExists("streamnative_pulsar_cluster.test-pulsar-cluster"),
),
},
{
Config: testResourceDataSourcePulsarCluster(
"sndev",
orgId,
clusterGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
PlanOnly: true,
ExpectNonEmptyPlan: false,
Expand All @@ -184,21 +180,19 @@ func TestPulsarClusterNoConfigConfigDrift(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testResourceDataSourcePulsarClusterWithoutConfig(
"sndev",
orgId,
clusterGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
Check: resource.ComposeTestCheckFunc(
testCheckPulsarClusterExists("streamnative_pulsar_cluster.test-pulsar-cluster"),
),
},
{
Config: testResourceDataSourcePulsarClusterWithoutConfig(
"sndev",
orgId,
clusterGeneratedName,
"shared-gcp-prod",
"streamnative",
cloudConnectionName,
"us-central1", "rapid"),
PlanOnly: true,
ExpectNonEmptyPlan: false,
Expand All @@ -207,16 +201,15 @@ func TestPulsarClusterNoConfigConfigDrift(t *testing.T) {
})
}

func testResourceDataSourcePulsarCluster(organization, name, poolName, poolNamespace, location, releaseChannel string) string {
func testResourceDataSourcePulsarCluster(organization, name, cloudEnvironmentName, location, releaseChannel string) string {
return fmt.Sprintf(`
provider "streamnative" {
}
resource "streamnative_pulsar_instance" "test-pulsar-instance" {
organization = "%s"
name = "%s"
availability_mode = "zonal"
pool_name = "%s"
pool_namespace = "%s"
cloud_connection_name = "%s"
type = "dedicated"
}
resource "streamnative_pulsar_cluster" "test-pulsar-cluster" {
Expand Down Expand Up @@ -249,19 +242,18 @@ data "streamnative_pulsar_cluster" "test-pulsar-cluster" {
organization = streamnative_pulsar_cluster.test-pulsar-cluster.organization
name = streamnative_pulsar_cluster.test-pulsar-cluster.name
}
`, organization, name, poolName, poolNamespace, organization, name, name, location, releaseChannel)
`, organization, name, cloudEnvironmentName, organization, name, name, location, releaseChannel)
}

func testResourceDataSourcePulsarClusterWithoutConfig(organization, name, poolName, poolNamespace, location, releaseChannel string) string {
func testResourceDataSourcePulsarClusterWithoutConfig(organization, name, cloudEnvironmentName, location, releaseChannel string) string {
return fmt.Sprintf(`
provider "streamnative" {
}
resource "streamnative_pulsar_instance" "test-pulsar-instance" {
organization = "%s"
name = "%s"
availability_mode = "zonal"
pool_name = "%s"
pool_namespace = "%s"
cloud_connection_name = "%s"
type = "dedicated"
}
resource "streamnative_pulsar_cluster" "test-pulsar-cluster" {
Expand All @@ -277,5 +269,5 @@ data "streamnative_pulsar_cluster" "test-pulsar-cluster" {
organization = streamnative_pulsar_cluster.test-pulsar-cluster.organization
name = streamnative_pulsar_cluster.test-pulsar-cluster.name
}
`, organization, name, poolName, poolNamespace, organization, name, name, location, releaseChannel)
`, organization, name, cloudEnvironmentName, organization, name, name, location, releaseChannel)
}
12 changes: 5 additions & 7 deletions cloud/pulsar_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,10 @@ func TestPulsarInstance(t *testing.T) {
Steps: []resource.TestStep{
{
Config: testResourceDataSourcePulsarInstance(
"sndev",
orgId,
"terraform-test-pulsar-instance-b",
"zonal",
"shared-gcp-prod",
"streamnative"),
cloudConnectionName),
Check: resource.ComposeTestCheckFunc(
testCheckPulsarInstanceExists("streamnative_pulsar_instance.test-pulsar-instance"),
),
Expand Down Expand Up @@ -116,21 +115,20 @@ func testCheckPulsarInstanceExists(name string) resource.TestCheckFunc {
}

func testResourceDataSourcePulsarInstance(
organization string, name string, availabilityMode string, poolName string, poolNamespace string) string {
organization string, name string, availabilityMode string, cloudConnectionName string) string {
return fmt.Sprintf(`
provider "streamnative" {
}
resource "streamnative_pulsar_instance" "test-pulsar-instance" {
organization = "%s"
name = "%s"
availability_mode = "%s"
pool_name = "%s"
pool_namespace = "%s"
cloud_connection_name = "%s"
}
data "streamnative_pulsar_instance" "test-pulsar-instance" {
depends_on = [streamnative_pulsar_instance.test-pulsar-instance]
name = streamnative_pulsar_instance.test-pulsar-instance.name
organization = streamnative_pulsar_instance.test-pulsar-instance.organization
}
`, organization, name, availabilityMode, poolName, poolNamespace)
`, organization, name, availabilityMode, cloudConnectionName)
}
26 changes: 13 additions & 13 deletions cloud/resource_pulsar_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ func resourcePulsarCluster() *schema.Resource {
// Auto generate the name, so we don't need to check the diff.
return nil
}
if diff.HasChanges([]string{"organization", "name", "instance_name", "location", "pool_member_name", "release_channel"}...) {
if diff.HasChanges([]string{"organization", "name", "instance_name", "location", "cloud_environment_name", "release_channel"}...) {
return fmt.Errorf("ERROR_UPDATE_PULSAR_CLUSTER: " +
"The pulsar cluster organization, name, instance_name, location, pool_member_name does not support updates, please recreate it")
"The pulsar cluster organization, name, instance_name, location, cloud_environment_name does not support updates, please recreate it")
}
return nil
},
Expand Down Expand Up @@ -93,10 +93,10 @@ func resourcePulsarCluster() *schema.Resource {
Description: descriptions["location"],
ValidateFunc: validateNotBlank,
},
"pool_member_name": {
"cloud_environment_name": {
Type: schema.TypeString,
Optional: true,
Description: descriptions["pool_member_name"],
Description: descriptions["cloud_environment_name"],
ValidateFunc: validateNotBlank,
},
"release_channel": {
Expand Down Expand Up @@ -363,11 +363,11 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
name := d.Get("name").(string)
displayName := d.Get("display_name").(string)
instanceName := d.Get("instance_name").(string)
pool_member_name := d.Get("pool_member_name").(string)
cloudEnvironmentName := d.Get("cloud_environment_name").(string)
location := d.Get("location").(string)
if pool_member_name == "" && location == "" {
if cloudEnvironmentName == "" && location == "" {
return diag.FromErr(fmt.Errorf("ERROR_CREATE_PULSAR_CLUSTER: " +
"either pool_member_name or location must be provided"))
"either cloud_environment_name or location must be provided"))
}
releaseChannel := d.Get("release_channel").(string)
bookieReplicas := int32(d.Get("bookie_replicas").(int))
Expand Down Expand Up @@ -396,17 +396,17 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
brokerMem := resource.NewQuantity(int64(computeUnit*8*1024*1024*1024), resource.DecimalSI)
bookieMem := resource.NewQuantity(int64(storageUnit*8*1024*1024*1024), resource.DecimalSI)

if pool_member_name != "" {
if cloudEnvironmentName != "" {
// only allow BYOC user to select specific pool member
poolMember, err := clientSet.CloudV1alpha1().
PoolMembers(namespace).
Get(ctx, pool_member_name, metav1.GetOptions{})
Get(ctx, cloudEnvironmentName, metav1.GetOptions{})
if err != nil {
return diag.FromErr(fmt.Errorf("ERROR_GET_POOL_MEMBER_ON_CREATE_PULSAR_CLUSTER: %w", err))
return diag.FromErr(fmt.Errorf("ERROR_GET_CLOUD_ENVIRONMENT_ON_CREATE_PULSAR_CLUSTER: %w", err))
}
if poolMember.Spec.PoolName != pulsarInstance.Spec.PoolRef.Name {
return diag.FromErr(fmt.Errorf("ERROR_CREATE_PULSAR_CLUSTER: " +
"the pool member does not belong to the pool which pulsar instance is attached"))
"the cloud environment does not belong to the cloud connection that pulsar instance is attached to"))
}
}

Expand Down Expand Up @@ -487,9 +487,9 @@ func resourcePulsarClusterCreate(ctx context.Context, d *schema.ResourceData, me
if !ursaEnabled && !pulsarInstance.IsServerless() {
pulsarCluster.Spec.BookKeeper = bookkeeper
}
if pool_member_name != "" {
if cloudEnvironmentName != "" {
pulsarCluster.Spec.PoolMemberRef = cloudv1alpha1.PoolMemberReference{
Name: pool_member_name,
Name: cloudEnvironmentName,
Namespace: namespace,
}
} else {
Expand Down
12 changes: 6 additions & 6 deletions cloud/resource_pulsar_gateway.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,10 @@ func resourcePulsarGateway() *schema.Resource {
Description: descriptions["gateway_access"],
ValidateFunc: validation.StringInSlice([]string{"public", "private"}, false),
},
"pool_member_name": {
"cloud_environment_name": {
Type: schema.TypeString,
Required: true,
Description: descriptions["pool_member_name"],
Description: descriptions["cloud_environment_name"],
ValidateFunc: validateNotBlank,
},
"private_service": {
Expand Down Expand Up @@ -123,16 +123,16 @@ func resourcePulsarGatewayCreate(ctx context.Context, d *schema.ResourceData, me
namespace := d.Get("organization").(string)
name := d.Get("name").(string)
access := d.Get("access").(string)
poolMemberName := d.Get("pool_member_name").(string)
cloudEnvironmentName := d.Get("cloud_environment_name").(string)
waitForCompletion := d.Get("wait_for_completion").(bool)

clientSet, err := getClientSet(getFactoryFromMeta(meta))
if err != nil {
return diag.FromErr(fmt.Errorf("ERROR_INIT_CLIENT_ON_PULSAR_GATEWAY: %w", err))
}
_, err = clientSet.CloudV1alpha1().PoolMembers(namespace).Get(ctx, poolMemberName, metav1.GetOptions{})
_, err = clientSet.CloudV1alpha1().PoolMembers(namespace).Get(ctx, cloudEnvironmentName, metav1.GetOptions{})
if err != nil {
return diag.FromErr(fmt.Errorf("ERROR_GET_POOL_MEMBER_ON_CREATE_PULSAR_GATEWAY: %w", err))
return diag.FromErr(fmt.Errorf("ERROR_GET_CLOUD_ENVIRONMENT_ON_CREATE_PULSAR_GATEWAY: %w", err))
}
pulsarGateway := &cloudv1alpha1.PulsarGateway{
TypeMeta: metav1.TypeMeta{
Expand All @@ -149,7 +149,7 @@ func resourcePulsarGatewayCreate(ctx context.Context, d *schema.ResourceData, me
},
PoolMemberRef: cloudv1alpha1.PoolMemberReference{
Namespace: namespace,
Name: poolMemberName,
Name: cloudEnvironmentName,
},
},
}
Expand Down
Loading
Loading