func (s *RsyslogSuite) TestModeAccumulate(c *gc.C) { st, m := s.st, s.machine worker, err := rsyslog.NewRsyslogConfigWorker(st.Rsyslog(), rsyslog.RsyslogModeAccumulate, m.Tag().String(), "", nil) c.Assert(err, gc.IsNil) defer func() { c.Assert(worker.Wait(), gc.IsNil) }() defer worker.Kill() waitForFile(c, filepath.Join(*rsyslog.LogDir, "ca-cert.pem")) // We should have ca-cert.pem, rsyslog-cert.pem, and rsyslog-key.pem. caCertPEM, err := ioutil.ReadFile(filepath.Join(*rsyslog.LogDir, "ca-cert.pem")) c.Assert(err, gc.IsNil) rsyslogCertPEM, err := ioutil.ReadFile(filepath.Join(*rsyslog.LogDir, "rsyslog-cert.pem")) c.Assert(err, gc.IsNil) rsyslogKeyPEM, err := ioutil.ReadFile(filepath.Join(*rsyslog.LogDir, "rsyslog-key.pem")) c.Assert(err, gc.IsNil) _, _, err = cert.ParseCertAndKey(string(rsyslogCertPEM), string(rsyslogKeyPEM)) c.Assert(err, gc.IsNil) err = cert.Verify(string(rsyslogCertPEM), string(caCertPEM), time.Now().UTC()) c.Assert(err, gc.IsNil) // Verify rsyslog configuration. waitForFile(c, filepath.Join(*rsyslog.RsyslogConfDir, "25-juju.conf")) rsyslogConf, err := ioutil.ReadFile(filepath.Join(*rsyslog.RsyslogConfDir, "25-juju.conf")) c.Assert(err, gc.IsNil) syslogPort := s.Conn.Environ.Config().SyslogPort() syslogConfig := syslog.NewAccumulateConfig(m.Tag().String(), *rsyslog.LogDir, syslogPort, "", []string{}) syslogConfig.ConfigDir = *rsyslog.RsyslogConfDir rendered, err := syslogConfig.Render() c.Assert(err, gc.IsNil) c.Assert(string(rsyslogConf), gc.DeepEquals, string(rendered)) }
func (s *syslogConfigSuite) TestAccumulateConfigRender(c *gc.C) { syslogConfigRenderer := syslog.NewAccumulateConfig("some-machine", agent.DefaultLogDir, 8888, "", []string{"foo"}) s.assertRsyslogConfigContents( c, syslogConfigRenderer, syslogtesting.ExpectedAccumulateSyslogConf(c, "some-machine", "", 8888), ) }
func (s *syslogConfigSuite) TestAccumulateConfigRender(c *gc.C) { cfg := cfg() syslog.NewAccumulateConfig(cfg) s.assertRsyslogConfigContents( c, cfg, syslogtesting.ExpectedAccumulateSyslogConf(c, args()), ) }
func (s *RsyslogSuite) TestAccumulateHA(c *gc.C) { m := s.machine syslogConfig := syslog.NewAccumulateConfig(m.Tag().String(), *rsyslog.LogDir, 6541, "", []string{"192.168.1", "127.0.0.1"}) rendered, err := syslogConfig.Render() c.Assert(err, jc.ErrorIsNil) stateServer1Config := ":syslogtag, startswith, \"juju-\" @@192.168.1:6541;LongTagForwardFormat" stateServer2Config := ":syslogtag, startswith, \"juju-\" @@127.0.0.1:6541;LongTagForwardFormat" c.Assert(strings.Contains(string(rendered), stateServer1Config), jc.IsTrue) c.Assert(strings.Contains(string(rendered), stateServer2Config), jc.IsTrue) }
func newRsyslogConfigHandler(st *apirsyslog.State, mode RsyslogMode, tag names.Tag, namespace string, stateServerAddrs []string, jujuConfigDir string) (*RsyslogConfigHandler, error) { if namespace != "" { jujuConfigDir += "-" + namespace } jujuConfigDir = filepath.Join(jujuConfigDir, "rsyslog") if err := os.MkdirAll(jujuConfigDir, 0755); err != nil { return nil, errors.Trace(err) } syslogConfig := &syslog.SyslogConfig{ LogFileName: tag.String(), LogDir: logDir, JujuConfigDir: jujuConfigDir, Port: 0, Namespace: namespace, StateServerAddresses: stateServerAddrs, } if mode == RsyslogModeAccumulate { syslog.NewAccumulateConfig(syslogConfig) } else { syslog.NewForwardConfig(syslogConfig) } // Historically only machine-0 includes the namespace in the log // dir/file; for backwards compatibility we continue the tradition. if tag != names.NewMachineTag("0") { namespace = "" } switch tag := tag.(type) { case names.MachineTag: if namespace == "" { syslogConfig.ConfigFileName = "25-juju.conf" } else { syslogConfig.ConfigFileName = fmt.Sprintf("25-juju-%s.conf", namespace) } default: syslogConfig.ConfigFileName = fmt.Sprintf("26-juju-%s.conf", tag) } syslogConfig.ConfigDir = rsyslogConfDir syslogConfig.LogDir = logDir if namespace != "" { syslogConfig.LogDir += "-" + namespace } return &RsyslogConfigHandler{ st: st, mode: mode, syslogConfig: syslogConfig, tag: tag, }, nil }
func (s *RsyslogSuite) TestModeAccumulate(c *gc.C) { st, m := s.st, s.machine worker, err := rsyslog.NewRsyslogConfigWorker(st.Rsyslog(), rsyslog.RsyslogModeAccumulate, m.Tag(), "", nil, s.ConfDir()) c.Assert(err, jc.ErrorIsNil) defer func() { c.Assert(worker.Wait(), gc.IsNil) }() defer worker.Kill() dirname := filepath.Join(s.ConfDir(), "rsyslog") waitForFile(c, filepath.Join(dirname, "ca-cert.pem")) // We should have ca-cert.pem, rsyslog-cert.pem, and rsyslog-key.pem. caCertPEM, err := ioutil.ReadFile(filepath.Join(dirname, "ca-cert.pem")) c.Assert(err, jc.ErrorIsNil) rsyslogCertPEM, err := ioutil.ReadFile(filepath.Join(dirname, "rsyslog-cert.pem")) c.Assert(err, jc.ErrorIsNil) rsyslogKeyPEM, err := ioutil.ReadFile(filepath.Join(dirname, "rsyslog-key.pem")) c.Assert(err, jc.ErrorIsNil) _, _, err = cert.ParseCertAndKey(string(rsyslogCertPEM), string(rsyslogKeyPEM)) c.Assert(err, jc.ErrorIsNil) err = cert.Verify(string(rsyslogCertPEM), string(caCertPEM), time.Now().UTC()) c.Assert(err, jc.ErrorIsNil) // Verify rsyslog configuration. waitForFile(c, filepath.Join(*rsyslog.RsyslogConfDir, "25-juju.conf")) rsyslogConf, err := ioutil.ReadFile(filepath.Join(*rsyslog.RsyslogConfDir, "25-juju.conf")) c.Assert(err, jc.ErrorIsNil) syslogPort := s.Environ.Config().SyslogPort() syslogConfig := &syslog.SyslogConfig{ LogFileName: m.Tag().String(), LogDir: *rsyslog.LogDir, Port: syslogPort, Namespace: "", StateServerAddresses: []string{}, } syslog.NewAccumulateConfig(syslogConfig) syslogConfig.ConfigDir = *rsyslog.RsyslogConfDir syslogConfig.JujuConfigDir = filepath.Join(s.ConfDir(), "rsyslog") rendered, err := syslogConfig.Render() c.Assert(err, jc.ErrorIsNil) c.Assert(string(rsyslogConf), gc.DeepEquals, string(rendered)) // Verify logrotate files assertPathExists(c, filepath.Join(dirname, "logrotate.conf")) assertPathExists(c, filepath.Join(dirname, "logrotate.run")) }
func (s *syslogConfigSuite) TestAccumulateConfigRenderWithNamespace(c *gc.C) { cfg := cfg() cfg.Namespace = "namespace" cfg.JujuConfigDir = cfg.JujuConfigDir + "-" + cfg.Namespace cfg.LogDir = cfg.LogDir + "-" + cfg.Namespace args := args() args.Namespace = "namespace" syslog.NewAccumulateConfig(cfg) s.assertRsyslogConfigContents( c, cfg, syslogtesting.ExpectedAccumulateSyslogConf(c, args), ) }
func (s *syslogConfigSuite) TestAccumulateConfigWrite(c *gc.C) { syslogConfigRenderer := syslog.NewAccumulateConfig("some-machine", agent.DefaultLogDir, 8888, "", []string{"foo"}) syslogConfigRenderer.ConfigDir = s.configDir syslogConfigRenderer.ConfigFileName = "rsyslog.conf" s.assertRsyslogConfigPath(c, syslogConfigRenderer) err := syslogConfigRenderer.Write() c.Assert(err, gc.IsNil) syslogConfData, err := ioutil.ReadFile(syslogConfigRenderer.ConfigFilePath()) c.Assert(err, gc.IsNil) c.Assert( string(syslogConfData), gc.Equals, syslogtesting.ExpectedAccumulateSyslogConf(c, "some-machine", "", 8888), ) }
func (s *syslogConfigSuite) TestAccumulateConfigWrite(c *gc.C) { syslogConfigRenderer := cfg() syslog.NewAccumulateConfig(syslogConfigRenderer) syslogConfigRenderer.ConfigDir = s.configDir syslogConfigRenderer.ConfigFileName = "rsyslog.conf" s.assertRsyslogConfigPath(c, syslogConfigRenderer) err := syslogConfigRenderer.Write() c.Assert(err, jc.ErrorIsNil) syslogConfData, err := ioutil.ReadFile(syslogConfigRenderer.ConfigFilePath()) c.Assert(err, jc.ErrorIsNil) c.Assert( string(syslogConfData), gc.Equals, syslogtesting.ExpectedAccumulateSyslogConf(c, args()), ) }
func newRsyslogConfigHandler(st *apirsyslog.State, mode RsyslogMode, tag, namespace string, stateServerAddrs []string) (*RsyslogConfigHandler, error) { var syslogConfig *syslog.SyslogConfig if mode == RsyslogModeAccumulate { syslogConfig = syslog.NewAccumulateConfig( tag, logDir, 0, namespace, stateServerAddrs, ) } else { syslogConfig = syslog.NewForwardConfig( tag, logDir, 0, namespace, stateServerAddrs, ) } // Historically only machine-0 includes the namespace in the log // dir/file; for backwards compatibility we continue the tradition. if tag != "machine-0" { namespace = "" } kind, err := names.TagKind(tag) if err != nil { return nil, err } if kind == names.MachineTagKind { if namespace == "" { syslogConfig.ConfigFileName = "25-juju.conf" } else { syslogConfig.ConfigFileName = fmt.Sprintf("25-juju-%s.conf", namespace) } } else { syslogConfig.ConfigFileName = fmt.Sprintf("26-juju-%s.conf", tag) } syslogConfig.ConfigDir = rsyslogConfDir syslogConfig.LogDir = logDir if namespace != "" { syslogConfig.LogDir += "-" + namespace } return &RsyslogConfigHandler{ st: st, mode: mode, syslogConfig: syslogConfig, tag: tag, }, nil }
func (s *RsyslogSuite) TestAccumulateHA(c *gc.C) { m := s.machine syslogConfig := &syslog.SyslogConfig{ LogFileName: m.Tag().String(), LogDir: *rsyslog.LogDir, Port: 6541, Namespace: "", StateServerAddresses: []string{"192.168.1", "127.0.0.1"}, } syslog.NewAccumulateConfig(syslogConfig) syslogConfig.JujuConfigDir = s.DataDir() rendered, err := syslogConfig.Render() c.Assert(err, jc.ErrorIsNil) stateServer1Config := ":syslogtag, startswith, \"juju-\" @@192.168.1:6541;LongTagForwardFormat" stateServer2Config := ":syslogtag, startswith, \"juju-\" @@127.0.0.1:6541;LongTagForwardFormat" c.Assert(strings.Contains(string(rendered), stateServer1Config), jc.IsTrue) c.Assert(strings.Contains(string(rendered), stateServer2Config), jc.IsTrue) }
func newRsyslogConfigHandler(st *apirsyslog.State, mode RsyslogMode, tag names.Tag, namespace string, stateServerAddrs []string) (*RsyslogConfigHandler, error) { var syslogConfig *syslog.SyslogConfig if mode == RsyslogModeAccumulate { syslogConfig = syslog.NewAccumulateConfig(tag.String(), logDir, 0, namespace, stateServerAddrs) } else { syslogConfig = syslog.NewForwardConfig(tag.String(), logDir, 0, namespace, stateServerAddrs) } // Historically only machine-0 includes the namespace in the log // dir/file; for backwards compatibility we continue the tradition. if tag != names.NewMachineTag("0") { namespace = "" } switch tag := tag.(type) { case names.MachineTag: if namespace == "" { syslogConfig.ConfigFileName = "25-juju.conf" } else { syslogConfig.ConfigFileName = fmt.Sprintf("25-juju-%s.conf", namespace) } default: syslogConfig.ConfigFileName = fmt.Sprintf("26-juju-%s.conf", tag) } syslogConfig.ConfigDir = rsyslogConfDir syslogConfig.LogDir = logDir if namespace != "" { syslogConfig.LogDir += "-" + namespace } return &RsyslogConfigHandler{ st: st, mode: mode, syslogConfig: syslogConfig, tag: tag, }, nil }