question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Too many loops (Key 'runners.docker' has already been defined)

See original GitHub issue

I’m using ansible-gitlab-runner version 1.2.7 in a playbook. It fails during the assemble with the following error message:

Near line 29 (last key parsed 'runners'): Key 'runners.docker' has already been defined

This may have the same cause as #45. It looks like one of the loops is called too many times, as two temporary files with the runner configuration are created (1 and 2). I think this happens in the isolate runner configuration step.

Playbook code

  tasks:
    - import_role:
        name: riemers.gitlab-runner
      tags:
        - gitlab-runner
      vars:
        # GitLab runner config
        gitlab_runner_package_name: "gitlab-runner"
        gitlab_runner_concurrent: 2
        gitlab_runner_registration_token: "1234567890"
        gitlab_runner_coordinator_url: "https://a.b.c"
        gitlab_runner_runners:
          - name:  "{{ inventory_hostname }}"
            executor: docker
            docker_image: docker
            docker_privileged: "true"  # Require for docker in docker
            tags:
              - mytag
              - anothertag

Temporary files created

ansible.6j9_YPgitlab-runner-config/
├── gitlab-runner.01.YXMYY1
├── gitlab-runner.02.0GG_Ey
├── gitlab-runner.0.qak3J1
├── gitlab-runner.1.dgnKup
└── gitlab-runner.2.FMi2sx

Concatenated files

# cat gitlab-runner.[012].*
concurrent = 2
check_interval = 0

[session_server]
  session_timeout = 1800

  name = "gitlabrunner0"
  url = "https://a.b.c"
  token = "1234567890"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

  name = "gitlabrunner0"
  url = "https://a.b.c"
  token = "1234567890"
  executor = "docker"
  [runners.docker]
    tls_verify = false
    image = "docker"
    privileged = true
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    shm_size = 0
  [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]

Full role output

TASK [riemers.gitlab-runner : Get Gitlab repository installation script] *******************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : Install Gitlab repository] ***********************************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : set_fact] ****************************************************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : set_fact] ****************************************************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : Install GitLab Runner] ***************************************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : Get Gitlab repository installation script] *******************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Install Gitlab repository] ***********************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : set_fact] ****************************************************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : set_fact] ****************************************************************************************************
ok: [gitlabrunner0]
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Install GitLab Runner] ***************************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set concurrent option] ***************************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Add sentry dsn to config] ************************************************************************************
skipping: [gitlabrunner0]
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : List configured runners] *************************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Register GitLab Runner] **************************************************************************************
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/register-runner.yml for gitlabrunner1
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/register-runner.yml for gitlabrunner0

TASK [riemers.gitlab-runner : Register runner to GitLab] ***********************************************************************************
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : Register runner to GitLab] ***********************************************************************************
skipping: [gitlabrunner0]

TASK [riemers.gitlab-runner : Get existing config] *****************************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : set_fact] ****************************************************************************************************
ok: [gitlabrunner0]
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Create temporary directory] **********************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : include_tasks] ***********************************************************************************************
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/config-runner.yml for gitlabrunner0, gitlabrunner1
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/config-runner.yml for gitlabrunner0
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/config-runner.yml for gitlabrunner0
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/config-runner.yml for gitlabrunner1
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/config-runner.yml for gitlabrunner1

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : include_tasks] ***********************************************************************************************
skipping: [gitlabrunner0] => (item={'name': 'gitlabrunner0', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 
skipping: [gitlabrunner1] => (item={'name': 'gitlabrunner1', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 

TASK [riemers.gitlab-runner : Remove runner config] ****************************************************************************************
skipping: [gitlabrunner0] => (item={'name': 'gitlabrunner0', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 
skipping: [gitlabrunner1] => (item={'name': 'gitlabrunner1', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : include_tasks] ***********************************************************************************************
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/update-config-runner.yml for gitlabrunner0

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set concurrent limit option] *********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set coordinator URL] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set runner executor option] **********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set runner docker image option] ******************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set docker privileged option] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set docker volumes option] ***********************************************************************************
changed: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache type option] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache path option] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 server addresss] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 access key] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 secret key] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache shared option] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 bucket name option] *****************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 bucket location option] *************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 insecure option] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh user option] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh host option] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh port option] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh password option] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh identity file option] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : include] *****************************************************************************************************
skipping: [gitlabrunner0]

TASK [riemers.gitlab-runner : Remove runner config] ****************************************************************************************
skipping: [gitlabrunner0] => (item={'name': 'gitlabrunner0', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : include_tasks] ***********************************************************************************************
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/update-config-runner.yml for gitlabrunner0

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set concurrent limit option] *********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set coordinator URL] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set runner executor option] **********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set runner docker image option] ******************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set docker privileged option] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set docker volumes option] ***********************************************************************************
changed: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache type option] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache path option] ***************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 server addresss] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 access key] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 secret key] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache shared option] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 bucket name option] *****************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 bucket location option] *************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set cache s3 insecure option] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh user option] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh host option] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh port option] *****************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh password option] *************************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : Set ssh identity file option] ********************************************************************************
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : include] *****************************************************************************************************
skipping: [gitlabrunner0]

