// cloudinitRunCmd returns the shell command that, when run, will create the // "machine info" file containing the hostname of a machine. // That command is destined to be used by cloudinit. func (info *machineInfo) cloudinitRunCmd() (string, error) { yaml, err := goyaml.Marshal(info) if err != nil { return "", err } script := fmt.Sprintf(`mkdir -p %s; echo -n %s > %s`, utils.ShQuote(environs.DataDir), utils.ShQuote(string(yaml)), utils.ShQuote(_MAASInstanceFilename)) return script, nil }
// WriteCommands returns shell commands to write the agent // configuration. It returns an error if the configuration does not // have all the right elements. func (c *Conf) WriteCommands() ([]string, error) { if err := c.Check(); err != nil { return nil, err } data, err := goyaml.Marshal(c) if err != nil { return nil, err } var cmds []string addCmd := func(f string, a ...interface{}) { cmds = append(cmds, fmt.Sprintf(f, a...)) } f := utils.ShQuote(c.confFile()) addCmd("mkdir -p %s", utils.ShQuote(c.Dir())) addCmd("install -m %o /dev/null %s", 0600, f) addCmd("echo %s > %s", utils.ShQuote(string(data)), f) return cmds, nil }
// MachineAgentUpstartService returns the upstart config for a machine agent // based on the tag and machineId passed in. func MachineAgentUpstartService(name, toolsDir, dataDir, logDir, tag, machineId, logConfig string, env map[string]string) *Conf { svc := NewService(name) logFile := filepath.Join(logDir, tag+".log") return &Conf{ Service: *svc, Desc: fmt.Sprintf("juju %s agent", tag), Limit: map[string]string{ "nofile": fmt.Sprintf("%d %d", maxAgentFiles, maxAgentFiles), }, Cmd: filepath.Join(toolsDir, "jujud") + " machine" + " --log-file " + utils.ShQuote(logFile) + " --data-dir " + utils.ShQuote(dataDir) + " --machine-id " + machineId + " " + logConfig, Out: logFile, Env: env, } }
// MongoUpstartService returns the upstart config for the mongo state service. func MongoUpstartService(name, dataDir, dbDir string, port int) *Conf { keyFile := filepath.Join(dataDir, "server.pem") svc := NewService(name) return &Conf{ Service: *svc, Desc: "juju state database", Limit: map[string]string{ "nofile": fmt.Sprintf("%d %d", maxMongoFiles, maxMongoFiles), "nproc": fmt.Sprintf("%d %d", maxAgentFiles, maxAgentFiles), }, Cmd: "/usr/bin/mongod" + " --auth" + " --dbpath=" + dbDir + " --sslOnNormalPorts" + " --sslPEMKeyFile " + utils.ShQuote(keyFile) + " --sslPEMKeyPassword ignored" + " --bind_ip 0.0.0.0" + " --port " + fmt.Sprint(port) + " --noprealloc" + " --syslog" + " --smallfiles", } }
func shquote(p string) string { return utils.ShQuote(p) }