Skip to content

Commit

Permalink
adds version detection for vmagent config reloader (#263)
Browse files Browse the repository at this point in the history
* adds version detection for vmagent config reloader
it must fix breaking changes from prometheus-config-reloader
#259

* naming fix
  • Loading branch information
f41gh7 authored Jun 14, 2021
1 parent 74437b7 commit 2807048
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 15 deletions.
22 changes: 19 additions & 3 deletions controllers/factory/vmagent.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"strconv"
"strings"

"github.com/hashicorp/go-version"
"gopkg.in/yaml.v2"

victoriametricsv1beta1 "github.com/VictoriaMetrics/operator/api/v1beta1"
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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
}
Expand Down
50 changes: 50 additions & 0 deletions controllers/factory/vmagent_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
})
}
}
16 changes: 8 additions & 8 deletions docs/api.MD
Original file line number Diff line number Diff line change
Expand Up @@ -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 |

Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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 |
Expand Down
4 changes: 2 additions & 2 deletions internal/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down
15 changes: 13 additions & 2 deletions vars.MD
Original file line number Diff line number Diff line change
@@ -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 |
Expand All @@ -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 | - |
Expand Down Expand Up @@ -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 | - |
Expand Down

0 comments on commit 2807048

Please sign in to comment.