func TestGetValidSessionSecretsFile(t *testing.T) { tmpfile, err := ioutil.TempFile("", "valid.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } defer os.Remove(tmpfile.Name()) secrets := &api.SessionSecrets{ Secrets: []api.SessionSecret{ {Authentication: "a1", Encryption: "e1"}, {Authentication: "a2", Encryption: "e2"}, }, } expectedSecrets := []string{"a1", "e1", "a2", "e2"} yaml, err := latest.WriteYAML(secrets) if err != nil { t.Errorf("Unexpected error: %v", err) } ioutil.WriteFile(tmpfile.Name(), []byte(yaml), os.FileMode(0600)) readSecrets, err := getSessionSecrets(tmpfile.Name()) if err != nil { t.Errorf("Unexpected error: %v", err) } if !reflect.DeepEqual(readSecrets, expectedSecrets) { t.Errorf("Unexpected %v, got %v", expectedSecrets, readSecrets) } }
func TestGetEmptySessionSecretsFile(t *testing.T) { tmpfile, err := ioutil.TempFile("", "empty.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } defer os.Remove(tmpfile.Name()) secrets := &api.SessionSecrets{ Secrets: []api.SessionSecret{}, } yaml, err := latest.WriteYAML(secrets) if err != nil { t.Errorf("Unexpected error: %v", err) } ioutil.WriteFile(tmpfile.Name(), []byte(yaml), os.FileMode(0600)) _, err = getSessionSecrets(tmpfile.Name()) if err == nil { t.Errorf("Expected error, got none") } }
func (o CreateNodeConfigOptions) MakeNodeConfig(serverCertFile, serverKeyFile, nodeClientCAFile, kubeConfigFile, nodeConfigFile string) error { config := &configapi.NodeConfig{ NodeName: o.NodeName, ServingInfo: configapi.ServingInfo{ BindAddress: net.JoinHostPort(o.ListenAddr.Host, strconv.Itoa(ports.KubeletPort)), }, VolumeDirectory: o.VolumeDir, AllowDisabledDocker: o.AllowDisabledDocker, ImageConfig: configapi.ImageConfig{ Format: o.ImageTemplate.Format, Latest: o.ImageTemplate.Latest, }, DNSDomain: o.DNSDomain, DNSIP: o.DNSIP, MasterKubeConfig: kubeConfigFile, NetworkPluginName: o.NetworkPluginName, } if o.UseTLS() { config.ServingInfo.ServerCert = configapi.CertInfo{ CertFile: serverCertFile, KeyFile: serverKeyFile, } config.ServingInfo.ClientCA = nodeClientCAFile } // Resolve relative to CWD cwd, err := os.Getwd() if err != nil { return err } if err := configapi.ResolveNodeConfigPaths(config, cwd); err != nil { return err } // Relativize to config file dir base, err := cmdutil.MakeAbs(o.NodeConfigDir, cwd) if err != nil { return err } if err := configapi.RelativizeNodeConfigPaths(config, base); err != nil { return err } // Roundtrip the config to v1 and back to ensure proper defaults are set. ext, err := configapi.Scheme.ConvertToVersion(config, "v1") if err != nil { return err } internal, err := configapi.Scheme.ConvertToVersion(ext, "") if err != nil { return err } content, err := latestconfigapi.WriteYAML(internal) if err != nil { return err } if err := ioutil.WriteFile(nodeConfigFile, content, 0644); err != nil { return err } return nil }
// RunMaster takes the options and: // 1. Creates certs if needed // 2. Reads fully specified master config OR builds a fully specified master config from the args // 3. Writes the fully specified master config and exits if needed // 4. Starts the master based on the fully specified config func (o MasterOptions) RunMaster() error { startUsingConfigFile := !o.IsWriteConfigOnly() && o.IsRunFromConfig() if !startUsingConfigFile && o.CreateCertificates { glog.V(2).Infof("Generating master configuration") if err := o.CreateCerts(); err != nil { return err } if err := o.CreateBootstrapPolicy(); err != nil { return err } } var masterConfig *configapi.MasterConfig var err error if startUsingConfigFile { masterConfig, err = configapilatest.ReadAndResolveMasterConfig(o.ConfigFile) } else { masterConfig, err = o.MasterArgs.BuildSerializeableMasterConfig() } if err != nil { return err } if o.IsWriteConfigOnly() { // Resolve relative to CWD cwd, err := os.Getwd() if err != nil { return err } if err := configapi.ResolveMasterConfigPaths(masterConfig, cwd); err != nil { return err } // Relativize to config file dir base, err := cmdutil.MakeAbs(filepath.Dir(o.MasterArgs.GetConfigFileToWrite()), cwd) if err != nil { return err } if err := configapi.RelativizeMasterConfigPaths(masterConfig, base); err != nil { return err } content, err := configapilatest.WriteYAML(masterConfig) if err != nil { return err } if err := os.MkdirAll(path.Dir(o.MasterArgs.GetConfigFileToWrite()), os.FileMode(0755)); err != nil { return err } if err := ioutil.WriteFile(o.MasterArgs.GetConfigFileToWrite(), content, 0644); err != nil { return err } fmt.Fprintf(o.Output, "Wrote master config to: %s\n", o.MasterArgs.GetConfigFileToWrite()) return nil } validationResults := validation.ValidateMasterConfig(masterConfig) if len(validationResults.Warnings) != 0 { for _, warning := range validationResults.Warnings { glog.Warningf("%v", warning) } } if len(validationResults.Errors) != 0 { return kerrors.NewInvalid("MasterConfig", o.ConfigFile, validationResults.Errors) } if err := StartMaster(masterConfig); err != nil { return err } return nil }