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.

Reply via email to