Skip to main content

Easy configuration as code tool for GitLab using config in plain YAML

Project description

PyPI version Build Status

GitLabForm

GitLabForm is an easy configuration as code tool for GitLab using config in plain YAML.

Features

GitLabForm enables you to manage:

  • Group settings,

  • Project settings,

  • Archive/unarchive project,

  • Project members (users and groups),

  • Deployment keys,

  • Secret variables (on project and group/subgroup level),

  • Branches (protect/unprotect),

  • Tags (protect/unprotect),

  • Services,

  • (Project) Hooks,

  • (Project) Push Rules,

  • (Add/edit or delete) Files, with templating based on jinja2 (now supports custom variables!),

  • Merge Requests approvals settings and approvers (EE 10.6+ only),

…for:

  • all projects you have access to,

  • a group/subgroup of projects,

  • a single project,

…and a combination of them (default config for all projects + more specific for some groups/subgroups + even more specific for particular projects).

Installation

  1. pip3: pip3 install gitlabform - that’s all!

  2. docker: you can wrap running gitlabform as a docker command, minimal version of it is: alias gitlabform='docker run -it -v $(pwd):/config egnyte/gitlabform:latest gitlabform. You can use any version of gitlabform with suffix -alpine3.9 (recommended) or -debian9, depending on your specific needs.

Quick start

Let’s assume that you want to have the same deployment key in all projects in a group “My Group” (with path “my-group”). If so then:

  1. Create example config.yml:

gitlab:
  # You can also set in your environment GITLAB_URL
  url: https://gitlab.yourcompany.com
  # You can also set in your environment GITLAB_TOKEN
  token: "<private token of an admin user>"
  api_version: 4
  ssl_verify: true

group_settings:
  my-group:
    deploy_keys:
      a_friendly_deploy_key_name:
        key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3WiHAsm2UTz2dU1vKFYUGfHI1p5fIv84BbtV/9jAKvZhVHDqMa07PgVtkttjvDC8bA1kezhOBKcO0KNzVoDp0ENq7WLxFyLFMQ9USf8LmOY70uV/l8Gpcn1ZT7zRBdEzUUgF/PjZukqVtuHqf9TCO8Ekvjag9XRfVNadKs25rbL60oqpIpEUqAbmQ4j6GFcfBBBPuVlKfidI6O039dAnDUsmeafwCOhEvQmF+N5Diauw3Mk+9TMKNlOWM+pO2DKxX9LLLWGVA9Dqr6dWY0eHjWKUmk2B1h1HYW+aUyoWX2TGsVX9DlNY7CKiQGsL5MRH9IXKMQ8cfMweKoEcwSSXJ
        title: ssh_key_name_that_is_shown_in_gitlab
        can_push: false
  1. Run gitlabform my-group

  2. Watch GitLabForm add this deploy key to all projects in “My Group” group in your GitLab!

Configuration syntax

See config.yml in this repo as a well documented example of configuring all projects in all groups, projects in “my-group” group and specifically project “my-group/my-project1”.

More usage examples

To apply settings for a single project, run:

gitlabform my-group/my-project1

To apply settings for a group of projects, run:

gitlabform my-group

To apply settings for all groups of projects and projects explicitly defined in the config, run:

gitlabform ALL_DEFINED

To apply settings for all projects, run:

gitlabform ALL

If you are satisfied with results consider running it with cron on a regular basis to ensure that your GitLab configuration stays the way defined in your config (for example in case of some admin changes some project settings temporarily by (yuck!) clicking).

All command line parameters

Run:

gitlabform -h

…to see the current set of supported command line parameters.

Requirements

  • Python 3.5+

  • GitLab 11+ for gitlabform >=1.0.0, GitLab 9.1-10.8 for gitlabform <1.0.0, (GitLab EE 10.6+ for merge_requests section)

Why?

This tool was created as a workaround for missing GitLab features such as assigning deploy keys per project groups but as of now we prefer to use it ever if there are appropriate web UI features, such as secret variables per project groups (released in GitLab 9.4) to keep configuration as code.

GitLabForm is slightly similar to GitLab provider for Terraform (which we love, btw!), but it has much more features and uses simpler configuration format.

How does it work?

It just goes through a loop of projects list and make a series of GitLab API requests. Where possible it corresponds to GitLab API 1-to-1, so for example it just PUTs or POSTs the hash set at given place in its config transformed into JSON, so that it’s not necessary to modify the app in case of some GitLab API changes.

Gitlab CI/CD support

You can use gitlabform as a part of your CCA pipeline, example for gitlab could be found at .gitlab-ci.example.yml file. Important note is that when you are exposing your configuration to the pipeline, you have to ensure that token with access to gitlab instance is well protected. Recommended way to do that is to set GITLAB_TOKEN as an environment variable in your pipeline.

Contributing

Development environment setup how-to:

  1. Install build requirements - pandoc binary package + pypandoc python package.

  2. Create virtualenv with Python 3.5+, for example in venv dir which is in .gitignore.

  3. Activate the virtualenv and install gitlabform in it in develop mode (python setup.py develop).

License

MIT

Project details


Release history Release notifications | RSS feed

This version

1.9.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gitlabform-1.9.1.tar.gz (21.4 kB view details)

Uploaded Source

Built Distribution

gitlabform-1.9.1-py3-none-any.whl (25.2 kB view details)

Uploaded Python 3

File details

Details for the file gitlabform-1.9.1.tar.gz.

File metadata

  • Download URL: gitlabform-1.9.1.tar.gz
  • Upload date:
  • Size: 21.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.7.1

File hashes

Hashes for gitlabform-1.9.1.tar.gz
Algorithm Hash digest
SHA256 3ef35799c4c9f0f3a4fd03a97e3fe8c38c7a7f25af7b2d336210c823e711fe55
MD5 8905ff0fbb27e2d65ffdd0ff7f3a864f
BLAKE2b-256 2876857e8b0186d12c228a90f3a447da7d3682c3761cc9dd42da2b7bbcab58da

See more details on using hashes here.

File details

Details for the file gitlabform-1.9.1-py3-none-any.whl.

File metadata

  • Download URL: gitlabform-1.9.1-py3-none-any.whl
  • Upload date:
  • Size: 25.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/42.0.2 requests-toolbelt/0.9.1 tqdm/4.40.1 CPython/3.7.1

File hashes

Hashes for gitlabform-1.9.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e42f53de69b14dc1aa47c4082d1ff0f9e4ee9796b837cb7474f96e31a3920778
MD5 46d1cf5ae7ecbe417e17d012fc8c041c
BLAKE2b-256 ee2ef99402b6db96629b433f2cc7cc68cd3809884ef97c57ded03144d6432cd4

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page