| [2008/05/14 00:01:25] @ |roald| joined channel #puppet | ||
| [2008/05/14 00:01:38] @ Quit: roald: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 00:09:27] <_NiC> Oh well, I'll have something to play with tomorrow too, time to go home! Cya! | ||
| [2008/05/14 00:11:15] @ Quit: choffee: "leaving" | ||
| [2008/05/14 00:11:41] @ winrefund joined channel #puppet | ||
| [2008/05/14 00:11:45] <winrefund> hello | ||
| [2008/05/14 00:12:34] @ lak joined channel #puppet | ||
| [2008/05/14 00:25:50] @ brscott joined channel #puppet | ||
| [2008/05/14 00:26:02] @ brscott left channel #puppet () | ||
| [2008/05/14 00:28:37] @ john_ joined channel #puppet | ||
| [2008/05/14 00:31:44] @ hacim joined channel #puppet | ||
| [2008/05/14 00:31:55] @ muerr joined channel #puppet | ||
| [2008/05/14 00:33:47] @ |roald| is now known as roald | ||
| [2008/05/14 00:35:44] @ tictacbum joined channel #puppet | ||
| [2008/05/14 00:37:06] @ john_ left channel #puppet () | ||
| [2008/05/14 00:42:17] @ Quit: f--z: "KVIrc 3.2.5 Anomalies http://www.kvirc.net/" | ||
| [2008/05/14 00:43:14] @ Quit: kenvandine: "Ex-Chat" | ||
| [2008/05/14 00:44:39] @ tictacbum left channel #puppet ("Kopete 0.12.7 : http://kopete.kde.org") | ||
| [2008/05/14 00:47:19] @ shenson_not_here is now known as shenson | ||
| [2008/05/14 00:54:30] @ choffee joined channel #puppet | ||
| [2008/05/14 00:56:38] @ choffee is now known as choffee_ | ||
| [2008/05/14 00:57:59] @ choffee_ is now known as choffee | ||
| [2008/05/14 01:04:47] * Volcane wonders why he is getting "Could not find a default provider for user" on this silly centos box | ||
| [2008/05/14 01:05:13] <jason^> does puppetmasterd ever log anything other than masterhttpd? it's the only log file in /var/log/puppet/ | ||
| [2008/05/14 01:05:36] <muerr> You can enable other log files. | ||
| [2008/05/14 01:06:59] <muerr> For example, on red hat based systems, /etc/sysconfig/puppetmaster has PUPPETMASTER_LOG=/var/log/puppet/puppet.log, which is just passed to --logdest on the puppetmaster startup command. | ||
| [2008/05/14 01:08:31] <Volcane> hmm, wow, lame++ | ||
| [2008/05/14 01:08:45] <Volcane> run puppetd in forground mode etc from a user that doesnt have /usr/sbin and /sbin in its PATH | ||
| [2008/05/14 01:08:50] @ Quit: dyresen: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 01:08:53] <Volcane> and it cant find things like adduser | ||
| [2008/05/14 01:11:34] @ Quit: shiruken: Remote closed the connection | ||
| [2008/05/14 01:11:38] @ shiruken joined channel #puppet | ||
| [2008/05/14 01:23:14] @ sigmonsays joined channel #puppet | ||
| [2008/05/14 01:31:39] @ martha joined channel #puppet | ||
| [2008/05/14 01:32:39] @ flakrat joined channel #puppet | ||
| [2008/05/14 01:37:22] @ Quit: roald: "KVIrc 3.2.6 Anomalies http://www.kvirc.net/" | ||
| [2008/05/14 01:37:28] <benp-> Volcane: yeah, a lot of people that use sudo or su have that problem | ||
| [2008/05/14 01:42:08] <Volcane> its a bit dump, since when its looking for adduser on redhat, its always going to be in one place, so why bother relying on the path | ||
| [2008/05/14 01:42:12] <Volcane> dump=dumb | ||
| [2008/05/14 01:43:13] <benp-> it would be ideal if you could specify and additional path to search in puppet.conf | ||
| [2008/05/14 01:43:22] <benp-> and have the default involve /usr/sbin and /sbin | ||
| [2008/05/14 01:43:30] <benp-> s/involve/include | ||
| [2008/05/14 01:43:30] <Volcane> yah i agree | ||
| [2008/05/14 01:44:17] <benp-> might be worth checking if there's already one | ||
| [2008/05/14 01:45:00] <benp-> on redhat though, i always run puppetd as a service. are you trying to run it as a non-root user? | ||
| [2008/05/14 01:46:55] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 01:47:10] @ Quit: shake-n-bake: Client Quit | ||
| [2008/05/14 01:47:53] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 01:48:16] @ Quit: shake-n-bake: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 01:49:05] <Volcane> benp-: no i just run it in debug mode on dev boxes sometimes to see the output etc | ||
| [2008/05/14 01:49:18] <Volcane> benp-: generally i do it as a service too | ||
| [2008/05/14 01:50:44] <ashp> i wish redhat would say when RHEL 6 is planned | ||
| [2008/05/14 01:51:06] <tim|macbook> i wish debian wouldn't screw up their openssl :( | ||
| [2008/05/14 01:51:39] <ashp> It's just frustrating to have NO idea when we need to start planning our major upgrades | ||
| [2008/05/14 01:51:41] <Maliuta> ashp: RHELL is bad for your health | ||
| [2008/05/14 01:51:46] <ashp> Things like openldap we're just waiting on RHEL to do 6 for | ||
| [2008/05/14 01:52:05] <ashp> Maliuta: Tell me about it, thanks to 'vendor support' requirements for our Dells I was restricted to: RHEL, Suse Enterprise | ||
| [2008/05/14 01:52:14] <ashp> It's like being made to pick between mcdonalds and kfc,:/ | ||
| [2008/05/14 01:52:25] <Maliuta> rofl ... vendor support | ||
| [2008/05/14 01:52:29] <tim|macbook> ashp: Dell supports Debian? | ||
| [2008/05/14 01:52:36] <tim|macbook> never had any complaint when i phoned in | ||
| [2008/05/14 01:52:46] <tim|macbook> not that i phoned in so often | ||
| [2008/05/14 01:52:52] <Maliuta> I worked at a Dell house, we only used the hw support | ||
| [2008/05/14 01:52:53] <ashp> Management insisted we have to be able to use all the various tools Dell provide | ||
| [2008/05/14 01:53:04] <ashp> and originally they ran GENTOO on production servers(!!) | ||
| [2008/05/14 01:53:10] <Maliuta> I rolled OMSA debs | ||
| [2008/05/14 01:53:23] <ashp> I would never use Debian for servers, myself | ||
| [2008/05/14 01:53:23] <Maliuta> that's about all the stuff you need | ||
| [2008/05/14 01:53:27] <ashp> I would go back to freebsd and be happy | ||
| [2008/05/14 01:53:30] <muerr> We only have Dell HW support as well. We use CentOS. | ||
| [2008/05/14 01:53:40] <Maliuta> debian is better than r-hell | ||
| [2008/05/14 01:53:51] <ashp> For the HW support they sometimes (apparently) insist you use their tools for testing | ||
| [2008/05/14 01:53:56] <ashp> and they wanted to be able to use them on live systems | ||
| [2008/05/14 01:53:58] <tim|macbook> dell actually does sw support? never knew that before | ||
| [2008/05/14 01:54:04] <ashp> no, not sw support | ||
| [2008/05/14 01:54:09] <ashp> hw support using their tools | ||
| [2008/05/14 01:54:11] <muerr> I got an RHCE a few years ago, and when I worked somewhere that did RHEL, I always knew more than the Red Hat engineers when customers requested that I call in for support. | ||
| [2008/05/14 01:54:31] <muerr> ashp we're using the srvadmin tools on CentOS :) | ||
| [2008/05/14 01:55:02] <ashp> RHEL is 'ok', centos the same | ||
| [2008/05/14 01:55:06] <ashp> I don't actually like linux at all | ||
| [2008/05/14 01:55:09] <muerr> tim|macbook: Yes, Dell does have a Red Hat support team, but if you've got RHEL you're better off going to Red Hat. Unless you know more than them :D. | ||
| [2008/05/14 01:55:11] <ashp> I prefer freebsd, netbsd, solaris, then linux. | ||
| [2008/05/14 01:55:27] <muerr> I won't get myself started on Solaris :) | ||
| [2008/05/14 01:55:40] <ashp> only solaris 10 | ||
| [2008/05/14 01:55:44] <ashp> all the other ones were horrible | ||
| [2008/05/14 01:55:55] <tim|macbook> does solaris have apt? | ||
| [2008/05/14 01:56:18] <muerr> Solaris has "download from Sun's website/FTP and install manually" but my last experience on Solaris was with version 8 :) | ||
| [2008/05/14 01:56:36] <Volcane> muerr: openslowaris now has something clever | ||
| [2008/05/14 01:56:37] <ashp> solaris has some new thing by murdock now I think called 'IPS' or something | ||
| [2008/05/14 01:56:47] <Volcane> so solaris proper should get it in the next decade | ||
| [2008/05/14 01:56:48] <ashp> It's come a long way since 8, I have to admit | ||
| [2008/05/14 01:56:51] <ashp> zfs and dtrace is awesome | ||
| [2008/05/14 01:56:52] <muerr> I'm sure its vastly improved. | ||
| [2008/05/14 01:57:01] <tim|macbook> zfs is cool, indeed | ||
| [2008/05/14 01:57:44] @ porridge_ joined channel #puppet | ||
| [2008/05/14 01:57:50] <jbooth> Too bad their GUI is still stuck in the stone age, so you get to maintain it by hand from 3rd party repos or self-compiled packages. | ||
| [2008/05/14 01:58:14] <ashp> The solaris GUI? | ||
| [2008/05/14 01:58:21] <ashp> I used the latest live disk the other day and it just threw me into gnome | ||
| [2008/05/14 01:58:23] @ shake-n-bake_ joined channel #puppet | ||
| [2008/05/14 01:58:35] <jbooth> Yes, gnome 2.what? | ||
| [2008/05/14 01:58:46] <ashp> 2.2 i think | ||
| [2008/05/14 01:59:13] <ashp> http://opensolaris.org/os/project/indiana/opensolaris-screenie.png | ||
| [2008/05/14 01:59:20] <ashp> it looks identical to ubuntu | ||
| [2008/05/14 01:59:33] @ Quit: shake-n-bake_: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 01:59:35] <jbooth> Compared to 2.20 or 2.22 which is current? Yeah, point made. | ||
| [2008/05/14 01:59:52] <ashp> I don't know, I'm confused, I think it's using the very latest | ||
| [2008/05/14 01:59:56] <ashp> so I'm not sure how that's the stone age | ||
| [2008/05/14 02:00:19] @ shake-n-bake_ joined channel #puppet | ||
| [2008/05/14 02:00:23] <jbooth> The sol 10 install I've got supporting sun rays is still ancient | ||
| [2008/05/14 02:00:41] <ashp> yeah the 'offical' releases I guess are very conservative | ||
| [2008/05/14 02:00:47] <ashp> I was just talking about the open solaris stuff | ||
| [2008/05/14 02:00:49] <jbooth> Livecds are nice and all, but I care what the installed OS keeps up with | ||
| [2008/05/14 02:01:11] <ashp> They are using X11R7 in opensolaris, and the new package manager (at least my understanding of) means they can keep up to date finally | ||
| [2008/05/14 02:01:18] <ashp> rather than that hideous archaic nonsense they had before | ||
| [2008/05/14 02:01:18] <jbooth> And when users want new gnome apps that require 2.16+, that's a problem when it is stuck back at 2.6 or so. | ||
| [2008/05/14 02:01:29] <ashp> The last time I installed opensolaris I was unable to update it | ||
| [2008/05/14 02:01:34] <ashp> like, I just couldn't get the functionality to work | ||
| [2008/05/14 02:01:40] <ashp> I think it wanted to use a GUI program | ||
| [2008/05/14 02:02:06] <ashp> They are however catching up to linux/bsd in terms of softare and features bundled with it | ||
| [2008/05/14 02:02:17] <jbooth> "catching up" being key | ||
| [2008/05/14 02:02:25] <jbooth> I'm sick of waiting, that server gets RHEL this summer. | ||
| [2008/05/14 02:03:29] <jbooth> (though that'll be tricky since the sun ray software is still stuck on "requiring" gdm 2.14 or such) | ||
| [2008/05/14 02:03:31] <muerr> GUI? The only GUI we have on servers is enough to run the Dell MD Storage Manager on the MD3000-attached systems. And thats only for testing :-) | ||
| [2008/05/14 02:04:13] <jbooth> For a Sun Ray server? Duh it has a gui. :-P Rather pointless without one! | ||
| [2008/05/14 02:04:30] <jbooth> Though in general I agree with you. This machine is just "special" if you know what I mean. | ||
| [2008/05/14 02:06:24] <muerr> Sure. | ||
| [2008/05/14 02:08:27] @ Quit: shake-n-bake_: | ||
| [2008/05/14 02:08:56] @ Quit: winrefund: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 02:10:13] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 02:11:06] @ Quit: raphink: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 02:11:32] @ Quit: shake-n-bake: Client Quit | ||
| [2008/05/14 02:12:53] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 02:16:57] @ shake-n-bake_ joined channel #puppet | ||
| [2008/05/14 02:17:08] @ Quit: shake-n-bake: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 02:19:08] @ Quit: shake-n-bake_: Client Quit | ||
| [2008/05/14 02:19:18] @ asa joined channel #puppet | ||
| [2008/05/14 02:22:36] <stick> http://it.slashdot.org/it/08/05/13/1533212.shtml | ||
| [2008/05/14 02:23:45] <tim|macbook> yeah, that's what i was talking about earlier | ||
| [2008/05/14 02:24:39] @ pleemans joined channel #puppet | ||
| [2008/05/14 02:24:58] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 02:25:07] @ Quit: shake-n-bake: Client Quit | ||
| [2008/05/14 02:26:54] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 02:27:36] @ Quit: DerekW: "Leaving" | ||
| [2008/05/14 02:29:07] @ winrefund joined channel #puppet | ||
| [2008/05/14 02:29:09] <winrefund> hello | ||
| [2008/05/14 02:30:09] <sigmonsays> Morning | ||
| [2008/05/14 02:30:21] <sigmonsays> Anyone have a recipe for monitoring binary checksums? | ||
| [2008/05/14 02:30:30] <sigmonsays> kind like a poor mans IDS | ||
| [2008/05/14 02:31:48] <ashp> Just use aide? | ||
| [2008/05/14 02:32:41] <sigmonsays> probably ;-) | ||
| [2008/05/14 02:33:11] <sigmonsays> [a feature of cfengine] looking for a solution similiar in puppet. but a real IDS is probably the right route | ||
| [2008/05/14 02:38:13] <Wakko666> sigmonsays: puppet does checksumming for any file you're pushing from the puppetmaster. beyond that, i agree with ashp. use aide. | ||
| [2008/05/14 02:38:22] @ kenvandine joined channel #puppet | ||
| [2008/05/14 02:45:52] <benp-> poor man's ids in puppet is just: file { "/dir/to/monitor": ensure => directory, recurse => true, notify => Exec[intrusion_alarm] } | ||
| [2008/05/14 02:46:11] <benp-> but yeah, just use aide :) | ||
| [2008/05/14 02:47:22] <muerr> fwiw, we use SNORT and Samhain, which both are installed and basic configuration (startup) done via Puppet. | ||
| [2008/05/14 02:58:45] @ Quit: benp-: "foo" | ||
| [2008/05/14 02:59:39] @ Quit: strerror_work: | ||
| [2008/05/14 03:02:12] @ roald joined channel #puppet | ||
| [2008/05/14 03:03:22] @ Quit: pleemans: "Ex-Chat" | ||
| [2008/05/14 03:04:02] <gepetto> ::puppet:: Ticket #1177 (enhancement closed): You should be able to test within a template for whether a variab... @ http://reductivelabs.com/trac/puppet/ticket/1177#comment:9 (by luke@madstop.com) | ||
| [2008/05/14 03:06:05] <sigmonsays> thx | ||
| [2008/05/14 03:08:43] <thom> woo and yay and stuff at 1177 | ||
| [2008/05/14 03:24:05] <ashp> Ah, that's a good fix | ||
| [2008/05/14 03:24:10] <ashp> I fell over that exception already | ||
| [2008/05/14 03:24:18] <ashp> when i was doing my sudoer terrible things | ||
| [2008/05/14 03:24:30] @ Quit: roald: "KVIrc 3.2.6 Anomalies http://www.kvirc.net/" | ||
| [2008/05/14 03:24:32] @ Quit: fbe: Read error: 110 (Connection timed out) | ||
| [2008/05/14 03:26:14] @ Quit: zobbo: Read error: 110 (Connection timed out) | ||
| [2008/05/14 03:33:14] @ Quit: shake-n-bake: | ||
| [2008/05/14 03:34:47] @ Quit: tim|macbook: "This computer has gone to sleep" | ||
| [2008/05/14 03:35:19] @ plathrop joined channel #puppet | ||
| [2008/05/14 03:35:32] @ shake-n-bake joined channel #puppet | ||
| [2008/05/14 03:36:07] @ plathrop left channel #puppet ("ERC Version 5.2 (IRC client for Emacs)") | ||
| [2008/05/14 03:36:34] @ plathrop joined channel #puppet | ||
| [2008/05/14 03:45:04] @ ezralini joined channel #puppet | ||
| [2008/05/14 03:47:32] <muerr> ashp: did you come to a resolution on your sudoers file work? | ||
| [2008/05/14 03:48:11] @ Quit: jvanzyl: | ||
| [2008/05/14 03:49:02] <ashp> Not yet, I have to work on the defines and stuff, I've just been distracted with other stuff going on | ||
| [2008/05/14 03:49:23] <ashp> I was working on iclassify and some nfs stuff | ||
| [2008/05/14 03:49:32] <muerr> Ah. | ||
| [2008/05/14 03:49:54] <muerr> I finally caught up on the mailing list. | ||
| [2008/05/14 03:49:58] <muerr> Adam and Luke typed words. | ||
| [2008/05/14 03:50:23] <ashp> A lot of them! | ||
| [2008/05/14 03:50:37] <muerr> I, and my boss more importantly, were pleased about others being interested in Puppet doing CIS benchmark stuff. | ||
| [2008/05/14 03:51:17] <ashp> What is CIS? I saw that thread but didn't catch up on it yet | ||
| [2008/05/14 03:51:27] <muerr> Center for Internet Security. | ||
| [2008/05/14 03:51:48] <muerr> http://cisecurity.org/charter.html | ||
| [2008/05/14 03:52:39] <muerr> We uh, work pretty closely with them :-) | ||
| [2008/05/14 03:53:04] <duritong> muerr: I received the pdf, however didn't yet have time to look at it | ||
| [2008/05/14 03:53:16] <duritong> but maybe I'm interested in it | ||
| [2008/05/14 03:53:27] <duritong> and I think we would use it @ work as well | ||
| [2008/05/14 03:56:02] <ashp> I guess I should look at this thread more! | ||
| [2008/05/14 03:57:29] <ashp> so a guy with a really big camera just walked in, I guess my boss was serious about a photography session featuring us all | ||
| [2008/05/14 03:59:03] @ gileswork joined channel #puppet | ||
| [2008/05/14 04:07:25] <ashp> Well the one thing I agree on in the philosophy thread | ||
| [2008/05/14 04:07:28] <ashp> is that nagios is terrible :) | ||
| [2008/05/14 04:07:54] <jbooth> Is there a monitoring tool that doesn't suck? | ||
| [2008/05/14 04:08:58] <ashp> I once heard some salesmen describe tivoli as capable of 'detecting problems before they happen', that sounds clever? :) | ||
| [2008/05/14 04:09:18] <Wakko666> jbooth: i'm converting our site to use Zabbix instead of Nagios/Cacti. I'm highly impressed with Zabbix. | ||
| [2008/05/14 04:09:21] <jason^> so i guess i need to create a new puppet ca key | ||
| [2008/05/14 04:09:47] <jason^> is there a documented process for doing this so i don't break something? :) | ||
| [2008/05/14 04:10:14] <muerr> ashp we don't even touch nagios configuration with puppet, so that whole part of the discussion doesn't matter for us. our nagios configuration is managed with nagiosql, in a database with a web front end. | ||
| [2008/05/14 04:10:44] <muerr> tivoli monitoring is a pile of garbage, imnsho. | ||
| [2008/05/14 04:11:17] <muerr> if a system is rebooted and comes up within the check interval, there's no way of knowing it was actually rebooted with Tivoli. | ||
| [2008/05/14 04:13:33] <Wakko666> nagios, like cfengine, is a great example of how to do server monitoring ten years ago. thankfully, there are now better tools. | ||
| [2008/05/14 04:16:23] <plathrop> Wakko666: Really? I haven't found a single monitoring tool that is as reliable as Nagios, and better in any way. I test-drove Zenoss, for example, and couldn't count on it actually running checks. Nagios sucks, but it sucks less than anything I've found... | ||
| [2008/05/14 04:16:30] <plathrop> Wakko666: What do you use that's better? | ||
| [2008/05/14 04:16:47] <Wakko666> zabbix. | ||
| [2008/05/14 04:17:19] <plathrop> Wakko666: I'll totally have to check it out. Never heard of it. | ||
| [2008/05/14 04:17:26] <Wakko666> it's just as extensible as nagios, and not nearly as painful to configure. | ||
| [2008/05/14 04:18:03] <Wakko666> it took me all of a day to push the agent to all of my systems, and then configure monitoring and graphing for all of them.. | ||
| [2008/05/14 04:18:24] <ashp> easy to use with puppet? | ||
| [2008/05/14 04:18:33] <plathrop> Hrm... it claims auto-discovery, that immediately rings alarm bells for me... | ||
| [2008/05/14 04:18:40] <Wakko666> yup. that's how i pushed the requirement to install the agent. ;-) | ||
| [2008/05/14 04:19:00] <ashp> oh so i just push the client via puppet | ||
| [2008/05/14 04:19:09] <ashp> and they magically talk back to the central server (assuming firewall rules allow)? | ||
| [2008/05/14 04:19:09] <Wakko666> i haven't had much success with the auto-discovery. but manually configuring things is super-easy with their templating scheme | ||
| [2008/05/14 04:19:31] <ashp> Ah, ok, I thought that sounded too good to be true ;) | ||
| [2008/05/14 04:19:44] <plathrop> ashp: Don't trust anything that claims auto-discovery. | ||
| [2008/05/14 04:19:58] <Wakko666> yeah... they claim auto-discovery will be better in the next version. right now you can only auto-discover things within a /24 | ||
| [2008/05/14 04:20:05] <plathrop> I've been burned time and time again. I'm convinced it's a Hard Problem (tm) that nobody has solved. | ||
| [2008/05/14 04:20:29] <ashp> that stuff never works, not in any complex environment | ||
| [2008/05/14 04:20:34] <ashp> I'll have a look into zabbix | ||
| [2008/05/14 04:20:42] <Wakko666> for me, the thing that sold me on zabbix is the templating and that the graphs Just Work {tm} | ||
| [2008/05/14 04:20:45] <ashp> I want to automate the monitoring, so it's worth checking into it | ||
| [2008/05/14 04:20:53] <ashp> Assuming it's easy to whip up some puppet defines and go to town | ||
| [2008/05/14 04:21:03] <ashp> as I want to add the monitoring defs into the modules that define the servers | ||
| [2008/05/14 04:21:04] <muerr> auto discovery is asking for security implications/problems. | ||
| [2008/05/14 04:21:17] <muerr> Just look at upnp for a great example of that. | ||
| [2008/05/14 04:21:19] <Wakko666> zabbix has rpms already in epel and fedora | ||
| [2008/05/14 04:21:42] <muerr> Convenience and security are pretty much mutually exclusive. Auto discovery is a convenience thing, so draw a conclusion :-). | ||
| [2008/05/14 04:22:10] @ benp- joined channel #puppet | ||
| [2008/05/14 04:23:08] <winrefund> Wakko666, does zabbix require client-side mangling of conf files like how nagios uses nrpe.cfg? | ||
| [2008/05/14 04:23:17] <winrefund> all the command= lines? | ||
| [2008/05/14 04:23:23] <Wakko666> nope | ||
| [2008/05/14 04:23:29] <winrefund> awesome | ||
| [2008/05/14 04:23:51] <benp-> woot my copy of jamesturnbull's book just arrived | ||
| [2008/05/14 04:24:08] <muerr> benp-: pulling strings with puppet? | ||
| [2008/05/14 04:24:16] <muerr> good desktop reference. :-) | ||
| [2008/05/14 04:24:22] * benp- nod | ||
| [2008/05/14 04:24:28] <fastjay> anyone got a sec to answer another best practices question? | ||
| [2008/05/14 04:24:31] <muerr> easier to find things than on the wiki :-x | ||
| [2008/05/14 04:24:54] <muerr> fastjay: depends on the nature of the question - we follow the BP from the wiki pretty closely... | ||
| [2008/05/14 04:25:12] <fastjay> thats exactly what i mean :) | ||
| [2008/05/14 04:25:27] <benp-> also got the ruby way | ||
| [2008/05/14 04:25:29] <fastjay> i have a host that is a shell server. has a handful of one off packages installed and a one off static nfs mount.. | ||
| [2008/05/14 04:25:43] <fastjay> does it make sense to just put those in a service directly? | ||
| [2008/05/14 04:26:09] <fastjay> or should i make some modules to deal w/ that junk? | ||
| [2008/05/14 04:27:13] <muerr> Do you have other 'shell servers'? | ||
| [2008/05/14 04:27:52] <fastjay> we have 3 and they all have the same requirements | ||
| [2008/05/14 04:27:54] <fastjay> 3 and 3 alone | ||
| [2008/05/14 04:28:04] <fastjay> for now | ||
| [2008/05/14 04:28:35] <fastjay> but nothing else uses that stuff under the hood.. ie.. its specific to those boxes... nothing else mounts the syslog server or has those packages intsalled (things like creen and what not) | ||
| [2008/05/14 04:28:36] <ashp> Wakko666: How is zabbix for stuff like autorestarting services? | ||
| [2008/05/14 04:28:45] <fastjay> run opennms ;) | ||
| [2008/05/14 04:28:49] <fastjay> err umm hi :) | ||
| [2008/05/14 04:28:52] <ashp> because that's what I was defining sudoer entries for, allowing nagios to autorestart things | ||
| [2008/05/14 04:29:12] <Wakko666> ashp: i know it's capable of it. i haven't really touched it yet, though. | ||
| [2008/05/14 04:29:15] <fastjay> ashp: you could do that w/ snmp directly. | ||
| [2008/05/14 04:29:35] <fastjay> have it restart a service via an snmp set | ||
| [2008/05/14 04:29:42] <ashp> I'm pretty sure we're not using snmp for monitoring, it was just port checks | ||
| [2008/05/14 04:29:50] <ashp> I know because I haven't installed snmp on any of our newer machines yet | ||
| [2008/05/14 04:29:52] <fastjay> ahh | ||
| [2008/05/14 04:30:02] <fastjay> i did a pretty big opennms deploy in a previous life | ||
| [2008/05/14 04:30:09] <fastjay> 2500 servers being monitored to the hilt | ||
| [2008/05/14 04:30:39] <fastjay> was a dell shop so we monitored hard drive, fan, dimm, cpu.. etc failures | ||
| [2008/05/14 04:30:47] <muerr> fastjay: almost all our services / applications are run on one or two systems. i would create a 'shell service' type module, and put the configuration in there. | ||
| [2008/05/14 04:30:56] <ashp> I have the feeling that I've heard of opennms and there was a reason to avoid it | ||
| [2008/05/14 04:31:00] <ashp> but i can't remember what that reason might be | ||
| [2008/05/14 04:31:08] <fastjay> ashp: high learning curve, and its java | ||
| [2008/05/14 04:31:15] <ashp> java | ||
| [2008/05/14 04:31:17] <ashp> that's the one | ||
| [2008/05/14 04:31:18] <muerr> java, that was the reason i ran. | ||
| [2008/05/14 04:31:23] <ashp> i knew there was a magic word | ||
| [2008/05/14 04:31:25] <muerr> :) | ||
| [2008/05/14 04:31:29] @ gh joined channel #puppet | ||
| [2008/05/14 04:31:31] <fastjay> muerr: ahh we have like 8 differnt 'classes' | ||
| [2008/05/14 04:31:31] <muerr> java is in fact a four letter word. | ||
| [2008/05/14 04:31:32] <ashp> I STILL don't know the right way to install a jre on RHEL 5 | ||
| [2008/05/14 04:31:39] <ashp> There's like 9 different goddamn versions of java out there | ||
| [2008/05/14 04:31:39] <fastjay> ashp: from rpm? | ||
| [2008/05/14 04:31:43] <ashp> fastjay: yeah | ||
| [2008/05/14 04:31:49] <fastjay> ashp: get the one from sun | ||
| [2008/05/14 04:31:54] <ashp> I just wanted something that I could call via package {} in puppet | ||
| [2008/05/14 04:31:55] <muerr> fastjay: just for your 'shell' server stuff? Or total in your whole configuration? | ||
| [2008/05/14 04:31:56] <ashp> and the one from sun | ||
| [2008/05/14 04:32:02] <ashp> is some crazy .sh that tries to expand into an rpm | ||
| [2008/05/14 04:32:08] <ashp> I tried to extract the rpm from it but it didn't seem hapy | ||
| [2008/05/14 04:32:16] <fastjay> muerr: for our whole configuration.. we have various 'roles' played by server that mix and match modules | ||
| [2008/05/14 04:32:57] <fastjay> ashp: if you are looking at doing large scale monitoring, opennms is a good bet to learn (or spend the what 5k on for support) | ||
| [2008/05/14 04:33:17] <ashp> I'm monitoring about 35 servers | ||
| [2008/05/14 04:33:19] <fastjay> it scales rather nice as compared to nagios and others if done right | ||
| [2008/05/14 04:33:22] <fastjay> ahh then .. no need really :) | ||
| [2008/05/14 04:33:34] <ashp> our environment is tiny, one of the smallest i've worked with | ||
| [2008/05/14 04:33:43] <ashp> 90% of my work is completely unrequired as I could easily just do everything by hand | ||
| [2008/05/14 04:34:00] <muerr> fastjay: ah - we have a module for each service. | ||
| [2008/05/14 04:34:13] <fastjay> i was doing 2500 boxes.. with about 15 to 25 services a box in opennms | ||
| [2008/05/14 04:34:29] <ashp> We have one or two max per box | ||
| [2008/05/14 04:34:33] <fastjay> muerr: ahh.. see i am doing a module for each 'unix' service .. ie nginx, apache, memcache, spread. | ||
| [2008/05/14 04:34:37] <ashp> Actually in totality we monitor about 10 things realistically | ||
| [2008/05/14 04:34:40] <fastjay> to dry that up | ||
| [2008/05/14 04:35:06] <ashp> I just wanted to be able to automate adding servers to monitoring, ideally get some cpu/mem/disk graphs as well as let me add some simple defines to do port monitoring | ||
| [2008/05/14 04:35:09] <fastjay> then i am going to use services to include the modules for that role ie: root-cache | ||
| [2008/05/14 04:35:33] <ashp> so i can throw in a monitor { blah: port => 9992 expect_string => 'blahlsklsjdsj' } or something | ||
| [2008/05/14 04:35:37] <fastjay> ashp: onms does that rather well out of the box... the last gig had it setup so that when you brought a box up.. and snmpd started.. it would auto add it to opennms | ||
| [2008/05/14 04:35:57] @ jvanzyl joined channel #puppet | ||
| [2008/05/14 04:36:38] <fastjay> muerr: so i guess w/ my methodology it makes sence to make a 'shellserver' service that glues in all the underlying modules, and any one off bits. | ||
| [2008/05/14 04:36:43] <fastjay> and then have nodes include that class | ||
| [2008/05/14 04:37:45] <fastjay> i plug opennms cause i've done alot of hacking on it... and like it as a framework. I wrote some stuff so you could run ruby scripts inside of the jvm (w/ jruby) and wouldnt have to fork() to shell and run them | ||
| [2008/05/14 04:38:57] <muerr> fastjay: probably. | ||
| [2008/05/14 04:41:29] <ashp> I kind of hate the rhythmyx application | ||
| [2008/05/14 04:41:41] <ashp> it's not capable of filtering the results of ldap to filter out roles that aren't also defined in the application | ||
| [2008/05/14 04:43:26] @ shake-n-bake__ joined channel #puppet | ||
| [2008/05/14 04:43:56] <muerr> I think I'm glad I haven't worked with that app :) | ||
| [2008/05/14 04:44:43] @ pleemans joined channel #puppet | ||
| [2008/05/14 04:49:09] <ashp> I asked my coworker about zabbix | ||
| [2008/05/14 04:49:17] <ashp> and he said 'it's a hideous monster of php' | ||
| [2008/05/14 04:51:49] <Wakko666> ashp - hahaha! i've seen much worse. as php projects go, it's actually not that bad. | ||
| [2008/05/14 04:51:52] @ Quit: shake-n-bake: Read error: 110 (Connection timed out) | ||
| [2008/05/14 04:52:55] <ashp> i think just the word php is enough to horrify him at this point | ||
| [2008/05/14 04:53:23] <Wakko666> not surprising. there are a lot of people writing some terrible php code. | ||
| [2008/05/14 04:56:26] <muerr> Heh. | ||
| [2008/05/14 04:56:37] <ashp> i see you've met our developers | ||
| [2008/05/14 04:56:56] <muerr> Our site is php. | ||
| [2008/05/14 04:57:28] <muerr> Most of my web-programming experience is with php (not much, admittedly) | ||
| [2008/05/14 04:57:52] <Wakko666> ours is a combination of mod_perl, ruby on rails, and java. it's oh-so-exciting. :-\ | ||
| [2008/05/14 04:58:55] <Wakko666> every day i live the mantra "hell is debugging someone else's perl". | ||
| [2008/05/14 05:01:11] <muerr> well at least we've only got one language... though i don't have anything to do with it, we have a whole team of web guys :) | ||
| [2008/05/14 05:02:39] @ nDuff joined channel #puppet | ||
| [2008/05/14 05:06:53] @ mccune joined channel #puppet | ||
| [2008/05/14 05:07:47] <ashp> We're now bringing in java stuff | ||
| [2008/05/14 05:07:50] <ashp> to mix into the php | ||
| [2008/05/14 05:07:53] <ashp> so that's... that's.. sigh | ||
| [2008/05/14 05:10:55] <muerr> Oh - we have some flash stuff. | ||
| [2008/05/14 05:11:08] <muerr> But I don't know much about it. | ||
| [2008/05/14 05:16:02] <winrefund> anyone here good with svn? | ||
| [2008/05/14 05:16:34] <winrefund> somehow, I've ended up with a directory in my working copy that believes it's been added but it clearly has not | ||
| [2008/05/14 05:16:35] <sigmonsays> i'm a newbie who hasn't used modules yet. | ||
| [2008/05/14 05:16:54] <sigmonsays> I know this is the recommended way of "packaging" recipes. Is there a good module tutorial/doc out there? | ||
| [2008/05/14 05:17:38] <winrefund> I need to move to modules also | ||
| [2008/05/14 05:17:48] <winrefund> I'm still using just classes and defines | ||
| [2008/05/14 05:17:53] <muerr> sigmonsays, winrefund: I followed this: http://reductivelabs.com/trac/puppet/wiki/ModuleOrganisation, as well as the best practices doc. | ||
| [2008/05/14 05:18:09] @ Quit: pleemans: "Ex-Chat" | ||
| [2008/05/14 05:18:16] <winrefund> yea, I have James' book but just need to read that section | ||
| [2008/05/14 05:18:20] <sigmonsays> thx muerr | ||
| [2008/05/14 05:18:21] <muerr> modules are mainly classes and defines bundled together by "topic", along with the templates and files associated. | ||
| [2008/05/14 05:20:46] <muerr> i said we have a module for each service. here's a sample list of what we're managing with modules: apache, cacti, clamav, cronolog, dell, dhcp, dirvish, dns, firewall, ids, kickstart, md3000, munin, mysql, nagios, network, ntp, openvpn, postfix, puppet, security, selinux, syslog, users, yum | ||
| [2008/05/14 05:21:00] <muerr> in all, we have about 40 modules. | ||
| [2008/05/14 05:21:49] <benp-> modules ftw | ||
| [2008/05/14 05:22:04] <muerr> a good starting point is Lab42's Puppet infrastructure. | ||
| [2008/05/14 05:22:24] <ashp> root@hlslinutil02(development)$ ls | ||
| [2008/05/14 05:22:25] <ashp> apache dns hardening ldap network ntp postfix puppetmaster rhel rmserver sudo syslog vmware | ||
| [2008/05/14 05:22:27] <muerr> Though I don't necessarily agree with his "roles" implementation, it doesn't particularly work for our deployment. | ||
| [2008/05/14 05:22:28] <ashp> That's my list! | ||
| [2008/05/14 05:22:30] <ashp> cobbler filemounts iclassify lighttpd nfsd php puppet repos rhythmyx ssh svn users | ||
| [2008/05/14 05:30:22] @ Quit: ezralini: | ||
| [2008/05/14 05:31:38] @ thegcat_ joined channel #puppet | ||
| [2008/05/14 05:37:20] @ Quit: lak: No route to host | ||
| [2008/05/14 05:50:41] @ Quit: thegcat: Read error: 110 (Connection timed out) | ||
| [2008/05/14 05:52:57] @ muerr left channel #puppet () | ||
| [2008/05/14 05:54:43] @ jvanzyl_ joined channel #puppet | ||
| [2008/05/14 05:59:00] @ Quit: porridge_: "leaving" | ||
| [2008/05/14 06:05:07] @ londo_ joined channel #puppet | ||
| [2008/05/14 06:10:34] @ Quit: jvanzyl: Read error: 113 (No route to host) | ||
| [2008/05/14 06:15:28] @ Quit: londo__: No route to host | ||
| [2008/05/14 06:21:26] @ Quit: Zothar_Work: "ChatZilla 0.9.82 [Firefox 2.0.0.14/2008040414]" | ||
| [2008/05/14 06:23:14] @ _newbie_ joined channel #puppet | ||
| [2008/05/14 06:25:06] @ fbe joined channel #puppet | ||
| [2008/05/14 06:25:18] @ _newbie_ is now known as f--z | ||
| [2008/05/14 06:36:54] @ Quit: keithlard: | ||
| [2008/05/14 06:38:01] <andrewcshafer> test | ||
| [2008/05/14 06:38:20] <plathrop> andrewcshafer: test received. | ||
| [2008/05/14 06:38:39] @ lak joined channel #puppet | ||
| [2008/05/14 06:38:53] <andrewcshafer> you made it :) | ||
| [2008/05/14 06:41:14] @ Quit: fbe: Remote closed the connection | ||
| [2008/05/14 06:41:28] @ fbe joined channel #puppet | ||
| [2008/05/14 06:44:46] <lak> stupid computer's acting up again :/ | ||
| [2008/05/14 06:45:21] @ Quit: f--z: "KVIrc 3.2.5 Anomalies http://www.kvirc.net/" | ||
| [2008/05/14 06:45:38] <ashp> you need a nice shiny mac ;) | ||
| [2008/05/14 06:47:05] @ Quit: jshare: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 06:48:02] @ jshare joined channel #puppet | ||
| [2008/05/14 06:49:31] @ Quit: jshare: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 06:50:36] @ jshare joined channel #puppet | ||
| [2008/05/14 06:56:27] <lak> ashp: this is *on* my actually-getting-dirty-and-now-not-so-shiny mac | ||
| [2008/05/14 06:57:01] <ashp> the only trouble I have had is it won't wake up from sleep properly since around 10.5.2 | ||
| [2008/05/14 06:57:42] <lak> about noon today it kinda went bonkers | ||
| [2008/05/14 06:57:54] <lak> most fs operations hang for about five secs, and spotlight is entirely hung | ||
| [2008/05/14 06:58:03] <lak> well, not now, since i kill-9'd it | ||
| [2008/05/14 07:00:39] @ Quit: winrefund: "Leaving" | ||
| [2008/05/14 07:00:45] @ Quit: kolla: Remote closed the connection | ||
| [2008/05/14 07:01:44] @ shenson is now known as shenson_not_here | ||
| [2008/05/14 07:06:26] <gepetto> ::puppet:: Changeset [6efe4000dda3379e867786a9c2d4ae0f0cdfc3be]: Using the new Cacher class for handling cached... @ http://reductivelabs.com/trac/puppet/changeset/6efe4000dda3379e867786a9c2d4ae0f0cdfc3be (by Luke Kanies <luke@madstop.com>) | ||
| [2008/05/14 07:09:28] @ keithlard joined channel #puppet | ||
| [2008/05/14 07:09:35] @ Quit: keithlard: Remote closed the connection | ||
| [2008/05/14 07:10:14] @ Quit: thegcat_: | ||
| [2008/05/14 07:12:32] <lak> plathrop: i've moved your autotest docs to ext/autotest in the puppet git repo | ||
| [2008/05/14 07:12:39] <lak> since that seems like a more sensible place | ||
| [2008/05/14 07:16:48] <plathrop> lak: Sure thing. I hope it was helpful. | ||
| [2008/05/14 07:16:56] <lak> definitely | ||
| [2008/05/14 07:17:02] @ Quit: kenvandine: "Ex-Chat" | ||
| [2008/05/14 07:17:23] <lak> you provided clear points on what you thought was most important to start with | ||
| [2008/05/14 07:17:28] <lak> i'm just fleshing out your info now | ||
| [2008/05/14 07:18:13] <plathrop> Excellent. | ||
| [2008/05/14 07:18:41] <plathrop> Let me know if you have any questions about what I wrote. | ||
| [2008/05/14 07:19:28] <fujin> sup guys | ||
| [2008/05/14 07:23:18] <fujin> hey | ||
| [2008/05/14 07:23:22] <fujin> uh in case everyone doesn't know | ||
| [2008/05/14 07:23:40] <fujin> major vulnerability in SSL stuff for ubu/deb http://www.ubuntu.com/usn/usn-612-1 | ||
| [2008/05/14 07:26:28] <fujin> & http://www.ubuntu.com/usn/usn-612-2 | ||
| [2008/05/14 07:26:40] <fujin> ssl keys created by Puppet are probably affected by it ;P | ||
| [2008/05/14 07:27:45] <benp-> yeah thats pretty funny | ||
| [2008/05/14 07:27:57] <sigmonsays> funny!? | ||
| [2008/05/14 07:28:04] <sigmonsays> i'm not laughing yet :) | ||
| [2008/05/14 07:28:18] <benp-> that some debian developer would go tooling around with openssl and cause that | ||
| [2008/05/14 07:28:33] <sigmonsays> ahh, gotcha | ||
| [2008/05/14 07:29:05] <lak> wow | ||
| [2008/05/14 07:29:10] <lak> someone's got a lot of work to do now :? | ||
| [2008/05/14 07:29:12] <lak> :/ | ||
| [2008/05/14 07:29:15] <lak> or rather, nearly everyone does | ||
| [2008/05/14 07:30:27] <fujin> heh, yeah. | ||
| [2008/05/14 07:30:33] <fujin> at least they packaged a tool which detects the bad ones | ||
| [2008/05/14 07:31:50] @ muerr joined channel #puppet | ||
| [2008/05/14 07:32:02] <lak> http://reductivelabs.com/trac/puppet/wiki/WritingTests | ||
| [2008/05/14 07:32:06] @ Quit: kambiz: "Leaving" | ||
| [2008/05/14 07:32:06] <lak> ok, new test docs | ||
| [2008/05/14 07:32:11] <lak> or rather, enhanced | ||
| [2008/05/14 07:32:16] <fujin> heh nice | ||
| [2008/05/14 07:32:17] <lak> bbiab | ||
| [2008/05/14 07:34:42] <gepetto> ::puppet:: Writing Tests edited by luke @ http://reductivelabs.com/trac/puppet/wiki/WritingTests (by luke@madstop.com) | ||
| [2008/05/14 07:34:49] <plathrop> Thanks for the cleanup/clarification, lak | ||
| [2008/05/14 07:34:53] <plathrop> Looks good | ||
| [2008/05/14 07:37:18] @ zobbo joined channel #puppet | ||
| [2008/05/14 07:41:12] @ Quit: zobbo: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 07:44:04] @ zobbo joined channel #puppet | ||
| [2008/05/14 07:48:02] @ mccune left channel #puppet () | ||
| [2008/05/14 07:54:19] @ Quit: lak: | ||
| [2008/05/14 07:56:14] @ pawalls_ joined channel #puppet | ||
| [2008/05/14 07:56:25] * pawalls_ laughs... | ||
| [2008/05/14 07:56:48] <pawalls_> Puppet::SSLCertificates::Inventory.init is extremely inefficient for large numbers of clients ;-) | ||
| [2008/05/14 07:58:20] <pawalls_> it also allows a single incorrectly permission'ed file (or corrupt?) to cause the entire signing process to fail. | ||
| [2008/05/14 07:58:21] @ lak joined channel #puppet | ||
| [2008/05/14 07:58:33] <pawalls_> lak, Puppet::SSLCertificates::Inventory.init is extremely inefficient for large numbers of clients ;-) | ||
| [2008/05/14 07:58:38] <pawalls_> it also allows a single incorrectly permission'ed file (or corrupt?) to cause the entire signing process to fail. | ||
| [2008/05/14 07:59:13] <lak> pawalls_: well, i've completely refactored ssl | ||
| [2008/05/14 07:59:23] <lak> that's now done in ssl/inventory.rb, at least in the master branch | ||
| [2008/05/14 07:59:27] <pawalls_> lak, Ah.. I'm referring to 0.24.3 actually. | ||
| [2008/05/14 07:59:32] @ Quit: Volcane: Read error: 60 (Operation timed out) | ||
| [2008/05/14 07:59:38] <pawalls_> So it's possible this is fixed I suppose :) | ||
| [2008/05/14 07:59:58] <lak> indeed | ||
| [2008/05/14 08:00:01] <pawalls_> The problem is that it reads every single pem file and parses it with the openssl library every time it signs a cert. | ||
| [2008/05/14 08:00:01] <lak> although i can't be positive | ||
| [2008/05/14 08:00:26] @ holoway-sleepy is now known as holoway | ||
| [2008/05/14 08:00:30] <pawalls_> More generally, every time it instantiates the inventory module. | ||
| [2008/05/14 08:00:40] <pawalls_> I'll check it out. | ||
| [2008/05/14 08:05:26] @ spike_ joined channel #puppet | ||
| [2008/05/14 08:09:30] <fujin> holoway: hullo! | ||
| [2008/05/14 08:12:09] @ Arri joined channel #puppet | ||
| [2008/05/14 08:14:05] <holoway> fujin: hi | ||
| [2008/05/14 08:14:16] <holoway> sorry I ran off last night | ||
| [2008/05/14 08:14:23] <holoway> been hectic today, too | ||
| [2008/05/14 08:14:33] <holoway> how are your tests coming? | ||
| [2008/05/14 08:14:56] <muerr> holoway, lak: you guys typed a lot of words and I finally read [most] them. Oi! :-) | ||
| [2008/05/14 08:14:56] @ Quit: spike: Read error: 110 (Connection timed out) | ||
| [2008/05/14 08:15:25] <holoway> well, it was at least useful in that it seems to have taught a lot of people things they didn't know about puppet | ||
| [2008/05/14 08:15:29] @ _newbie_ joined channel #puppet | ||
| [2008/05/14 08:15:36] <holoway> I think lak and I probably got the least out of it | ||
| [2008/05/14 08:15:47] <holoway> but at least we understand one another quite clearly | ||
| [2008/05/14 08:15:48] <holoway> :) | ||
| [2008/05/14 08:16:24] <fujin> holoway: that's alright dude, I, uh | ||
| [2008/05/14 08:16:33] <fujin> Didn't look at them at all ;) | ||
| [2008/05/14 08:17:06] <muerr> holoway: I think I know you well enough to understand your perspective w/o reading all your words, so I mainly read Luke's :) | ||
| [2008/05/14 08:17:19] <holoway> muerr: ha! | ||
| [2008/05/14 08:17:24] <holoway> after all that fucking typing, to not be read | ||
| [2008/05/14 08:17:27] <holoway> it's a terrible fate! | ||
| [2008/05/14 08:17:28] <holoway> :) | ||
| [2008/05/14 08:18:45] <fujin> ;> | ||
| [2008/05/14 08:18:52] @ spike_ is now known as spike | ||
| [2008/05/14 08:19:01] * holoway goes back to shell escaping :) | ||
| [2008/05/14 08:21:16] <fujin> hey | ||
| [2008/05/14 08:21:20] <fujin> you're supposed to go back to teaching me tests | ||
| [2008/05/14 08:21:51] <holoway> fujin: sure | ||
| [2008/05/14 08:23:21] <fujin> ! | ||
| [2008/05/14 08:23:22] <fujin> :D | ||
| [2008/05/14 08:23:49] <fujin> gepetto: what is fujin? | ||
| [2008/05/14 08:23:54] <fujin> gepetto: fujin? | ||
| [2008/05/14 08:23:59] * fujin prods | ||
| [2008/05/14 08:24:19] <holoway> so, if you want to learn about unit testing | ||
| [2008/05/14 08:24:25] <holoway> start with understanding mocks and stubs | ||
| [2008/05/14 08:24:33] <fujin> sec splitting my screen | ||
| [2008/05/14 08:24:37] <fujin> right | ||
| [2008/05/14 08:24:40] <fujin> mocks and stubs | ||
| [2008/05/14 08:24:51] <holoway> so, in any given bit of code | ||
| [2008/05/14 08:24:53] <fujin> is that the Mocha lak is talking about? | ||
| [2008/05/14 08:25:02] <holoway> yes | ||
| [2008/05/14 08:25:20] <holoway> you are likely running code from other parts of the application, or from ruby itself | ||
| [2008/05/14 08:25:39] <holoway> for example, the TemplateWrapper uses scopes, and ruby File and FileTest calls | ||
| [2008/05/14 08:25:46] <holoway> in a world without mocks/stubs | ||
| [2008/05/14 08:25:57] <holoway> I would need to rely on the implementation of those things | ||
| [2008/05/14 08:26:02] <holoway> in order to test my code | ||
| [2008/05/14 08:26:14] <fujin> right | ||
| [2008/05/14 08:26:20] <holoway> ie: if I wanted to test whether a template gets rendered, I would need a fake template, one that shows up in the filesystem, etc. | ||
| [2008/05/14 08:26:26] <fujin> so the idea of a mock/stub is to replicate the functionality of the real code, and then call it? | ||
| [2008/05/14 08:27:02] <fujin> instead of actually calling the real code | ||
| [2008/05/14 08:27:19] <holoway> you're calling the real code, you're just replicating the functionality of the parts that aren't specific to the unit you are testing | ||
| [2008/05/14 08:27:29] <fujin> ah | ||
| [2008/05/14 08:27:30] <holoway> I wasn't testing whether ruby's FileTest.exists? works correctly | ||
| [2008/05/14 08:27:36] <holoway> and in fact | ||
| [2008/05/14 08:27:39] <holoway> to test my code fully | ||
| [2008/05/14 08:27:39] <fujin> riiight | ||
| [2008/05/14 08:27:42] <fujin> I understand now | ||
| [2008/05/14 08:27:45] <holoway> I need it to both work, and then not work | ||
| [2008/05/14 08:27:56] <holoway> the difference between a mock and a stub, in the most basic sense | ||
| [2008/05/14 08:28:01] <holoway> is that a mock verifies behavior | ||
| [2008/05/14 08:28:03] <holoway> and a stub does not | ||
| [2008/05/14 08:28:09] <holoway> so, for FileTest | ||
| [2008/05/14 08:28:15] <holoway> if I did | ||
| [2008/05/14 08:28:28] <holoway> FileTest.expects(:exists?).returns(true) | ||
| [2008/05/14 08:28:37] <holoway> then my test will fail if FileTest never gets called | ||
| [2008/05/14 08:28:45] <holoway> and if it does get called, I know that it will return "true" | ||
| [2008/05/14 08:28:58] <holoway> (FileTests.exists?(anything) == true) | ||
| [2008/05/14 08:29:08] <fujin> hrmm | ||
| [2008/05/14 08:29:13] <fujin> what's this .expects method? | ||
| [2008/05/14 08:29:14] <holoway> a stub, on the other hand | ||
| [2008/05/14 08:29:24] <holoway> that expects method comes from Mocha | ||
| [2008/05/14 08:29:27] <holoway> and what it lets you do | ||
| [2008/05/14 08:29:37] <holoway> is replace the actual .exists? method in FileTest | ||
| [2008/05/14 08:29:42] <holoway> with your "mocked" method | ||
| [2008/05/14 08:29:55] <holoway> (thus avoiding the implementation details of FileTests.exists?) | ||
| [2008/05/14 08:30:00] <fujin> right | ||
| [2008/05/14 08:30:16] <holoway> so, a stub | ||
| [2008/05/14 08:30:33] <fujin> so when you say .expects(:exists?) it means that FileTests.exists?(anything) should be called in that example? | ||
| [2008/05/14 08:30:36] <holoway> is the same as a mock, except it won't fail if it never gets called -- you're just making a change to what you'll return | ||
| [2008/05/14 08:30:42] <holoway> fujin: yes | ||
| [2008/05/14 08:30:45] <holoway> and if it's not, it will bail | ||
| [2008/05/14 08:30:52] <holoway> a more specific thing | ||
| [2008/05/14 08:30:53] <fujin> hmr | ||
| [2008/05/14 08:30:54] <holoway> would be | ||
| [2008/05/14 08:31:06] <holoway> lets say I call FileTest.exists?("foo") | ||
| [2008/05/14 08:31:16] <holoway> and I wanted to test the behavior of when "foo" exists and doesn't exist | ||
| [2008/05/14 08:31:21] <holoway> one mock would | ||
| [2008/05/14 08:31:22] <holoway> be | ||
| [2008/05/14 08:31:43] <holoway> FileTest.expects(:exists?).with("foo").returns(true) | ||
| [2008/05/14 08:31:47] <holoway> the opposite would be | ||
| [2008/05/14 08:31:58] <holoway> FileTest.expects(:exists?).with("foo").returns(false) | ||
| [2008/05/14 08:32:31] @ _newbie_ is now known as f--z | ||
| [2008/05/14 08:32:39] <holoway> http://reductivelabs.com/trac/puppet/attachment/ticket/1177/0001-Adding-has_variable-support-fixing-ticket-1177.patch | ||
| [2008/05/14 08:32:55] <holoway> so look at the last two tests in that patch | ||
| [2008/05/14 08:33:03] <holoway> they test the has_variable? method I added | ||
| [2008/05/14 08:33:28] <holoway> and this should all come together for you | ||
| [2008/05/14 08:34:29] <holoway> so, a stub | ||
| [2008/05/14 08:34:34] <holoway> is the same functionally as a mock | ||
| [2008/05/14 08:34:41] <holoway> in that it will replace a real object/method | ||
| [2008/05/14 08:34:47] @ martha left channel #puppet () | ||
| [2008/05/14 08:34:48] <holoway> returning whatever you tell it to return | ||
| [2008/05/14 08:34:51] <holoway> the difference is | ||
| [2008/05/14 08:35:09] <holoway> if it doesn't get called, or doesn't get called properly, it's not a failure | ||
| [2008/05/14 08:35:40] <fujin> oh so only mocks cause failures? | ||
| [2008/05/14 08:35:44] <holoway> right | ||
| [2008/05/14 08:36:04] <holoway> and choosing which one you want to use is really more about where you want the tests to fail | ||
| [2008/05/14 08:36:13] <holoway> and that, as they say, is that | ||
| [2008/05/14 08:36:16] <holoway> at least, in a nutshell | ||
| [2008/05/14 08:37:02] <plathrop> Help, help, I'm trapped in a nutshell! | ||
| [2008/05/14 08:38:20] <ashp> holoway: Hey, before you run off, do oy uhave a shell script or anything that automates all the rake/git stuff for iclsasify kicking around? | ||
| [2008/05/14 08:38:51] <holoway> plathrop: I get that right, or at least good enough? | ||
| [2008/05/14 08:39:20] <plathrop> holoway: You're asking me?!?!? I think so. Stubs/Mocks are still dark magic to me... | ||
| [2008/05/14 08:39:41] <plathrop> But the rest you are definitely spot-on. | ||
| [2008/05/14 08:39:52] <holoway> well, hopefully they are less dark magic now | ||
| [2008/05/14 08:39:54] <fujin> hrm | ||
| [2008/05/14 08:40:07] <fujin> definitely understand it a little better now | ||
| [2008/05/14 08:40:19] <fujin> still not really understanding | ||
| [2008/05/14 08:40:24] * fujin bangs head | ||
| [2008/05/14 08:40:26] <holoway> fujin: give it a try | ||
| [2008/05/14 08:40:33] <holoway> look at the code you want to test | ||
| [2008/05/14 08:40:36] <holoway> one method | ||
| [2008/05/14 08:40:47] <holoway> find all the parts where it's expecting some value from another part of the code | ||
| [2008/05/14 08:40:56] <holoway> and use mocks/stubs to "fake" that behavior | ||
| [2008/05/14 08:41:08] <holoway> once you've done it once, you'll get the hang of it | ||
| [2008/05/14 08:41:20] <fujin> yeah | ||
| [2008/05/14 08:41:30] <fujin> I kinda have to port the existing unit/tests tests to rspec though | ||
| [2008/05/14 08:41:35] <fujin> which is substantially harder to grasp | ||
| [2008/05/14 08:41:43] <plathrop> fujin: holoway is right, it's much more a "do it until you understand" than a "read up until you understand" thing. | ||
| [2008/05/14 08:42:05] <holoway> fujin: don't bother porting | ||
| [2008/05/14 08:42:13] <plathrop> fujin: I recommend against porting those. Just rewrite. At most, use them as a guide to what you want tested. | ||
| [2008/05/14 08:42:15] <holoway> just start from scratch | ||
| [2008/05/14 08:42:27] * fujin grinds | ||
| [2008/05/14 08:42:32] <holoway> the mental exercise of starting from scratch will be good for you | ||
| [2008/05/14 08:42:35] <fujin> right | ||
| [2008/05/14 08:42:35] <holoway> like vitamins | ||
| [2008/05/14 08:42:48] <fujin> so starting off I need to understand what he's actually testing with the unit tests | ||
| [2008/05/14 08:43:15] <plathrop> fujin: I found it more useful to ignore the existing test/unit tests. | ||
| [2008/05/14 08:43:25] <fujin> really? | ||
| [2008/05/14 08:43:33] <fujin> like just test the methods I've modified/created? | ||
| [2008/05/14 08:44:00] <plathrop> fujin: Definitely. Start there. If you also want to test other stuff, then add it as you understand the code. | ||
| [2008/05/14 08:44:23] <fujin> right | ||
| [2008/05/14 08:44:28] <plathrop> lak would be ecstatic if you refactored code to make it more amenable to testing, too. | ||
| [2008/05/14 08:44:48] <fujin> holoway: so, what should the describe .. do .. end block for Puppet::Reports.register_report(:tagmail) do look like? | ||
| [2008/05/14 08:44:52] <plathrop> fujin: What are you working on? I missed the intro to this conversation. | ||
| [2008/05/14 08:45:00] <plathrop> nm | ||
| [2008/05/14 08:45:03] <plathrop> I see now :-) | ||
| [2008/05/14 08:45:08] <fujin> #1210 | ||
| [2008/05/14 08:45:11] <gepetto> fujin: #1210 is http://reductivelabs.com/trac/puppet/ticket/1210 "tagmail could allow a template for outbound mail formatting" | ||
| [2008/05/14 08:45:23] <plathrop> I love IRC. You can get your questions answered before you finish asking! | ||
| [2008/05/14 08:45:26] <fujin> ;] | ||
| [2008/05/14 08:45:26] <holoway> fujin: I think Puppet::Reports::Tagmail | ||
| [2008/05/14 08:46:12] <holoway> fujin: if the old tagmail had non-rspec tests, it might be worht looking at how he instantiated the Tagmail report object to work with | ||
| [2008/05/14 08:46:19] <holoway> as far as I can tell, it generates a Module | ||
| [2008/05/14 08:46:37] <holoway> when you call Puppet::Reports.register_reports(:tagmail) | ||
| [2008/05/14 08:46:48] <holoway> but that was just a few seconds of looking | ||
| [2008/05/14 08:47:00] @ Quit: Innocenti: Client Quit | ||
| [2008/05/14 08:47:07] <fujin> mm | ||
| [2008/05/14 08:47:12] <fujin> he does report = Object.new | ||
| [2008/05/14 08:47:19] <fujin> report.extend(Puppet::Reports.report(:tagmail)) | ||
| [2008/05/14 08:47:23] <holoway> gotcha | ||
| [2008/05/14 08:47:24] <holoway> sneaky | ||
| [2008/05/14 08:47:27] <fujin> very | ||
| [2008/05/14 08:47:29] <holoway> so yeah | ||
| [2008/05/14 08:47:29] <fujin> cool though | ||
| [2008/05/14 08:47:31] <holoway> do | ||
| [2008/05/14 08:47:41] <holoway> describe "Puppet::Reports::Tagmail" do | ||
| [2008/05/14 08:47:49] <holoway> and then have a before(:each) | ||
| [2008/05/14 08:47:50] <holoway> block | ||
| [2008/05/14 08:47:51] <fujin> would I put that in my before(:each) do .. end block? | ||
| [2008/05/14 08:47:56] <fujin> hehe. cool. | ||
| [2008/05/14 08:47:57] <holoway> that does the @report = Object.new | ||
| [2008/05/14 08:48:02] <holoway> report.extend(foo) | ||
| [2008/05/14 08:48:05] <holoway> fujin: exactly! | ||
| [2008/05/14 08:48:21] <holoway> you're out of control, you crazy new zealander | ||
| [2008/05/14 08:48:45] @ Quit: muerr: "Leaving." | ||
| [2008/05/14 08:48:46] <holoway> fujin.should(:write_tests).returns("awesome") | ||
| [2008/05/14 08:48:46] <fujin> heh :P | ||
| [2008/05/14 08:49:00] <fujin> I figure test driven development is a good skill to pick up | ||
| [2008/05/14 08:49:07] <holoway> yes, it is | ||
| [2008/05/14 08:49:13] <holoway> you'll get freaky religious about it | ||
| [2008/05/14 08:49:19] <holoway> once you see what it does to your code quality | ||
| [2008/05/14 08:49:20] <fujin> anywho, what does the describe blah::blah::blah, "this string here" do .. end | ||
| [2008/05/14 08:49:24] <fujin> what is the 'this string here' all about? | ||
| [2008/05/14 08:49:31] <fujin> just a description of the example group | ||
| [2008/05/14 08:49:31] <fujin> ? | ||
| [2008/05/14 08:49:36] <holoway> fujin: basically, yeah | ||
| [2008/05/14 08:49:40] <holoway> you're doing BDD with rspec | ||
| [2008/05/14 08:49:50] <holoway> and that is the start of the behaviors you are going to describe | ||
| [2008/05/14 08:50:03] <holoway> so describe "An Object" do .. end | ||
| [2008/05/14 08:50:06] <holoway> would do | ||
| [2008/05/14 08:50:08] <holoway> An Object | ||
| [2008/05/14 08:50:15] <plathrop> fujin: It gets outputted nicely when you write tests, too. | ||
| [2008/05/14 08:50:16] <holoway> should "do something" | ||
| [2008/05/14 08:50:20] <holoway> plathrop: exactly | ||
| [2008/05/14 08:50:21] <plathrop> s/write/run | ||
| [2008/05/14 08:50:34] <fujin> an objet should do something | ||
| [2008/05/14 08:50:46] <fujin> hrm | ||
| [2008/05/14 08:51:00] <fujin> stupid backwards ass logical english | ||
| [2008/05/14 08:51:09] <holoway> fujin: that kicks ass, though | ||
| [2008/05/14 08:51:15] <holoway> because you wind up with a human-readable spec | ||
| [2008/05/14 08:51:19] <fujin> right of course | ||
| [2008/05/14 08:52:03] <fujin> well | ||
| [2008/05/14 08:52:04] <holoway> run one of the rspecs with spec -f specdoc | ||
| [2008/05/14 08:52:04] <fujin> for now | ||
| [2008/05/14 08:52:05] <holoway> to see why | ||
| [2008/05/14 08:52:07] <holoway> that is awesome | ||
| [2008/05/14 08:52:17] <fujin> I feel I'll start to write my erb tests | ||
| [2008/05/14 08:52:25] <fujin> and then will look more indepth to rewriting the test/units | ||
| [2008/05/14 08:52:32] <holoway> fujin: yep | ||
| [2008/05/14 08:52:35] <holoway> start with what you know | ||
| [2008/05/14 08:52:37] <fujin> starting to understand a little better, the before each do block is quite cool | ||
| [2008/05/14 08:52:43] <holoway> yep! | ||
| [2008/05/14 08:53:51] <fujin> stub('parser', :watch_file => true) | ||
| [2008/05/14 08:53:54] <fujin> what do it do | ||
| [2008/05/14 08:54:00] <fujin> hold on | ||
| [2008/05/14 08:54:02] <fujin> scrolling uop | ||
| [2008/05/14 08:54:15] <holoway> fujin: that creates a stub object, with a watch_file method, that returns true when called | ||
| [2008/05/14 08:54:24] <holoway> obj = stub('parser', :watch_file => true) | ||
| [2008/05/14 08:54:29] <holoway> obj.watch_file == true | ||
| [2008/05/14 08:54:43] <fujin> ahhh | ||
| [2008/05/14 08:54:45] <holoway> the 'parser' part is just handy nick-naming | ||
| [2008/05/14 08:54:55] <fujin> right | ||
| [2008/05/14 08:55:18] <fujin> what is luke doing here? mod = stub 'module', :define_method => true | ||
| [2008/05/14 08:55:33] <holoway> same thing | ||
| [2008/05/14 08:55:40] <fujin> oh | ||
| [2008/05/14 08:55:42] <fujin> just without the brackets | ||
| [2008/05/14 08:55:43] <fujin> lawl | ||
| [2008/05/14 08:55:45] <holoway> just without ()'s | ||
| [2008/05/14 08:55:50] <holoway> ruby lets you leave those off | ||
| [2008/05/14 08:55:50] <fujin> I see.. just like a ? method | ||
| [2008/05/14 08:55:54] <fujin> yeah. | ||
| [2008/05/14 08:56:14] <holoway> mod.define_method == true | ||
| [2008/05/14 08:56:39] <holoway> just an easy way to make a bunch of dumb ojbects to use for verifying behavior | ||
| [2008/05/14 08:56:47] <holoway> if he wanted to make sure that :define_method got called | ||
| [2008/05/14 08:56:50] <holoway> he could do | ||
| [2008/05/14 08:56:56] <holoway> mod = mock 'module', :define_method => true | ||
| [2008/05/14 08:57:19] <holoway> and then it would be a test failure if mod.define_method never got called | ||
| [2008/05/14 08:58:00] <fujin> heh | ||
| [2008/05/14 08:58:05] <fujin> while conceptually I can understand it | ||
| [2008/05/14 08:58:08] <fujin> my brain just aint working | ||
| [2008/05/14 08:58:21] <fujin> when I type it "should.. I have like an instabrainfart | ||
| [2008/05/14 08:58:21] <holoway> you'll get it | ||
| [2008/05/14 08:58:38] <holoway> well, say what you want to test | ||
| [2008/05/14 08:58:42] <holoway> in plain english | ||
| [2008/05/14 08:59:05] <fujin> how do I decide | ||
| [2008/05/14 08:59:05] <lak> brb | ||
| [2008/05/14 08:59:07] @ Quit: lak: | ||
| [2008/05/14 08:59:09] <fujin> what I want to test | ||
| [2008/05/14 08:59:23] <fujin> like do I want to be testing an entire def..end block | ||
| [2008/05/14 08:59:26] <fujin> or just parts of it | ||
| [2008/05/14 08:59:28] <holoway> fujin: you want to test every path through your code | ||
| [2008/05/14 08:59:38] <holoway> so you might test the same method more than once | ||
| [2008/05/14 08:59:42] <fujin> ah | ||
| [2008/05/14 08:59:44] <holoway> if it behaves differently | ||
| [2008/05/14 08:59:57] <fujin> right | ||
| [2008/05/14 08:59:58] <fujin> so I could say | ||
| [2008/05/14 09:00:00] <holoway> (notice I test has_variable? twice, once for if it has the variable, once it if doesn't) | ||
| [2008/05/14 09:00:03] <fujin> it should compile a valid template | ||
| [2008/05/14 09:00:07] <fujin> it should not compile a valid template | ||
| [2008/05/14 09:00:15] <holoway> it should notc ompile an invalid template | ||
| [2008/05/14 09:00:19] <holoway> but yeah | ||
| [2008/05/14 09:00:20] <fujin> ah | ||
| [2008/05/14 09:00:22] <fujin> one test to bind them | ||
| [2008/05/14 09:00:23] <holoway> exactly | ||
| [2008/05/14 09:00:36] <holoway> the smaller your test, the better you are | ||
| [2008/05/14 09:00:48] <holoway> because it will be easier to find out what failed when it fails | ||
| [2008/05/14 09:01:16] <fujin> right | ||
| [2008/05/14 09:01:29] <fujin> now I'm thinking of a conditional test | ||
| [2008/05/14 09:01:35] <fujin> nm | ||
| [2008/05/14 09:01:39] <fujin> I want to test all code paths; | ||
| [2008/05/14 09:01:44] <holoway> yep | ||
| [2008/05/14 09:01:58] @ Quit: kajtzu: Read error: 131 (Connection reset by peer) | ||
| [2008/05/14 09:02:05] <holoway> when people talk about code coverage | ||
| [2008/05/14 09:02:13] <holoway> that is what they mean | ||
| [2008/05/14 09:02:25] <holoway> "do you have a test that exercises all your code?" | ||
| [2008/05/14 09:02:36] <holoway> s/test/tests/g | ||
| [2008/05/14 09:02:46] <fujin> hmm | ||
| [2008/05/14 09:03:00] <fujin> my code is going to turn into a substantially large amount of tests, if I want to test all the code I changed | ||
| [2008/05/14 09:03:07] <holoway> fujin: yes | ||
| [2008/05/14 09:03:15] <fujin> heh | ||
| [2008/05/14 09:03:16] <holoway> often, you generate 2x as much test code as you did actual code | ||
| [2008/05/14 09:03:19] <fujin> if not more test code than real code | ||
| [2008/05/14 09:03:19] <fujin> lol. | ||
| [2008/05/14 09:03:24] <fujin> indeed. | ||
| [2008/05/14 09:04:12] <holoway> I have one project with nearly 100% test coverage | ||
| [2008/05/14 09:04:15] <fujin> holoway: if I only want to do some before :each behaviour for a single example, can I just put it in that block? | ||
| [2008/05/14 09:04:24] <holoway> it has roughly 1000 lines more test code than actual code | ||
| [2008/05/14 09:04:31] <fujin> or would it be better to chuck it into the before(:each) do block | ||
| [2008/05/14 09:04:55] <fujin> unless FileTest.exists?(Puppet[:tagmailtemplate]) | ||
| [2008/05/14 09:05:04] @ kajtzu joined channel #puppet | ||
| [2008/05/14 09:05:11] <holoway> fujin: I usually stick the common case in before() | ||
| [2008/05/14 09:05:13] <fujin> so basically I want to stub the exists method to return true, and then supply a false file to File.read? | ||
| [2008/05/14 09:05:19] <holoway> and then just make a new object for the test that is the negative | ||
| [2008/05/14 09:05:29] <holoway> fujin: exactly! | ||
| [2008/05/14 09:07:24] <fujin> what'd you do here? Puppet::Module.stubs(:find_template).returns("/tmp/fake_template") | ||
| [2008/05/14 09:07:27] <fujin> what's a .stubs method | ||
| [2008/05/14 09:07:52] <holoway> that's like .expects, only it doesn't fail if it never gets called | ||
| [2008/05/14 09:08:09] <fujin> ah | ||
| [2008/05/14 09:08:15] <holoway> (.expects mocks a method on an object, .stubs stubs the method) | ||
| [2008/05/14 09:09:55] @ lak joined channel #puppet | ||
| [2008/05/14 09:10:00] <fujin> if I'm testing a File.read, should I actually create a temp file for it to read in | ||
| [2008/05/14 09:10:05] <fujin> or just assume that File.read will always work | ||
| [2008/05/14 09:10:22] <fujin> hrm.. I probably should do some post-File.read verification of the template it contains | ||
| [2008/05/14 09:11:50] <holoway> fujin: you should stub out File.read | ||
| [2008/05/14 09:12:06] <holoway> because you assume that File.read has it's own tests to verify it's behavior | ||
| [2008/05/14 09:12:11] @ Quit: fbe: Remote closed the connection | ||
| [2008/05/14 09:12:12] @ Quit: lak: Client Quit | ||
| [2008/05/14 09:12:13] <fujin> ah right | ||
| [2008/05/14 09:12:14] <fujin> that makes sense | ||
| [2008/05/14 09:12:20] @ Quit: johnf: Read error: 113 (No route to host) | ||
| [2008/05/14 09:12:23] <holoway> File.expects(:read).returns("my file contents") | ||
| [2008/05/14 09:12:46] <fujin> hrm | ||
| [2008/05/14 09:13:01] <holoway> or, more accurately | ||
| [2008/05/14 09:13:18] <holoway> File.expects(:read).with("/tmp/filetoread").returns("my file contents") | ||
| [2008/05/14 09:14:51] <fujin> hmm, that's kind of messy | ||
| [2008/05/14 09:15:09] <andrewcshafer> Why do you think it is messy? | ||
| [2008/05/14 09:15:12] <fujin> lost it again | ||
| [2008/05/14 09:15:25] <fujin> I don't know, I'm trying to work out what parts of this I should actually be testing | ||
| [2008/05/14 09:15:27] <andrewcshafer> fujin: Just read it out loud | ||
| [2008/05/14 09:15:37] <fujin> oh I understand what he's saying | ||
| [2008/05/14 09:15:43] <fujin> just not sure how that'd apply to what I'm tryign to test. | ||
| [2008/05/14 09:15:49] <andrewcshafer> that's always hard, something everyone struggles with | ||
| [2008/05/14 09:16:25] <andrewcshafer> Honestly, writing good tests is harder than writing the 'code' | ||
| [2008/05/14 09:16:29] <fujin> heh | ||
| [2008/05/14 09:17:08] <holoway> fujin: it's hard to realize that you should basically be trusting things like File.read and ERB | ||
| [2008/05/14 09:17:21] <holoway> for unit tests, you have to | ||
| [2008/05/14 09:17:29] <holoway> there is another class of test | ||
| [2008/05/14 09:17:35] <holoway> called "integration" testing | ||
| [2008/05/14 09:17:45] <holoway> that actually tests that all the parts you think should work together do | ||
| [2008/05/14 09:17:46] <andrewcshafer> It takes a while to get test infected, but you start to get a rhythm | ||
| [2008/05/14 09:17:49] <fujin> well if I'm supposed to trust file.read and ERB, I don't really have shit to test | ||
| [2008/05/14 09:17:55] <holoway> fujin: sure you do | ||
| [2008/05/14 09:18:02] <holoway> are you calling File.read if the file doesn't exist? | ||
| [2008/05/14 09:18:06] <fujin> no | ||
| [2008/05/14 09:18:08] <holoway> are you sure you actually call erb? | ||
| [2008/05/14 09:18:12] <holoway> how do you know? | ||
| [2008/05/14 09:18:17] <holoway> more precisely | ||
| [2008/05/14 09:18:26] <holoway> if I hop in there and fuck up your beautiful code | ||
| [2008/05/14 09:18:31] <holoway> how do you know I broke it? | ||
| [2008/05/14 09:18:45] <fujin> right, I see what you're trying to say | ||
| [2008/05/14 09:18:47] <andrewcshafer> The way I think of it, is a Unit tests should tell you which line of code to go to when something breaks | ||
| [2008/05/14 09:19:09] <andrewcshafer> Which is why people advocate 'only one' assert or expectation | ||
| [2008/05/14 09:19:30] <holoway> exactly | ||
| [2008/05/14 09:19:41] <holoway> although the BDD crowd advocates that a bit less than the TDD crowd does | ||
| [2008/05/14 09:19:53] <holoway> but it's still a good practice | ||
| [2008/05/14 09:20:13] <andrewcshafer> which in practice, means tolerate two, wince at three | ||
| [2008/05/14 09:20:37] <holoway> right | ||
| [2008/05/14 09:20:43] <holoway> because usually, if you have many more than that | ||
| [2008/05/14 09:20:44] <andrewcshafer> and is also a reflection of the system under test | ||
| [2008/05/14 09:20:54] @ lak joined channel #puppet | ||
| [2008/05/14 09:20:55] <holoway> you're probably not being specific enough in what the behaviors are | ||
| [2008/05/14 09:22:06] <andrewcshafer> there is also a huge difference in the code you write when you write the tests first | ||
| [2008/05/14 09:22:18] <holoway> fujin: btw, it's awesome that you want to figure this out, and it's just a bit of a learning curve | ||
| [2008/05/14 09:22:22] <holoway> you'll totally get it | ||
| [2008/05/14 09:22:31] <andrewcshafer> versus writing code that you 'think' seems to work and then going back to retrofit with tests | ||
| [2008/05/14 09:22:46] <holoway> yeah | ||
| [2008/05/14 09:22:58] <holoway> test a little, write just enough to validate the test, then do some more | ||
| [2008/05/14 09:23:09] <holoway> I'll go back and forth if what I'm doing needs lots of mocks/stubs | ||
| [2008/05/14 09:23:17] <holoway> since it's hard to know what to stub in advance | ||
| [2008/05/14 09:23:29] <holoway> at least, it's hard for me | ||
| [2008/05/14 09:23:35] <holoway> (perhaps others are better at it) | ||
| [2008/05/14 09:24:59] <andrewcshafer> its hard for everyone, if your tests need lots of stubs, there might be an opportunity to break up the interfaces and responsibilities, but it is hard to see the seams | ||
| [2008/05/14 09:25:32] <andrewcshafer> especially if you are learning all the other details about a language and a testing framework, etc | ||
| [2008/05/14 09:25:51] * holoway nods | ||
| [2008/05/14 09:26:04] <holoway> okay, I gotta go deal with this ssh/ssl key snafu | ||
| [2008/05/14 09:26:15] <holoway> fujin, good luck, and holler if you need more help | ||
| [2008/05/14 09:26:33] <holoway> jamesturnbull: your scrollback has stuff you are welcome to add to the testing page | ||
| [2008/05/14 09:26:41] <holoway> since you offered yesterday | ||
| [2008/05/14 09:26:41] <holoway> :) | ||
| [2008/05/14 09:26:58] <andrewcshafer> fujin: Good code comes from experience, experience comes from bad code. . . | ||
| [2008/05/14 09:27:32] <nDuff> the docs describe "if" as only checking for existence of a variable -- is that to say that a defined variable with a value of false will execute the truth branch of an if statement? | ||
| [2008/05/14 09:28:03] <fujin> nDuff: use a case | ||
| [2008/05/14 09:28:13] <fujin> err, switch/case | ||
| [2008/05/14 09:29:02] <fujin> andrewcshafer: sorry, I have bad habits from older languages, where you're expected to do something then test straight away | ||
| [2008/05/14 09:29:34] <fujin> I suppose this methodology as you guys have mentioned does make it far easier to see where stuff is broken | ||
| [2008/05/14 09:29:37] <fujin> well mostly | ||
| [2008/05/14 09:30:10] <holoway> fujin: it gets better as test coverage increases | ||
| [2008/05/14 09:30:16] <holoway> at 100% test coverage, it's pretty easy | ||
| [2008/05/14 09:30:23] <fujin> right | ||
| [2008/05/14 09:30:30] <holoway> okay | ||
| [2008/05/14 09:30:33] <holoway> bye | ||
| [2008/05/14 09:30:35] <fujin> seeya | ||
| [2008/05/14 09:30:36] <nDuff> does the puppet language provide any way to do a string split, or do I need to drop to ruby for that? | ||
| [2008/05/14 09:30:44] @ holoway is now known as holoway-ssl-chao | ||
| [2008/05/14 09:30:51] @ holoway-ssl-chao is now known as holoway-ssl | ||
| [2008/05/14 09:30:55] <fujin> no, Puppet does not provide a way to do it | ||
| [2008/05/14 09:31:04] <fujin> you could use a parser plugin though like DavidS' gsub snippet | ||
| [2008/05/14 09:31:15] * andrewcshafer has written plenty of bad code | ||
| [2008/05/14 09:33:35] <fujin> writing plenty of bad code doesn't seem to be helping me :D | ||
| [2008/05/14 09:35:06] <jason^> so did anybody redo their puppet ssl keys because of the ubuntu/debian openssl issue? | ||
| [2008/05/14 09:35:06] <andrewcshafer> The first step is admitting you have a problem :) | ||
| [2008/05/14 09:35:33] <jason^> i'm not sure how to create a new puppet key and rekey the hosts without destroying my infrastructure :) | ||
| [2008/05/14 09:35:45] @ lak left channel #puppet () | ||
| [2008/05/14 09:35:48] @ lak joined channel #puppet | ||
| [2008/05/14 09:36:12] <andrewcshafer> The quality of the tests make a huge difference, because if your TDD become Test Dragging Development, they slow you down and cause undue pain | ||
| [2008/05/14 09:36:24] <fujin> well sure | ||
| [2008/05/14 09:36:49] <fujin> the problem is they became test dragging development without trying - They are slowing me down and causing pain, undue or not | ||
| [2008/05/14 09:37:04] <fujin> conceptually it seems easy enough | ||
| [2008/05/14 09:37:11] <fujin> working out where I need to do what is a different case | ||
| [2008/05/14 09:37:22] <andrewcshafer> care to pastie the code you are testing and the tests you have so far? | ||
| [2008/05/14 09:37:49] <fujin> http://github.com/fujin/puppet/commits/fix1210 | ||
| [2008/05/14 09:37:54] @ Quit: freiheit: | ||
| [2008/05/14 09:37:56] <fujin> the last 3 commits | ||
| [2008/05/14 09:38:10] <fujin> first two is the code I wrote, last is my initial work for testing | ||
| [2008/05/14 09:41:08] @ Quit: markl__: "Lost terminal" | ||
| [2008/05/14 09:45:30] <fujin> oh to have some sort of neural interface where I could learn skills instantaneously | ||
| [2008/05/14 09:45:35] * fujin puts music on | ||
| [2008/05/14 09:47:48] <plathrop> fujin: I'll be terrified when those are invented. Think of the security problems! | ||
| [2008/05/14 09:48:30] <fujin> heh | ||
| [2008/05/14 09:53:41] @ shenson_not_here is now known as shenson | ||
| [2008/05/14 09:54:21] <andrewcshafer> fujin: Ok, here are my suggestions, I think you need 3 tests on the first part: 'should read the template file when it exists', 'should use the default when template file doesn't exist', 'should call send with the template' and maybe 2 'when generating email' tests 'should generate an ERB instance from the template' and 'should call result with bind' | ||
| [2008/05/14 09:57:01] <fujin> hmm | ||
| [2008/05/14 09:57:03] <fujin> thanks | ||
| [2008/05/14 09:58:55] <fujin> andrewcshafer: two example groups or one? | ||
| [2008/05/14 09:59:54] <andrewcshafer> you might consider pulling that default template up into another variable, then your tests are basically stubbing the FileTest exists stuff both ways, one you verify the value of template and the other you can verify that the File gets read and the assignment, and then another expectation for the send | ||
| [2008/05/14 10:01:13] <andrewcshafer> I would probably go with two groups | ||
| [2008/05/14 10:01:28] <andrewcshafer> one for the generate and one for the send | ||
| [2008/05/14 10:01:35] <fujin> right | ||
| [2008/05/14 10:02:13] <fujin> the generate would encompass all of the filetest stuff and calling send with the template right | ||
| [2008/05/14 10:03:31] <andrewcshafer> this is a lot easier when the test code is good, because you have good examples everywhere | ||
| [2008/05/14 10:03:57] <fujin> What do you mean? | ||
| [2008/05/14 10:04:24] <fujin> trying to say me code is bad? :> | ||
| [2008/05/14 10:08:28] @ andrewcshafer_ joined channel #puppet | ||
| [2008/05/14 10:08:45] @ Quit: andrewcshafer: Read error: 104 (Connection reset by peer) | ||
| [2008/05/14 10:10:28] <fujin> oh, hey | ||
| [2008/05/14 10:10:33] <fujin> wondred why you didn't reply lol | ||
| [2008/05/14 10:13:44] <andrewcshafer_> I missed what you said :/ | ||
| [2008/05/14 10:15:50] @ johnf joined channel #puppet | ||
| [2008/05/14 10:18:03] <plathrop> andrewcshafer_: [17:03] <fujin> What do you mean? | ||
| [2008/05/14 10:18:03] <plathrop> [17:04] <fujin> trying to say me code is bad? :> | ||
| [2008/05/14 10:18:03] <plathrop> | ||
| [2008/05/14 10:18:18] <plathrop> [17:10] <fujin> oh, hey | ||
| [2008/05/14 10:18:18] <plathrop> [17:10] <fujin> wondred why you didn't reply lol | ||
| [2008/05/14 10:18:18] <plathrop> | ||
| [2008/05/14 10:18:27] <plathrop> andrewcshafer_: That's all you missed | ||
| [2008/05/14 10:18:38] <fastjay> back | ||
| [2008/05/14 10:19:00] <andrewcshafer_> fujin: no, its 'our' code :) | ||
| [2008/05/14 10:19:10] <andrewcshafer_> collective ownership | ||
| [2008/05/14 10:19:50] <andrewcshafer_> it could be worse | ||
| [2008/05/14 10:19:54] <andrewcshafer_> it could be java | ||
| [2008/05/14 10:20:00] <fujin> well | ||
| [2008/05/14 10:20:01] <fujin> yeah | ||
| [2008/05/14 10:20:05] <fujin> that's very true | ||
| [2008/05/14 10:20:13] <fujin> I'm goign to try and plot out those tests you named | ||
| [2008/05/14 10:20:17] <fujin> see how I go from there | ||
| [2008/05/14 10:20:40] <fujin> andrewcshafer_: something I don't understand, is this examplegroup's name (Puppet::Reports::Tagmail) does that have to mean anything really? | ||
| [2008/05/14 10:21:09] <fujin> or is it purely for descriptive value | ||
| [2008/05/14 10:22:33] <holoway-ssl> fujin: it usually describes the thing you are testing, and optionally what the group of tests are doing | ||
| [2008/05/14 10:22:53] <fujin> sure, but it doesn't actually correlate back to real code anywhere does it | ||
| [2008/05/14 10:23:07] <holoway-ssl> fujin: nope | ||
| [2008/05/14 10:23:12] <fujin> cool | ||
| [2008/05/14 10:24:21] <andrewcshafer_> fujin: yeah, its just cosmetic | ||
| [2008/05/14 10:25:05] <fujin> hrhgm | ||
| [2008/05/14 10:25:25] <andrewcshafer_> but it can make things more readable and meaningful | ||
| [2008/05/14 10:25:40] <andrewcshafer_> that sounds painful | ||
| [2008/05/14 10:30:57] <andrewcshafer_> biab | ||
| [2008/05/14 10:35:22] @ plathrop left channel #puppet ("ERC Version 5.2 (IRC client for Emacs)") | ||
| [2008/05/14 10:38:31] <fujin> weh, this is getting more confusing now | ||
| [2008/05/14 10:40:59] <fujin> heh | ||
| [2008/05/14 10:41:02] <fujin> so it does matter.. usr/lib/ruby/gems/1.8/gems/activesupport-2.0.2/lib/active_support/dependencies.rb:478:in `const_missing': uninitialized constant Puppet::Reports::Tagmail (NameError) | ||
| [2008/05/14 10:41:30] <fujin> easy enough to deal with | ||
| [2008/05/14 10:48:25] @ Quit: kajtzu: kubrick.freenode.net irc.freenode.net | ||
| [2008/05/14 10:48:26] @ Quit: StyleWarz: kubrick.freenode.net irc.freenode.net | ||
| [2008/05/14 10:48:27] @ Quit: londo: kubrick.freenode.net irc.freenode.net | ||
| [2008/05/14 10:49:14] @ kajtzu joined channel #puppet | ||
| [2008/05/14 10:49:15] @ londo joined channel #puppet | ||
| [2008/05/14 10:49:16] @ StyleWarz joined channel #puppet | ||
| [2008/05/14 10:49:51] <andrewcshafer_> fujin: yeah, we lied to you, it has to be something that can be evaluated, but it's not enforcing what gets tested :/ | ||
| [2008/05/14 10:50:03] <fujin> yeah that's cool | ||
| [2008/05/14 10:50:10] <fujin> I just changed it to Puppet::Reports, "blahblah" | ||
| [2008/05/14 10:50:28] <fujin> andrewcshafer_: so it looks like Puppet::Reports is autoloading the tagmail reporter | ||
| [2008/05/14 10:50:37] <fujin> how can I fire off tagmail reporters .process method? | ||
| [2008/05/14 10:51:38] <andrewcshafer_> good question, let me look go look at it | ||
| [2008/05/14 10:51:44] <fujin> cool dude appreciate it | ||
| [2008/05/14 10:52:37] <holoway-ssl> fujin: I think you just call it on the fake object you extended | ||
| [2008/05/14 10:54:03] <fujin> hrerm | ||
| [2008/05/14 10:54:54] <fujin> I think | ||
| [2008/05/14 10:54:56] <fujin> *think* | ||
| [2008/05/14 10:54:58] <fujin> I should be doing something like | ||
| [2008/05/14 10:57:00] @ Quit: jvanzyl_: | ||
| [2008/05/14 10:57:03] <fujin> holoway-ssl: so what has he done here http://rafb.net/p/rNkVLl85.html | ||
| [2008/05/14 10:57:49] <holoway-ssl> I'm not sure, without looking at the report code | ||
| [2008/05/14 10:57:50] <holoway-ssl> but | ||
| [2008/05/14 10:58:05] <holoway-ssl> I think the repots themselves are modules that extend an object | ||
| [2008/05/14 10:58:08] <holoway-ssl> so you should be able to do | ||
| [2008/05/14 10:58:14] <holoway-ssl> @object = Object.new | ||
| [2008/05/14 10:58:45] <holoway-ssl> the extend trick we talked about way back at hte beginning of this whole saga | ||
| [2008/05/14 10:58:51] <fujin> well do I need to do that if I can just use Puppet::Reports to load tagmail? | ||
| [2008/05/14 10:58:54] <fujin> yeah I recall it | ||
| [2008/05/14 10:59:10] <holoway-ssl> I think it would make things easier | ||
| [2008/05/14 10:59:16] <holoway-ssl> but I don't know | ||
| [2008/05/14 10:59:34] <holoway-ssl> I'm too busy at the moment to crack open the code and look | ||
| [2008/05/14 10:59:40] <fujin> alright dude | ||
| [2008/05/14 10:59:41] <holoway-ssl> so I'm going from memory from when I did yesterday | ||
| [2008/05/14 10:59:43] <fujin> I'll keep plodding away at it | ||
| [2008/05/14 10:59:49] <holoway-ssl> but that's the right direction | ||
| [2008/05/14 10:59:52] <holoway-ssl> try it both ways! | ||
| [2008/05/14 10:59:52] <holoway-ssl> :) | ||
| [2008/05/14 11:06:08] @ M- joined channel #puppet | ||
| [2008/05/14 11:17:13] @ kenvandine joined channel #puppet | ||
| [2008/05/14 11:18:55] <fujin> lol, Class Tagmail is already defined in Puppet::Reports | ||
| [2008/05/14 11:19:18] <fujin> lak: care to shed any light? how might I fire off the tagmail reporters process method from a test | ||
| [2008/05/14 11:19:31] <fujin> nm actually I'll try your Object.new hack | ||
| [2008/05/14 11:21:11] @ M- left channel #puppet ("Leaving") | ||
| [2008/05/14 11:21:18] @ M- joined channel #puppet | ||
| [2008/05/14 11:21:31] <fujin> hrm that does the same thing | ||
| [2008/05/14 11:28:38] <fujin> someone wake up and help :> | ||
| [2008/05/14 11:31:43] <fujin> I'm headin down to subway, back in a few | ||
| [2008/05/14 11:31:50] <fujin> will be expecting much hand holding when I return | ||
| [2008/05/14 11:40:05] @ Quit: lak: Read error: 113 (No route to host) | ||
| [2008/05/14 11:41:15] @ shenson is now known as shenson_not_here | ||
| [2008/05/14 11:42:14] @ lak joined channel #puppet | ||
| [2008/05/14 11:43:52] @ Quit: shake-n-bake__: | ||
| [2008/05/14 11:44:48] <nDuff> hrm -- I wrote some code that depends on if $i_am_false evaluating its true branch (as the docs seem to specify that if/else only treats undef as false), but it doesn't *appear* to be doing so. | ||
| [2008/05/14 11:48:46] @ OhadLevy joined channel #puppet | ||
| [2008/05/14 11:49:32] <lak> nDuff: 'false' is also false | ||
| [2008/05/14 11:50:09] <OhadLevy> I have a question, Is it possible to use one define for file, which sometimes have the path defined and sometimes not? | ||
| [2008/05/14 11:50:32] <OhadLevy> I've tried to use undef, but couldnt get it work | ||
| [2008/05/14 11:50:56] <holoway-ssl> OhadLevy: nopaste us an example? | ||
| [2008/05/14 11:51:03] <OhadLevy> with something like that: | ||
| [2008/05/14 11:51:15] <OhadLevy> define pushfile($owner = root, $group = root, $mode, $src, $backup = false, $path, $recurse = false) { file {"$name": mode => $mode, owner => $owner, group => $group, recurse => $recurse, path => $path ? { "" => "$name", path => $path }, backup => $backup, sourceselect => first, source => [ | ||
| [2008/05/14 11:51:42] <OhadLevy> ah, whats the web site for the posting? | ||
| [2008/05/14 11:51:46] <holoway-ssl> OhadLevy: you can get a pastie url with "pastie: url me" | ||
| [2008/05/14 11:52:23] <johnf> Man I'm glad I have puppet deployed. Makes this debian openssl problem nice and easy | ||
| [2008/05/14 11:52:28] <OhadLevy> http://pastie.caboo.se/196545 | ||
| [2008/05/14 11:52:50] <holoway-ssl> johnf: much more, yeah | ||
| [2008/05/14 11:53:37] <holoway-ssl> OhadLevy: perhaps you can just set path to $name if it's not defined? | ||
| [2008/05/14 11:53:39] * Gwayne laughs | ||
| [2008/05/14 11:53:52] <OhadLevy> thats what I've tried | ||
| [2008/05/14 11:54:00] <Gwayne> I could almost say, lucky I did not install debian :) | ||
| [2008/05/14 11:54:09] <OhadLevy> holoway-ssl: but it always keeps saying that I must pass a path... | ||
| [2008/05/14 11:54:44] <nDuff> lak, oh; phooey -- the language tutorial doesn't say as much clearly (and I don't know where else to look), and I got a (somewhat ambiguous) answer in-channel earlier which implied that behavior was otherwise. | ||
| [2008/05/14 11:54:50] * nDuff rewrites his code. | ||
| [2008/05/14 11:55:00] <OhadLevy> holoway-ssl: it seems that once you evaluate the path directive, it must have a value | ||
| [2008/05/14 11:55:21] <fujin> so what's the problem? | ||
| [2008/05/14 11:55:39] <fujin> path => $path ? { "" => "$name", defualt => "$path }, | ||
| [2008/05/14 11:56:22] <holoway-ssl> and set $path="" above | ||
| [2008/05/14 11:56:29] <holoway-ssl> in the define | ||
| [2008/05/14 11:56:43] <fujin> yes | ||
| [2008/05/14 11:56:49] @ Ohad joined channel #puppet | ||
| [2008/05/14 11:56:50] <fujin> define pushfile($path = "", ..) | ||
| [2008/05/14 11:56:53] <fujin> argh. | ||
| [2008/05/14 11:57:16] <Ohad> fujin: sorry guys, I got cut off, could you repeat please? | ||
| [2008/05/14 11:57:53] <fujin> Ohad: You're using the selector wrong.. | ||
| [2008/05/14 11:57:57] <fujin> path => $path ? { "" => "$name", defualt => "$path }, | ||
| [2008/05/14 11:58:03] <fujin> and define pushfile($path = "", ..) | ||
| [2008/05/14 11:58:11] <fujin> fuck it let me edit your shit on pb | ||
| [2008/05/14 11:58:22] <Gwayne> btw is there a way to let a sevice watch more then one file ? | ||
| [2008/05/14 11:58:27] <Gwayne> btw is there a way to let a service watch more then one file ? | ||
| [2008/05/14 11:58:44] <Gwayne> So it refreshes when one of those changes | ||
| [2008/05/14 11:58:45] <holoway-ssl> Gwayne: sure, just subscribe/notify that service from the file resource | ||
| [2008/05/14 11:58:58] <fujin> http://pastie.caboo.se/196548 | ||
| [2008/05/14 11:59:07] <fujin> Gwayne: specify an array | ||
| [2008/05/14 11:59:16] <Gwayne> holoway-ssl, How do I subscribe to several files ? Because I always get a error. | ||
| [2008/05/14 11:59:26] <fujin> wiki:LanguageTutorial | ||
| [2008/05/14 11:59:30] <gepetto> fujin: wiki: wiki:LanguageTutorial is http://reductivelabs.com/trac/puppet/wiki/LanguageTutorial | ||
| [2008/05/14 11:59:31] <fujin> but, for a start | ||
| [2008/05/14 11:59:36] <fujin> an array is like [ Resource, Resource ] | ||
| [2008/05/14 11:59:53] <fujin> i.e.; [ File["/tmp/poo"], File["/tmp/poo2"] ] | ||
| [2008/05/14 12:00:00] <holoway-ssl> fujin++ | ||
| [2008/05/14 12:00:14] <Gwayne> Aha, now I see what I did wrong | ||
| [2008/05/14 12:00:41] <Gwayne> I did File x, x, ,x | ||
| [2008/05/14 12:01:07] <Ohad> fujin: 10x | ||
| [2008/05/14 12:01:33] <fujin> Ohad: unfortunately a selector or case with "" / default is the only way to test null quite happily | ||