Help organizing project and accessing paths

93 views
Skip to first unread message

Synaesthete

unread,
Jul 27, 2014, 10:31:45 AM7/27/14
to ansible...@googlegroups.com
I'm working on a small Ansible project that's a little outside its primary use-case. I'm automating the generation of new web projects in a Mac OS X dev environment. There are two objectives:

1.) Install all development tools on the local machine
2.) Compose various projects based on small component roles/tasks

As a simple example, if you run the main playbook, it will prompt you for a project folder, install Sublime Text, NodeJS, etc., and set up all the basic files needed to begin working on a new project. Here's a subset of my project folder:

ansible-generator
 
|- main.yml <-- Main playbook
 
|- apps
     
|- nodejs
       
|- tasks,vars,defaults,etc.
     
|- sublime
 
|- scaffolds
     
|- git
     
|- node
     
|- vagrant
 
|- install
     
|- dmg.yml


Everything under both apps and scaffolds are roles. 'apps' install local dev tools, and 'scaffolds' uses templates to set up and modify new project files (package.json, Vagrantfile, .gitignore, etc.)

I have a couple questions:

1.) Could this entire project be turned in to a role itself and be distributed on Ansible Galaxy, given its different project layout and different use-case? Since this is a project built using lots of small sub-roles, how could I run all those dependent roles from tasks/main.yml?

2.) The roles in the /apps folder need to reference tasks under the /install folder. Right now I have to use relative paths like "../../../dmg.yml". I'd rather set up a variable further up and just use "{{ installers }}/dmg.yml", but without just setting this variable to "../../.." What's the best way to get the absolute path to the root of this project? The playbook_dir variable always returns "."

3.) Any other thoughts on organizing my project? Is it reasonable to have roles in both /apps and /scaffolds or does this seem unwieldy compared to putting everything under a /roles folder?

Thanks! If you'd like to take a closer look at my project you can find it here: https://github.com/rvangundy/ansible-generator

Michael DeHaan

unread,
Jul 27, 2014, 4:54:33 PM7/27/14
to ansible...@googlegroups.com
This may be a useful resource for organization tips:


Also, if you haven't seen it already, the ansible-galaxy CLI can be used to quickly stub out a role with the "init" command.

You may wish to read about role dependencies, however galaxy is not meant as a way to distribute top level playbooks - in practice, they are seldom reusable because nobody wants  to install the exact same infrastructure (you've already made a lot of choices about Sublime and Node), whereas roles provide a more ideal chunk of reuse.

As for your directory questions try, "{{ playbookdir }}/some_path".








--
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-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/647cf28d-77cc-4ebf-84db-ec87659fe0a7%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Synaesthete

unread,
Jul 27, 2014, 5:45:39 PM7/27/14
to ansible...@googlegroups.com
Thanks for the response.

I'm using the following task:

- debug: msg="{{ playbook_dir }}"


With this output...

ok: [localhost] => {
   
"msg": "."
}


So it's returning a relative path. I get this same output regardless of where I run the debug task, so this doesn't help me point to my project root if I use the playbook_dir variable in one of my roles or some other subdirectory. Incidentally, inventory_dir returns an absolute path (e.g. /etc/ansible), though the inventory directory isn't what I'm after.

Michael DeHaan

unread,
Jul 28, 2014, 10:09:32 AM7/28/14
to ansible...@googlegroups.com
What is "ansible --version" ?




Synaesthete

unread,
Jul 28, 2014, 3:15:21 PM7/28/14
to ansible...@googlegroups.com

ansible 1.7

Michael DeHaan

unread,
Jul 28, 2014, 3:39:53 PM7/28/14
to ansible...@googlegroups.com
Ok - got it.

Sounds like a path just needs to be os.path.abspath'd somewhere.

If your 1.7 checkout is up to date, please file a github ticket so we can take a look.

Thanks!


Synaesthete

unread,
Jul 28, 2014, 6:11:05 PM7/28/14
to ansible...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages