You didn't make it easy to reproduce, but I think I created a reproducer. Based on my reproducer, your issue has been fixed in https://github.com/ansible/ansible/pull/72208
On Wed, Mar 17, 2021 at 3:31 PM Todd Beauchemin <[email protected]> wrote: > We've seen what we'd classify as odd behavior when using import_role with > roles that have dependencies defined under the meta directory. > > The version of Ansible we are running is 2.9.10. > > We have a few roles setup as follows > > - base_role > - Does some basic setup of directories for storing facts and has > some tasks focused around providing debug messages such as displaying > known > variables and facts as well as installing some utility packages > - Has no dependencies and has 'allow_duplicates' explicitly set to > 'false' > - network_role > - Handles configuration of network related items such as firewall, > interface options, DNS resolver, etc. > - Depends on base_role under meta/main.yaml and also has > 'allow_duplicates' explicitly set to 'false' > - cron_role > - > - Handles configuration of AT/cron related items > - Depends on base_role under meta/main.yaml and also has > 'allow_duplicates' explicitly set to 'false' > > We then have a default_config role which includes as dependencies the > three above roles. > > When we have assigned the default_config_role role to a host everything > works as expected. The base_role is only run once at the very beginning of > execution followed by the cron_role and then the network_role as we have > the roles listed as dependencies in alphabetical order. So: > > - base_role > - cron_role > - network_role > > When we however imported the default_config role into another role using > the import_role directive the behavior totally changed. What we found was > the following: > > - base_role was executed as it was a dependency from > default_config_role > - base_role was again executed as it was a dependency from cron_role > - cron_role was then executed > - base_role was executed for a third time as it was a dependency from > network_role > - network_role was then executed > > There is only one place where we are performing the import_role directive > and that is in the new role which is importing the default_config_role > > My expectation, which maybe wrong, per documentation would be that the > role being imported would still have it's dependencies processed as normal > specifically with a reference to import_role being the same as using the > role directive in a Playbook. > > I can understand the duplication in execution if import_role was used > multiple times importing the default_config_role but my expectation would > still be that any dependencies from within the default_config_role would > still be processed normally as well. So here I'd expect to see: > > - import 1 of default_config_role > - > - base_role > - cron_role > - network_role > - > - import 2 of default_config_role > - base_role > - cron_role > - network_role > > Is the behavior I'm seeing expected? > > Thanks! > ~Todd > > -- > 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 view this discussion on the web visit > https://groups.google.com/d/msgid/ansible-project/d248a92e-995c-47d0-ac22-755ef82c0850n%40googlegroups.com > <https://groups.google.com/d/msgid/ansible-project/d248a92e-995c-47d0-ac22-755ef82c0850n%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- Matt Martz @sivel sivel.net -- 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 view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/CAD8N0v9e3ukiaou_vv4FKSmjpgSjdwvOLdJeUEAiuWA_rRscBw%40mail.gmail.com.
