I'm not sure pip has the same problem, which is effectively that dependency declarations are useful at both install time and at run time
In the below example 'this_is_a_role_variable' is a variable that gets passed to the role when it is run (and dependencies are run before the role itself is run, as explained in the Roles Dependencies section in the docs) rather than a variable used at installation time. The other parameters are all used for installation only. Currently dependencies are installed through a similar installation mechanism as the roles file - so if when installing a role from the roles file, it comes across a dependency, it can install that too. So a non-galaxy role dependency can be specified using: dependencies: - role: "git+http://git.example.com/reponame.git,v1.0,friendlyname" My question is whether the dict equivalent example I gave that you quote below should also work - but then there might be confusion between which parameters are role runtime variables and which are installationtime variables (although using a prefix like role_install_ should reduce the likelihood of clashes) But if you're saying that users have to manage their own dependencies when using non galaxy roles, then perhaps I need do no more - hopefully my solution works for installing non galaxy dependencies through the roles dependencies mechanism. Apologies if it's still no clearer. Will On 18 Aug 2014, at 22:35, Michael DeHaan <[email protected]> wrote: > I'd follow pip's example here, PyPi understands dependencies, which is the > galaxy analog. > > Outside of that, there are no deps (right?) > > "dependencies: > - { role: friendly_role_name, > this_is_a_role_variable: x, > role_install_src: "git+http://url", > role_install_version: v1.0 }" > > I'm not understanding this part, currently in meta.yml it's not required for > anything like "this_is_a_role_variable" to be defined. I also think all > that would be required is whether to install dependencies, i.e. a simple > boolean > > - role: username.rolename > dependencies: True # can set to False for galaxy roles, non-galaxy roles > this is always off and cannot be controlled. > > etc? > > Then it should assume to fetch them from galaxy, because there is no other > index of role deps. > > > > > On Mon, Aug 18, 2014 at 7:35 AM, Will Thames <[email protected]> wrote: > This is now working for the roles file in YAML format. > > It doesn't work so well for role dependencies - we'd probably need to declare > some special variables for that. > > At the moment the YAML file format is > > - src: "git+http://git.example.com/repos/horrible-role-name" > name: "nice-role-name" > version: v1.0 > > You can also use scm: git (or hg) instead of the git+ / hg+ - the end result > is the same. > > For this to work with role dependencies it would need to be obvious what are > role_vars and what are settings for installing dependencies (perhaps prepend > role_install to distinguish the two? - I haven't implemented this at all, > figure I should gather thoughts on requirements first. > > Something like > > dependencies: > - { role: friendly_role_name, > this_is_a_role_variable: x, > role_install_src: "git+http://url", > role_install_version: v1.0 } > > On 17 Aug 2014, at 23:00, Michael DeHaan <[email protected]> wrote: > >> "I also don't particularly propose rewriting what I've done so far given >> that it's backwards compatible" >> >> This would be fine with me. >> >> "I would prefer not to support a mixed format roles file - how about if the >> filename ends '.yml' or '.yaml' we treat it as yaml, otherwise use the >> existing format." >> >> +1 >> >> This could be applied on top. >> >> >> >> >> On Sun, Aug 17, 2014 at 3:21 AM, Will Thames <[email protected]> wrote: >> My implementation only uses three fields, in an order that is backward >> compatible with the existing roles file, and I'm not sure what the other >> proposed fields would be. >> >> However, I like the YAML idea if only because it would work much more nicely >> with the dependencies section of meta/main.yml too. >> >> I would prefer not to support a mixed format roles file - how about if the >> filename ends '.yml' or '.yaml' we treat it as yaml, otherwise use the >> existing format. >> >> I also don't particularly propose rewriting what I've done so far given that >> it's backwards compatible - any change would be to support the yaml notation >> in addition (which would also be extensible to any of the other proposed >> fields I've forgotten about). >> >> Will >> >> On 17 Aug 2014, at 00:52, Michael DeHaan <[email protected]> wrote: >> >>> Positional fields could be a problem, we already have a proposal for like 5 >>> of them, and in different cases it's now seaming like they are in different >>> orders. I think we need to reset here. If we're proliferating on fields, >>> here is what I propose. >>> >>> * (A) continue to support the existing syntax for the galaxy-username, >>> version >>> >>> * (B) use a list of YAML hashes for the approved syntax, and update the >>> documentation >>> >>> * (C) go down the YAML path if the first non-space character is a "-" >>> >>> Perhaps it looks roughly like this: >>> >>> ---- >>> >>> - repo: git+ssh:// >>> role_name: blippy >>> version: ... >>> >>> - galaxy: username.rolename >>> recursive: false >>> >>> - galaxy: username.rolename2 >>> version: 1.2.3 >>> >>> - galaxy: username.rolename_is_terrible >>> role_name: save_as_this >>> >>> ?? >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> On Fri, Aug 15, 2014 at 8:07 AM, Will Thames <[email protected]> wrote: >>> Ok, friendly role names now allowed as third field. >>> >>> Added bonus of installing roles from URLs without SCM (think nexus, >>> artefactory or just e.g. direct bitbucket/github/stash download URLs) >>> >>> Integration tests and unit tests to demonstrate that these improvements >>> seem to work as expected. >>> >>> Will >>> >>> >>> On Friday, August 15, 2014 10:22:44 AM UTC+10, Will Thames wrote: >>> Perhaps we could make role name an optional third field - so if you do want >>> role_name but not role_version, just leave role_version blank i.e. >>> git+http://git.server/bad-role-name,,nice-role-name >>> >>> The reason for making it the third field is that I don't want to break >>> existing roles files and I don't want the parsing for SCM roles to be >>> fundamentally different to the galaxy roles. >>> >>> I don't particularly wish this to block the take-up of this pull request, >>> but I'm happy enough to implement it if the above seems a reasonable >>> approach. >>> >>> Will >>> >>> On Friday, August 15, 2014 3:03:36 AM UTC+10, Ivaylo Bratoev wrote: >>> I can think a few cases where being able to control local role folder names >>> would make things cleaner. For example: referencing repos with the same >>> name in the end, too long or obscure repo names, etc. >>> None of this is a blocker that would stop us from using this feature. I am >>> looking forward to having this in the main branch and in a official release. >>> >>> On Thursday, August 14, 2014 3:10:29 PM UTC+3, Michael DeHaan wrote: >>> " would just add one more requirement - being able to overwrite the >>> role-name and rely on the git repo name exclusively. Idea for syntax if you >>> want to keep the role_name/url, role_version format:" >>> >>> While interesting, we don't want to do this because we already have >>> ",version" used for describing roles in a way that is not specific. >>> Further, I don't think those URLs technically support comments in the case >>> of ssh://, so that seems like something we'd want to avoid. >>> >>> We can go with git+https://url,version >>> >>> I'm happy with that. >>> >>> >>> >>> >>> On Thu, Aug 14, 2014 at 12:17 AM, Ivaylo Bratoev <[email protected]> >>> wrote: >>> Hi guys, >>> >>> I am currently investigating different options for managing roles and >>> looking forward to having this in Ansible itself. My requirements are >>> similar - having roles shared (and versioned) in private git repos, >>> referenced from playbooks in other repos. >>> The solution you are discussing here sounds like in the right direction. I >>> would just add one more requirement - being able to overwrite the role-name >>> and rely on the git repo name exclusively. Idea for syntax if you want to >>> keep the role_name/url, role_version format: >>> git+https://git.acme.com/ansible/role-logstash.git#alias=logstash >>> >>> This would reference the role from the private repo but use the name >>> 'logstash' instead of 'role-logstash'. >>> >>> If you are OK to change the format to role_name, scm, url the syntax >>> suggested by Sam would work well for us: >>> logstash,git,https://git.acme.com/ansible/role-logstash.git >>> >>> Ivo >>> >>> >>> On Thursday, August 14, 2014 3:37:03 AM UTC+3, Will Thames wrote: >>> I'm happy enough with this approach but how do we apply that to role >>> dependencies. >>> >>> In my git test role I provide a git dependency: >>> https://bitbucket.org/willthames/git-ansible-galaxy/src/1e58ef87f234926caaf5e6b1f2c5378d90f476b1/meta/main.yml?at=master >>> >>> This works with the ansible-galaxy in the pull request but would not as it >>> stands without some form of scm detection. >>> >>> On reflection, I think I'd be happiest with the scm+url suggestion - this >>> would eliminate the need for scm detection and keep the role_name/url, >>> role_version format of the rolesfile >>> role_name would continue to be derived from the repo name. >>> >>> From Sam's example, this would then look more like this (not 100% happy >>> with git+git but it's nicer than handling the special case). >>> >>> # Custom roles using various protocols >>> git+ssh://[email protected]:ansible/role-disa-stig-rhel6.git,1.0 >>> git+https://git.acme.com/ansible/role-kibana.git >>> git+git://[email protected]:ansible/role-logstash.git >>> >>> This would end up with roles called e.g. role-logstash, which might not be >>> what you want, but I would prefer to keep the rolesfile simple. >>> >>> Will >>> >>> On Thursday, August 14, 2014 12:59:43 AM UTC+10, Michael DeHaan wrote: >>> +1 >>> >>> >>> >>> On Wed, Aug 13, 2014 at 10:57 AM, Sam Doran <[email protected]> wrote: >>> I like your syntax suggestion. That seems to fit more with the ansible >>> project. I agree that specifying the protocol would be a good idea. >>> >>> Here's what it might look like: >>> >>> # Galaxy roles >>> adham.helal.authentication >>> agios.nginx-unicorn,1.3 >>> >>> # Custom roles using various protocols >>> disa-stig-rhel6,git,ssh://[email protected]:ansible/role-disa-stig-rhel6.git,1.0kibana,git,https://git.acme.com:ansible/role-kibana.git >>> logstash,git,git://[email protected]:ansible/role-logstash.git >>> >>> >>> >>> >>> -- >>> 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 [email protected]. >>> To post to this group, send email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/ansible-project/2946b30e-e772-44af-9592-f0fec3f8da30%40googlegroups.com. >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> -- >>> 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 [email protected]. >>> To post to this group, send email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/ansible-project/af2e9ef3-19e1-4379-a6b8-439936841e7d%40googlegroups.com. >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> -- >>> 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 [email protected]. >>> To post to this group, send email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/ansible-project/0520bf55-0dc0-4a3b-9c27-5d15da78a289%40googlegroups.com. >>> >>> For more options, visit https://groups.google.com/d/optout. >>> >>> >>> -- >>> You received this message because you are subscribed to a topic in the >>> Google Groups "Ansible Project" group. >>> To unsubscribe from this topic, visit >>> https://groups.google.com/d/topic/ansible-project/TawjChwaV08/unsubscribe. >>> To unsubscribe from this group and all its topics, send an email to >>> [email protected]. >>> >>> To post to this group, send email to [email protected]. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxP4WCqUf4MbhytOO-A%3DfiTnn8Dtz%2BHUhxJ3RD%2BTNQB5Q%40mail.gmail.com. >>> >>> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> 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 [email protected]. >> To post to this group, send email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ansible-project/B9D82A46-0916-4747-8323-5A9309F12251%40thames.id.au. >> >> For more options, visit https://groups.google.com/d/optout. >> >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "Ansible Project" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/ansible-project/TawjChwaV08/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To post to this group, send email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgxsMac6wEVHNVHTZimWaZVCR93rX0eO8qdVJgsiEUxznQ%40mail.gmail.com. >> >> For more options, visit https://groups.google.com/d/optout. > > > -- > 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 [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/4DEBED3F-10A0-401F-B067-749AA58CA13B%40thames.id.au. > > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "Ansible Project" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/ansible-project/TawjChwaV08/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/CA%2BnsWgysLnzHtfENrdCRYBRnBzK6HsU2brNrxFBLQECGP0cV8w%40mail.gmail.com. > For more options, visit https://groups.google.com/d/optout. -- 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 [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/6E0DB9CA-3F84-4B06-BD50-CCBE20F502C2%40thames.id.au. For more options, visit https://groups.google.com/d/optout.
