Skip to content

Auto configure operator URL #401

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 9 commits into from
Aug 30, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 23 additions & 27 deletions cli/cmd/lib_cli_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ import (
"github.com/cortexlabs/cortex/pkg/lib/json"
)

var cachedCliConfig *CliConfig
var cachedCliConfigErrs []error
var cachedCLIConfig *CLIConfig
var cachedCLIConfigErrs []error
var localDir string

func init() {
Expand All @@ -45,13 +45,13 @@ func init() {
}
}

type CliConfig struct {
type CLIConfig struct {
CortexURL string `json:"cortex_url"`
AWSAccessKeyID string `json:"aws_access_key_id"`
AWSSecretAccessKey string `json:"aws_secret_access_key"`
}

func getPromptValidation(defaults *CliConfig) *cr.PromptValidation {
func getPromptValidation(defaults *CLIConfig) *cr.PromptValidation {
return &cr.PromptValidation{
PromptItemValidations: []*cr.PromptItemValidation{
{
Expand Down Expand Up @@ -124,13 +124,13 @@ func configPath() string {
return filepath.Join(localDir, flagEnv+".json")
}

func readCliConfig() (*CliConfig, []error) {
if cachedCliConfig != nil {
return cachedCliConfig, cachedCliConfigErrs
func readCLIConfig() (*CLIConfig, []error) {
if cachedCLIConfig != nil {
return cachedCLIConfig, cachedCLIConfigErrs
}

configPath := configPath()
cachedCliConfig = &CliConfig{}
cachedCLIConfig = &CLIConfig{}

configBytes, err := files.ReadFileBytes(configPath)
if err != nil {
Expand All @@ -139,27 +139,26 @@ func readCliConfig() (*CliConfig, []error) {

cliConfigData, err := cr.ReadJSONBytes(configBytes)
if err != nil {
cachedCliConfigErrs = []error{err}
return cachedCliConfig, cachedCliConfigErrs
cachedCLIConfigErrs = []error{err}
return cachedCLIConfig, cachedCLIConfigErrs
}

cachedCliConfigErrs = cr.Struct(cachedCliConfig, cliConfigData, fileValidation)
return cachedCliConfig, errors.WrapMultiple(cachedCliConfigErrs, configPath)
cachedCLIConfigErrs = cr.Struct(cachedCLIConfig, cliConfigData, fileValidation)
return cachedCLIConfig, errors.WrapMultiple(cachedCLIConfigErrs, configPath)
}

func getValidCliConfig() *CliConfig {
cliConfig, errs := readCliConfig()
func getValidCLIConfig() *CLIConfig {
cliConfig, errs := readCLIConfig()
if len(errs) > 0 {
fmt.Printf("Environment \"%s\" is not configured, configuring now:\n", flagEnv)
cliConfig = configure()
}
return cliConfig
}

func getDefaults() *CliConfig {
defaults, _ := readCliConfig()
func getDefaults() *CLIConfig {
defaults, _ := readCLIConfig()
if defaults == nil {
defaults = &CliConfig{}
defaults = &CLIConfig{}
}

if defaults.AWSAccessKeyID == "" && os.Getenv("AWS_ACCESS_KEY_ID") != "" {
Expand All @@ -175,21 +174,18 @@ func getDefaults() *CliConfig {
return defaults
}

func configure() *CliConfig {
func configure() *CLIConfig {
defaults := getDefaults()

cachedCliConfig = &CliConfig{}
cachedCLIConfig = &CLIConfig{}
fmt.Println("\nEnvironment: " + flagEnv + "\n")
err := cr.ReadPrompt(cachedCliConfig, getPromptValidation(defaults))
err := cr.ReadPrompt(cachedCLIConfig, getPromptValidation(defaults))
if err != nil {
errors.Exit(err)
}

err = json.WriteJSON(cachedCliConfig, configPath())
if err != nil {
if err := json.WriteJSON(cachedCLIConfig, configPath()); err != nil {
errors.Exit(err)
}
cachedCliConfigErrs = nil
cachedCLIConfigErrs = nil

return cachedCliConfig
return cachedCLIConfig
}
10 changes: 5 additions & 5 deletions cli/cmd/lib_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -179,15 +179,15 @@ func StreamLogs(appName string, resourceName string, resourceType string) error

connection, response, err := dialer.Dial(wsURL, header)
if response == nil {
cliConfig := getValidCliConfig()
cliConfig := getValidCLIConfig()
return ErrorFailedToConnect(strings.Replace(cliConfig.CortexURL, "http", "ws", 1))
}
defer response.Body.Close()

if err != nil {
bodyBytes, err := ioutil.ReadAll(response.Body)
if err != nil || bodyBytes == nil || string(bodyBytes) == "" {
cliConfig := getValidCliConfig()
cliConfig := getValidCLIConfig()
return ErrorFailedToConnect(strings.Replace(cliConfig.CortexURL, "http", "ws", 1))
}
var output schema.ErrorResponse
Expand Down Expand Up @@ -245,7 +245,7 @@ func closeConnection(connection *websocket.Conn, done chan struct{}, interrupt c
}

func operatorRequest(method string, endpoint string, body io.Reader, qParams []map[string]string) (*http.Request, error) {
cliConfig := getValidCliConfig()
cliConfig := getValidCLIConfig()
req, err := http.NewRequest(method, cliConfig.CortexURL+endpoint, body)
if err != nil {
return nil, errors.Wrap(err, errStrCantMakeRequest)
Expand All @@ -268,7 +268,7 @@ func (client *cortexClient) makeRequest(request *http.Request) ([]byte, error) {

response, err := client.Do(request)
if err != nil {
cliConfig := getValidCliConfig()
cliConfig := getValidCLIConfig()
return nil, ErrorFailedToConnect(cliConfig.CortexURL)
}
defer response.Body.Close()
Expand Down Expand Up @@ -296,6 +296,6 @@ func (client *cortexClient) makeRequest(request *http.Request) ([]byte, error) {
}

func authHeader() string {
cliConfig := getValidCliConfig()
cliConfig := getValidCLIConfig()
return fmt.Sprintf("CortexAWS %s|%s", cliConfig.AWSAccessKeyID, cliConfig.AWSSecretAccessKey)
}
2 changes: 1 addition & 1 deletion cortex.sh
Original file line number Diff line number Diff line change
Expand Up @@ -216,7 +216,7 @@ function uninstall_eks() {

function install_cortex() {
echo
docker run -it --entrypoint /root/install_cortex.sh \
docker run -it -v $HOME/.cortex:/.cortex --entrypoint /root/install_cortex.sh \
-e AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
-e AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
-e CORTEX_AWS_ACCESS_KEY_ID=$CORTEX_AWS_ACCESS_KEY_ID \
Expand Down
2 changes: 1 addition & 1 deletion dev/operator_local.sh
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ source $ROOT/dev/config/cortex.sh
export CORTEX_OPERATOR_IN_CLUSTER=false

kill $(pgrep -f rerun) >/dev/null 2>&1 || true

updated_config=$(cat $HOME/.cortex/dev.json | jq '.cortex_url = "http://localhost:8888"') && echo $updated_config > $HOME/.cortex/dev.json
rerun -watch $ROOT/pkg $ROOT/cli -ignore $ROOT/vendor $ROOT/bin -run sh -c \
"go build -o $ROOT/bin/operator $ROOT/pkg/operator && go build -installsuffix cgo -o $ROOT/bin/cortex $ROOT/cli && $ROOT/bin/operator"

Expand Down
2 changes: 0 additions & 2 deletions manager/info.sh
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,3 @@ apis_endpoint=$(get_apis_endpoint)

echo "Operator endpoint: $operator_endpoint"
echo "APIs endpoint: $apis_endpoint"

echo -e "\nRun \`cortex configure\` to configure your CLI"
2 changes: 2 additions & 0 deletions manager/install_cortex.sh
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ function validate_cortex() {
continue
fi
operator_endpoint_reachable="ready"
echo "{\"cortex_url\": \"$operator_endpoint\", \"aws_access_key_id\": \"$CORTEX_AWS_ACCESS_KEY_ID\", \"aws_secret_access_key\": \"$CORTEX_AWS_SECRET_ACCESS_KEY\"}" > /.cortex/dev.json
echo -e "\n✓ Configured CLI"
fi

if [ "$operator_pod_ready_cycles" == "0" ] && [ "$operator_pod_name" != "" ]; then
Expand Down