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