diff --git a/pkg/appfile/appfile.go b/pkg/appfile/appfile.go index 17b769cd7..b2b0a0417 100644 --- a/pkg/appfile/appfile.go +++ b/pkg/appfile/appfile.go @@ -27,7 +27,7 @@ import ( "cuelang.org/go/cue/format" json2cue "cuelang.org/go/encoding/json" "github.com/crossplane/crossplane-runtime/pkg/fieldpath" - terraformapi "github.com/oam-dev/terraform-controller/api/v1beta1" + terraformapi "github.com/oam-dev/terraform-controller/api/v1beta2" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" kerrors "k8s.io/apimachinery/pkg/api/errors" @@ -64,7 +64,9 @@ const ( // WriteConnectionSecretToRefKey is used to create a secret for cloud resource connection WriteConnectionSecretToRefKey = "writeConnectionSecretToRef" // RegionKey is the region of a Cloud Provider - RegionKey = "region" + // It's used to override the region of a Cloud Provider + // Refer to https://github.com/oam-dev/terraform-controller/blob/master/api/v1beta2/configuration_types.go#L66 for details + RegionKey = "customRegion" // ProviderRefKey is the reference of a Provider ProviderRefKey = "providerRef" ) @@ -669,7 +671,7 @@ func generateTerraformConfigurationWorkload(wl *Workload, ns string) (*unstructu } configuration := terraformapi.Configuration{ - TypeMeta: metav1.TypeMeta{APIVersion: "terraform.core.oam.dev/v1beta1", Kind: "Configuration"}, + TypeMeta: metav1.TypeMeta{APIVersion: "terraform.core.oam.dev/v1beta2", Kind: "Configuration"}, ObjectMeta: metav1.ObjectMeta{ Name: wl.Name, Namespace: ns, @@ -682,8 +684,6 @@ func generateTerraformConfigurationWorkload(wl *Workload, ns string) (*unstructu switch wl.FullTemplate.Terraform.Type { case "hcl": configuration.Spec.HCL = wl.FullTemplate.Terraform.Configuration - case "json": - configuration.Spec.JSON = wl.FullTemplate.Terraform.Configuration case "remote": configuration.Spec.Remote = wl.FullTemplate.Terraform.Configuration configuration.Spec.Path = wl.FullTemplate.Terraform.Path diff --git a/pkg/appfile/appfile_test.go b/pkg/appfile/appfile_test.go index 6473def02..11ff08c1f 100644 --- a/pkg/appfile/appfile_test.go +++ b/pkg/appfile/appfile_test.go @@ -30,7 +30,7 @@ import ( "github.com/crossplane/crossplane-runtime/pkg/test" "github.com/google/go-cmp/cmp" terraformtypes "github.com/oam-dev/terraform-controller/api/types/crossplane-runtime" - terraformapi "github.com/oam-dev/terraform-controller/api/v1beta1" + terraformapi "github.com/oam-dev/terraform-controller/api/v1beta2" "github.com/pkg/errors" "gotest.tools/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -584,10 +584,6 @@ variable "password" { raw.Raw = data workload := terraformapi.Configuration{ - TypeMeta: metav1.TypeMeta{ - APIVersion: "terraform.core.oam.dev/v1beta1", - Kind: "Configuration", - }, ObjectMeta: metav1.ObjectMeta{ Labels: map[string]string{ "app.oam.dev/appRevision": "v1", @@ -902,7 +898,6 @@ func TestGenerateTerraformConfigurationWorkload(t *testing.T) { type args struct { writeConnectionSecretToRef *terraformtypes.SecretReference - json string hcl string remote string params map[string]interface{} @@ -917,16 +912,6 @@ func TestGenerateTerraformConfigurationWorkload(t *testing.T) { args args want want }{ - "json workload with secret": { - args: args{ - - json: "abc", - params: map[string]interface{}{"acl": "private", - "writeConnectionSecretToRef": map[string]interface{}{"name": "oss", "namespace": ""}}, - writeConnectionSecretToRef: &terraformtypes.SecretReference{Name: "oss", Namespace: "default"}, - }, - want: want{err: nil}}, - "valid hcl workload": { args: args{ hcl: "abc", @@ -999,19 +984,6 @@ func TestGenerateTerraformConfigurationWorkload(t *testing.T) { } configSpec.WriteConnectionSecretToReference = tc.args.writeConnectionSecretToRef } - if tc.args.json != "" { - template = &Template{ - Terraform: &common.Terraform{ - Configuration: tc.args.json, - Type: "json", - }, - } - configSpec = terraformapi.ConfigurationSpec{ - JSON: tc.args.json, - Variable: raw, - } - configSpec.WriteConnectionSecretToReference = tc.args.writeConnectionSecretToRef - } if tc.args.remote != "" { template = &Template{ Terraform: &common.Terraform{ @@ -1025,7 +997,7 @@ func TestGenerateTerraformConfigurationWorkload(t *testing.T) { } configSpec.WriteConnectionSecretToReference = tc.args.writeConnectionSecretToRef } - if tc.args.hcl == "" && tc.args.json == "" && tc.args.remote == "" { + if tc.args.hcl == "" && tc.args.remote == "" { template = &Template{ Terraform: &common.Terraform{}, } @@ -1061,7 +1033,7 @@ func TestGenerateTerraformConfigurationWorkload(t *testing.T) { if err == nil { tfConfiguration := terraformapi.Configuration{ - TypeMeta: metav1.TypeMeta{APIVersion: "terraform.core.oam.dev/v1beta1", Kind: "Configuration"}, + TypeMeta: metav1.TypeMeta{APIVersion: "terraform.core.oam.dev/v1beta2", Kind: "Configuration"}, ObjectMeta: metav1.ObjectMeta{Name: name, Namespace: ns}, Spec: configSpec, } diff --git a/pkg/cloudprovider/aliyun.go b/pkg/cloudprovider/aliyun.go index f80fae5a1..21d40a67e 100644 --- a/pkg/cloudprovider/aliyun.go +++ b/pkg/cloudprovider/aliyun.go @@ -26,7 +26,7 @@ import ( openapi "github.com/alibabacloud-go/darabonba-openapi/client" "github.com/alibabacloud-go/tea/tea" types "github.com/oam-dev/terraform-controller/api/types/crossplane-runtime" - v1beta12 "github.com/oam-dev/terraform-controller/api/v1beta1" + v1beta12 "github.com/oam-dev/terraform-controller/api/v1beta2" "github.com/pkg/errors" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/apply.go b/pkg/controller/core.oam.dev/v1alpha2/application/apply.go index ad91dbd28..5953af5f6 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/apply.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/apply.go @@ -21,9 +21,11 @@ import ( "sync" terraformtypes "github.com/oam-dev/terraform-controller/api/types" - terraformapi "github.com/oam-dev/terraform-controller/api/v1beta1" + terraforv1beta1 "github.com/oam-dev/terraform-controller/api/v1beta1" + terraforv1beta2 "github.com/oam-dev/terraform-controller/api/v1beta2" "github.com/pkg/errors" corev1 "k8s.io/api/core/v1" + kerrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "sigs.k8s.io/controller-runtime/pkg/client" @@ -32,11 +34,10 @@ import ( "github.com/oam-dev/kubevela/apis/core.oam.dev/v1beta1" "github.com/oam-dev/kubevela/apis/types" "github.com/oam-dev/kubevela/pkg/appfile" - "github.com/oam-dev/kubevela/pkg/oam" - monitorContext "github.com/oam-dev/kubevela/pkg/monitor/context" "github.com/oam-dev/kubevela/pkg/monitor/metrics" "github.com/oam-dev/kubevela/pkg/multicluster" + "github.com/oam-dev/kubevela/pkg/oam" "github.com/oam-dev/kubevela/pkg/resourcekeeper" ) @@ -233,34 +234,22 @@ func (h *AppHandler) collectHealthStatus(ctx context.Context, wl *appfile.Worklo ) if wl.CapabilityCategory == types.TerraformCategory { - var configuration terraformapi.Configuration + var configuration terraforv1beta2.Configuration if err := h.r.Client.Get(ctx, client.ObjectKey{Name: wl.Name, Namespace: namespace}, &configuration); err != nil { - return nil, false, errors.WithMessagef(err, "app=%s, comp=%s, check health error", appName, wl.Name) - } - - isLatest := func() bool { - if configuration.Status.ObservedGeneration != 0 { - if configuration.Status.ObservedGeneration != configuration.Generation { - return false + if kerrors.IsNotFound(err) { + var legacyConfiguration terraforv1beta1.Configuration + if err := h.r.Client.Get(ctx, client.ObjectKey{Name: wl.Name, Namespace: namespace}, &legacyConfiguration); err != nil { + return nil, false, errors.WithMessagef(err, "app=%s, comp=%s, check health error", appName, wl.Name) } + isHealth = setStatus(&status, legacyConfiguration.Status.ObservedGeneration, legacyConfiguration.Generation, + legacyConfiguration.GetLabels(), appRev.Name, legacyConfiguration.Status.Apply.State, legacyConfiguration.Status.Apply.Message) + } else { + return nil, false, errors.WithMessagef(err, "app=%s, comp=%s, check health error", appName, wl.Name) } - // Use AppRevision to avoid getting the configuration before the patch. - if v, ok := configuration.GetLabels()[oam.LabelAppRevision]; ok { - if v != appRev.Name { - return false - } - } - - return true - } - if !isLatest() || configuration.Status.Apply.State != terraformtypes.Available { - status.Healthy = false - isHealth = false } else { - status.Healthy = true - isHealth = true + isHealth = setStatus(&status, configuration.Status.ObservedGeneration, configuration.Generation, configuration.GetLabels(), + appRev.Name, configuration.Status.Apply.State, configuration.Status.Apply.Message) } - status.Message = configuration.Status.Apply.Message } else { if ok, err := wl.EvalHealth(wl.Ctx, h.r.Client, namespace); !ok || err != nil { isHealth = false @@ -296,6 +285,29 @@ func (h *AppHandler) collectHealthStatus(ctx context.Context, wl *appfile.Worklo return &status, isHealth, nil } +func setStatus(status *common.ApplicationComponentStatus, observedGeneration, generation int64, labels map[string]string, + appRevName string, state terraformtypes.ConfigurationState, message string) bool { + isLatest := func() bool { + if observedGeneration != 0 && observedGeneration != generation { + return false + } + // Use AppRevision to avoid getting the configuration before the patch. + if v, ok := labels[oam.LabelAppRevision]; ok { + if v != appRevName { + return false + } + } + return true + } + if !isLatest() || state != terraformtypes.Available { + status.Healthy = false + return false + } + status.Healthy = true + status.Message = message + return true +} + func generateScopeReference(scopes []appfile.Scope) []corev1.ObjectReference { var references []corev1.ObjectReference for _, scope := range scopes { diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/apply_test.go b/pkg/controller/core.oam.dev/v1alpha2/application/apply_test.go index b71e07033..ab6499942 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/apply_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/apply_test.go @@ -26,7 +26,7 @@ import ( "github.com/oam-dev/kubevela/pkg/oam/testutil" terraformtypes "github.com/oam-dev/terraform-controller/api/types" - terraformapi "github.com/oam-dev/terraform-controller/api/v1beta1" + terraformapi "github.com/oam-dev/terraform-controller/api/v1beta2" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" appsv1 "k8s.io/api/apps/v1" @@ -343,7 +343,7 @@ var _ = Describe("Test Application health check", func() { Spec: v1beta1.ComponentDefinitionSpec{ Workload: common.WorkloadTypeDescriptor{ Definition: common.WorkloadGVK{ - APIVersion: "terraform.core.oam.dev/v1beta1", + APIVersion: "terraform.core.oam.dev/v1beta2", Kind: "Configuration", }, }, diff --git a/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go b/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go index 1f295d210..e0d31c27a 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go +++ b/pkg/controller/core.oam.dev/v1alpha2/application/suite_test.go @@ -28,7 +28,7 @@ import ( "github.com/crossplane/crossplane-runtime/pkg/event" "github.com/go-logr/logr" - terraformv1beta1 "github.com/oam-dev/terraform-controller/api/v1beta1" + terraformv1beta2 "github.com/oam-dev/terraform-controller/api/v1beta2" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/pkg/errors" @@ -121,7 +121,7 @@ var _ = BeforeSuite(func(done Done) { err = scheme.AddToScheme(testScheme) Expect(err).NotTo(HaveOccurred()) - terraformv1beta1.AddToScheme(testScheme) + terraformv1beta2.AddToScheme(testScheme) crdv1.AddToScheme(testScheme) diff --git a/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope.go b/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope.go index 198f315d7..ae433d793 100644 --- a/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope.go +++ b/pkg/controller/core.oam.dev/v1alpha2/core/scopes/healthscope/healthscope.go @@ -37,7 +37,7 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" terraformtypes "github.com/oam-dev/terraform-controller/api/types" - terraformapi "github.com/oam-dev/terraform-controller/api/v1beta1" + terraformapi "github.com/oam-dev/terraform-controller/api/v1beta2" "github.com/oam-dev/kubevela/apis/core.oam.dev/v1alpha2" oamtypes "github.com/oam-dev/kubevela/apis/types" diff --git a/pkg/utils/common/common.go b/pkg/utils/common/common.go index 602216ebb..a1137ad6b 100644 --- a/pkg/utils/common/common.go +++ b/pkg/utils/common/common.go @@ -37,7 +37,7 @@ import ( "github.com/hashicorp/hcl/v2/hclparse" clustergatewayapi "github.com/oam-dev/cluster-gateway/pkg/apis/cluster/v1alpha1" "github.com/oam-dev/terraform-config-inspect/tfconfig" - terraformv1beta1 "github.com/oam-dev/terraform-controller/api/v1beta1" + terraformapi "github.com/oam-dev/terraform-controller/api/v1beta2" kruise "github.com/openkruise/kruise-api/apps/v1alpha1" errors2 "github.com/pkg/errors" certmanager "github.com/wonderflow/cert-manager-api/pkg/apis/certmanager/v1" @@ -93,7 +93,7 @@ func init() { _ = istioclientv1beta1.AddToScheme(Scheme) _ = certmanager.AddToScheme(Scheme) _ = kruise.AddToScheme(Scheme) - _ = terraformv1beta1.AddToScheme(Scheme) + _ = terraformapi.AddToScheme(Scheme) _ = ocmclusterv1alpha1.Install(Scheme) _ = ocmclusterv1.Install(Scheme) _ = ocmworkv1.Install(Scheme) diff --git a/references/cli/def.go b/references/cli/def.go index d419b9206..4b957abb0 100644 --- a/references/cli/def.go +++ b/references/cli/def.go @@ -352,7 +352,7 @@ func generateTerraformTypedComponentDefinition(cmd *cobra.Command, name, kind, p Spec: v1beta1.ComponentDefinitionSpec{ Workload: commontype.WorkloadTypeDescriptor{ Definition: commontype.WorkloadGVK{ - APIVersion: "terraform.core.oam.dev/v1beta1", + APIVersion: "terraform.core.oam.dev/v1beta2", Kind: "Configuration", }, }, diff --git a/references/cli/def_test.go b/references/cli/def_test.go index 12ec2fa85..bc18031fb 100644 --- a/references/cli/def_test.go +++ b/references/cli/def_test.go @@ -300,7 +300,7 @@ spec: namespace: default workload: definition: - apiVersion: terraform.core.oam.dev/v1beta1 + apiVersion: terraform.core.oam.dev/v1beta2 kind: Configuration status: {} `, @@ -327,7 +327,7 @@ spec: type: remote workload: definition: - apiVersion: terraform.core.oam.dev/v1beta1 + apiVersion: terraform.core.oam.dev/v1beta2 kind: Configuration status: {}`, }, diff --git a/test/e2e-addon-test/addon_test.go b/test/e2e-addon-test/addon_test.go index 7b26acb33..60bff71aa 100644 --- a/test/e2e-addon-test/addon_test.go +++ b/test/e2e-addon-test/addon_test.go @@ -88,7 +88,7 @@ var _ = Describe("Addon tests", func() { It("Addon Terraform is successfully enabled and Terraform application works", func() { By("Install Addon Terraform") - output, err := exec.Command("bash", "-c", "/tmp/vela addon enable terraform-alibaba ALICLOUD_ACCESS_KEY=xxx ALICLOUD_SECRET_KEY=yyy ALICLOUD_REGION=cn-beijing").Output() + output, err := exec.Command("bash", "-c", "/tmp/vela addon enable terraform-alibaba").Output() var ee *exec.ExitError if errors.As(err, &ee) { fmt.Println("exit code error:", string(ee.Stderr))