diff --git a/cmd/influx/pkg_test.go b/cmd/influx/pkg_test.go index 9010f1c46f..6879cf925d 100644 --- a/cmd/influx/pkg_test.go +++ b/cmd/influx/pkg_test.go @@ -92,8 +92,9 @@ func TestCmdPkg(t *testing.T) { var pkg pkger.Pkg pkg.Objects = append(pkg.Objects, pkger.Object{ - Type: pkger.KindBucket, - Metadata: pkger.Metadata{Name: "bucket1"}, + APIVersion: pkger.APIVersion, + Type: pkger.KindBucket, + Metadata: pkger.Metadata{Name: "bucket1"}, }) return &pkg, nil }, @@ -207,8 +208,9 @@ func TestCmdPkg(t *testing.T) { } name := rc.Kind.String() + strconv.Itoa(int(rc.ID)) pkg.Objects = append(pkg.Objects, pkger.Object{ - Type: rc.Kind, - Metadata: pkger.Metadata{Name: name}, + APIVersion: pkger.APIVersion, + Type: rc.Kind, + Metadata: pkger.Metadata{Name: name}, }) } diff --git a/pkger/clone_resource.go b/pkger/clone_resource.go index 96c421ccfb..37bbc37cd2 100644 --- a/pkger/clone_resource.go +++ b/pkger/clone_resource.go @@ -62,9 +62,10 @@ func bucketToObject(bkt influxdb.Bucket, name string) Object { name = bkt.Name } k := Object{ - Type: KindBucket, - Metadata: Metadata{Name: name}, - Spec: make(Resource), + APIVersion: APIVersion, + Type: KindBucket, + Metadata: Metadata{Name: name}, + Spec: make(Resource), } assignNonZeroStrings(k.Spec, map[string]string{fieldDescription: bkt.Description}) if bkt.RetentionPeriod != 0 { @@ -78,7 +79,8 @@ func checkToObject(ch influxdb.Check, name string) Object { name = ch.GetName() } k := Object{ - Metadata: Metadata{Name: name}, + APIVersion: APIVersion, + Metadata: Metadata{Name: name}, Spec: Resource{ fieldStatus: influxdb.TaskStatusActive, }, @@ -381,8 +383,9 @@ func DashboardToObject(dash influxdb.Dashboard, name string) Object { } return Object{ - Type: KindDashboard, - Metadata: Metadata{Name: name}, + APIVersion: APIVersion, + Type: KindDashboard, + Metadata: Metadata{Name: name}, Spec: Resource{ fieldDescription: dash.Description, fieldDashCharts: charts, @@ -395,9 +398,10 @@ func labelToObject(l influxdb.Label, name string) Object { name = l.Name } k := Object{ - Type: KindLabel, - Metadata: Metadata{Name: name}, - Spec: make(Resource), + APIVersion: APIVersion, + Type: KindLabel, + Metadata: Metadata{Name: name}, + Spec: make(Resource), } assignNonZeroStrings(k.Spec, map[string]string{ @@ -412,8 +416,9 @@ func endpointKind(e influxdb.NotificationEndpoint, name string) Object { name = e.GetName() } k := Object{ - Metadata: Metadata{Name: name}, - Spec: make(Resource), + APIVersion: APIVersion, + Metadata: Metadata{Name: name}, + Spec: make(Resource), } assignNonZeroStrings(k.Spec, map[string]string{ fieldDescription: e.GetDescription(), @@ -453,8 +458,9 @@ func ruleToObject(iRule influxdb.NotificationRule, endpointName, name string) Ob name = iRule.GetName() } k := Object{ - Type: KindNotificationRule, - Metadata: Metadata{Name: name}, + APIVersion: APIVersion, + Type: KindNotificationRule, + Metadata: Metadata{Name: name}, Spec: Resource{ fieldNotificationRuleEndpointName: endpointName, }, @@ -522,8 +528,9 @@ func taskToObject(t influxdb.Task, name string) Object { query := strings.TrimSpace(taskFluxRegex.ReplaceAllString(t.Flux, "")) k := Object{ - Type: KindTask, - Metadata: Metadata{Name: name}, + APIVersion: APIVersion, + Type: KindTask, + Metadata: Metadata{Name: name}, Spec: Resource{ fieldQuery: query, }, @@ -542,8 +549,9 @@ func telegrafToObject(t influxdb.TelegrafConfig, name string) Object { name = t.Name } k := Object{ - Type: KindTelegraf, - Metadata: Metadata{Name: name}, + APIVersion: APIVersion, + Type: KindTelegraf, + Metadata: Metadata{Name: name}, Spec: Resource{ fieldTelegrafConfig: t.Config, }, @@ -561,9 +569,10 @@ func VariableToObject(v influxdb.Variable, name string) Object { } k := Object{ - Type: KindVariable, - Metadata: Metadata{Name: name}, - Spec: make(Resource), + APIVersion: APIVersion, + Type: KindVariable, + Metadata: Metadata{Name: name}, + Spec: make(Resource), } assignNonZeroStrings(k.Spec, map[string]string{fieldDescription: v.Description}) diff --git a/pkger/models.go b/pkger/models.go index e978aa9476..84a2b9eeff 100644 --- a/pkger/models.go +++ b/pkger/models.go @@ -767,6 +767,7 @@ type SummaryVariable struct { } const ( + fieldAPIVersion = "apiVersion" fieldAssociations = "associations" fieldDescription = "description" fieldEvery = "every" diff --git a/pkger/parser.go b/pkger/parser.go index 229f9baebe..454c6ae50d 100644 --- a/pkger/parser.go +++ b/pkger/parser.go @@ -952,7 +952,7 @@ func (p *Pkg) eachResource(resourceKind Kind, minNameLen int, fn func(r Object) Idx: intPtr(i), ValidationErrs: []validationErr{ { - Field: "kind", + Field: fieldKind, Msg: err.Error(), }, }, @@ -963,6 +963,20 @@ func (p *Pkg) eachResource(resourceKind Kind, minNameLen int, fn func(r Object) continue } + if k.APIVersion != APIVersion { + pErr.append(resourceErr{ + Kind: k.Type.String(), + Idx: intPtr(i), + ValidationErrs: []validationErr{ + { + Field: fieldAPIVersion, + Msg: fmt.Sprintf("invalid API version provided %q; must be 1 in [%s]", k.APIVersion, APIVersion), + }, + }, + }) + continue + } + if len(k.Name()) < minNameLen { pErr.append(resourceErr{ Kind: k.Type.String(),