Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save dereckmartin/fe730a43a35cb2992419acbd875aa856 to your computer and use it in GitHub Desktop.

Select an option

Save dereckmartin/fe730a43a35cb2992419acbd875aa856 to your computer and use it in GitHub Desktop.

Revisions

  1. dereckmartin created this gist Jan 21, 2021.
    60 changes: 60 additions & 0 deletions harbor-projects-to-puppet-harbor-hieradata.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,60 @@
    #!/bin/python

    import requests
    from requests.auth import HTTPBasicAuth
    import urllib3

    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    '''
    Translate Harbor projects data to Puppet Hieradata
    for puppet-harbor module [https://github.com/walkamongus/puppet-harbor]
    1. Set Harbor host (i.e., https://host.domain.com)
    2. Set Harbor username
    3. Set Harbor password
    4. Set hierakey (i.e., harbor::harbor_projects:)
    5. Execute
    Output Example:
    harbor::harbor_projects:
    'sample-project':
    ensure: present
    public: true
    members: ['sample.user']
    member_groups: ['sample-group']
    '''

    host = ""
    user = ""
    password = ""
    hierakey = ""

    projects_endpoint = "/api/projects"
    projects = requests.get(host + projects_endpoint, auth=HTTPBasicAuth(user, password), verify=False)

    print (hierakey)

    for project in projects.json():
    project_members = requests.get(host + projects_endpoint + "/" + str(project['project_id']) + "/members", auth=HTTPBasicAuth(user, password), verify=False)

    print (" '{}':".format(project['name']))
    print (" ensure: present")
    print (" public: {}".format(project['metadata']['public']))

    members = []
    groups = []

    for project_member in project_members.json():
    if project_member['entity_type'] == "u":
    if project_member['entity_name'] != "admin":
    members.append(project_member['entity_name'])

    elif project_member['entity_type'] == "g":
    groups.append(project_member['entity_name'])

    if members:
    print (" members: ['{}']".format("', '".join(members)))

    if groups:
    print (" member_groups: ['{}']".format("', '".join(groups)))