On Jul 10, 2015 6:33 AM, "Tim Skoch" <t...@skoch.es> wrote:
> A friend recommended Ansible as the solution to this. I've been reading the introduction docs, and it looks like Ansible is exactly what I have been looking for - My Ansible "Playbooks/Plays/Tasks/Modules" would then become my detailed notes, and I would get the added benefit of being able to version them as well. > Yes, ansible (or config management software in general but on this list we're mostly making ansible our choice for config management ;-) is a good choice for this problem. > Here is what I think I want to do so far, but I want to make sure I'm going down the right path before I get too far down it. Suppose for example that I need two "Mailserver" type server VMs, one "Desktop" type VM, and three "Database" servers. Each of those quoted "types" has its own set of services which need to be set up, daemons configured, and various other tweaks. > > Am I correct that what I want to do here is set up one "Playbook", which contains a "Play" for each of these types? There are multiple ways to organize your tasks, plays, and playbooks but this sounds like one reasonable way to do it. You may find it a little better to have two levels of playbooks: * a playbook that has a play for each type of vm that you're managing * a master config playbook that includes the playbooks for each type of vm. That is one way to make it possible to run the plays for each type of vm separately (for instance when testing or when saving time on deploying a change to just one type of vm) in some cases and together in others (when making sure that your whole lab has the current config for instance) > And each of those "Plays" would contain various tasks/modules to set the machine up in the desired configuration? Yes, exactly. Here's a brief set of files that demonstrate that: $ cat master.yml --- - include: database.yml - include: desktop.yml $ cat database.yml --- - hosts: db_hosts tasks: - command: "echo {{ ansible_hostname}}" $ cat desktop.yml --- - hosts: desktop_hosts tasks: - command: "echo {{ ansible_hostname}}" $ cat inven [db_hosts] db01 ansible_ssh_host=127.0.0.2 [desktop_hosts] desktop01 ansible_ssh_host=127.0.0.3 You can run all your plays via: ansible-playbook -v -i inven master.yml Or just the database plays like: ansible-playbook -v -i inven database.yml > Do "Roles" come into play here? Maybe I need a "Role" for each type, instead of a "Play"? > You definitely can use roles here. They are intended for this level of organizing your configs. However, it is not necessary if you want to take your learning step-by-step. Compared to includes, roles give you the tools to better generalize and encapsulate a set of tasks. I find this useful when I want to mix and match a set of tasks with various machines. For instance, I might have a common-software role that installed vim, tmux, and zsh that I added to my plays for all of my machine types. Or a student-account-system role that I added to any machine that students were intended to login to but not to machines that were only for staff. Hope this is helpful and remember, there's more than one way to organize these things: someone else might be doing this in a different way that makes more sense for you to emulate. -Toshio -- You received this message because you are subscribed to the Google Groups "Ansible Project" group. To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscr...@googlegroups.com. To post to this group, send email to ansible-project@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAG9juEqir7FxYXkpctVskEY%2B-BGNOK%3DMd99cqYCF1iVOxo1uLg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.