Beispiel #1
0
//convenience function for requiring a string in the config file
func GetRequiredString(config *goconf.ConfigFile, section string, key string) (value string) {
	value, err := config.GetString(section, key)
	if err != nil {
		logger.Fatalf("[CONFIG] %v is required: [section=%v]", key, section)
	}
	return
}
Beispiel #2
0
func parseConfig(conf *goconf.ConfigFile) (*config, error) {
	host, err := conf.GetString("database", "host")
	if err != nil || len(host) == 0 {
		return nil, errors.New("empty database host in the config file")
	}
	port, err := conf.GetInt("database", "port")
	if err != nil || port <= 0 || port > 0xFFFF {
		return nil, errors.New("invalid database port in the config file")
	}
	user, err := conf.GetString("database", "user")
	if err != nil || len(user) == 0 {
		return nil, errors.New("empty database user in the config file")
	}
	password, err := conf.GetString("database", "password")
	if err != nil || len(password) == 0 {
		return nil, errors.New("empty database password in the config file")
	}
	dbname, err := conf.GetString("database", "name")
	if err != nil || len(dbname) == 0 {
		return nil, errors.New("empty database name in the config file")
	}

	v := &config{
		hosts:    strings.Split(strings.Replace(host, " ", "", -1), ","),
		port:     uint16(port),
		username: user,
		password: password,
		dbName:   dbname,
	}
	return v, nil
}
Beispiel #3
0
// sets global logger based on verbosity level in configuration
// optional parameter:  default.verbose (defaults to true if not present or incorrectly set)
func GlobalLogger(configFile *goconf.ConfigFile) {
	verbose, err := configFile.GetBool("default", "verbose")
	logger = log4go.NewVerboseLogger(verbose, nil, "")
	if err != nil {
		logger.Warn(err)
		verbose = true
	}
	logger.Printf("verbose set [%v]", verbose)
}
Beispiel #4
0
// Sets global variable to configure buffersize for channels wrapping connections between worker and master (stdout, stderr)
// optional parameters:  master.buffersize
func ConBufferSize(section string, config *goconf.ConfigFile) {
	bufsize, err := config.GetInt(section, "conbuffersize")
	if err != nil {
		logger.Warn(err)
	} else {
		conbuffersize = bufsize
		logger.Printf("conbuffersize=[%v]", conbuffersize)
	}
}
Beispiel #5
0
//get the number of processors to use for golem itself
func GoMaxProc(section string, config *goconf.ConfigFile) {
	gomaxproc, err := config.GetInt(section, "gomaxproc")
	if err != nil {
		logger.Warn(err)
	} else {
		runtime.GOMAXPROCS(gomaxproc)
		logger.Printf("gomaxproc=[%v]", gomaxproc)
	}
}
Beispiel #6
0
// cfgOpt returns the configuration option from the specified section. If the
// option does not exist an empty string is returned.
func cfgOpt(cfg *conf.ConfigFile, section, option string) string {
	if !cfg.HasOption(section, option) {
		return ""
	}
	s, err := cfg.GetString(section, option)
	if err != nil {
		log.Exitf("Failed to get %s for %s: %v", option, section, err)
	}
	return s
}
Beispiel #7
0
// Sets global variable to configure buffersize for master submission channels (stdout, stderr)
// optional parameters:  master.buffersize
func SubIOBufferSize(section string, configFile *goconf.ConfigFile) {
	bufsize, err := configFile.GetInt(section, "subiobuffersize")
	if err != nil {
		logger.Warn(err)
	} else {
		iobuffersize = bufsize
	}

	logger.Printf("buffersize=[%v]", iobuffersize)
}
Beispiel #8
0
//get the number of IO monitors to run per node
func IOMOnitors(config *goconf.ConfigFile) {
	iomons, err := config.GetInt("master", "iomonitors")
	if err != nil {
		logger.Warn(err)
	} else {
		if iomons > 0 {
			iomonitors = iomons
		}
	}
	logger.Printf("iomonitors=[%v]", iomonitors)
}
Beispiel #9
0
// starts http handlers for HTML content based on the given configuration file
// optional parameters:  default.contentDirectory (location of html content to be served at https://example.com/ or https://example.com/html/index.html
func StartHtmlHandler(configFile *goconf.ConfigFile) {
	if contentDir, _ := configFile.GetString("default", "contentDirectory"); contentDir != "" {
		logger.Printf("StartHtmlHandler(): serving HTML content from [%v]", contentDir)
		http.Handle("/html/", http.StripPrefix("/html/", http.FileServer(http.Dir(contentDir))))
		http.Handle("/", http.RedirectHandler("/html/index.html", http.StatusTemporaryRedirect))
		wd, err := os.Getwd()
		if err == nil {
			http.Handle("/output/", http.StripPrefix("/output/", http.FileServer(http.Dir(wd))))
		}
	}
}
Beispiel #10
0
// starts worker based on the given configuration file
// required parameters:  worker.masterhost
// optional parameters:  worker.processes
func StartWorker(configFile *goconf.ConfigFile) {

	GoMaxProc("worker", configFile)
	ConBufferSize("worker", configFile)
	processes, err := configFile.GetInt("worker", "processes")
	if err != nil {
		logger.Warn(err)
		processes = 3
	}
	masterhost := GetRequiredString(configFile, "worker", "masterhost")
	logger.Printf("StartWorker() [%v, %d]", masterhost, processes)
	RunNode(processes, masterhost)
}
Beispiel #11
0
func MongoLogger(configFile *goconf.ConfigFile) {
	verbose, err := configFile.GetBool("mgodb", "verbose")
	if err != nil {
		logger.Warn(err)
		verbose = false
	}

	logger.Printf("mongo logger verbose set [%v]", verbose)
	if verbose {
		mgo.SetLogger(logger)
		mgo.SetDebug(verbose)
	}
}
Beispiel #12
0
func (c *Config) readDefaultConfig(readConfigData *goconf.ConfigFile) error {
	var err error

	c.BaseDir, err = readConfigData.GetString("default", "base_dir")
	if err != nil || len(c.BaseDir) == 0 {
		return errors.New("invalid BaseDir directory")
	}
	if c.BaseDir[0] != '/' {
		return errors.New("BaseDir directory should be specified as an absolute path")
	}

	return nil
}
Beispiel #13
0
// Initializes a new connection to the given account in a separate goroutine
func initConnection(notify chan bool, conf *goconf.ConfigFile, account string) {
	hostname, _ := conf.GetString(account, "hostname")
	username, _ := conf.GetString(account, "username")
	passexec, _ := conf.GetString(account, "password")

	pw := exec.Command("/bin/sh", "-c", passexec)
	pw.Env = os.Environ()
	pwbytes, err := pw.Output()
	if err != nil {
		fmt.Printf("%s: password command failed: %s\n", account, err)
		return
	}

	password := strings.TrimRight(string(pwbytes), "\n")
	if password == "" {
		fmt.Printf("%s: password command returned an empty string\n", account)
		return
	}

	folder, e := conf.GetString(account, "folder")
	if e != nil {
		folder = "INBOX"
	}

	poll, e := conf.GetInt(account, "poll")
	if e != nil {
		poll = 29
	}
	polli := time.Duration(poll) * time.Minute

	go parts.Connect(notify, account, hostname, username, password, folder, polli)
}
Beispiel #14
0
func parseRESTConfig(conf *goconf.ConfigFile) (*restConfig, error) {
	var err error
	c := &restConfig{}

	c.tls.enable, err = conf.GetBool("rest", "tls")
	if err != nil {
		return nil, errors.New("invalid rest/tls value")
	}

	port, err := conf.GetInt("rest", "port")
	if err != nil || port <= 0 || port > 65535 {
		return nil, errors.New("empty or invalid rest/port value")
	}
	c.port = uint16(port)

	c.tls.certFile, err = conf.GetString("rest", "cert_file")
	if err != nil || len(c.tls.certFile) == 0 {
		return nil, errors.New("empty rest/cert_file value")
	}
	if c.tls.certFile[0] != '/' {
		return nil, errors.New("rest/cert_file should be specified as an absolute path")
	}

	c.tls.keyFile, err = conf.GetString("rest", "key_file")
	if err != nil || len(c.tls.keyFile) == 0 {
		return nil, errors.New("empty rest/key_file value")
	}
	if c.tls.keyFile[0] != '/' {
		return nil, errors.New("rest/key_file should be specified as an absolute path")
	}

	return c, nil
}
Beispiel #15
0
func (c *Config) readDefaultConfig(conf *goconf.ConfigFile) error {
	var err error

	c.Port, err = conf.GetInt("default", "port")
	if err != nil || c.Port <= 0 || c.Port > 0xFFFF {
		return errors.New("invalid port in the config file")
	}

	logLevel, err := conf.GetString("default", "log_level")
	if err != nil || len(logLevel) == 0 {
		return errors.New("invalid log level in the config file")
	}
	if err := c.parseLogLevel(logLevel); err != nil {
		return err
	}

	apps, err := conf.GetString("default", "applications")
	if err != nil || len(apps) == 0 {
		return errors.New("empty applications in the config file")
	}
	if err := c.parseApplications(apps); err != nil {
		return fmt.Errorf("invalid applications config: %v", err)
	}

	return nil
}
Beispiel #16
0
// Sets global variable to enable TLS communications and other related variables (certificate path, organization)
// optional parameters:  default.certpath, default.organization, default.tls
func GlobalTls(configFile *goconf.ConfigFile) {
	certificatepath, err := configFile.GetString("default", "certpath")
	if err != nil {
		logger.Warn(err)
	} else {
		certpath = certificatepath
	}
	logger.Printf("certpath=[%v]", certpath)

	certificateorg, err := configFile.GetString("default", "organization")
	if err != nil {
		logger.Warn(err)
		if certificateorg, err = os.Hostname(); err != nil {
			logger.Warn(err)
			certificateorg = "golem.googlecode.com"
		}
	}
	certorg = certificateorg
	logger.Printf("certorg=[%v]", certorg)

	useTlsl, err := configFile.GetBool("default", "tls")
	if err != nil {
		logger.Warn(err)
		useTls = true
	} else {
		useTls = useTlsl
	}
	logger.Printf("TLS=[%v]", useTls)
}
Beispiel #17
0
func setupAuthHandler(cfg *goconf.ConfigFile) martini.Handler {
	auth_url, _ := cfg.GetString("Auth", "endpoint")
	hostname, _ := cfg.GetString("Cache", "hostname")
	port, _ := cfg.GetString("Cache", "port")
	password, _ := cfg.GetString("Cache", "password")

	return auth.Keystone(
		auth.IdentityValidator{AuthUrl: auth_url},
		auth.Redis{
			Hostname: hostname,
			Port:     port,
			Password: password,
			Database: int64(0)})
}
Beispiel #18
0
// starts scribe service based on the given configuration file
// required parameters:  default.hostname, default.password, scribe.target, mgodb.server, mgodb.store, mgodb.jobcollection, mgodb.taskcollection
func StartScribe(configFile *goconf.ConfigFile) {
	MongoLogger(configFile)

	GoMaxProc("scribe", configFile)

	hostname := GetRequiredString(configFile, "default", "hostname")
	apikey := GetRequiredString(configFile, "default", "password")
	target := GetRequiredString(configFile, "scribe", "target")
	dbhost := GetRequiredString(configFile, "mgodb", "server")
	dbstore := GetRequiredString(configFile, "mgodb", "store")

	url, err := url.Parse(target)
	if err != nil {
		panic(err)
	}

	go LaunchScribe(NewMongoJobStore(dbhost, dbstore), target, apikey)

	rest.Resource("jobs", ScribeJobController{NewMongoJobStore(dbhost, dbstore), url, apikey})
	rest.ResourceContentType("jobs", "application/json")

	rest.Resource("nodes", ProxyNodeController{url, apikey})
	rest.ResourceContentType("nodes", "application/json")

	rest.Resource("cluster", ScribeClusterController{NewMongoJobStore(dbhost, dbstore), url})
	rest.ResourceContentType("cluster", "application/json")

	var numberOfSeconds int = 10
	if pollingSecs, oops := configFile.GetInt("scribe", "clusterStatsPollingInSeconds"); oops == nil {
		numberOfSeconds = pollingSecs
	}

	logger.Printf("polling for cluster stats every %d secs", numberOfSeconds)
	go MonitorClusterStats(NewMongoJobStore(dbhost, dbstore), target, int64(numberOfSeconds))

	ListenAndServeTLSorNot(hostname)
}
func setValues(d *schema.ResourceData, c *goconf.ConfigFile) error {
	buildval, err := c.GetString("default", "COREOS_BUILD")
	if err != nil {
		return err
	}

	branchval, err := c.GetString("default", "COREOS_BRANCH")
	if err != nil {
		return err
	}

	patchval, err := c.GetString("default", "COREOS_PATCH")
	if err != nil {
		return err
	}

	versionval, err := c.GetString("default", "COREOS_VERSION")
	if err != nil {
		return err
	}

	version_idval, err := c.GetString("default", "COREOS_VERSION_ID")
	if err != nil {
		return err
	}

	build_idval, err := c.GetString("default", "COREOS_BUILD_ID")
	if err != nil {
		return err
	}

	sdk_versionval, err := c.GetString("default", "COREOS_SDK_VERSION")
	if err != nil {
		return err
	}

	d.Set("build", buildval)
	d.Set("branch", branchval)
	d.Set("patch", patchval)
	d.Set("version", versionval)
	d.Set("version_id", version_idval)
	d.Set("build_id", build_idval)
	d.Set("sdk_version", sdk_versionval)
	return nil
}