We have been operating using a similar model (single project with single roles/requirements.yml file and multiple individual role repositories referenced in requirements.yml) for at least year without any issues. Prior to Tower 3.3.x, the task to pull down roles in requirements.yml always ran with the –force argument, achieving what you outlined in question #1.
When we migrated from 3.2.5 to 3.3.2, we noticed this changed contradictory to what documentation says (https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html#ansible-galaxy-support). I opened a support case with Red Hat (02295355) and worked with them on this for several days.
My workaround while working with support to get this functional back is the following was in /var/lib/awx/venv/awx/lib/python2.7/site-packages/awx/playbooks modified the galaxy play in project_update.yml to have the --force:
- name: fetch galaxy roles from requirements.yml
command: ansible-galaxy install -r requirements.yml -p {{project_path|quote}}/roles/ --force
args:
chdir: "{{project_path|quote}}/roles"
register: galaxy_result
when: doesRequirementsExist.stat.exists and scm_result is undefined
changed_when: "'was installed successfully' in galaxy_result.stdout"
Note we only run a single instance of Tower, so this workaround has not be tested on clustered instances.
Red Hat support suggested to use the project_update.yml file from Tower 3.2.8 (last 3.2.x release) or add the –force to project_update.yml since this behavior is from legacy Tower and for the time being will not be changed.
It would be nice if this functionality was brought back or at least made a flag/option.