feat: port top-level export
command from influxdb
(#131)
This commit is contained in:
173
api/api_templates.gen.go
Normal file
173
api/api_templates.gen.go
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
_context "context"
|
||||||
|
_ioutil "io/ioutil"
|
||||||
|
_nethttp "net/http"
|
||||||
|
_neturl "net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Linger please
|
||||||
|
var (
|
||||||
|
_ _context.Context
|
||||||
|
)
|
||||||
|
|
||||||
|
type TemplatesApi interface {
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ExportTemplate Export a new Influx Template
|
||||||
|
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||||||
|
* @return ApiExportTemplateRequest
|
||||||
|
*/
|
||||||
|
ExportTemplate(ctx _context.Context) ApiExportTemplateRequest
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ExportTemplateExecute executes the request
|
||||||
|
* @return []TemplateEntry
|
||||||
|
*/
|
||||||
|
ExportTemplateExecute(r ApiExportTemplateRequest) ([]TemplateEntry, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TemplatesApiService TemplatesApi service
|
||||||
|
type TemplatesApiService service
|
||||||
|
|
||||||
|
type ApiExportTemplateRequest struct {
|
||||||
|
ctx _context.Context
|
||||||
|
ApiService TemplatesApi
|
||||||
|
templateExport *TemplateExport
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r ApiExportTemplateRequest) TemplateExport(templateExport TemplateExport) ApiExportTemplateRequest {
|
||||||
|
r.templateExport = &templateExport
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
func (r ApiExportTemplateRequest) GetTemplateExport() *TemplateExport {
|
||||||
|
return r.templateExport
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r ApiExportTemplateRequest) Execute() ([]TemplateEntry, error) {
|
||||||
|
return r.ApiService.ExportTemplateExecute(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ExportTemplate Export a new Influx Template
|
||||||
|
* @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background().
|
||||||
|
* @return ApiExportTemplateRequest
|
||||||
|
*/
|
||||||
|
func (a *TemplatesApiService) ExportTemplate(ctx _context.Context) ApiExportTemplateRequest {
|
||||||
|
return ApiExportTemplateRequest{
|
||||||
|
ApiService: a,
|
||||||
|
ctx: ctx,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Execute executes the request
|
||||||
|
* @return []TemplateEntry
|
||||||
|
*/
|
||||||
|
func (a *TemplatesApiService) ExportTemplateExecute(r ApiExportTemplateRequest) ([]TemplateEntry, error) {
|
||||||
|
var (
|
||||||
|
localVarHTTPMethod = _nethttp.MethodPost
|
||||||
|
localVarPostBody interface{}
|
||||||
|
localVarFormFileName string
|
||||||
|
localVarFileName string
|
||||||
|
localVarFileBytes []byte
|
||||||
|
localVarReturnValue []TemplateEntry
|
||||||
|
)
|
||||||
|
|
||||||
|
localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "TemplatesApiService.ExportTemplate")
|
||||||
|
if err != nil {
|
||||||
|
return localVarReturnValue, GenericOpenAPIError{error: err.Error()}
|
||||||
|
}
|
||||||
|
|
||||||
|
localVarPath := localBasePath + "/templates/export"
|
||||||
|
|
||||||
|
localVarHeaderParams := make(map[string]string)
|
||||||
|
localVarQueryParams := _neturl.Values{}
|
||||||
|
localVarFormParams := _neturl.Values{}
|
||||||
|
|
||||||
|
// to determine the Content-Type header
|
||||||
|
localVarHTTPContentTypes := []string{"application/json"}
|
||||||
|
|
||||||
|
// set Content-Type header
|
||||||
|
localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes)
|
||||||
|
if localVarHTTPContentType != "" {
|
||||||
|
localVarHeaderParams["Content-Type"] = localVarHTTPContentType
|
||||||
|
}
|
||||||
|
|
||||||
|
// to determine the Accept header
|
||||||
|
localVarHTTPHeaderAccepts := []string{"application/json"}
|
||||||
|
|
||||||
|
// set Accept header
|
||||||
|
localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts)
|
||||||
|
if localVarHTTPHeaderAccept != "" {
|
||||||
|
localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept
|
||||||
|
}
|
||||||
|
// body params
|
||||||
|
localVarPostBody = r.templateExport
|
||||||
|
req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes)
|
||||||
|
if err != nil {
|
||||||
|
return localVarReturnValue, err
|
||||||
|
}
|
||||||
|
|
||||||
|
localVarHTTPResponse, err := a.client.callAPI(req)
|
||||||
|
if err != nil || localVarHTTPResponse == nil {
|
||||||
|
return localVarReturnValue, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if localVarHTTPResponse.StatusCode >= 300 {
|
||||||
|
body, err := GunzipIfNeeded(localVarHTTPResponse)
|
||||||
|
if err != nil {
|
||||||
|
body.Close()
|
||||||
|
return localVarReturnValue, err
|
||||||
|
}
|
||||||
|
localVarBody, err := _ioutil.ReadAll(body)
|
||||||
|
body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return localVarReturnValue, err
|
||||||
|
}
|
||||||
|
newErr := GenericOpenAPIError{
|
||||||
|
body: localVarBody,
|
||||||
|
error: localVarHTTPResponse.Status,
|
||||||
|
}
|
||||||
|
var v Error
|
||||||
|
err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||||||
|
if err != nil {
|
||||||
|
newErr.error = err.Error()
|
||||||
|
return localVarReturnValue, newErr
|
||||||
|
}
|
||||||
|
newErr.model = &v
|
||||||
|
return localVarReturnValue, newErr
|
||||||
|
}
|
||||||
|
|
||||||
|
body, err := GunzipIfNeeded(localVarHTTPResponse)
|
||||||
|
if err != nil {
|
||||||
|
body.Close()
|
||||||
|
return localVarReturnValue, err
|
||||||
|
}
|
||||||
|
localVarBody, err := _ioutil.ReadAll(body)
|
||||||
|
body.Close()
|
||||||
|
if err != nil {
|
||||||
|
return localVarReturnValue, err
|
||||||
|
}
|
||||||
|
err = a.client.decode(&localVarReturnValue, localVarBody, localVarHTTPResponse.Header.Get("Content-Type"))
|
||||||
|
if err != nil {
|
||||||
|
newErr := GenericOpenAPIError{
|
||||||
|
body: localVarBody,
|
||||||
|
error: err.Error(),
|
||||||
|
}
|
||||||
|
return localVarReturnValue, newErr
|
||||||
|
}
|
||||||
|
|
||||||
|
return localVarReturnValue, nil
|
||||||
|
}
|
@ -71,6 +71,8 @@ type APIClient struct {
|
|||||||
|
|
||||||
TelegrafsApi TelegrafsApi
|
TelegrafsApi TelegrafsApi
|
||||||
|
|
||||||
|
TemplatesApi TemplatesApi
|
||||||
|
|
||||||
UsersApi UsersApi
|
UsersApi UsersApi
|
||||||
|
|
||||||
WriteApi WriteApi
|
WriteApi WriteApi
|
||||||
@ -104,6 +106,7 @@ func NewAPIClient(cfg *Configuration) *APIClient {
|
|||||||
c.SetupApi = (*SetupApiService)(&c.common)
|
c.SetupApi = (*SetupApiService)(&c.common)
|
||||||
c.TasksApi = (*TasksApiService)(&c.common)
|
c.TasksApi = (*TasksApiService)(&c.common)
|
||||||
c.TelegrafsApi = (*TelegrafsApiService)(&c.common)
|
c.TelegrafsApi = (*TelegrafsApiService)(&c.common)
|
||||||
|
c.TemplatesApi = (*TemplatesApiService)(&c.common)
|
||||||
c.UsersApi = (*UsersApiService)(&c.common)
|
c.UsersApi = (*UsersApiService)(&c.common)
|
||||||
c.WriteApi = (*WriteApiService)(&c.common)
|
c.WriteApi = (*WriteApiService)(&c.common)
|
||||||
|
|
||||||
|
@ -71,6 +71,8 @@ paths:
|
|||||||
$ref: "./overrides/paths/telegrafs_telegrafID.yml"
|
$ref: "./overrides/paths/telegrafs_telegrafID.yml"
|
||||||
/dashboards:
|
/dashboards:
|
||||||
$ref: "./overrides/paths/dashboards.yml"
|
$ref: "./overrides/paths/dashboards.yml"
|
||||||
|
/templates/export:
|
||||||
|
$ref: "./overrides/paths/templates_export.yml"
|
||||||
components:
|
components:
|
||||||
parameters:
|
parameters:
|
||||||
TraceSpan:
|
TraceSpan:
|
||||||
@ -253,3 +255,11 @@ components:
|
|||||||
$ref: "./openapi/src/common/schemas/Cells.yml"
|
$ref: "./openapi/src/common/schemas/Cells.yml"
|
||||||
Cell:
|
Cell:
|
||||||
$ref: "./openapi/src/common/schemas/Cell.yml"
|
$ref: "./openapi/src/common/schemas/Cell.yml"
|
||||||
|
TemplateExport:
|
||||||
|
$ref: "./overrides/schemas/TemplateExport.yml"
|
||||||
|
Template:
|
||||||
|
$ref: "./openapi/src/common/schemas/Template.yml"
|
||||||
|
TemplateKind:
|
||||||
|
$ref: "./openapi/src/common/schemas/TemplateKind.yml"
|
||||||
|
TemplateEntry:
|
||||||
|
$ref: "./openapi/src/common/schemas/TemplateEntry.yml"
|
||||||
|
Submodule api/contract/openapi updated: b837e212d5...1060f69e9f
25
api/contract/overrides/paths/templates_export.yml
Normal file
25
api/contract/overrides/paths/templates_export.yml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
post:
|
||||||
|
operationId: ExportTemplate
|
||||||
|
tags:
|
||||||
|
- Templates
|
||||||
|
summary: Export a new Influx Template
|
||||||
|
requestBody:
|
||||||
|
description: Export resources as an InfluxDB template.
|
||||||
|
required: false
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: "../schemas/TemplateExport.yml"
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: InfluxDB template created
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: "../../openapi/src/common/schemas/Template.yml"
|
||||||
|
default:
|
||||||
|
description: Unexpected error
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: "../../openapi/src/common/schemas/Error.yml"
|
35
api/contract/overrides/schemas/TemplateExport.yml
Normal file
35
api/contract/overrides/schemas/TemplateExport.yml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
stackID:
|
||||||
|
type: string
|
||||||
|
orgIDs:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
orgID:
|
||||||
|
type: string
|
||||||
|
resourceFilters:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
byLabel:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
byResourceKind:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: "../../openapi/src/common/schemas/TemplateKind.yml"
|
||||||
|
resources:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: string
|
||||||
|
kind:
|
||||||
|
$ref: "../../openapi/src/common/schemas/TemplateKind.yml"
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
required: [kind]
|
||||||
|
required: [resources]
|
221
api/model_template_entry.gen.go
Normal file
221
api/model_template_entry.gen.go
Normal file
@ -0,0 +1,221 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateEntry struct for TemplateEntry
|
||||||
|
type TemplateEntry struct {
|
||||||
|
ApiVersion *string `json:"apiVersion,omitempty"`
|
||||||
|
Kind *TemplateKind `json:"kind,omitempty"`
|
||||||
|
Meta *TemplateEntryMeta `json:"meta,omitempty"`
|
||||||
|
Spec *map[string]interface{} `json:"spec,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateEntry instantiates a new TemplateEntry object
|
||||||
|
// This constructor will assign default values to properties that have it defined,
|
||||||
|
// and makes sure properties required by API are set, but the set of arguments
|
||||||
|
// will change when the set of required properties is changed
|
||||||
|
func NewTemplateEntry() *TemplateEntry {
|
||||||
|
this := TemplateEntry{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateEntryWithDefaults instantiates a new TemplateEntry object
|
||||||
|
// This constructor will only assign default values to properties that have it defined,
|
||||||
|
// but it doesn't guarantee that properties required by API are set
|
||||||
|
func NewTemplateEntryWithDefaults() *TemplateEntry {
|
||||||
|
this := TemplateEntry{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetApiVersion returns the ApiVersion field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateEntry) GetApiVersion() string {
|
||||||
|
if o == nil || o.ApiVersion == nil {
|
||||||
|
var ret string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.ApiVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetApiVersionOk returns a tuple with the ApiVersion field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateEntry) GetApiVersionOk() (*string, bool) {
|
||||||
|
if o == nil || o.ApiVersion == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.ApiVersion, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasApiVersion returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateEntry) HasApiVersion() bool {
|
||||||
|
if o != nil && o.ApiVersion != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetApiVersion gets a reference to the given string and assigns it to the ApiVersion field.
|
||||||
|
func (o *TemplateEntry) SetApiVersion(v string) {
|
||||||
|
o.ApiVersion = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKind returns the Kind field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateEntry) GetKind() TemplateKind {
|
||||||
|
if o == nil || o.Kind == nil {
|
||||||
|
var ret TemplateKind
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.Kind
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKindOk returns a tuple with the Kind field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateEntry) GetKindOk() (*TemplateKind, bool) {
|
||||||
|
if o == nil || o.Kind == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.Kind, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasKind returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateEntry) HasKind() bool {
|
||||||
|
if o != nil && o.Kind != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKind gets a reference to the given TemplateKind and assigns it to the Kind field.
|
||||||
|
func (o *TemplateEntry) SetKind(v TemplateKind) {
|
||||||
|
o.Kind = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMeta returns the Meta field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateEntry) GetMeta() TemplateEntryMeta {
|
||||||
|
if o == nil || o.Meta == nil {
|
||||||
|
var ret TemplateEntryMeta
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.Meta
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMetaOk returns a tuple with the Meta field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateEntry) GetMetaOk() (*TemplateEntryMeta, bool) {
|
||||||
|
if o == nil || o.Meta == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.Meta, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasMeta returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateEntry) HasMeta() bool {
|
||||||
|
if o != nil && o.Meta != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMeta gets a reference to the given TemplateEntryMeta and assigns it to the Meta field.
|
||||||
|
func (o *TemplateEntry) SetMeta(v TemplateEntryMeta) {
|
||||||
|
o.Meta = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSpec returns the Spec field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateEntry) GetSpec() map[string]interface{} {
|
||||||
|
if o == nil || o.Spec == nil {
|
||||||
|
var ret map[string]interface{}
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.Spec
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSpecOk returns a tuple with the Spec field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateEntry) GetSpecOk() (*map[string]interface{}, bool) {
|
||||||
|
if o == nil || o.Spec == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.Spec, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasSpec returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateEntry) HasSpec() bool {
|
||||||
|
if o != nil && o.Spec != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSpec gets a reference to the given map[string]interface{} and assigns it to the Spec field.
|
||||||
|
func (o *TemplateEntry) SetSpec(v map[string]interface{}) {
|
||||||
|
o.Spec = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o TemplateEntry) MarshalJSON() ([]byte, error) {
|
||||||
|
toSerialize := map[string]interface{}{}
|
||||||
|
if o.ApiVersion != nil {
|
||||||
|
toSerialize["apiVersion"] = o.ApiVersion
|
||||||
|
}
|
||||||
|
if o.Kind != nil {
|
||||||
|
toSerialize["kind"] = o.Kind
|
||||||
|
}
|
||||||
|
if o.Meta != nil {
|
||||||
|
toSerialize["meta"] = o.Meta
|
||||||
|
}
|
||||||
|
if o.Spec != nil {
|
||||||
|
toSerialize["spec"] = o.Spec
|
||||||
|
}
|
||||||
|
return json.Marshal(toSerialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateEntry struct {
|
||||||
|
value *TemplateEntry
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateEntry) Get() *TemplateEntry {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateEntry) Set(val *TemplateEntry) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateEntry) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateEntry) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateEntry(val *TemplateEntry) *NullableTemplateEntry {
|
||||||
|
return &NullableTemplateEntry{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateEntry) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateEntry) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
113
api/model_template_entry_meta.gen.go
Normal file
113
api/model_template_entry_meta.gen.go
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateEntryMeta struct for TemplateEntryMeta
|
||||||
|
type TemplateEntryMeta struct {
|
||||||
|
Name *string `json:"name,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateEntryMeta instantiates a new TemplateEntryMeta object
|
||||||
|
// This constructor will assign default values to properties that have it defined,
|
||||||
|
// and makes sure properties required by API are set, but the set of arguments
|
||||||
|
// will change when the set of required properties is changed
|
||||||
|
func NewTemplateEntryMeta() *TemplateEntryMeta {
|
||||||
|
this := TemplateEntryMeta{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateEntryMetaWithDefaults instantiates a new TemplateEntryMeta object
|
||||||
|
// This constructor will only assign default values to properties that have it defined,
|
||||||
|
// but it doesn't guarantee that properties required by API are set
|
||||||
|
func NewTemplateEntryMetaWithDefaults() *TemplateEntryMeta {
|
||||||
|
this := TemplateEntryMeta{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetName returns the Name field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateEntryMeta) GetName() string {
|
||||||
|
if o == nil || o.Name == nil {
|
||||||
|
var ret string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNameOk returns a tuple with the Name field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateEntryMeta) GetNameOk() (*string, bool) {
|
||||||
|
if o == nil || o.Name == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.Name, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasName returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateEntryMeta) HasName() bool {
|
||||||
|
if o != nil && o.Name != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName gets a reference to the given string and assigns it to the Name field.
|
||||||
|
func (o *TemplateEntryMeta) SetName(v string) {
|
||||||
|
o.Name = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o TemplateEntryMeta) MarshalJSON() ([]byte, error) {
|
||||||
|
toSerialize := map[string]interface{}{}
|
||||||
|
if o.Name != nil {
|
||||||
|
toSerialize["name"] = o.Name
|
||||||
|
}
|
||||||
|
return json.Marshal(toSerialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateEntryMeta struct {
|
||||||
|
value *TemplateEntryMeta
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateEntryMeta) Get() *TemplateEntryMeta {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateEntryMeta) Set(val *TemplateEntryMeta) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateEntryMeta) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateEntryMeta) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateEntryMeta(val *TemplateEntryMeta) *NullableTemplateEntryMeta {
|
||||||
|
return &NullableTemplateEntryMeta{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateEntryMeta) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateEntryMeta) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
178
api/model_template_export.gen.go
Normal file
178
api/model_template_export.gen.go
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateExport struct for TemplateExport
|
||||||
|
type TemplateExport struct {
|
||||||
|
StackID *string `json:"stackID,omitempty"`
|
||||||
|
OrgIDs *[]TemplateExportOrgIDs `json:"orgIDs,omitempty"`
|
||||||
|
Resources []TemplateExportResources `json:"resources"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExport instantiates a new TemplateExport object
|
||||||
|
// This constructor will assign default values to properties that have it defined,
|
||||||
|
// and makes sure properties required by API are set, but the set of arguments
|
||||||
|
// will change when the set of required properties is changed
|
||||||
|
func NewTemplateExport(resources []TemplateExportResources) *TemplateExport {
|
||||||
|
this := TemplateExport{}
|
||||||
|
this.Resources = resources
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportWithDefaults instantiates a new TemplateExport object
|
||||||
|
// This constructor will only assign default values to properties that have it defined,
|
||||||
|
// but it doesn't guarantee that properties required by API are set
|
||||||
|
func NewTemplateExportWithDefaults() *TemplateExport {
|
||||||
|
this := TemplateExport{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStackID returns the StackID field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExport) GetStackID() string {
|
||||||
|
if o == nil || o.StackID == nil {
|
||||||
|
var ret string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.StackID
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStackIDOk returns a tuple with the StackID field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExport) GetStackIDOk() (*string, bool) {
|
||||||
|
if o == nil || o.StackID == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.StackID, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasStackID returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExport) HasStackID() bool {
|
||||||
|
if o != nil && o.StackID != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetStackID gets a reference to the given string and assigns it to the StackID field.
|
||||||
|
func (o *TemplateExport) SetStackID(v string) {
|
||||||
|
o.StackID = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOrgIDs returns the OrgIDs field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExport) GetOrgIDs() []TemplateExportOrgIDs {
|
||||||
|
if o == nil || o.OrgIDs == nil {
|
||||||
|
var ret []TemplateExportOrgIDs
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.OrgIDs
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOrgIDsOk returns a tuple with the OrgIDs field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExport) GetOrgIDsOk() (*[]TemplateExportOrgIDs, bool) {
|
||||||
|
if o == nil || o.OrgIDs == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.OrgIDs, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasOrgIDs returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExport) HasOrgIDs() bool {
|
||||||
|
if o != nil && o.OrgIDs != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOrgIDs gets a reference to the given []TemplateExportOrgIDs and assigns it to the OrgIDs field.
|
||||||
|
func (o *TemplateExport) SetOrgIDs(v []TemplateExportOrgIDs) {
|
||||||
|
o.OrgIDs = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResources returns the Resources field value
|
||||||
|
func (o *TemplateExport) GetResources() []TemplateExportResources {
|
||||||
|
if o == nil {
|
||||||
|
var ret []TemplateExportResources
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
return o.Resources
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResourcesOk returns a tuple with the Resources field value
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExport) GetResourcesOk() (*[]TemplateExportResources, bool) {
|
||||||
|
if o == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return &o.Resources, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetResources sets field value
|
||||||
|
func (o *TemplateExport) SetResources(v []TemplateExportResources) {
|
||||||
|
o.Resources = v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o TemplateExport) MarshalJSON() ([]byte, error) {
|
||||||
|
toSerialize := map[string]interface{}{}
|
||||||
|
if o.StackID != nil {
|
||||||
|
toSerialize["stackID"] = o.StackID
|
||||||
|
}
|
||||||
|
if o.OrgIDs != nil {
|
||||||
|
toSerialize["orgIDs"] = o.OrgIDs
|
||||||
|
}
|
||||||
|
if true {
|
||||||
|
toSerialize["resources"] = o.Resources
|
||||||
|
}
|
||||||
|
return json.Marshal(toSerialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateExport struct {
|
||||||
|
value *TemplateExport
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExport) Get() *TemplateExport {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExport) Set(val *TemplateExport) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExport) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExport) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateExport(val *TemplateExport) *NullableTemplateExport {
|
||||||
|
return &NullableTemplateExport{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExport) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExport) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
149
api/model_template_export_org_ids.gen.go
Normal file
149
api/model_template_export_org_ids.gen.go
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateExportOrgIDs struct for TemplateExportOrgIDs
|
||||||
|
type TemplateExportOrgIDs struct {
|
||||||
|
OrgID *string `json:"orgID,omitempty"`
|
||||||
|
ResourceFilters *TemplateExportResourceFilters `json:"resourceFilters,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportOrgIDs instantiates a new TemplateExportOrgIDs object
|
||||||
|
// This constructor will assign default values to properties that have it defined,
|
||||||
|
// and makes sure properties required by API are set, but the set of arguments
|
||||||
|
// will change when the set of required properties is changed
|
||||||
|
func NewTemplateExportOrgIDs() *TemplateExportOrgIDs {
|
||||||
|
this := TemplateExportOrgIDs{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportOrgIDsWithDefaults instantiates a new TemplateExportOrgIDs object
|
||||||
|
// This constructor will only assign default values to properties that have it defined,
|
||||||
|
// but it doesn't guarantee that properties required by API are set
|
||||||
|
func NewTemplateExportOrgIDsWithDefaults() *TemplateExportOrgIDs {
|
||||||
|
this := TemplateExportOrgIDs{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOrgID returns the OrgID field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExportOrgIDs) GetOrgID() string {
|
||||||
|
if o == nil || o.OrgID == nil {
|
||||||
|
var ret string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.OrgID
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOrgIDOk returns a tuple with the OrgID field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportOrgIDs) GetOrgIDOk() (*string, bool) {
|
||||||
|
if o == nil || o.OrgID == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.OrgID, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasOrgID returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExportOrgIDs) HasOrgID() bool {
|
||||||
|
if o != nil && o.OrgID != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetOrgID gets a reference to the given string and assigns it to the OrgID field.
|
||||||
|
func (o *TemplateExportOrgIDs) SetOrgID(v string) {
|
||||||
|
o.OrgID = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResourceFilters returns the ResourceFilters field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExportOrgIDs) GetResourceFilters() TemplateExportResourceFilters {
|
||||||
|
if o == nil || o.ResourceFilters == nil {
|
||||||
|
var ret TemplateExportResourceFilters
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.ResourceFilters
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResourceFiltersOk returns a tuple with the ResourceFilters field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportOrgIDs) GetResourceFiltersOk() (*TemplateExportResourceFilters, bool) {
|
||||||
|
if o == nil || o.ResourceFilters == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.ResourceFilters, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasResourceFilters returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExportOrgIDs) HasResourceFilters() bool {
|
||||||
|
if o != nil && o.ResourceFilters != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetResourceFilters gets a reference to the given TemplateExportResourceFilters and assigns it to the ResourceFilters field.
|
||||||
|
func (o *TemplateExportOrgIDs) SetResourceFilters(v TemplateExportResourceFilters) {
|
||||||
|
o.ResourceFilters = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o TemplateExportOrgIDs) MarshalJSON() ([]byte, error) {
|
||||||
|
toSerialize := map[string]interface{}{}
|
||||||
|
if o.OrgID != nil {
|
||||||
|
toSerialize["orgID"] = o.OrgID
|
||||||
|
}
|
||||||
|
if o.ResourceFilters != nil {
|
||||||
|
toSerialize["resourceFilters"] = o.ResourceFilters
|
||||||
|
}
|
||||||
|
return json.Marshal(toSerialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateExportOrgIDs struct {
|
||||||
|
value *TemplateExportOrgIDs
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportOrgIDs) Get() *TemplateExportOrgIDs {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportOrgIDs) Set(val *TemplateExportOrgIDs) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportOrgIDs) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportOrgIDs) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateExportOrgIDs(val *TemplateExportOrgIDs) *NullableTemplateExportOrgIDs {
|
||||||
|
return &NullableTemplateExportOrgIDs{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportOrgIDs) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportOrgIDs) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
149
api/model_template_export_resource_filters.gen.go
Normal file
149
api/model_template_export_resource_filters.gen.go
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateExportResourceFilters struct for TemplateExportResourceFilters
|
||||||
|
type TemplateExportResourceFilters struct {
|
||||||
|
ByLabel *[]string `json:"byLabel,omitempty"`
|
||||||
|
ByResourceKind *[]TemplateKind `json:"byResourceKind,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportResourceFilters instantiates a new TemplateExportResourceFilters object
|
||||||
|
// This constructor will assign default values to properties that have it defined,
|
||||||
|
// and makes sure properties required by API are set, but the set of arguments
|
||||||
|
// will change when the set of required properties is changed
|
||||||
|
func NewTemplateExportResourceFilters() *TemplateExportResourceFilters {
|
||||||
|
this := TemplateExportResourceFilters{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportResourceFiltersWithDefaults instantiates a new TemplateExportResourceFilters object
|
||||||
|
// This constructor will only assign default values to properties that have it defined,
|
||||||
|
// but it doesn't guarantee that properties required by API are set
|
||||||
|
func NewTemplateExportResourceFiltersWithDefaults() *TemplateExportResourceFilters {
|
||||||
|
this := TemplateExportResourceFilters{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetByLabel returns the ByLabel field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExportResourceFilters) GetByLabel() []string {
|
||||||
|
if o == nil || o.ByLabel == nil {
|
||||||
|
var ret []string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.ByLabel
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetByLabelOk returns a tuple with the ByLabel field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportResourceFilters) GetByLabelOk() (*[]string, bool) {
|
||||||
|
if o == nil || o.ByLabel == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.ByLabel, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasByLabel returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExportResourceFilters) HasByLabel() bool {
|
||||||
|
if o != nil && o.ByLabel != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetByLabel gets a reference to the given []string and assigns it to the ByLabel field.
|
||||||
|
func (o *TemplateExportResourceFilters) SetByLabel(v []string) {
|
||||||
|
o.ByLabel = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetByResourceKind returns the ByResourceKind field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExportResourceFilters) GetByResourceKind() []TemplateKind {
|
||||||
|
if o == nil || o.ByResourceKind == nil {
|
||||||
|
var ret []TemplateKind
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.ByResourceKind
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetByResourceKindOk returns a tuple with the ByResourceKind field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportResourceFilters) GetByResourceKindOk() (*[]TemplateKind, bool) {
|
||||||
|
if o == nil || o.ByResourceKind == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.ByResourceKind, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasByResourceKind returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExportResourceFilters) HasByResourceKind() bool {
|
||||||
|
if o != nil && o.ByResourceKind != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetByResourceKind gets a reference to the given []TemplateKind and assigns it to the ByResourceKind field.
|
||||||
|
func (o *TemplateExportResourceFilters) SetByResourceKind(v []TemplateKind) {
|
||||||
|
o.ByResourceKind = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o TemplateExportResourceFilters) MarshalJSON() ([]byte, error) {
|
||||||
|
toSerialize := map[string]interface{}{}
|
||||||
|
if o.ByLabel != nil {
|
||||||
|
toSerialize["byLabel"] = o.ByLabel
|
||||||
|
}
|
||||||
|
if o.ByResourceKind != nil {
|
||||||
|
toSerialize["byResourceKind"] = o.ByResourceKind
|
||||||
|
}
|
||||||
|
return json.Marshal(toSerialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateExportResourceFilters struct {
|
||||||
|
value *TemplateExportResourceFilters
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportResourceFilters) Get() *TemplateExportResourceFilters {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportResourceFilters) Set(val *TemplateExportResourceFilters) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportResourceFilters) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportResourceFilters) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateExportResourceFilters(val *TemplateExportResourceFilters) *NullableTemplateExportResourceFilters {
|
||||||
|
return &NullableTemplateExportResourceFilters{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportResourceFilters) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportResourceFilters) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
178
api/model_template_export_resources.gen.go
Normal file
178
api/model_template_export_resources.gen.go
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateExportResources struct for TemplateExportResources
|
||||||
|
type TemplateExportResources struct {
|
||||||
|
Id *string `json:"id,omitempty"`
|
||||||
|
Kind TemplateKind `json:"kind"`
|
||||||
|
Name *string `json:"name,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportResources instantiates a new TemplateExportResources object
|
||||||
|
// This constructor will assign default values to properties that have it defined,
|
||||||
|
// and makes sure properties required by API are set, but the set of arguments
|
||||||
|
// will change when the set of required properties is changed
|
||||||
|
func NewTemplateExportResources(kind TemplateKind) *TemplateExportResources {
|
||||||
|
this := TemplateExportResources{}
|
||||||
|
this.Kind = kind
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewTemplateExportResourcesWithDefaults instantiates a new TemplateExportResources object
|
||||||
|
// This constructor will only assign default values to properties that have it defined,
|
||||||
|
// but it doesn't guarantee that properties required by API are set
|
||||||
|
func NewTemplateExportResourcesWithDefaults() *TemplateExportResources {
|
||||||
|
this := TemplateExportResources{}
|
||||||
|
return &this
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetId returns the Id field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExportResources) GetId() string {
|
||||||
|
if o == nil || o.Id == nil {
|
||||||
|
var ret string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.Id
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIdOk returns a tuple with the Id field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportResources) GetIdOk() (*string, bool) {
|
||||||
|
if o == nil || o.Id == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.Id, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasId returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExportResources) HasId() bool {
|
||||||
|
if o != nil && o.Id != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetId gets a reference to the given string and assigns it to the Id field.
|
||||||
|
func (o *TemplateExportResources) SetId(v string) {
|
||||||
|
o.Id = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKind returns the Kind field value
|
||||||
|
func (o *TemplateExportResources) GetKind() TemplateKind {
|
||||||
|
if o == nil {
|
||||||
|
var ret TemplateKind
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
|
||||||
|
return o.Kind
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetKindOk returns a tuple with the Kind field value
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportResources) GetKindOk() (*TemplateKind, bool) {
|
||||||
|
if o == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return &o.Kind, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetKind sets field value
|
||||||
|
func (o *TemplateExportResources) SetKind(v TemplateKind) {
|
||||||
|
o.Kind = v
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetName returns the Name field value if set, zero value otherwise.
|
||||||
|
func (o *TemplateExportResources) GetName() string {
|
||||||
|
if o == nil || o.Name == nil {
|
||||||
|
var ret string
|
||||||
|
return ret
|
||||||
|
}
|
||||||
|
return *o.Name
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetNameOk returns a tuple with the Name field value if set, nil otherwise
|
||||||
|
// and a boolean to check if the value has been set.
|
||||||
|
func (o *TemplateExportResources) GetNameOk() (*string, bool) {
|
||||||
|
if o == nil || o.Name == nil {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return o.Name, true
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasName returns a boolean if a field has been set.
|
||||||
|
func (o *TemplateExportResources) HasName() bool {
|
||||||
|
if o != nil && o.Name != nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetName gets a reference to the given string and assigns it to the Name field.
|
||||||
|
func (o *TemplateExportResources) SetName(v string) {
|
||||||
|
o.Name = &v
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o TemplateExportResources) MarshalJSON() ([]byte, error) {
|
||||||
|
toSerialize := map[string]interface{}{}
|
||||||
|
if o.Id != nil {
|
||||||
|
toSerialize["id"] = o.Id
|
||||||
|
}
|
||||||
|
if true {
|
||||||
|
toSerialize["kind"] = o.Kind
|
||||||
|
}
|
||||||
|
if o.Name != nil {
|
||||||
|
toSerialize["name"] = o.Name
|
||||||
|
}
|
||||||
|
return json.Marshal(toSerialize)
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateExportResources struct {
|
||||||
|
value *TemplateExportResources
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportResources) Get() *TemplateExportResources {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportResources) Set(val *TemplateExportResources) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportResources) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportResources) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateExportResources(val *TemplateExportResources) *NullableTemplateExportResources {
|
||||||
|
return &NullableTemplateExportResources{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateExportResources) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateExportResources) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
95
api/model_template_kind.gen.go
Normal file
95
api/model_template_kind.gen.go
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* Subset of Influx API covered by Influx CLI
|
||||||
|
*
|
||||||
|
* No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
||||||
|
*
|
||||||
|
* API version: 2.0.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT.
|
||||||
|
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TemplateKind the model 'TemplateKind'
|
||||||
|
type TemplateKind string
|
||||||
|
|
||||||
|
// List of TemplateKind
|
||||||
|
const (
|
||||||
|
TEMPLATEKIND_BUCKET TemplateKind = "Bucket"
|
||||||
|
TEMPLATEKIND_CHECK TemplateKind = "Check"
|
||||||
|
TEMPLATEKIND_CHECK_DEADMAN TemplateKind = "CheckDeadman"
|
||||||
|
TEMPLATEKIND_CHECK_THRESHOLD TemplateKind = "CheckThreshold"
|
||||||
|
TEMPLATEKIND_DASHBOARD TemplateKind = "Dashboard"
|
||||||
|
TEMPLATEKIND_LABEL TemplateKind = "Label"
|
||||||
|
TEMPLATEKIND_NOTIFICATION_ENDPOINT TemplateKind = "NotificationEndpoint"
|
||||||
|
TEMPLATEKIND_NOTIFICATION_ENDPOINT_HTTP TemplateKind = "NotificationEndpointHTTP"
|
||||||
|
TEMPLATEKIND_NOTIFICATION_ENDPOINT_PAGER_DUTY TemplateKind = "NotificationEndpointPagerDuty"
|
||||||
|
TEMPLATEKIND_NOTIFICATION_ENDPOINT_SLACK TemplateKind = "NotificationEndpointSlack"
|
||||||
|
TEMPLATEKIND_NOTIFICATION_RULE TemplateKind = "NotificationRule"
|
||||||
|
TEMPLATEKIND_TASK TemplateKind = "Task"
|
||||||
|
TEMPLATEKIND_TELEGRAF TemplateKind = "Telegraf"
|
||||||
|
TEMPLATEKIND_VARIABLE TemplateKind = "Variable"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (v *TemplateKind) UnmarshalJSON(src []byte) error {
|
||||||
|
var value string
|
||||||
|
err := json.Unmarshal(src, &value)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
enumTypeValue := TemplateKind(value)
|
||||||
|
for _, existing := range []TemplateKind{"Bucket", "Check", "CheckDeadman", "CheckThreshold", "Dashboard", "Label", "NotificationEndpoint", "NotificationEndpointHTTP", "NotificationEndpointPagerDuty", "NotificationEndpointSlack", "NotificationRule", "Task", "Telegraf", "Variable"} {
|
||||||
|
if existing == enumTypeValue {
|
||||||
|
*v = enumTypeValue
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("%+v is not a valid TemplateKind", value)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ptr returns reference to TemplateKind value
|
||||||
|
func (v TemplateKind) Ptr() *TemplateKind {
|
||||||
|
return &v
|
||||||
|
}
|
||||||
|
|
||||||
|
type NullableTemplateKind struct {
|
||||||
|
value *TemplateKind
|
||||||
|
isSet bool
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateKind) Get() *TemplateKind {
|
||||||
|
return v.value
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateKind) Set(val *TemplateKind) {
|
||||||
|
v.value = val
|
||||||
|
v.isSet = true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateKind) IsSet() bool {
|
||||||
|
return v.isSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateKind) Unset() {
|
||||||
|
v.value = nil
|
||||||
|
v.isSet = false
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewNullableTemplateKind(val *TemplateKind) *NullableTemplateKind {
|
||||||
|
return &NullableTemplateKind{value: val, isSet: true}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v NullableTemplateKind) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(v.value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *NullableTemplateKind) UnmarshalJSON(src []byte) error {
|
||||||
|
v.isSet = true
|
||||||
|
return json.Unmarshal(src, &v.value)
|
||||||
|
}
|
154
clients/export/export.go
Normal file
154
clients/export/export.go
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
package export
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
|
||||||
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
|
"gopkg.in/yaml.v3"
|
||||||
|
)
|
||||||
|
|
||||||
|
type OutEncoding int
|
||||||
|
|
||||||
|
const (
|
||||||
|
YamlEncoding OutEncoding = iota
|
||||||
|
JsonEncoding
|
||||||
|
)
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
clients.CLI
|
||||||
|
api.TemplatesApi
|
||||||
|
}
|
||||||
|
|
||||||
|
type Params struct {
|
||||||
|
Out io.Writer
|
||||||
|
OutEncoding
|
||||||
|
StackId string
|
||||||
|
|
||||||
|
BucketIds []string
|
||||||
|
BucketNames []string
|
||||||
|
CheckIds []string
|
||||||
|
CheckNames []string
|
||||||
|
DashboardIds []string
|
||||||
|
DashboardNames []string
|
||||||
|
EndpointIds []string
|
||||||
|
EndpointNames []string
|
||||||
|
LabelIds []string
|
||||||
|
LabelNames []string
|
||||||
|
RuleIds []string
|
||||||
|
RuleNames []string
|
||||||
|
TaskIds []string
|
||||||
|
TaskNames []string
|
||||||
|
TelegrafIds []string
|
||||||
|
TelegrafNames []string
|
||||||
|
VariableIds []string
|
||||||
|
VariableNames []string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c Client) Export(ctx context.Context, params *Params) error {
|
||||||
|
var exportReq api.TemplateExport
|
||||||
|
|
||||||
|
if params.StackId != "" {
|
||||||
|
exportReq.StackID = ¶ms.StackId
|
||||||
|
}
|
||||||
|
|
||||||
|
filters := []struct {
|
||||||
|
kind api.TemplateKind
|
||||||
|
ids []string
|
||||||
|
names []string
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_BUCKET,
|
||||||
|
ids: params.BucketIds,
|
||||||
|
names: params.BucketNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_CHECK,
|
||||||
|
ids: params.CheckIds,
|
||||||
|
names: params.CheckNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_DASHBOARD,
|
||||||
|
ids: params.DashboardIds,
|
||||||
|
names: params.DashboardNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_LABEL,
|
||||||
|
ids: params.LabelIds,
|
||||||
|
names: params.LabelNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_NOTIFICATION_ENDPOINT,
|
||||||
|
ids: params.EndpointIds,
|
||||||
|
names: params.EndpointNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_NOTIFICATION_RULE,
|
||||||
|
ids: params.RuleIds,
|
||||||
|
names: params.RuleNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_TASK,
|
||||||
|
ids: params.TaskIds,
|
||||||
|
names: params.TaskNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_TELEGRAF,
|
||||||
|
ids: params.TelegrafIds,
|
||||||
|
names: params.TelegrafNames,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: api.TEMPLATEKIND_VARIABLE,
|
||||||
|
ids: params.VariableIds,
|
||||||
|
names: params.VariableNames,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, filter := range filters {
|
||||||
|
for _, id := range filter.ids {
|
||||||
|
id := id
|
||||||
|
exportReq.Resources = append(exportReq.Resources, api.TemplateExportResources{
|
||||||
|
Kind: filter.kind,
|
||||||
|
Id: &id,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
for _, name := range filter.names {
|
||||||
|
name := name
|
||||||
|
exportReq.Resources = append(exportReq.Resources, api.TemplateExportResources{
|
||||||
|
Kind: filter.kind,
|
||||||
|
Name: &name,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tmpl, err := c.ExportTemplate(ctx).TemplateExport(exportReq).Execute()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to export template: %w", err)
|
||||||
|
}
|
||||||
|
if err := writeTemplate(params.Out, params.OutEncoding, tmpl); err != nil {
|
||||||
|
return fmt.Errorf("failed to write exported template: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeTemplate(out io.Writer, encoding OutEncoding, template []api.TemplateEntry) error {
|
||||||
|
switch encoding {
|
||||||
|
case JsonEncoding:
|
||||||
|
enc := json.NewEncoder(out)
|
||||||
|
enc.SetIndent("", "\t")
|
||||||
|
return enc.Encode(template)
|
||||||
|
case YamlEncoding:
|
||||||
|
enc := yaml.NewEncoder(out)
|
||||||
|
for _, entry := range template {
|
||||||
|
if err := enc.Encode(entry); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("encoding %q is not recognized", encoding)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
379
cmd/influx/export.go
Normal file
379
cmd/influx/export.go
Normal file
@ -0,0 +1,379 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/influxdata/influx-cli/v2/clients/export"
|
||||||
|
"github.com/influxdata/influx-cli/v2/pkg/cli/middleware"
|
||||||
|
"github.com/mattn/go-isatty"
|
||||||
|
"github.com/urfave/cli/v2"
|
||||||
|
)
|
||||||
|
|
||||||
|
func newExportCmd() *cli.Command {
|
||||||
|
var params struct {
|
||||||
|
out string
|
||||||
|
stackId string
|
||||||
|
resourceType ResourceType
|
||||||
|
bucketIds string
|
||||||
|
bucketNames string
|
||||||
|
checkIds string
|
||||||
|
checkNames string
|
||||||
|
dashboardIds string
|
||||||
|
dashboardNames string
|
||||||
|
endpointIds string
|
||||||
|
endpointNames string
|
||||||
|
labelIds string
|
||||||
|
labelNames string
|
||||||
|
ruleIds string
|
||||||
|
ruleNames string
|
||||||
|
taskIds string
|
||||||
|
taskNames string
|
||||||
|
telegrafIds string
|
||||||
|
telegrafNames string
|
||||||
|
variableIds string
|
||||||
|
variableNames string
|
||||||
|
}
|
||||||
|
return &cli.Command{
|
||||||
|
Name: "export",
|
||||||
|
Usage: "Export existing resources as a template",
|
||||||
|
Description: `The export command provides a mechanism to export existing resources to a
|
||||||
|
template. Each template resource kind is supported via flags.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
# export buckets by ID
|
||||||
|
influx export --buckets=$ID1,$ID2,$ID3
|
||||||
|
|
||||||
|
# export buckets, labels, and dashboards by ID
|
||||||
|
influx export \
|
||||||
|
--buckets=$BID1,$BID2,$BID3 \
|
||||||
|
--labels=$LID1,$LID2,$LID3 \
|
||||||
|
--dashboards=$DID1,$DID2,$DID3
|
||||||
|
|
||||||
|
# export all resources for a stack
|
||||||
|
influx export --stack-id $STACK_ID
|
||||||
|
|
||||||
|
# export a stack with resources not associated with the stack
|
||||||
|
influx export --stack-id $STACK_ID --buckets $BUCKET_ID
|
||||||
|
|
||||||
|
All of the resources are supported via the examples provided above. Provide the
|
||||||
|
resource flag and then provide the IDs.
|
||||||
|
|
||||||
|
For information about exporting InfluxDB templates, see
|
||||||
|
https://docs.influxdata.com/influxdb/latest/reference/cli/influx/export/`,
|
||||||
|
Flags: append(
|
||||||
|
commonFlagsNoPrint(),
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "file",
|
||||||
|
Usage: "Output file for created template; defaults to std out if no file provided; the extension of provided file (.yml/.json) will dictate encoding",
|
||||||
|
Aliases: []string{"f"},
|
||||||
|
Destination: ¶ms.out,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "stack-id",
|
||||||
|
Usage: "ID for stack to include in export",
|
||||||
|
Destination: ¶ms.stackId,
|
||||||
|
},
|
||||||
|
&cli.GenericFlag{
|
||||||
|
Name: "resource-type",
|
||||||
|
Usage: "If specified, strings on stdin/positional args will be treated as IDs of the given type",
|
||||||
|
Value: ¶ms.resourceType,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "buckets",
|
||||||
|
Usage: "List of bucket ids comma separated",
|
||||||
|
Destination: ¶ms.bucketIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "checks",
|
||||||
|
Usage: "List of check ids comma separated",
|
||||||
|
Destination: ¶ms.checkIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "dashboards",
|
||||||
|
Usage: "List of dashboard ids comma separated",
|
||||||
|
Destination: ¶ms.dashboardIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "endpoints",
|
||||||
|
Usage: "List of notification endpoint ids comma separated",
|
||||||
|
Destination: ¶ms.endpointIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "labels",
|
||||||
|
Usage: "List of label ids comma separated",
|
||||||
|
Destination: ¶ms.labelIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "rules",
|
||||||
|
Usage: "List of notification rule ids comma separated",
|
||||||
|
Destination: ¶ms.ruleIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "tasks",
|
||||||
|
Usage: "List of task ids comma separated",
|
||||||
|
Destination: ¶ms.taskIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "telegraf-configs",
|
||||||
|
Usage: "List of telegraf config ids comma separated",
|
||||||
|
Destination: ¶ms.telegrafIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "variables",
|
||||||
|
Usage: "List of variable ids comma separated",
|
||||||
|
Destination: ¶ms.variableIds,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "bucket-names",
|
||||||
|
Usage: "List of bucket names comma separated",
|
||||||
|
Destination: ¶ms.bucketNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "check-names",
|
||||||
|
Usage: "List of check names comma separated",
|
||||||
|
Destination: ¶ms.checkNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "dashboard-names",
|
||||||
|
Usage: "List of dashboard names comma separated",
|
||||||
|
Destination: ¶ms.dashboardNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "endpoint-names",
|
||||||
|
Usage: "List of notification endpoint names comma separated",
|
||||||
|
Destination: ¶ms.endpointNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "label-names",
|
||||||
|
Usage: "List of label names comma separated",
|
||||||
|
Destination: ¶ms.labelNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "rule-names",
|
||||||
|
Usage: "List of notification rule names comma separated",
|
||||||
|
Destination: ¶ms.ruleNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "task-names",
|
||||||
|
Usage: "List of task names comma separated",
|
||||||
|
Destination: ¶ms.taskNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "telegraf-config-names",
|
||||||
|
Usage: "List of telegraf config names comma separated",
|
||||||
|
Destination: ¶ms.telegrafNames,
|
||||||
|
},
|
||||||
|
&cli.StringFlag{
|
||||||
|
Name: "variable-names",
|
||||||
|
Usage: "List of variable names comma separated",
|
||||||
|
Destination: ¶ms.variableNames,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ArgsUsage: "[resource-id]...",
|
||||||
|
Before: middleware.WithBeforeFns(withCli(), withApi(true)),
|
||||||
|
Action: func(ctx *cli.Context) error {
|
||||||
|
parsedParams := export.Params{
|
||||||
|
StackId: params.stackId,
|
||||||
|
BucketIds: splitNonEmpty(params.bucketIds),
|
||||||
|
BucketNames: splitNonEmpty(params.bucketNames),
|
||||||
|
CheckIds: splitNonEmpty(params.checkIds),
|
||||||
|
CheckNames: splitNonEmpty(params.checkNames),
|
||||||
|
DashboardIds: splitNonEmpty(params.dashboardIds),
|
||||||
|
DashboardNames: splitNonEmpty(params.dashboardNames),
|
||||||
|
EndpointIds: splitNonEmpty(params.endpointIds),
|
||||||
|
EndpointNames: splitNonEmpty(params.endpointNames),
|
||||||
|
LabelIds: splitNonEmpty(params.labelIds),
|
||||||
|
LabelNames: splitNonEmpty(params.labelNames),
|
||||||
|
RuleIds: splitNonEmpty(params.ruleIds),
|
||||||
|
RuleNames: splitNonEmpty(params.ruleNames),
|
||||||
|
TaskIds: splitNonEmpty(params.taskIds),
|
||||||
|
TaskNames: splitNonEmpty(params.taskNames),
|
||||||
|
TelegrafIds: splitNonEmpty(params.telegrafIds),
|
||||||
|
TelegrafNames: splitNonEmpty(params.telegrafNames),
|
||||||
|
VariableIds: splitNonEmpty(params.variableIds),
|
||||||
|
VariableNames: splitNonEmpty(params.variableNames),
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.out == "" {
|
||||||
|
parsedParams.Out = os.Stdout
|
||||||
|
} else {
|
||||||
|
f, err := os.OpenFile(params.out, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to open output path %q: %w", params.out, err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
parsedParams.Out = f
|
||||||
|
}
|
||||||
|
switch filepath.Ext(params.out) {
|
||||||
|
case ".json":
|
||||||
|
parsedParams.OutEncoding = export.JsonEncoding
|
||||||
|
default: // Also covers path == "" for stdout.
|
||||||
|
parsedParams.OutEncoding = export.YamlEncoding
|
||||||
|
}
|
||||||
|
|
||||||
|
if params.resourceType != TypeUnset {
|
||||||
|
ids := ctx.Args().Slice()
|
||||||
|
|
||||||
|
// Read any IDs from stdin.
|
||||||
|
// !IsTerminal detects when some other process is piping into this command.
|
||||||
|
if !isatty.IsTerminal(os.Stdin.Fd()) {
|
||||||
|
inBytes, err := io.ReadAll(os.Stdin)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to read args from std in: %w", err)
|
||||||
|
}
|
||||||
|
ids = append(ids, strings.Fields(string(inBytes))...)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch params.resourceType {
|
||||||
|
case TypeBucket:
|
||||||
|
parsedParams.BucketIds = append(parsedParams.BucketIds, ids...)
|
||||||
|
case TypeCheck:
|
||||||
|
parsedParams.CheckIds = append(parsedParams.CheckIds, ids...)
|
||||||
|
case TypeDashboard:
|
||||||
|
parsedParams.DashboardIds = append(parsedParams.DashboardIds, ids...)
|
||||||
|
case TypeLabel:
|
||||||
|
parsedParams.LabelIds = append(parsedParams.LabelIds, ids...)
|
||||||
|
case TypeNotificationEndpoint:
|
||||||
|
parsedParams.EndpointIds = append(parsedParams.EndpointIds, ids...)
|
||||||
|
case TypeNotificationRule:
|
||||||
|
parsedParams.RuleIds = append(parsedParams.RuleIds, ids...)
|
||||||
|
case TypeTask:
|
||||||
|
parsedParams.TaskIds = append(parsedParams.TaskIds, ids...)
|
||||||
|
case TypeTelegraf:
|
||||||
|
parsedParams.TelegrafIds = append(parsedParams.TelegrafIds, ids...)
|
||||||
|
case TypeVariable:
|
||||||
|
parsedParams.VariableIds = append(parsedParams.VariableIds, ids...)
|
||||||
|
|
||||||
|
// NOTE: The API doesn't support filtering by these resource subtypes,
|
||||||
|
// and instead converts them to the parent type. For example,
|
||||||
|
// `--resource-type notificationEndpointHTTP` gets translated to a filter
|
||||||
|
// on all notification endpoints on the server-side. I think this was
|
||||||
|
// intentional since the 2.0.x CLI didn't expose flags to filter on subtypes,
|
||||||
|
// but a bug/oversight in its parsing still allowed the subtypes through
|
||||||
|
// when passing IDs over stdin.
|
||||||
|
// Instead of allowing the type-filter to be silently converted by the server,
|
||||||
|
// we catch the previously-allowed subtypes here and return a (hopefully) useful
|
||||||
|
// error suggesting the correct flag to use.
|
||||||
|
case TypeCheckDeadman, TypeCheckThreshold:
|
||||||
|
return fmt.Errorf("filtering on resource-type %q is not supported by the API. Use resource-type %q instead", params.resourceType, TypeCheck)
|
||||||
|
case TypeNotificationEndpointHTTP, TypeNotificationEndpointPagerDuty, TypeNotificationEndpointSlack:
|
||||||
|
return fmt.Errorf("filtering on resource-type %q is not supported by the API. Use resource-type %q instead", params.resourceType, TypeNotificationEndpoint)
|
||||||
|
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
} else if ctx.NArg() > 0 {
|
||||||
|
return fmt.Errorf("must specify --resource-type when passing IDs as args")
|
||||||
|
}
|
||||||
|
|
||||||
|
client := export.Client{
|
||||||
|
CLI: getCLI(ctx),
|
||||||
|
TemplatesApi: getAPI(ctx).TemplatesApi,
|
||||||
|
}
|
||||||
|
return client.Export(ctx.Context, &parsedParams)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func splitNonEmpty(s string) []string {
|
||||||
|
if s == "" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return strings.Split(s, ",")
|
||||||
|
}
|
||||||
|
|
||||||
|
type ResourceType int
|
||||||
|
|
||||||
|
const (
|
||||||
|
TypeUnset ResourceType = iota
|
||||||
|
TypeBucket
|
||||||
|
TypeCheck
|
||||||
|
TypeCheckDeadman
|
||||||
|
TypeCheckThreshold
|
||||||
|
TypeDashboard
|
||||||
|
TypeLabel
|
||||||
|
TypeNotificationEndpoint
|
||||||
|
TypeNotificationEndpointHTTP
|
||||||
|
TypeNotificationEndpointPagerDuty
|
||||||
|
TypeNotificationEndpointSlack
|
||||||
|
TypeNotificationRule
|
||||||
|
TypeTask
|
||||||
|
TypeTelegraf
|
||||||
|
TypeVariable
|
||||||
|
)
|
||||||
|
|
||||||
|
func (r ResourceType) String() string {
|
||||||
|
switch r {
|
||||||
|
case TypeBucket:
|
||||||
|
return "bucket"
|
||||||
|
case TypeCheck:
|
||||||
|
return "check"
|
||||||
|
case TypeCheckDeadman:
|
||||||
|
return "checkDeadman"
|
||||||
|
case TypeCheckThreshold:
|
||||||
|
return "checkThreshold"
|
||||||
|
case TypeDashboard:
|
||||||
|
return "dashboard"
|
||||||
|
case TypeLabel:
|
||||||
|
return "label"
|
||||||
|
case TypeNotificationEndpoint:
|
||||||
|
return "notificationEndpoint"
|
||||||
|
case TypeNotificationEndpointHTTP:
|
||||||
|
return "notificationEndpointHTTP"
|
||||||
|
case TypeNotificationEndpointPagerDuty:
|
||||||
|
return "notificationEndpointPagerDuty"
|
||||||
|
case TypeNotificationEndpointSlack:
|
||||||
|
return "notificationEndpointSlack"
|
||||||
|
case TypeNotificationRule:
|
||||||
|
return "notificationRule"
|
||||||
|
case TypeTask:
|
||||||
|
return "task"
|
||||||
|
case TypeTelegraf:
|
||||||
|
return "telegraf"
|
||||||
|
case TypeVariable:
|
||||||
|
return "variable"
|
||||||
|
case TypeUnset:
|
||||||
|
fallthrough
|
||||||
|
default:
|
||||||
|
return "unset"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r *ResourceType) Set(v string) error {
|
||||||
|
switch strings.ToLower(v) {
|
||||||
|
case "bucket":
|
||||||
|
*r = TypeBucket
|
||||||
|
case "check":
|
||||||
|
*r = TypeCheck
|
||||||
|
case "checkdeadman":
|
||||||
|
*r = TypeCheckDeadman
|
||||||
|
case "checkthreshold":
|
||||||
|
*r = TypeCheckThreshold
|
||||||
|
case "dashboard":
|
||||||
|
*r = TypeDashboard
|
||||||
|
case "label":
|
||||||
|
*r = TypeLabel
|
||||||
|
case "notificationendpoint":
|
||||||
|
*r = TypeNotificationEndpoint
|
||||||
|
case "notificationendpointhttp":
|
||||||
|
*r = TypeNotificationEndpointHTTP
|
||||||
|
case "notificationendpointpagerduty":
|
||||||
|
*r = TypeNotificationEndpointPagerDuty
|
||||||
|
case "notificationendpointslack":
|
||||||
|
*r = TypeNotificationEndpointSlack
|
||||||
|
case "notificationrule":
|
||||||
|
*r = TypeNotificationRule
|
||||||
|
case "task":
|
||||||
|
*r = TypeTask
|
||||||
|
case "telegraf":
|
||||||
|
*r = TypeTelegraf
|
||||||
|
case "variable":
|
||||||
|
*r = TypeVariable
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("unknown resource type: %s", v)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
@ -48,6 +48,7 @@ var app = cli.App{
|
|||||||
newRestoreCmd(),
|
newRestoreCmd(),
|
||||||
newTelegrafsCommand(),
|
newTelegrafsCommand(),
|
||||||
newDashboardsCommand(),
|
newDashboardsCommand(),
|
||||||
|
newExportCmd(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
2
go.mod
2
go.mod
@ -12,10 +12,12 @@ require (
|
|||||||
github.com/golang/mock v1.5.0
|
github.com/golang/mock v1.5.0
|
||||||
github.com/google/go-cmp v0.5.5
|
github.com/google/go-cmp v0.5.5
|
||||||
github.com/kr/pretty v0.1.0 // indirect
|
github.com/kr/pretty v0.1.0 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.13
|
||||||
github.com/stretchr/testify v1.7.0
|
github.com/stretchr/testify v1.7.0
|
||||||
github.com/urfave/cli/v2 v2.3.0
|
github.com/urfave/cli/v2 v2.3.0
|
||||||
golang.org/x/text v0.3.3
|
golang.org/x/text v0.3.3
|
||||||
golang.org/x/tools v0.1.0
|
golang.org/x/tools v0.1.0
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c
|
||||||
honnef.co/go/tools v0.1.3
|
honnef.co/go/tools v0.1.3
|
||||||
)
|
)
|
||||||
|
4
go.sum
4
go.sum
@ -37,8 +37,9 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
|
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
|
||||||
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
|
||||||
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
|
|
||||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
|
github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA=
|
||||||
|
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b h1:j7+1HpAFS1zy5+Q4qx1fWh90gTKwiN4QCGoY9TWyyO4=
|
||||||
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
@ -71,6 +72,7 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190530182044-ad28b68e88f1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
||||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
Reference in New Issue
Block a user