This is an automated email from the ASF dual-hosted git repository.
zhangjintao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
The following commit(s) were added to refs/heads/master by this push:
new 3f76ae46 feat: Add prefer_name into ApisixClusterConfig (#1519)
3f76ae46 is described below
commit 3f76ae4685b92bb1339f8b02e7e359fa1e216746
Author: Fatpa <[email protected]>
AuthorDate: Fri Mar 3 17:05:07 2023 +0800
feat: Add prefer_name into ApisixClusterConfig (#1519)
---
pkg/kube/apisix/apis/config/v2/types.go | 2 ++
.../apisix/translation/apisix_cluster_config.go | 8 ++++--
.../translation/apisix_cluster_config_test.go | 30 ++++++++++++++++++++++
samples/deploy/crd/v1/ApisixClusterConfig.yaml | 2 ++
test/e2e/scaffold/cluster_config.go | 30 +++++++++++++++++++---
test/e2e/suite-features/global_rule.go | 13 ++++++++--
6 files changed, 77 insertions(+), 8 deletions(-)
diff --git a/pkg/kube/apisix/apis/config/v2/types.go
b/pkg/kube/apisix/apis/config/v2/types.go
index 1f92785c..6cef777e 100644
--- a/pkg/kube/apisix/apis/config/v2/types.go
+++ b/pkg/kube/apisix/apis/config/v2/types.go
@@ -313,6 +313,8 @@ type ApisixClusterMonitoringConfig struct {
type ApisixClusterPrometheusConfig struct {
// Enable means whether enable Prometheus or not.
Enable bool `json:"enable" yaml:"enable"`
+ // PreferName means whether prints Route/Service name or ID in
Prometheus metric
+ PreferName bool `json:"prefer_name" yaml:"prefer_name"`
}
// ApisixClusterSkywalkingConfig is the config for using Skywalking in APISIX
Cluster.
diff --git a/pkg/providers/apisix/translation/apisix_cluster_config.go
b/pkg/providers/apisix/translation/apisix_cluster_config.go
index d6d840be..7b7cab2b 100644
--- a/pkg/providers/apisix/translation/apisix_cluster_config.go
+++ b/pkg/providers/apisix/translation/apisix_cluster_config.go
@@ -21,7 +21,9 @@ import (
apisixv1
"github.com/apache/apisix-ingress-controller/pkg/types/apisix/v1"
)
-type prometheusPluginConfig struct{}
+type prometheusPluginConfig struct {
+ PreferName bool `json:"prefer_name,omitempty"`
+}
type skywalkingPluginConfig struct {
SampleRatio float64 `json:"sample_ratio,omitempty"`
@@ -55,7 +57,9 @@ func (t *translator) TranslateClusterConfigV2(acc
*configv2.ApisixClusterConfig)
if acc.Spec.Monitoring != nil {
if acc.Spec.Monitoring.Prometheus.Enable {
- globalRule.Plugins["prometheus"] =
&prometheusPluginConfig{}
+ globalRule.Plugins["prometheus"] =
&prometheusPluginConfig{
+ PreferName:
acc.Spec.Monitoring.Prometheus.PreferName,
+ }
}
if acc.Spec.Monitoring.Skywalking.Enable {
globalRule.Plugins["skywalking"] =
&skywalkingPluginConfig{
diff --git a/pkg/providers/apisix/translation/apisix_cluster_config_test.go
b/pkg/providers/apisix/translation/apisix_cluster_config_test.go
index 38361150..13c28f40 100644
--- a/pkg/providers/apisix/translation/apisix_cluster_config_test.go
+++ b/pkg/providers/apisix/translation/apisix_cluster_config_test.go
@@ -21,6 +21,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"github.com/apache/apisix-ingress-controller/pkg/id"
+ configv2
"github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2"
configv2beta3
"github.com/apache/apisix-ingress-controller/pkg/kube/apisix/apis/config/v2beta3"
)
@@ -51,3 +52,32 @@ func TestTranslateClusterConfig(t *testing.T) {
assert.Equal(t, gr.Plugins["prometheus"], &prometheusPluginConfig{})
assert.Equal(t, gr.Plugins["skywalking"],
&skywalkingPluginConfig{SampleRatio: 0.5})
}
+
+func TestTranslateClusterConfigV2(t *testing.T) {
+ tr := &translator{}
+
+ acc := &configv2.ApisixClusterConfig{
+ TypeMeta: metav1.TypeMeta{},
+ ObjectMeta: metav1.ObjectMeta{
+ Name: "qa-apisix",
+ },
+ Spec: configv2.ApisixClusterConfigSpec{
+ Monitoring: &configv2.ApisixClusterMonitoringConfig{
+ Prometheus:
configv2.ApisixClusterPrometheusConfig{
+ Enable: true,
+ PreferName: true,
+ },
+ Skywalking:
configv2.ApisixClusterSkywalkingConfig{
+ Enable: true,
+ SampleRatio: 0.5,
+ },
+ },
+ },
+ }
+ gr, err := tr.TranslateClusterConfigV2(acc)
+ assert.Nil(t, err, "translating ApisixClusterConfigV2")
+ assert.Equal(t, gr.ID, id.GenID("qa-apisix"), "checking global_rule id")
+ assert.Len(t, gr.Plugins, 2)
+ assert.Equal(t, gr.Plugins["prometheus"],
&prometheusPluginConfig{PreferName: true})
+ assert.Equal(t, gr.Plugins["skywalking"],
&skywalkingPluginConfig{SampleRatio: 0.5})
+}
diff --git a/samples/deploy/crd/v1/ApisixClusterConfig.yaml
b/samples/deploy/crd/v1/ApisixClusterConfig.yaml
index cc817fc2..e289da07 100644
--- a/samples/deploy/crd/v1/ApisixClusterConfig.yaml
+++ b/samples/deploy/crd/v1/ApisixClusterConfig.yaml
@@ -99,6 +99,8 @@ spec:
properties:
enable:
type: boolean
+ prefer_name:
+ type: boolean
skywalking:
type: object
properties:
diff --git a/test/e2e/scaffold/cluster_config.go
b/test/e2e/scaffold/cluster_config.go
index d3594728..5624005c 100644
--- a/test/e2e/scaffold/cluster_config.go
+++ b/test/e2e/scaffold/cluster_config.go
@@ -20,6 +20,7 @@ import (
"fmt"
"time"
+ "github.com/apache/apisix-ingress-controller/pkg/config"
"github.com/gruntwork-io/terratest/modules/k8s"
)
@@ -27,6 +28,17 @@ var (
_apisixClusterConfigTemplate = `
apiVersion: %s
kind: ApisixClusterConfig
+metadata:
+ name: %s
+spec:
+ monitoring:
+ prometheus:
+ enable: %v
+ prefer_name: %v
+`
+ _apisixClusterConfigV2beta3Template = `
+apiVersion: %s
+kind: ApisixClusterConfig
metadata:
name: %s
spec:
@@ -37,8 +49,13 @@ spec:
)
// NewApisixClusterConfig creates an ApisixClusterConfig CRD
-func (s *Scaffold) NewApisixClusterConfig(name string, enable bool) error {
- cc := fmt.Sprintf(_apisixClusterConfigTemplate,
s.opts.ApisixResourceVersion, name, enable)
+func (s *Scaffold) NewApisixClusterConfig(name string, enable bool,
enablePreferName bool) error {
+ var cc string
+ if s.opts.ApisixResourceVersion == config.ApisixV2beta3 {
+ cc = fmt.Sprintf(_apisixClusterConfigV2beta3Template,
s.opts.ApisixResourceVersion, name, enable)
+ } else {
+ cc = fmt.Sprintf(_apisixClusterConfigTemplate,
s.opts.ApisixResourceVersion, name, enable, enablePreferName)
+ }
if err := s.CreateResourceFromString(cc); err != nil {
return err
}
@@ -47,8 +64,13 @@ func (s *Scaffold) NewApisixClusterConfig(name string,
enable bool) error {
}
// DeleteApisixClusterConfig removes an ApisixClusterConfig CRD
-func (s *Scaffold) DeleteApisixClusterConfig(name string, enable bool) error {
- cc := fmt.Sprintf(_apisixClusterConfigTemplate,
s.opts.ApisixResourceVersion, name, enable)
+func (s *Scaffold) DeleteApisixClusterConfig(name string, enable bool,
enablePreferName bool) error {
+ var cc string
+ if s.opts.ApisixResourceVersion == config.ApisixV2beta3 {
+ cc = fmt.Sprintf(_apisixClusterConfigV2beta3Template,
s.opts.ApisixResourceVersion, name, enable)
+ } else {
+ cc = fmt.Sprintf(_apisixClusterConfigTemplate,
s.opts.ApisixResourceVersion, name, enable, enablePreferName)
+ }
if err := k8s.KubectlDeleteFromStringE(s.t, s.kubectlOptions, cc); err
!= nil {
return err
}
diff --git a/test/e2e/suite-features/global_rule.go
b/test/e2e/suite-features/global_rule.go
index 95979911..b457ddd9 100644
--- a/test/e2e/suite-features/global_rule.go
+++ b/test/e2e/suite-features/global_rule.go
@@ -19,6 +19,7 @@ import (
"net/http"
"time"
+ "github.com/apache/apisix-ingress-controller/pkg/config"
"github.com/apache/apisix-ingress-controller/pkg/id"
ginkgo "github.com/onsi/ginkgo/v2"
"github.com/stretchr/testify/assert"
@@ -32,10 +33,10 @@ var _ = ginkgo.Describe("suite-features:
ApisixClusterConfig", func() {
ginkgo.It("enable prometheus", func() {
adminSvc, adminPort := s.ApisixAdminServiceAndPort()
- assert.Nil(ginkgo.GinkgoT(),
s.NewApisixClusterConfig("default", true), "creating ApisixClusterConfig")
+ assert.Nil(ginkgo.GinkgoT(),
s.NewApisixClusterConfig("default", true, true), "creating ApisixClusterConfig")
defer func() {
- assert.Nil(ginkgo.GinkgoT(),
s.DeleteApisixClusterConfig("default", true))
+ assert.Nil(ginkgo.GinkgoT(),
s.DeleteApisixClusterConfig("default", true, true))
}()
// Wait until the ApisixClusterConfig create event was
delivered.
@@ -78,6 +79,14 @@ spec:
resp.Body().Contains("# HELP apisix_etcd_modify_indexes
Etcd modify index for APISIX keys")
resp.Body().Contains("# HELP apisix_etcd_reachable
Config server etcd reachable from APISIX, 0 is unreachable")
resp.Body().Contains("# HELP apisix_node_info Info of
APISIX node")
+
+ time.Sleep(3 * time.Second)
+
+ if s.ApisixResourceVersion() != config.ApisixV2beta3 {
+ resp1 :=
s.NewAPISIXClient().GET("/apisix/prometheus/metrics").Expect()
+ resp1.Status(http.StatusOK)
+ resp1.Body().Contains("public-api")
+ }
})
}