diff --git a/development/roles/foreman_development/tasks/main.yaml b/development/roles/foreman_development/tasks/main.yaml index 340185ed..197994c6 100644 --- a/development/roles/foreman_development/tasks/main.yaml +++ b/development/roles/foreman_development/tasks/main.yaml @@ -85,25 +85,16 @@ - src: "{{ foreman_development_client_key }}" dest: "{{ foreman_development_cert_dir }}/client_key.pem" -- name: Clone Foreman repository - ansible.builtin.git: - repo: "{{ foreman_development_git_repo }}" - dest: "{{ foreman_development_foreman_dir }}" - version: "{{ foreman_development_git_revision }}" - force: true - become: true - become_user: "{{ foreman_development_user }}" - -- name: Add GitHub username as additional remote for Foreman - community.general.git_config: - name: "remote.{{ foreman_development_github_username }}.url" - scope: local - repo: "{{ foreman_development_foreman_dir }}" - value: "git@github.com:{{ foreman_development_github_username }}/foreman.git" - state: present - become: true - become_user: "{{ foreman_development_user }}" - when: foreman_development_github_username != "" +- name: Deploy Foreman git repository + ansible.builtin.include_role: + name: git_repository + vars: + git_repository_destination_dir: "{{ foreman_development_foreman_dir }}" + git_repository_user: "{{ foreman_development_user }}" + git_repository_repository_owner: "theforeman" + git_repository_repository_name: "foreman" + git_repository_revision: "{{ foreman_development_git_revision }}" + git_repository_secondary_remote_owner: "{{ foreman_development_github_username }}" - name: Create database configuration ansible.builtin.template: diff --git a/development/roles/foreman_development/tasks/plugin.yaml b/development/roles/foreman_development/tasks/plugin.yaml index 5fb2215e..4d417156 100644 --- a/development/roles/foreman_development/tasks/plugin.yaml +++ b/development/roles/foreman_development/tasks/plugin.yaml @@ -1,25 +1,15 @@ --- -- name: Clone plugin repository # noqa latest[git] - ansible.builtin.git: - repo: "{{ foreman_development_plugin_repo_url }}" - dest: "{{ foreman_development_deployment_dir }}/{{ foreman_development_plugin_name }}" - force: true - become: true - become_user: "{{ foreman_development_user }}" - when: foreman_development_plugin_manage_repo - -- name: Add GitHub username as additional remote for plugin - community.general.git_config: - name: "remote.{{ foreman_development_github_username }}.url" - scope: local - repo: "{{ foreman_development_deployment_dir }}/{{ foreman_development_plugin_name }}" - value: "git@github.com:{{ foreman_development_github_username }}/{{ foreman_development_plugin_name }}.git" - state: present - become: true - become_user: "{{ foreman_development_user }}" +- name: Deploy plugin git repository + ansible.builtin.include_role: + name: git_repository + vars: + git_repository_destination_dir: "{{ foreman_development_deployment_dir }}/{{ foreman_development_plugin_name }}" + git_repository_user: "{{ foreman_development_user }}" + git_repository_repository_owner: "{{ foreman_development_plugin_org }}" + git_repository_repository_name: "{{ foreman_development_plugin_name }}" + git_repository_secondary_remote_owner: "{{ foreman_development_github_username }}" when: - foreman_development_plugin_manage_repo - - foreman_development_github_username != "" - name: Create plugin settings file ansible.builtin.template: diff --git a/development/roles/git_repository/README.md b/development/roles/git_repository/README.md new file mode 100644 index 00000000..4a4748b9 --- /dev/null +++ b/development/roles/git_repository/README.md @@ -0,0 +1,36 @@ +# git_repository + +A role that clones a git repository from GitHub and optionally adds an additional remote to it. + +Roughly corresponds to + +```shell +$ su {{ git_repository_user }} + +$ git clone https://github.com/{{ git_repository_repository_owner }}/{{ git_repository_repository_name }} \ + --branch {{ git_repository_revision }} \ + --remote {{ git repository_remote_name || "origin" }} + {{ git_repository_destination_dir }} + +$ if {{ git_repository_secondary_remote_owner }}; then + cd {{ git_repository_destination_dir }} + git remote add \ + {{ git_repository_secondary_remote_name || git_repository_secondary_remote_owner }} \ + git@github.com:{{ git_repository_secondary_remote_owner }}/{{ git_repository_repository_name }} +fi +``` + +## Parameters + +| Variable | Description | Required | +|----------|-------------|------| +| `git_repository_repository_owner` | The owner of the repository to clone from | Yes | +| `git_repository_repository_name` | The name of the repository to clone | Yes | +| `git_repository_revision` | The revision to clone the repository at | No, defaults to `HEAD` | +| `git_repository_remote_name` | The name of the remote the repository was cloned from | No, defaults to `origin` | +| `git_repository_destination_dir` | Path to the directory where the repository will be cloned to | Yes | +| `git_repository_secondary_remote_owner` | Name of the owner of the secondary remote to be added to the local clone | No, secondary remote will not be added if left blank | +| `git_repository_secondary_remote_name` | Name of the remote of the secondary repository | No, defaults to `{{ git_repository_secondary_remote_owner }}` | +| `git_repository_user` | The system user on the target host that the role will be applied as, this user ends up being the owner of the git checkout | Yes | + +Generally it would be preferrable to avoid the need for `git_repository_user` by controlling the user with `become` and `become_user`, but those are not available in all contexts. diff --git a/development/roles/git_repository/defaults/main.yml b/development/roles/git_repository/defaults/main.yml new file mode 100644 index 00000000..8ec4d734 --- /dev/null +++ b/development/roles/git_repository/defaults/main.yml @@ -0,0 +1,2 @@ +git_repository_remote_name: "origin" +git_repository_revision: "HEAD" diff --git a/development/roles/git_repository/tasks/main.yml b/development/roles/git_repository/tasks/main.yml new file mode 100644 index 00000000..fddfacfc --- /dev/null +++ b/development/roles/git_repository/tasks/main.yml @@ -0,0 +1,20 @@ +- name: Clone repository + ansible.builtin.git: + repo: "https://github.com/{{ git_repository_repository_owner }}/{{ git_repository_repository_name }}" + dest: "{{ git_repository_destination_dir }}" + version: "{{ git_repository_revision }}" + force: true + remote: "{{ git_repository_remote_name }}" + become: true + become_user: "{{ git_repository_user }}" + +- name: Add GitHub username as additional remote + community.general.git_config: + name: "remote.{{ git_repository_secondary_remote_name | default(git_repository_secondary_remote_owner) }}.url" + scope: local + repo: "{{ git_repository_destination_dir }}" + value: "git@github.com:{{ git_repository_secondary_remote_owner }}/{{ git_repository_repository_name }}.git" + state: present + when: git_repository_secondary_remote_owner | default("") != "" + become: true + become_user: "{{ git_repository_user }}"