You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hetzner-ansible/roles/harbor_config/tasks/configure_project_members_c...

105 lines
3.4 KiB
YAML

---
- name: "Initialze VARs due to hardcoded stuff in harbor API"
set_fact:
member_state: '{{ member.member_state | default("present") }}'
harbor_member_roles:
-
name: projectadmin
role_id: 1
-
name: developer
role_id: 2
-
name: guest
role_id: 3
-
name: maintainer
role_id: 4
harbor_member_grouptypes:
-
name: ldap
group_type: 1
-
name: http
group_type: 2
-
name: oidc
group_type: 3
- name: "Initialze VARs due to hardcoded stuff in harbor API"
set_fact:
group_type: "{{ ( harbor_member_grouptypes | selectattr('name','==',( member.group_type | lower )) | list | first ).group_type | int }}"
role_id: "{{ ( harbor_member_roles | selectattr('name','==',( member.role| lower ) ) | list | first ).role_id | int }}"
- name: "Get all project members"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_harbor }}/api/v2.0/projects/{{ project_name }}/members"
user: '{{ harbor_admin_username }}'
password: '{{ harbor_admin_password }}'
method: GET
body_format: json
force_basic_auth: yes
headers:
Content-Type: application/json
status_code: [200]
register: all_project_members
- name: "Create project membership"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_harbor }}/api/v2.0/projects/{{ project_name }}/members"
user: '{{ harbor_admin_username }}'
password: '{{ harbor_admin_password }}'
method: POST
body_format: json
body: "{{ lookup('template','harbor-project-member.json.j2') }}"
force_basic_auth: yes
headers:
Content-Type: application/json
status_code: [200,201]
when:
- all_project_members.json | selectattr('entity_name','equalto',member.group_name) | list | length == 0
- member_state == 'present'
- name: "Update project member <{{ member.group_name }}>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_harbor }}/api/v2.0/projects/{{ project_name }}/members/{{ ( all_project_members.json | selectattr('entity_name','equalto',member.group_name) | list | first ).id }}"
user: '{{ harbor_admin_username }}'
password: '{{ harbor_admin_password }}'
method: PUT
body_format: json
body: "{{ lookup('template','harbor-project-member.json.j2') }}"
force_basic_auth: yes
headers:
Content-Type: application/json
status_code: [200,201]
when:
- all_project_members.json | selectattr('entity_name','equalto',member.group_name) | list | length == 1
- member_state == 'present'
- name: "Delete member: <<{{ member.group_name }}>>"
delegate_to: 127.0.0.1
become: false
uri:
url: "{{ shared_service_url_harbor }}/api/v2.0/projects/{{ project_name }}/members/{{ ( all_project_members.json | selectattr('entity_name','equalto',member.group_name) | list | first ).id }}"
user: '{{ harbor_admin_username }}'
password: '{{ harbor_admin_password }}'
method: DELETE
body_format: json
force_basic_auth: yes
headers:
Content-Type: application/json
status_code: [200,201]
register: delete_project_member
delay: 10
retries: 3
until: delete_project_member.status in [200,201]
when:
- all_project_members.json | selectattr('entity_name','equalto',member.group_name) | list | length == 1
- member_state == 'absent'