Commit 0fd59455 by Carl Bergquist Committed by GitHub

Fixes linting errors in datasource provisioning. (#23515)

parent 6f1a25a8
...@@ -731,7 +731,8 @@ jobs: ...@@ -731,7 +731,8 @@ jobs:
golangci-lint run -v -j 4 --config scripts/go/configs/ci/.golangci.yml -E unconvert -E unused \ golangci-lint run -v -j 4 --config scripts/go/configs/ci/.golangci.yml -E unconvert -E unused \
-E varcheck -E goconst -E errcheck -E staticcheck ./pkg/... -E varcheck -E goconst -E errcheck -E staticcheck ./pkg/...
./scripts/go/bin/revive -formatter stylish -config ./scripts/go/configs/revive.toml ./pkg/... ./scripts/go/bin/revive -formatter stylish -config ./scripts/go/configs/revive.toml ./pkg/...
./scripts/go/bin/revive -formatter stylish ./pkg/services/alerting/... ./scripts/go/bin/revive -formatter stylish ./pkg/services/alerting/...
./scripts/go/bin/revive -formatter stylish ./pkg/services/provisioning/datasources/...
./scripts/go/bin/gosec -quiet -exclude=G104,G107,G108,G201,G202,G204,G301,G304,G401,G402,G501 \ ./scripts/go/bin/gosec -quiet -exclude=G104,G107,G108,G201,G202,G204,G301,G304,G401,G402,G501 \
-conf=./scripts/go/configs/gosec.json ./pkg/... -conf=./scripts/go/configs/gosec.json ./pkg/...
......
...@@ -84,7 +84,8 @@ revive-alerting: scripts/go/bin/revive ...@@ -84,7 +84,8 @@ revive-alerting: scripts/go/bin/revive
@echo "lint alerting via revive" @echo "lint alerting via revive"
@scripts/go/bin/revive \ @scripts/go/bin/revive \
-formatter stylish \ -formatter stylish \
./pkg/services/alerting/... ./pkg/services/alerting/... \
./pkg/services/provisioning/datasources/...
scripts/go/bin/golangci-lint: scripts/go/go.mod scripts/go/bin/golangci-lint: scripts/go/go.mod
@cd scripts/go; \ @cd scripts/go; \
......
...@@ -133,10 +133,6 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ= ...@@ -133,10 +133,6 @@ github.com/gosimple/slug v1.4.2 h1:jDmprx3q/9Lfk4FkGZtvzDQ9Cj9eAmsjzeQGp24PeiQ=
github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0= github.com/gosimple/slug v1.4.2/go.mod h1:ER78kgg1Mv0NQGlXiDe57DpCyfbNywXXZ9mIorhxAf0=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag= github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4 h1:SPdxCL9BChFTlyi0Khv64vdCW4TMna8+sxL7+Chx+Ag=
github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To= github.com/grafana/grafana-plugin-model v0.0.0-20190930120109-1fc953a61fb4/go.mod h1:nc0XxBzjeGcrMltCDw269LoWF9S8ibhgxolCdA1R8To=
github.com/grafana/grafana-plugin-sdk-go v0.39.0 h1:tPP83HeY9gN4q8O3tYka1vd82OQ/3CFdwx4QeEhJ0Qc=
github.com/grafana/grafana-plugin-sdk-go v0.39.0/go.mod h1:xRhfTHl+Dkqf2Py6Lr4pcHBC5pm8/N+IwPJ0R/iAHMM=
github.com/grafana/grafana-plugin-sdk-go v0.40.1-0.20200409163705-fd66aee09a52 h1:WEfl8G9uHk31r3pnAmsK+NRcHGpXnXauWmbhic3KuVU=
github.com/grafana/grafana-plugin-sdk-go v0.40.1-0.20200409163705-fd66aee09a52/go.mod h1:xRhfTHl+Dkqf2Py6Lr4pcHBC5pm8/N+IwPJ0R/iAHMM=
github.com/grafana/grafana-plugin-sdk-go v0.42.0 h1:8oiAQa/uABBFT70GDAv3BnqHfdMOxy/P8SzYVURJH6Y= github.com/grafana/grafana-plugin-sdk-go v0.42.0 h1:8oiAQa/uABBFT70GDAv3BnqHfdMOxy/P8SzYVURJH6Y=
github.com/grafana/grafana-plugin-sdk-go v0.42.0/go.mod h1:xRhfTHl+Dkqf2Py6Lr4pcHBC5pm8/N+IwPJ0R/iAHMM= github.com/grafana/grafana-plugin-sdk-go v0.42.0/go.mod h1:xRhfTHl+Dkqf2Py6Lr4pcHBC5pm8/N+IwPJ0R/iAHMM=
github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1IS89MMtcF0EpcVMZtjKfPRp4MEmt/aTs= github.com/hashicorp/go-hclog v0.0.0-20180709165350-ff2cf002a8dd h1:rNuUHR+CvK1IS89MMtcF0EpcVMZtjKfPRp4MEmt/aTs=
......
...@@ -14,8 +14,8 @@ type configReader struct { ...@@ -14,8 +14,8 @@ type configReader struct {
log log.Logger log log.Logger
} }
func (cr *configReader) readConfig(path string) ([]*DatasourcesAsConfig, error) { func (cr *configReader) readConfig(path string) ([]*configs, error) {
var datasources []*DatasourcesAsConfig var datasources []*configs
files, err := ioutil.ReadDir(path) files, err := ioutil.ReadDir(path)
if err != nil { if err != nil {
...@@ -44,34 +44,34 @@ func (cr *configReader) readConfig(path string) ([]*DatasourcesAsConfig, error) ...@@ -44,34 +44,34 @@ func (cr *configReader) readConfig(path string) ([]*DatasourcesAsConfig, error)
return datasources, nil return datasources, nil
} }
func (cr *configReader) parseDatasourceConfig(path string, file os.FileInfo) (*DatasourcesAsConfig, error) { func (cr *configReader) parseDatasourceConfig(path string, file os.FileInfo) (*configs, error) {
filename, _ := filepath.Abs(filepath.Join(path, file.Name())) filename, _ := filepath.Abs(filepath.Join(path, file.Name()))
yamlFile, err := ioutil.ReadFile(filename) yamlFile, err := ioutil.ReadFile(filename)
if err != nil { if err != nil {
return nil, err return nil, err
} }
var apiVersion *ConfigVersion var apiVersion *configVersion
err = yaml.Unmarshal(yamlFile, &apiVersion) err = yaml.Unmarshal(yamlFile, &apiVersion)
if err != nil { if err != nil {
return nil, err return nil, err
} }
if apiVersion == nil { if apiVersion == nil {
apiVersion = &ConfigVersion{ApiVersion: 0} apiVersion = &configVersion{APIVersion: 0}
} }
if apiVersion.ApiVersion > 0 { if apiVersion.APIVersion > 0 {
v1 := &DatasourcesAsConfigV1{log: cr.log} v1 := &configsV1{log: cr.log}
err = yaml.Unmarshal(yamlFile, v1) err = yaml.Unmarshal(yamlFile, v1)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return v1.mapToDatasourceFromConfig(apiVersion.ApiVersion), nil return v1.mapToDatasourceFromConfig(apiVersion.APIVersion), nil
} }
var v0 *DatasourcesAsConfigV0 var v0 *configsV0
err = yaml.Unmarshal(yamlFile, &v0) err = yaml.Unmarshal(yamlFile, &v0)
if err != nil { if err != nil {
return nil, err return nil, err
...@@ -79,10 +79,10 @@ func (cr *configReader) parseDatasourceConfig(path string, file os.FileInfo) (*D ...@@ -79,10 +79,10 @@ func (cr *configReader) parseDatasourceConfig(path string, file os.FileInfo) (*D
cr.log.Warn("[Deprecated] the datasource provisioning config is outdated. please upgrade", "filename", filename) cr.log.Warn("[Deprecated] the datasource provisioning config is outdated. please upgrade", "filename", filename)
return v0.mapToDatasourceFromConfig(apiVersion.ApiVersion), nil return v0.mapToDatasourceFromConfig(apiVersion.APIVersion), nil
} }
func validateDefaultUniqueness(datasources []*DatasourcesAsConfig) error { func validateDefaultUniqueness(datasources []*configs) error {
defaultCount := map[int64]int{} defaultCount := map[int64]int{}
for i := range datasources { for i := range datasources {
if datasources[i].Datasources == nil { if datasources[i].Datasources == nil {
...@@ -90,21 +90,21 @@ func validateDefaultUniqueness(datasources []*DatasourcesAsConfig) error { ...@@ -90,21 +90,21 @@ func validateDefaultUniqueness(datasources []*DatasourcesAsConfig) error {
} }
for _, ds := range datasources[i].Datasources { for _, ds := range datasources[i].Datasources {
if ds.OrgId == 0 { if ds.OrgID == 0 {
ds.OrgId = 1 ds.OrgID = 1
} }
if ds.IsDefault { if ds.IsDefault {
defaultCount[ds.OrgId] = defaultCount[ds.OrgId] + 1 defaultCount[ds.OrgID] = defaultCount[ds.OrgID] + 1
if defaultCount[ds.OrgId] > 1 { if defaultCount[ds.OrgID] > 1 {
return ErrInvalidConfigToManyDefault return ErrInvalidConfigToManyDefault
} }
} }
} }
for _, ds := range datasources[i].DeleteDatasources { for _, ds := range datasources[i].DeleteDatasources {
if ds.OrgId == 0 { if ds.OrgID == 0 {
ds.OrgId = 1 ds.OrgID = 1
} }
} }
} }
......
...@@ -159,7 +159,7 @@ func TestDatasourceAsConfig(t *testing.T) { ...@@ -159,7 +159,7 @@ func TestDatasourceAsConfig(t *testing.T) {
dsCfg := cfg[0] dsCfg := cfg[0]
So(dsCfg.ApiVersion, ShouldEqual, 1) So(dsCfg.APIVersion, ShouldEqual, 1)
validateDatasource(dsCfg) validateDatasource(dsCfg)
validateDeleteDatasources(dsCfg) validateDeleteDatasources(dsCfg)
...@@ -187,26 +187,28 @@ func TestDatasourceAsConfig(t *testing.T) { ...@@ -187,26 +187,28 @@ func TestDatasourceAsConfig(t *testing.T) {
dsCfg := cfg[0] dsCfg := cfg[0]
So(dsCfg.ApiVersion, ShouldEqual, 0) So(dsCfg.APIVersion, ShouldEqual, 0)
validateDatasource(dsCfg) validateDatasource(dsCfg)
validateDeleteDatasources(dsCfg) validateDeleteDatasources(dsCfg)
}) })
}) })
} }
func validateDeleteDatasources(dsCfg *DatasourcesAsConfig) {
func validateDeleteDatasources(dsCfg *configs) {
So(len(dsCfg.DeleteDatasources), ShouldEqual, 1) So(len(dsCfg.DeleteDatasources), ShouldEqual, 1)
deleteDs := dsCfg.DeleteDatasources[0] deleteDs := dsCfg.DeleteDatasources[0]
So(deleteDs.Name, ShouldEqual, "old-graphite3") So(deleteDs.Name, ShouldEqual, "old-graphite3")
So(deleteDs.OrgId, ShouldEqual, 2) So(deleteDs.OrgID, ShouldEqual, 2)
} }
func validateDatasource(dsCfg *DatasourcesAsConfig) {
func validateDatasource(dsCfg *configs) {
ds := dsCfg.Datasources[0] ds := dsCfg.Datasources[0]
So(ds.Name, ShouldEqual, "name") So(ds.Name, ShouldEqual, "name")
So(ds.Type, ShouldEqual, "type") So(ds.Type, ShouldEqual, "type")
So(ds.Access, ShouldEqual, models.DS_ACCESS_PROXY) So(ds.Access, ShouldEqual, models.DS_ACCESS_PROXY)
So(ds.OrgId, ShouldEqual, 2) So(ds.OrgID, ShouldEqual, 2)
So(ds.Url, ShouldEqual, "url") So(ds.URL, ShouldEqual, "url")
So(ds.User, ShouldEqual, "user") So(ds.User, ShouldEqual, "user")
So(ds.Password, ShouldEqual, "password") So(ds.Password, ShouldEqual, "password")
So(ds.Database, ShouldEqual, "database") So(ds.Database, ShouldEqual, "database")
...@@ -218,15 +220,15 @@ func validateDatasource(dsCfg *DatasourcesAsConfig) { ...@@ -218,15 +220,15 @@ func validateDatasource(dsCfg *DatasourcesAsConfig) {
So(ds.Editable, ShouldBeTrue) So(ds.Editable, ShouldBeTrue)
So(ds.Version, ShouldEqual, 10) So(ds.Version, ShouldEqual, 10)
So(len(ds.JsonData), ShouldBeGreaterThan, 2) So(len(ds.JSONData), ShouldBeGreaterThan, 2)
So(ds.JsonData["graphiteVersion"], ShouldEqual, "1.1") So(ds.JSONData["graphiteVersion"], ShouldEqual, "1.1")
So(ds.JsonData["tlsAuth"], ShouldEqual, true) So(ds.JSONData["tlsAuth"], ShouldEqual, true)
So(ds.JsonData["tlsAuthWithCACert"], ShouldEqual, true) So(ds.JSONData["tlsAuthWithCACert"], ShouldEqual, true)
So(len(ds.SecureJsonData), ShouldBeGreaterThan, 2) So(len(ds.SecureJSONData), ShouldBeGreaterThan, 2)
So(ds.SecureJsonData["tlsCACert"], ShouldEqual, "MjNOcW9RdkbUDHZmpco2HCYzVq9dE+i6Yi+gmUJotq5CDA==") So(ds.SecureJSONData["tlsCACert"], ShouldEqual, "MjNOcW9RdkbUDHZmpco2HCYzVq9dE+i6Yi+gmUJotq5CDA==")
So(ds.SecureJsonData["tlsClientCert"], ShouldEqual, "ckN0dGlyMXN503YNfjTcf9CV+GGQneN+xmAclQ==") So(ds.SecureJSONData["tlsClientCert"], ShouldEqual, "ckN0dGlyMXN503YNfjTcf9CV+GGQneN+xmAclQ==")
So(ds.SecureJsonData["tlsClientKey"], ShouldEqual, "ZkN4aG1aNkja/gKAB1wlnKFIsy2SRDq4slrM0A==") So(ds.SecureJSONData["tlsClientKey"], ShouldEqual, "ZkN4aG1aNkja/gKAB1wlnKFIsy2SRDq4slrM0A==")
} }
type fakeRepository struct { type fakeRepository struct {
......
...@@ -11,14 +11,20 @@ import ( ...@@ -11,14 +11,20 @@ import (
) )
var ( var (
// ErrInvalidConfigToManyDefault indicates that multiple datasource in the provisioning files
// contains more than one datasource marked as default.
ErrInvalidConfigToManyDefault = errors.New("datasource.yaml config is invalid. Only one datasource per organization can be marked as default") ErrInvalidConfigToManyDefault = errors.New("datasource.yaml config is invalid. Only one datasource per organization can be marked as default")
) )
// Provision scans a directory for provisioning config files
// and provisions the datasource in those files.
func Provision(configDirectory string) error { func Provision(configDirectory string) error {
dc := newDatasourceProvisioner(log.New("provisioning.datasources")) dc := newDatasourceProvisioner(log.New("provisioning.datasources"))
return dc.applyChanges(configDirectory) return dc.applyChanges(configDirectory)
} }
// DatasourceProvisioner is responsible for provisioning datasources based on
// configuration read by the `configReader`
type DatasourceProvisioner struct { type DatasourceProvisioner struct {
log log.Logger log log.Logger
cfgProvider *configReader cfgProvider *configReader
...@@ -31,13 +37,13 @@ func newDatasourceProvisioner(log log.Logger) DatasourceProvisioner { ...@@ -31,13 +37,13 @@ func newDatasourceProvisioner(log log.Logger) DatasourceProvisioner {
} }
} }
func (dc *DatasourceProvisioner) apply(cfg *DatasourcesAsConfig) error { func (dc *DatasourceProvisioner) apply(cfg *configs) error {
if err := dc.deleteDatasources(cfg.DeleteDatasources); err != nil { if err := dc.deleteDatasources(cfg.DeleteDatasources); err != nil {
return err return err
} }
for _, ds := range cfg.Datasources { for _, ds := range cfg.Datasources {
cmd := &models.GetDataSourceByNameQuery{OrgId: ds.OrgId, Name: ds.Name} cmd := &models.GetDataSourceByNameQuery{OrgId: ds.OrgID, Name: ds.Name}
err := bus.Dispatch(cmd) err := bus.Dispatch(cmd)
if err != nil && err != models.ErrDataSourceNotFound { if err != nil && err != models.ErrDataSourceNotFound {
return err return err
...@@ -76,9 +82,9 @@ func (dc *DatasourceProvisioner) applyChanges(configPath string) error { ...@@ -76,9 +82,9 @@ func (dc *DatasourceProvisioner) applyChanges(configPath string) error {
return nil return nil
} }
func (dc *DatasourceProvisioner) deleteDatasources(dsToDelete []*DeleteDatasourceConfig) error { func (dc *DatasourceProvisioner) deleteDatasources(dsToDelete []*deleteDatasourceConfig) error {
for _, ds := range dsToDelete { for _, ds := range dsToDelete {
cmd := &models.DeleteDataSourceByNameCommand{OrgId: ds.OrgId, Name: ds.Name} cmd := &models.DeleteDataSourceByNameCommand{OrgId: ds.OrgID, Name: ds.Name}
if err := bus.Dispatch(cmd); err != nil { if err := bus.Dispatch(cmd); err != nil {
return err return err
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment