Gary, thanks very much for that. I got that to work as I wanted after a bit of fighting with other issues of my own creation. So I am very grateful to you for your help.
If you ever in Dublin, Ireland. Look me up, I owe you a favor so I'm willing to pay back, within reason of course. Best Sean On Apr 12, 5:21 pm, Gary Larizza <g...@puppetlabs.com> wrote: > Hey Guys, > > Let me try to step through this one step at a time. I recommend > downloading one of our VMs that we host for testing puppet (I'm using the > VM we use for training located here > -->http://downloads.puppetlabs.com/training/puppet-vmware.zipbut there's also > one for VirtualBox too > -->http://downloads.puppetlabs.com/training/puppet-vbox.zip) to test this > setup. If you do that, make sure DNS and networking are working (So, setup > host entries on your laptop for each VM, setup the hostname and FQDN ON > EACH VM, and make sure each VM can ping the VM Master). I'm using three > VMs (a master and two agents): nodemaster.puppetlabs.vm, > node1.puppetlabs.vm, and node2.puppetlabs.vm. Once DNS resolves and is > working, setup Puppet on the master FIRST, and then setup the remaining > nodes as agents. Again, I recommend using the VMs and using Puppet > Enterprise because it makes it MUCH EASIER to setup Puppet - just use the > puppet-enterprise-installer script (once you get the process of using a > single cert and multiple node_names DOWN, THEN you can start on some actual > machines). > > Now we can start customizing Puppet. There are a couple of key steps that > need to be taken since we're shipping around a single cert for all machines: > > 1. When you stand up a PE Agent, it's going to contact the master and setup > a Certificate Signing Request. Because of this, go to the master node's > $ssldir (which, on Puppet Enterprise, is /etc/puppetlabs/puppet/ssl. If > you want to find the $ssldir on YOUR master, just run `puppet config print > ssldir` and it will print it out for you) and remove the CSRs that are in > the ca/requests/ directory (they should be named after your nodes). > > 2. Next, lets generate the single certificate that will be shopped around. > You will need to use the same 'certname' on every node. This is the name > of the node as SSL is aware (in my case I'm using 'macs.puppetlabs.vm'). > Do this by doing `puppet cert generate macs.puppetlabs.vm` on your MASTER > machine. The master will generate the certs and your $ssldir will look > something like this: > > ssl > > |-- ca > > | |-- ca_crl.pem > > | |-- ca_crt.pem > > | |-- ca_key.pem > > | |-- ca_pub.pem > > | |-- inventory.txt > > | |-- private > > | | `-- ca.pass > > | |-- requests > > | |-- serial > > | `-- signed > > | |-- macs.puppetlabs.vm.pem > > | |-- nodemaster.puppetlabs.vm.pem > > | |-- pe-internal-broker.pem > > | |-- pe-internal-dashboard.pem > > | |-- pe-internal-mcollective-servers.pem > > | |-- pe-internal-peadmin-mcollective-client.pem > > | `-- pe-internal-puppet-console-mcollective-client.pem > > |-- certificate_requests > > |-- certs > > | |-- ca.pem > > | |-- macs.puppetlabs.vm.pem > > | |-- nodemaster.puppetlabs.vm.pem > > | |-- pe-internal-broker.pem > > | |-- pe-internal-mcollective-servers.pem > > | |-- pe-internal-peadmin-mcollective-client.pem > > | `-- pe-internal-puppet-console-mcollective-client.pem > > |-- crl.pem > > |-- private > > |-- private_keys > > | |-- macs.puppetlabs.vm.pem > > | |-- nodemaster.puppetlabs.vm.pem > > | |-- pe-internal-broker.pem > > | |-- pe-internal-mcollective-servers.pem > > | |-- pe-internal-peadmin-mcollective-client.pem > > | `-- pe-internal-puppet-console-mcollective-client.pem > > `-- public_keys > > |-- foo.puppetlabs.vm.pem > > |-- macs.puppetlabs.vm.pem > > |-- nodemaster.puppetlabs.vm.pem > > |-- pe-internal-broker.pem > > |-- pe-internal-mcollective-servers.pem > > |-- pe-internal-peadmin-mcollective-client.pem > > `-- pe-internal-puppet-console-mcollective-client.pem > > 3. There are three files you need to collect on your master and ship > around to all of your nodes. They are ALL in the $ssldir, so these paths > are relative to THAT directory. The three files are: > > - $ssldir/private_keys/macs.puppetlabs.vm.pem on the master -> gets > copied to the agent's $ssldir/private_keys directory > - $ssldir/public_keys/macs.puppetlabs.vm.pem on the master -> gets > copied to the agent's $ssldir/public_keys directory > - $ssldir/ca/signed/macs.puppetlabs.vm.pem on the master -> gets > copied to the agent's $ssldir/certs directory > > 4. You need to modify /etc/puppetlabs/puppet/auth.conf on the master so > every node can access the find action on the catalog REST endpoint for the > master (i.e. The Mac nodes can get their catalog). Look for this stanza in > auth.conf: > > # allow nodes to retrieve their own catalog (ie their configuration) > path ~ ^/catalog/([^/]+)$ > method find > allow $1 > > Add the following line under 'allow $1': (Remember that I'm using the > certname of macs.puppetlabs.vm - you would substitute the certname you will > use in your infrastructure) > > - allow macs.puppetlabs.vm > > 5. Now, we need to modify /etc/puppetlabs/puppet/puppet.conf on the NODES > themselves. There are two changes that need to be made: the certname and > the nodename. Remember that we need to decouple the name that SSL uses to > identify the node (macs.puppetlabs.vm) with the name that PUPPET uses to > CLASSIFY the node (node1.puppetlabs.vm and node2.puppetlabs.vm in our > case). The first line you need to change in puppet.conf is the certname > configuration item, set that to the following on ALL of your nodes: > 'certname = macs.puppetlabs.vm'. If you're using Puppet Enterprise, that > item should already be in the [agent] stanza, so you'll need to change it. > The next configuration item could either go in the [agent] or [main] > stanza, and that's the node_name_fact OR the node_name_value item. NOTE: > THESE ITEMS ARE MUTUALLY EXCLUSIVE - YOU CAN ONLY USE ONE OR THE OTHER. > For more information, see > -->http://docs.puppetlabs.com/references/stable/configuration.html#noden... > The node_name_fact allows you to set the nodename based on a Facter > fact. > In my case I'm going to set 'node_name_fact = fqdn' on all of my nodes > because I want the nodename to match the FQDN on the machine. If you're > managing Macs, however, you might want to use something relatively static > like a serial number (if you use something like the hostname, it will > change any time someone renames their machine in the sharing pane). You > could also do 'node_name_value = thisnode' and Puppet would classify the > node based on the name of 'thisnode', but you would need to have that item > be unique for every one of your nodes. This is a change you will need to > evaluate in your own environment. > > 6. Once you've generated the cert, put it in the appropriate directories > on the client, changed auth.conf, set puppet.conf on the agents, and > everything is installed, you should be able to run `puppet agent -t` and > watch things work! Note that if you're using the console, you will see the > node records listed based on the nodename. > > Let me know if you have any other questions on this process :) > > On Thu, Apr 12, 2012 at 7:58 AM, Sean McGrath <seanc.mcgr...@gmail.com>wrote: > > > > > > > > > Gary, > > > Thanks very much for getting back to me on this. While I have been > > researching Puppet for our Mac fleet I have used a lot of the very > > useful information you have published about this so thank you very > > much for that. > > > In regards your response. Firstly, apologies for my lack of knowledge > > in this matter and any help that can be provided will be very much > > appreciated. > > > I am interested in #3 and am having looking at it now but the > > following are some of the things that have crossed my mind > > > The private cert to distribute to the client nodes, which one from the > > master is it? There are a few there and I cannot tell which one it is > > and where does it go on the client? > > > Is there any other configuration that is needed on the master? > > > In the clients /etc/puppet/puppet.conf file would the following > > configuration be correct for this approach. > > > [puppetd] > > node_name_fact = hostname > > node_name_value = certname # i.e. the one from the server > > > Is this correct? > > > Thats it for now, I'm going to stay playing around with this and see > > where I can get but any help and guidance that anyone can provide will > > be very much appreciated. > > > Regards > > > Sean > > > On Apr 11, 5:32 pm, Gary Larizza <g...@puppetlabs.com> wrote: > > > Hey Sean, > > > > First - congrats on wrangling your Macs with Puppet! Next, I understand > > and > > > have shared your pain regarding timely imaging of workstations and Puppet > > > cert-wrangling. Generally, I've seen folks do one of a couple of things: > > > > 1. Autosign > > > 2. Utilize a CGI script to sign/revoke certs on the master (which can > > > largely be replaced through the use of the `puppet cert` face) > > > 3. Use the same private key everywhere and change the individual > > > node_name > > > > Numbers 1 and 2 are largely process around signing individual certs for > > > every node. You COULD even backup the $ssldir on your clients, image the > > > machine, install puppet, restore the $ssldir, and then run Puppet again > > and > > > Puppet will work fine for your clients. > > > > Number 3 is a bit different. With #3, you would have the SAME private > > cert > > > for EVERY node in your infrastructure. Because of this, the certname > > must > > > be THE SAME for every node. When you do this, however, Puppet treats > > every > > > node as if it were the SAME node - so you need a way to de-couple the > > name > > > of the node as Puppet knows it with the name of the node as the > > Certificate > > > knows it. The solution is the 'node_name_fact' and 'node_name_value' > > > configuration item in puppet.conf --> > >http://docs.puppetlabs.com/references/stable/configuration.html#noden... > > > You would essentially ship the private cert around to EVERY node, set > > > the > > > node_name_{fact,value} in puppet.conf, and then Puppet would treat each > > > machine as a separate node (even though the certificate is the same > > > everywhere). Obviously there are security implications for this, but > > some > > > people prefer it to Autosigning. > > > > Hopefully, this should help you on your way. > > > > On Wed, Apr 11, 2012 at 8:31 AM, Sean McGrath <seanc.mcgr...@gmail.com > > >wrote: > > ... > > read more » -- You received this message because you are subscribed to the Google Groups "Puppet Users" group. To post to this group, send email to puppet-users@googlegroups.com. To unsubscribe from this group, send email to puppet-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/puppet-users?hl=en.