diff --git a/controllers/factory/vmagent.go b/controllers/factory/vmagent.go index 06bc63f2..885d184e 100644 --- a/controllers/factory/vmagent.go +++ b/controllers/factory/vmagent.go @@ -8,6 +8,7 @@ import ( "strconv" "strings" + "github.com/hashicorp/go-version" "gopkg.in/yaml.v2" victoriametricsv1beta1 "github.com/VictoriaMetrics/operator/api/v1beta1" @@ -359,7 +360,7 @@ func makeSpecForVMAgent(cr *victoriametricsv1beta1.VMAgent, c *config.BaseOperat }, } - configReloadArgs := buildConfigReloaderArgs(cr) + configReloadArgs := buildConfigReloaderArgs(cr, c.VMAgentDefault.ConfigReloadImage) if cr.Spec.RelabelConfig != nil || len(cr.Spec.InlineRelabelConfig) > 0 { args = append(args, "-remoteWrite.relabelConfig="+path.Join(RelabelingConfigDir, globalRelabelingName)) @@ -481,12 +482,27 @@ func addShardSettingsToVMAgent(shardNum, shardsCount int, dep *appsv1.Deployment } } -func buildConfigReloaderArgs(cr *victoriametricsv1beta1.VMAgent) []string { +func buildConfigReloaderArgs(cr *victoriametricsv1beta1.VMAgent, reloaderImage string) []string { + + // by default use watched-dir + // it should simplify parsing for latest and empty version tags. + dirsArg := "watched-dir" + idx := strings.LastIndex(reloaderImage, ":") + if idx > 0 { + imageTag := reloaderImage[idx+1:] + ver, err := version.NewVersion(imageTag) + if err != nil { + log.Error(err, "cannot parse vmagent config reloader version", "reloader-image", reloaderImage) + } else if ver.LessThan(version.Must(version.NewVersion("0.43.0"))) { + dirsArg = "rules-dir" + } + } + args := []string{ fmt.Sprintf("--reload-url=%s", cr.ReloadPathWithPort(cr.Spec.Port)), fmt.Sprintf("--config-file=%s", path.Join(vmAgentConfDir, configFilename)), fmt.Sprintf("--config-envsubst-file=%s", path.Join(vmAgentConOfOutDir, configEnvsubstFilename)), - "--rules-dir=" + RelabelingConfigDir, + fmt.Sprintf("--%s=%s", dirsArg, RelabelingConfigDir), } return args } diff --git a/controllers/factory/vmagent_test.go b/controllers/factory/vmagent_test.go index 15402b28..e3e54505 100644 --- a/controllers/factory/vmagent_test.go +++ b/controllers/factory/vmagent_test.go @@ -920,3 +920,53 @@ func TestCreateOrUpdateRelabelConfigsAssets(t *testing.T) { }) } } + +func Test_buildConfigReloaderArgs(t *testing.T) { + type args struct { + cr *victoriametricsv1beta1.VMAgent + reloaderImage string + } + tests := []struct { + name string + args args + want []string + }{ + { + name: "parse ok", + args: args{ + cr: &victoriametricsv1beta1.VMAgent{ + Spec: victoriametricsv1beta1.VMAgentSpec{Port: "8429"}, + }, + reloaderImage: "prometheus-config-reloader:latest", + }, + want: []string{ + "--reload-url=http://localhost:8429/-/reload", + "--config-file=/etc/vmagent/config/vmagent.yaml.gz", + "--config-envsubst-file=/etc/vmagent/config_out/vmagent.env.yaml", + "--watched-dir=/etc/vm/relabeling", + }, + }, + { + name: "old version", + args: args{ + cr: &victoriametricsv1beta1.VMAgent{ + Spec: victoriametricsv1beta1.VMAgentSpec{Port: "8429"}, + }, + reloaderImage: "quay.io/coreos/prometheus-config-reloader:v0.42.0", + }, + want: []string{ + "--reload-url=http://localhost:8429/-/reload", + "--config-file=/etc/vmagent/config/vmagent.yaml.gz", + "--config-envsubst-file=/etc/vmagent/config_out/vmagent.env.yaml", + "--rules-dir=/etc/vm/relabeling", + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got := buildConfigReloaderArgs(tt.args.cr, tt.args.reloaderImage) + + assert.Equal(t, tt.want, got) + }) + } +} diff --git a/docs/api.MD b/docs/api.MD index ab8e7f09..35364390 100644 --- a/docs/api.MD +++ b/docs/api.MD @@ -1026,8 +1026,8 @@ VMClusterStatus defines the observed state of VMCluster | Field | Description | Scheme | Required | | ----- | ----------- | ------ | -------- | -| updateFailCount | | int | true | -| lastSync | | string | false | +| updateFailCount | Deprecated. | int | true | +| lastSync | Deprecated. | string | false | | clusterStatus | | string | true | | reason | | string | false | @@ -1235,12 +1235,12 @@ StaticRef - user-defined routing host address. ## TargetRef -TargetRef describes target for user traffic forwarding. +TargetRef describes target for user traffic forwarding. one of target types can be chosen: crd or static per targetRef. user can define multiple targetRefs with different ref Types. | Field | Description | Scheme | Required | | ----- | ----------- | ------ | -------- | -| crd | CRD - one of operator crd targets one of crd or static can be configured per targetRef. | *[CRDRef](#crdref) | false | -| static | Static - user defined url for traffic forward. one of crd or static can be configured per targetRef. | *[StaticRef](#staticref) | false | +| crd | CRD describes exist operator's CRD object, operator generates access url based on CRD params. | *[CRDRef](#crdref) | false | +| static | Static - user defined url for traffic forward, for instance http://vmsingle:8429 | *[StaticRef](#staticref) | false | | paths | Paths - matched path to route. | []string | false | [Back to TOC](#table-of-contents) @@ -1274,9 +1274,9 @@ VMUserSpec defines the desired state of VMUser | Field | Description | Scheme | Required | | ----- | ----------- | ------ | -------- | -| username | UserName basic auth user name for accessing protected endpoint, metadata.name if missing. | *string | false | -| password | Password basic auth password for accessing protected endpoint, randomly generated and saved into secret with the same name as VMUser into same namespace | *string | false | -| passwordRef | PasswordRef allows to fetch password for given secret by its name and key name | *[v1.SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#secretkeyselector-v1-core) | false | +| username | UserName basic auth user name for accessing protected endpoint, will be replaced with metadata.name of VMUser if omitted. | *string | false | +| password | Password basic auth password for accessing protected endpoint. | *string | false | +| passwordRef | PasswordRef allows to fetch password from user-create secret by its name and key. | *[v1.SecretKeySelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.17/#secretkeyselector-v1-core) | false | | generatePassword | GeneratePassword instructs operator to generate password for user if spec.password if empty. | bool | false | | bearerToken | BearerToken Authorization header value for accessing protected endpoint. | *string | false | | targetRefs | TargetRefs - reference to endpoints, which user may access. | [][TargetRef](#targetref) | true | diff --git a/internal/config/config.go b/internal/config/config.go index 288cf38a..471d5d07 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -54,7 +54,7 @@ type BaseOperatorConf struct { VMAgentDefault struct { Image string `default:"victoriametrics/vmagent"` Version string `default:"v1.58.0"` - ConfigReloadImage string `default:"quay.io/coreos/prometheus-config-reloader:v0.42.0"` + ConfigReloadImage string `default:"quay.io/prometheus-operator/prometheus-config-reloader:v0.48.1"` Port string `default:"8429"` UseDefaultResources bool `default:"true"` Resource struct { @@ -183,7 +183,7 @@ type BaseOperatorConf struct { VMAuthDefault struct { Image string `default:"victoriametrics/vmauth"` Version string `default:"v1.60.0"` - ConfigReloadImage string `default:"quay.io/coreos/prometheus-config-reloader:v0.42.0"` + ConfigReloadImage string `default:"quay.io/prometheus-operator/prometheus-config-reloader:v0.48.1"` Port string `default:"8427"` UseDefaultResources bool `default:"true"` Resource struct { diff --git a/vars.MD b/vars.MD index fb17b202..28394844 100644 --- a/vars.MD +++ b/vars.MD @@ -1,5 +1,5 @@ # Auto Generated vars for package config -## updated at Sun May 9 14:56:53 UTC 2021 +## updated at Mon Jun 14 15:19:36 UTC 2021 | varible name | variable default value | variable required | variable description | @@ -18,7 +18,7 @@ | VM_VMALERTDEFAULT_CONFIGRELOADIMAGE | jimmidyson/configmap-reload:v0.3.0 | false | - | | VM_VMAGENTDEFAULT_IMAGE | victoriametrics/vmagent | false | - | | VM_VMAGENTDEFAULT_VERSION | v1.58.0 | false | - | -| VM_VMAGENTDEFAULT_CONFIGRELOADIMAGE | quay.io/coreos/prometheus-config-reloader:v0.42.0 | false | - | +| VM_VMAGENTDEFAULT_CONFIGRELOADIMAGE | quay.io/prometheus-operator/prometheus-config-reloader:v0.48.1 | false | - | | VM_VMAGENTDEFAULT_PORT | 8429 | false | - | | VM_VMAGENTDEFAULT_USEDEFAULTRESOURCES | true | false | - | | VM_VMAGENTDEFAULT_RESOURCE_LIMIT_MEM | 500Mi | false | - | @@ -82,6 +82,17 @@ | VM_VMBACKUP_RESOURCE_REQUEST_MEM | 200Mi | false | - | | VM_VMBACKUP_RESOURCE_REQUEST_CPU | 150m | false | - | | VM_VMBACKUP_LOGLEVEL | INFO | false | - | +| VM_VMAUTHDEFAULT_IMAGE | victoriametrics/vmauth | false | - | +| VM_VMAUTHDEFAULT_VERSION | v1.60.0 | false | - | +| VM_VMAUTHDEFAULT_CONFIGRELOADIMAGE | quay.io/prometheus-operator/prometheus-config-reloader:v0.48.1 | false | - | +| VM_VMAUTHDEFAULT_PORT | 8427 | false | - | +| VM_VMAUTHDEFAULT_USEDEFAULTRESOURCES | true | false | - | +| VM_VMAUTHDEFAULT_RESOURCE_LIMIT_MEM | 300Mi | false | - | +| VM_VMAUTHDEFAULT_RESOURCE_LIMIT_CPU | 200m | false | - | +| VM_VMAUTHDEFAULT_RESOURCE_REQUEST_MEM | 100Mi | false | - | +| VM_VMAUTHDEFAULT_RESOURCE_REQUEST_CPU | 50m | false | - | +| VM_VMAUTHDEFAULT_CONFIGRELOADERCPU | 100m | false | - | +| VM_VMAUTHDEFAULT_CONFIGRELOADERMEMORY | 25Mi | false | - | | VM_ENABLEDPROMETHEUSCONVERTER_PODMONITOR | true | false | - | | VM_ENABLEDPROMETHEUSCONVERTER_SERVICESCRAPE | true | false | - | | VM_ENABLEDPROMETHEUSCONVERTER_PROMETHEUSRULE | true | false | - |