Импорт хранилища/встроенного/учетных данных/aws добавляет флаги тестирования в приложение командной строки.

Я создаю быстрое и грязное приложение Go для извлечения секретов приложения из Vault и аутентификации с использованием самого кода Vault. В рамках этого я импортирую модуль учетных данных aws из github.com/hashicorp/vault/builtin/credential/aws. Это все работает хорошо.

Однако при запуске моего приложения я замечаю, что флаги командной строки из модуля «тестирования» Go появляются в файле flags.

Это можно воспроизвести, скомпилировав и запустив следующий пример скрипта:

package main

import (
    "flag"
    _ "github.com/hashicorp/vault/builtin/credential/aws"
    // Note: this import is masked only to make this demo script compile.
    // In my actual code I need to use it, and it is not masked.
)

var myFlag string

func main() {
    flag.StringVar(
        &myFlag, "myFlag", "", "Test flag",
    )
    flag.Parse()
    flag.Usage()
}

Флаги выглядят так при вызове бинарника:

Usage of poc:
  -myFlag string
        Test flag
  -test.bench regexp
        run only benchmarks matching regexp
  -test.benchmem
        print memory allocations for benchmarks
  -test.benchtime d
        run each benchmark for duration d (default 1s)
  -test.blockprofile file
        write a goroutine blocking profile to file
  -test.blockprofilerate rate
        set blocking profile rate (see runtime.SetBlockProfileRate) (default 1)
  -test.count n
        run tests and benchmarks n times (default 1)
  [... more flags from the go testing module ...]

Я новичок в Go, поэтому вполне возможно, что я делаю что-то, чего не должен здесь делать, но на первый взгляд кажется разумным импортировать этот модуль для инструмента командной строки.

Насколько я вижу, ничто в модуле не использует библиотеку тестирования (кроме backend_test.go), поэтому я немного запутался в том, как появляются эти флаги, особенно потому, что они не отображаются в командной строке Vault. сам интерфейс.

Можно ли импортировать и использовать модуль учетных данных/aws Vault без включения этих флагов? Или как-то очистить флаги тестирования, прежде чем определять свои собственные?


person Alex Forbes    schedule 02.01.2018    source источник
comment
К вашему сведению, hashicorp предпочитает определять тестовые хелперы в testing.go, а не в _test.go файлах, чтобы потом хелперы можно было импортировать и использовать в других пакетах. В случае с пакетом aws некоторые из его нетестируемых файлов импортируют пакет framework, у которого есть файл testing.go, который импортирует пакет testing из стандартной библиотеки. Итак, просто будьте готовы при использовании библиотек hashicorp к тому, что ваше пространство флагов будет загрязнено флагами тестирования.   -  person mkopriva    schedule 02.01.2018
comment
Спасибо, это приятно знать. Похоже, что использование отдельного пространства флагов — это путь.   -  person Alex Forbes    schedule 02.01.2018


Ответы (1)


Это потому, что даже если вы используете _ для маскирования github.com/hashicorp/vault/builtin/credential/aws, импорт действительно произошел. И пакет импортировал testing, которые генерируют все эти флаги.

Вы можете избавиться от флагов testing, используя новый набор флагов.

func main() {
    f:=flag.NewFlagSet("Your app name",flag.ExitOnError)
    f.StringVar(
        &myFlag, "myFlag", "", "Test flag",
    )
    f.Parse(os.Args)
    f.Usage()
}

Игровая площадка: https://play.golang.org/p/O8ibPn77L46

person leaf bebop    schedule 02.01.2018
comment
Извините, я, возможно, не совсем понял, этот скрипт предназначен для демонстрации проблемы и не является моим фактическим кодом. Мне нужно использовать модуль aws, и это правильно, что он импортирован, однако я не хочу, чтобы флаги из модуль тестирования в моем приложении. - person Alex Forbes; 02.01.2018