refactor: move things around to make building a client easier from other projects (#123)
* refactor: split logic for building API config into public func * refactor: move config code out of internal/
This commit is contained in:
44
api/configuration_default.go
Normal file
44
api/configuration_default.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/tls"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConfigParams struct {
|
||||||
|
Host *url.URL
|
||||||
|
UserAgent string
|
||||||
|
Token *string
|
||||||
|
TraceId *string
|
||||||
|
AllowInsecureTLS bool
|
||||||
|
Debug bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewAPIConfig builds a configuration tailored to the InfluxDB v2 API.
|
||||||
|
func NewAPIConfig(params ConfigParams) *Configuration {
|
||||||
|
clientTransport := http.DefaultTransport.(*http.Transport).Clone()
|
||||||
|
clientTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: params.AllowInsecureTLS}
|
||||||
|
|
||||||
|
apiConfig := NewConfiguration()
|
||||||
|
apiConfig.Host = params.Host.Host
|
||||||
|
apiConfig.Scheme = params.Host.Scheme
|
||||||
|
apiConfig.UserAgent = params.UserAgent
|
||||||
|
apiConfig.HTTPClient = &http.Client{Transport: clientTransport}
|
||||||
|
if params.Token != nil {
|
||||||
|
apiConfig.DefaultHeader["Authorization"] = fmt.Sprintf("Token %s", *params.Token)
|
||||||
|
}
|
||||||
|
if params.TraceId != nil {
|
||||||
|
// NOTE: This is circumventing our codegen. If the header we use for tracing ever changes,
|
||||||
|
// we'll need to manually update the string here to match.
|
||||||
|
//
|
||||||
|
// The alternative is to pass the trace ID to the business logic for every CLI command, and
|
||||||
|
// use codegen'd logic to set the header on every HTTP request. Early versions of the CLI
|
||||||
|
// used that technique, and we found it to be error-prone and easy to forget during testing.
|
||||||
|
apiConfig.DefaultHeader["Zap-Trace-Span"] = *params.TraceId
|
||||||
|
}
|
||||||
|
apiConfig.Debug = params.Debug
|
||||||
|
|
||||||
|
return apiConfig
|
||||||
|
}
|
@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -3,7 +3,7 @@ package clients
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/tabwriter"
|
"github.com/influxdata/influx-cli/v2/internal/tabwriter"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/stdio"
|
"github.com/influxdata/influx-cli/v2/pkg/stdio"
|
||||||
)
|
)
|
||||||
|
@ -7,7 +7,7 @@ import (
|
|||||||
|
|
||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
var ErrInvalidHostUrlScheme = errors.New("a scheme of http or https must be provided for host url")
|
var ErrInvalidHostUrlScheme = errors.New("a scheme of http or https must be provided for host url")
|
||||||
|
@ -9,8 +9,8 @@ import (
|
|||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/config"
|
cmd "github.com/influxdata/influx-cli/v2/clients/config"
|
||||||
iconfig "github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
@ -25,7 +25,7 @@ func TestClient_SwitchActive(t *testing.T) {
|
|||||||
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
||||||
|
|
||||||
name := "foo"
|
name := "foo"
|
||||||
cfg := iconfig.Config{
|
cfg := config.Config{
|
||||||
Name: name,
|
Name: name,
|
||||||
Active: true,
|
Active: true,
|
||||||
Host: "http://localhost:8086",
|
Host: "http://localhost:8086",
|
||||||
@ -35,7 +35,7 @@ func TestClient_SwitchActive(t *testing.T) {
|
|||||||
svc := mock.NewMockConfigService(ctrl)
|
svc := mock.NewMockConfigService(ctrl)
|
||||||
svc.EXPECT().SwitchActive(gomock.Eq(name)).Return(cfg, nil)
|
svc.EXPECT().SwitchActive(gomock.Eq(name)).Return(cfg, nil)
|
||||||
|
|
||||||
cli := config.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
cli := cmd.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
||||||
require.NoError(t, cli.SwitchActive(name))
|
require.NoError(t, cli.SwitchActive(name))
|
||||||
testutils.MatchLines(t, []string{
|
testutils.MatchLines(t, []string{
|
||||||
`Active\s+Name\s+URL\s+Org`,
|
`Active\s+Name\s+URL\s+Org`,
|
||||||
@ -51,7 +51,7 @@ func TestClient_PrintActive(t *testing.T) {
|
|||||||
writtenBytes := bytes.Buffer{}
|
writtenBytes := bytes.Buffer{}
|
||||||
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
||||||
|
|
||||||
cfg := iconfig.Config{
|
cfg := config.Config{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
Active: true,
|
Active: true,
|
||||||
Host: "http://localhost:8086",
|
Host: "http://localhost:8086",
|
||||||
@ -61,7 +61,7 @@ func TestClient_PrintActive(t *testing.T) {
|
|||||||
svc := mock.NewMockConfigService(ctrl)
|
svc := mock.NewMockConfigService(ctrl)
|
||||||
svc.EXPECT().Active().Return(cfg, nil)
|
svc.EXPECT().Active().Return(cfg, nil)
|
||||||
|
|
||||||
cli := config.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
cli := cmd.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
||||||
require.NoError(t, cli.PrintActive())
|
require.NoError(t, cli.PrintActive())
|
||||||
testutils.MatchLines(t, []string{
|
testutils.MatchLines(t, []string{
|
||||||
`Active\s+Name\s+URL\s+Org`,
|
`Active\s+Name\s+URL\s+Org`,
|
||||||
@ -77,7 +77,7 @@ func TestClient_Create(t *testing.T) {
|
|||||||
writtenBytes := bytes.Buffer{}
|
writtenBytes := bytes.Buffer{}
|
||||||
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
||||||
|
|
||||||
cfg := iconfig.Config{
|
cfg := config.Config{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
Active: true,
|
Active: true,
|
||||||
Host: "http://localhost:8086",
|
Host: "http://localhost:8086",
|
||||||
@ -87,7 +87,7 @@ func TestClient_Create(t *testing.T) {
|
|||||||
svc := mock.NewMockConfigService(ctrl)
|
svc := mock.NewMockConfigService(ctrl)
|
||||||
svc.EXPECT().CreateConfig(cfg).Return(cfg, nil)
|
svc.EXPECT().CreateConfig(cfg).Return(cfg, nil)
|
||||||
|
|
||||||
cli := config.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
cli := cmd.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
||||||
require.NoError(t, cli.Create(cfg))
|
require.NoError(t, cli.Create(cfg))
|
||||||
testutils.MatchLines(t, []string{
|
testutils.MatchLines(t, []string{
|
||||||
`Active\s+Name\s+URL\s+Org`,
|
`Active\s+Name\s+URL\s+Org`,
|
||||||
@ -112,7 +112,7 @@ func TestClient_Delete(t *testing.T) {
|
|||||||
in: []string{"foo"},
|
in: []string{"foo"},
|
||||||
registerExpectations: func(svc *mock.MockConfigService) {
|
registerExpectations: func(svc *mock.MockConfigService) {
|
||||||
svc.EXPECT().DeleteConfig(gomock.Eq("foo")).
|
svc.EXPECT().DeleteConfig(gomock.Eq("foo")).
|
||||||
Return(iconfig.Config{Name: "foo", Host: "bar", Org: "baz"}, nil)
|
Return(config.Config{Name: "foo", Host: "bar", Org: "baz"}, nil)
|
||||||
},
|
},
|
||||||
out: []string{`\s+foo\s+bar\s+baz\s+true`},
|
out: []string{`\s+foo\s+bar\s+baz\s+true`},
|
||||||
},
|
},
|
||||||
@ -121,11 +121,11 @@ func TestClient_Delete(t *testing.T) {
|
|||||||
in: []string{"foo", "qux", "wibble"},
|
in: []string{"foo", "qux", "wibble"},
|
||||||
registerExpectations: func(svc *mock.MockConfigService) {
|
registerExpectations: func(svc *mock.MockConfigService) {
|
||||||
svc.EXPECT().DeleteConfig(gomock.Eq("foo")).
|
svc.EXPECT().DeleteConfig(gomock.Eq("foo")).
|
||||||
Return(iconfig.Config{Name: "foo", Host: "bar", Org: "baz"}, nil)
|
Return(config.Config{Name: "foo", Host: "bar", Org: "baz"}, nil)
|
||||||
svc.EXPECT().DeleteConfig(gomock.Eq("qux")).
|
svc.EXPECT().DeleteConfig(gomock.Eq("qux")).
|
||||||
Return(iconfig.Config{}, &api.Error{Code: api.ERRORCODE_NOT_FOUND})
|
Return(config.Config{}, &api.Error{Code: api.ERRORCODE_NOT_FOUND})
|
||||||
svc.EXPECT().DeleteConfig(gomock.Eq("wibble")).
|
svc.EXPECT().DeleteConfig(gomock.Eq("wibble")).
|
||||||
Return(iconfig.Config{Name: "wibble", Host: "bar", Active: true}, nil)
|
Return(config.Config{Name: "wibble", Host: "bar", Active: true}, nil)
|
||||||
},
|
},
|
||||||
out: []string{
|
out: []string{
|
||||||
`\s+foo\s+bar\s+baz\s+true`,
|
`\s+foo\s+bar\s+baz\s+true`,
|
||||||
@ -149,7 +149,7 @@ func TestClient_Delete(t *testing.T) {
|
|||||||
tc.registerExpectations(svc)
|
tc.registerExpectations(svc)
|
||||||
}
|
}
|
||||||
|
|
||||||
cli := config.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
cli := cmd.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
||||||
require.NoError(t, cli.Delete(tc.in))
|
require.NoError(t, cli.Delete(tc.in))
|
||||||
|
|
||||||
// Can't use our usual 'MatchLines' because list output depends on map iteration,
|
// Can't use our usual 'MatchLines' because list output depends on map iteration,
|
||||||
@ -170,12 +170,12 @@ func TestClient_Update(t *testing.T) {
|
|||||||
writtenBytes := bytes.Buffer{}
|
writtenBytes := bytes.Buffer{}
|
||||||
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
stdio.EXPECT().Write(gomock.Any()).DoAndReturn(writtenBytes.Write).AnyTimes()
|
||||||
|
|
||||||
updates := iconfig.Config{
|
updates := config.Config{
|
||||||
Name: "foo",
|
Name: "foo",
|
||||||
Active: true,
|
Active: true,
|
||||||
Token: "doublesecret",
|
Token: "doublesecret",
|
||||||
}
|
}
|
||||||
cfg := iconfig.Config{
|
cfg := config.Config{
|
||||||
Name: updates.Name,
|
Name: updates.Name,
|
||||||
Active: updates.Active,
|
Active: updates.Active,
|
||||||
Host: "http://localhost:8086",
|
Host: "http://localhost:8086",
|
||||||
@ -185,7 +185,7 @@ func TestClient_Update(t *testing.T) {
|
|||||||
svc := mock.NewMockConfigService(ctrl)
|
svc := mock.NewMockConfigService(ctrl)
|
||||||
svc.EXPECT().UpdateConfig(updates).Return(cfg, nil)
|
svc.EXPECT().UpdateConfig(updates).Return(cfg, nil)
|
||||||
|
|
||||||
cli := config.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
cli := cmd.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
||||||
require.NoError(t, cli.Update(updates))
|
require.NoError(t, cli.Update(updates))
|
||||||
testutils.MatchLines(t, []string{
|
testutils.MatchLines(t, []string{
|
||||||
`Active\s+Name\s+URL\s+Org`,
|
`Active\s+Name\s+URL\s+Org`,
|
||||||
@ -198,7 +198,7 @@ func TestClient_List(t *testing.T) {
|
|||||||
|
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
name string
|
name string
|
||||||
cfgs iconfig.Configs
|
cfgs config.Configs
|
||||||
expected []string
|
expected []string
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
@ -206,16 +206,16 @@ func TestClient_List(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "one",
|
name: "one",
|
||||||
cfgs: iconfig.Configs{
|
cfgs: config.Configs{
|
||||||
"foo": iconfig.Config{Name: "foo", Host: "bar", Org: "baz"},
|
"foo": config.Config{Name: "foo", Host: "bar", Org: "baz"},
|
||||||
},
|
},
|
||||||
expected: []string{`\s+foo\s+bar\s+baz`},
|
expected: []string{`\s+foo\s+bar\s+baz`},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "many",
|
name: "many",
|
||||||
cfgs: iconfig.Configs{
|
cfgs: config.Configs{
|
||||||
"foo": iconfig.Config{Name: "foo", Host: "bar", Org: "baz"},
|
"foo": config.Config{Name: "foo", Host: "bar", Org: "baz"},
|
||||||
"wibble": iconfig.Config{Name: "wibble", Host: "bar", Active: true},
|
"wibble": config.Config{Name: "wibble", Host: "bar", Active: true},
|
||||||
},
|
},
|
||||||
expected: []string{
|
expected: []string{
|
||||||
`\s+foo\s+bar\s+baz`,
|
`\s+foo\s+bar\s+baz`,
|
||||||
@ -237,7 +237,7 @@ func TestClient_List(t *testing.T) {
|
|||||||
svc := mock.NewMockConfigService(ctrl)
|
svc := mock.NewMockConfigService(ctrl)
|
||||||
svc.EXPECT().ListConfigs().Return(tc.cfgs, nil)
|
svc.EXPECT().ListConfigs().Return(tc.cfgs, nil)
|
||||||
|
|
||||||
cli := config.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
cli := cmd.Client{CLI: clients.CLI{ConfigService: svc, StdIO: stdio}}
|
||||||
require.NoError(t, cli.List())
|
require.NoError(t, cli.List())
|
||||||
|
|
||||||
// Can't use our usual 'MatchLines' because list output depends on map iteration,
|
// Can't use our usual 'MatchLines' because list output depends on map iteration,
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/delete"
|
"github.com/influxdata/influx-cli/v2/clients/delete"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/org"
|
"github.com/influxdata/influx-cli/v2/clients/org"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
||||||
|
@ -14,7 +14,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/query"
|
"github.com/influxdata/influx-cli/v2/clients/query"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
"github.com/influxdata/influx-cli/v2/clients/bucket"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/duration"
|
"github.com/influxdata/influx-cli/v2/internal/duration"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/setup"
|
"github.com/influxdata/influx-cli/v2/clients/setup"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/duration"
|
"github.com/influxdata/influx-cli/v2/internal/duration"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
|
@ -11,7 +11,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/user"
|
"github.com/influxdata/influx-cli/v2/clients/user"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
"github.com/influxdata/influx-cli/v2/internal/testutils"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
"github.com/influxdata/influx-cli/v2/pkg/influxid"
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/write"
|
"github.com/influxdata/influx-cli/v2/clients/write"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/clients/write"
|
"github.com/influxdata/influx-cli/v2/clients/write"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/mock"
|
"github.com/influxdata/influx-cli/v2/internal/mock"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
tmock "github.com/stretchr/testify/mock"
|
tmock "github.com/stretchr/testify/mock"
|
||||||
|
@ -5,8 +5,8 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/influxdata/influx-cli/v2/clients/config"
|
cmd "github.com/influxdata/influx-cli/v2/clients/config"
|
||||||
iconfig "github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -48,7 +48,7 @@ https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|||||||
if ctx.NArg() > 1 {
|
if ctx.NArg() > 1 {
|
||||||
return fmt.Errorf("usage: %s config [config name]", prog)
|
return fmt.Errorf("usage: %s config [config name]", prog)
|
||||||
}
|
}
|
||||||
client := config.Client{CLI: getCLI(ctx)}
|
client := cmd.Client{CLI: getCLI(ctx)}
|
||||||
if ctx.NArg() == 1 {
|
if ctx.NArg() == 1 {
|
||||||
return client.SwitchActive(ctx.Args().Get(0))
|
return client.SwitchActive(ctx.Args().Get(0))
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/
|
|||||||
}
|
}
|
||||||
|
|
||||||
func newConfigCreateCmd() *cli.Command {
|
func newConfigCreateCmd() *cli.Command {
|
||||||
var cfg iconfig.Config
|
var cfg config.Config
|
||||||
return &cli.Command{
|
return &cli.Command{
|
||||||
Name: "create",
|
Name: "create",
|
||||||
Usage: "Create config",
|
Usage: "Create config",
|
||||||
@ -122,7 +122,7 @@ https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/create/
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
Action: func(ctx *cli.Context) error {
|
Action: func(ctx *cli.Context) error {
|
||||||
client := config.Client{CLI: getCLI(ctx)}
|
client := cmd.Client{CLI: getCLI(ctx)}
|
||||||
return client.Create(cfg)
|
return client.Create(cfg)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -153,14 +153,14 @@ https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/rm/
|
|||||||
Before: withCli(),
|
Before: withCli(),
|
||||||
Flags: append([]cli.Flag{configPathFlag()}, printFlags()...),
|
Flags: append([]cli.Flag{configPathFlag()}, printFlags()...),
|
||||||
Action: func(ctx *cli.Context) error {
|
Action: func(ctx *cli.Context) error {
|
||||||
client := config.Client{CLI: getCLI(ctx)}
|
client := cmd.Client{CLI: getCLI(ctx)}
|
||||||
return client.Delete(ctx.Args().Slice())
|
return client.Delete(ctx.Args().Slice())
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func newConfigUpdateCmd() *cli.Command {
|
func newConfigUpdateCmd() *cli.Command {
|
||||||
var cfg iconfig.Config
|
var cfg config.Config
|
||||||
return &cli.Command{
|
return &cli.Command{
|
||||||
Name: "set",
|
Name: "set",
|
||||||
Aliases: []string{"update"},
|
Aliases: []string{"update"},
|
||||||
@ -217,7 +217,7 @@ https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/set/
|
|||||||
},
|
},
|
||||||
),
|
),
|
||||||
Action: func(ctx *cli.Context) error {
|
Action: func(ctx *cli.Context) error {
|
||||||
client := config.Client{CLI: getCLI(ctx)}
|
client := cmd.Client{CLI: getCLI(ctx)}
|
||||||
return client.Update(cfg)
|
return client.Update(cfg)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -249,7 +249,7 @@ https://docs.influxdata.com/influxdb/latest/reference/cli/influx/config/list/
|
|||||||
Before: withCli(),
|
Before: withCli(),
|
||||||
Flags: configPathAndPrintFlags,
|
Flags: configPathAndPrintFlags,
|
||||||
Action: func(ctx *cli.Context) error {
|
Action: func(ctx *cli.Context) error {
|
||||||
client := config.Client{CLI: getCLI(ctx)}
|
client := cmd.Client{CLI: getCLI(ctx)}
|
||||||
return client.List()
|
return client.List()
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,13 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
|
||||||
"net/url"
|
"net/url"
|
||||||
"runtime"
|
"runtime"
|
||||||
|
|
||||||
"github.com/influxdata/influx-cli/v2/api"
|
"github.com/influxdata/influx-cli/v2/api"
|
||||||
"github.com/influxdata/influx-cli/v2/clients"
|
"github.com/influxdata/influx-cli/v2/clients"
|
||||||
"github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/cli/middleware"
|
"github.com/influxdata/influx-cli/v2/pkg/cli/middleware"
|
||||||
"github.com/influxdata/influx-cli/v2/pkg/stdio"
|
"github.com/influxdata/influx-cli/v2/pkg/stdio"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
@ -71,34 +69,26 @@ func newApiClient(ctx *cli.Context, configSvc config.Service, injectToken bool)
|
|||||||
cfg.Host = ctx.String(hostFlagName)
|
cfg.Host = ctx.String(hostFlagName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configParams := api.ConfigParams{
|
||||||
|
UserAgent: fmt.Sprintf("influx/%s (%s) Sha/%s Date/%s", version, runtime.GOOS, commit, date),
|
||||||
|
AllowInsecureTLS: ctx.Bool(skipVerifyFlagName),
|
||||||
|
Debug: ctx.Bool(httpDebugFlagName),
|
||||||
|
}
|
||||||
|
|
||||||
parsedHost, err := url.Parse(cfg.Host)
|
parsedHost, err := url.Parse(cfg.Host)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("host URL %q is invalid: %w", cfg.Host, err)
|
return nil, fmt.Errorf("host URL %q is invalid: %w", cfg.Host, err)
|
||||||
}
|
}
|
||||||
|
configParams.Host = parsedHost
|
||||||
|
|
||||||
clientTransport := http.DefaultTransport.(*http.Transport)
|
|
||||||
clientTransport.TLSClientConfig = &tls.Config{InsecureSkipVerify: ctx.Bool(skipVerifyFlagName)}
|
|
||||||
|
|
||||||
apiConfig := api.NewConfiguration()
|
|
||||||
apiConfig.Host = parsedHost.Host
|
|
||||||
apiConfig.Scheme = parsedHost.Scheme
|
|
||||||
apiConfig.UserAgent = fmt.Sprintf("influx/%s (%s) Sha/%s Date/%s", version, runtime.GOOS, commit, date)
|
|
||||||
apiConfig.HTTPClient = &http.Client{Transport: clientTransport}
|
|
||||||
if injectToken {
|
if injectToken {
|
||||||
apiConfig.DefaultHeader["Authorization"] = fmt.Sprintf("Token %s", cfg.Token)
|
configParams.Token = &cfg.Token
|
||||||
}
|
}
|
||||||
if ctx.IsSet(traceIdFlagName) {
|
if ctx.IsSet(traceIdFlagName) {
|
||||||
// NOTE: This is circumventing our codegen. If the header we use for tracing ever changes,
|
configParams.TraceId = api.PtrString(ctx.String(traceIdFlagName))
|
||||||
// we'll need to manually update the string here to match.
|
|
||||||
//
|
|
||||||
// The alternative is to pass the trace ID to the business logic for every CLI command, and
|
|
||||||
// use codegen'd logic to set the header on every HTTP request. Early versions of the CLI
|
|
||||||
// used that technique, and we found it to be error-prone and easy to forget during testing.
|
|
||||||
apiConfig.DefaultHeader["Zap-Trace-Span"] = ctx.String(traceIdFlagName)
|
|
||||||
}
|
}
|
||||||
apiConfig.Debug = ctx.Bool(httpDebugFlagName)
|
|
||||||
|
|
||||||
return api.NewAPIClient(apiConfig), nil
|
return api.NewAPIClient(api.NewAPIConfig(configParams)), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func withCli() cli.BeforeFunc {
|
func withCli() cli.BeforeFunc {
|
||||||
|
@ -5,10 +5,10 @@
|
|||||||
package mock
|
package mock
|
||||||
|
|
||||||
import (
|
import (
|
||||||
reflect "reflect"
|
"reflect"
|
||||||
|
|
||||||
gomock "github.com/golang/mock/gomock"
|
"github.com/golang/mock/gomock"
|
||||||
config "github.com/influxdata/influx-cli/v2/internal/config"
|
"github.com/influxdata/influx-cli/v2/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
// MockConfigService is a mock of Service interface.
|
// MockConfigService is a mock of Service interface.
|
||||||
|
@ -13,5 +13,5 @@ package mock
|
|||||||
//go:generate go run github.com/golang/mock/mockgen -package mock -destination api_backup.gen.go github.com/influxdata/influx-cli/v2/api BackupApi
|
//go:generate go run github.com/golang/mock/mockgen -package mock -destination api_backup.gen.go github.com/influxdata/influx-cli/v2/api BackupApi
|
||||||
|
|
||||||
// Other mocks
|
// Other mocks
|
||||||
//go:generate go run github.com/golang/mock/mockgen -package mock -destination config.gen.go -mock_names Service=MockConfigService github.com/influxdata/influx-cli/v2/internal/config Service
|
//go:generate go run github.com/golang/mock/mockgen -package mock -destination config.gen.go -mock_names Service=MockConfigService github.com/influxdata/influx-cli/v2/config Service
|
||||||
//go:generate go run github.com/golang/mock/mockgen -package mock -destination stdio.gen.go github.com/influxdata/influx-cli/v2/pkg/stdio StdIO
|
//go:generate go run github.com/golang/mock/mockgen -package mock -destination stdio.gen.go github.com/influxdata/influx-cli/v2/pkg/stdio StdIO
|
||||||
|
Reference in New Issue
Block a user