TASK [riemers.gitlab-runner : Remove runner config] ****************************************************************************************
skipping: [gitlabrunner0] => (item={'name': 'gitlabrunner0', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : include_tasks] ***********************************************************************************************
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/update-config-runner.yml for gitlabrunner1

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set concurrent limit option] *********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set coordinator URL] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set runner executor option] **********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set runner docker image option] ******************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set docker privileged option] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set docker volumes option] ***********************************************************************************
changed: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache type option] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache path option] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 server addresss] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 access key] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 secret key] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache shared option] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 bucket name option] *****************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 bucket location option] *************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 insecure option] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh user option] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh host option] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh port option] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh password option] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh identity file option] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : include] *****************************************************************************************************
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : Remove runner config] ****************************************************************************************
skipping: [gitlabrunner1] => (item={'name': 'gitlabrunner1', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : include_tasks] ***********************************************************************************************
included: /home/jostev/devops/gitlab-runner-centos/roles/riemers.gitlab-runner/tasks/update-config-runner.yml for gitlabrunner1

TASK [riemers.gitlab-runner : Create temporary file] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Isolate runner configuration] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set concurrent limit option] *********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set coordinator URL] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set runner executor option] **********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set runner docker image option] ******************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set docker privileged option] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set docker volumes option] ***********************************************************************************
changed: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache type option] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache path option] ***************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 server addresss] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 access key] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 secret key] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache shared option] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 bucket name option] *****************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 bucket location option] *************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set cache s3 insecure option] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh user option] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh host option] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh port option] *****************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh password option] *************************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : Set ssh identity file option] ********************************************************************************
ok: [gitlabrunner1]

TASK [riemers.gitlab-runner : include] *****************************************************************************************************
skipping: [gitlabrunner1]

TASK [riemers.gitlab-runner : Remove runner config] ****************************************************************************************
skipping: [gitlabrunner1] => (item={'name': 'gitlabrunner1', 'executor': 'docker', 'docker_image': 'docker', 'docker_privileged': 'true', 'tags': ['docker-builder', 'gitlabrunner']}) 

TASK [riemers.gitlab-runner : copy] ********************************************************************************************************
ok: [gitlabrunner1]
ok: [gitlabrunner0]

TASK [riemers.gitlab-runner : assemble] ****************************************************************************************************
fatal: [gitlabrunner1]: FAILED! => {"changed": false, "msg": "failed to validate: rc:1 error:Runtime platform                                  \u001b[0;m  arch\u001b[0;m=amd64 os\u001b[0;m=linux pid\u001b[0;m=5489 revision\u001b[0;m=6946bae7 version\u001b[0;m=12.0.0\nRunning in system-mode.                           \u001b[0;m \n                                                  \u001b[0;m \n\u001b[31;1mFATAL: Near line 29 (last key parsed 'runners'): Key 'runners.docker' has already been defined.\u001b[0;m \n"}
fatal: [gitlabrunner0]: FAILED! => {"changed": false, "msg": "failed to validate: rc:1 error:Runtime platform                                  \u001b[0;m  arch\u001b[0;m=amd64 os\u001b[0;m=linux pid\u001b[0;m=18261 revision\u001b[0;m=6946bae7 version\u001b[0;m=12.0.0\nRunning in system-mode.                           \u001b[0;m \n                                                  \u001b[0;m \n\u001b[31;1mFATAL: Near line 29 (last key parsed 'runners'): Key 'runners.docker' has already been defined.\u001b[0;m \n"}

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Comments:14 (6 by maintainers)

github_iconTop GitHub Comments

1reaction
volcan01010commented, Jun 28, 2019

Quality score 5/5!

https://galaxy.ansible.com/riemers/gitlab-runner

Thanks for sharing the runner in the first place.

1reaction
riemerscommented, Jun 28, 2019

And again, thanks for the updates. What makes a community great 😃

Read more comments on GitHub >

github_iconTop Results From Across the Web

Advanced configuration - GitLab Docs
If a runner was already registered, you don't need to register it again. GitLab Runner checks for configuration modifications every 3 seconds and...
Read more >
Advanced configuration - GitLab日本語ドキュメント
GitLab Runner contains a loop that constantly schedules a request that should be made for a worker against the GitLab instance it's configured...
Read more >
Configuration of your jobs with .gitlab-ci.yml
Introduced in GitLab Runner v1.0.0. The key directive allows you to define the affinity of caching between jobs, allowing to have a single...
Read more >
Configuration of your jobs with .gitlab-ci.yml
Since GitLab 10.0 it is possible to define a more elaborate only/except job policy configuration. GitLab now supports both, simple and complex strategies,...
Read more >
Gitlab CI runner configuration with cache on docker
Caching is not designed to pass files between stages of a build. From the doc. cache : Define list of files that should...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found