Stat.exists 与字典中的 ansible [英] Stat.exists with dictionary in ansible

查看:28
本文介绍了Stat.exists 与字典中的 ansible的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 Ansible 中使用字典检查现有文件时遇到问题.

I have a problem with checking existing files using a dictonary in Ansible.

- name: Test if config file exists
  ansible.builtin.stat:
    path: "{{ agpm_runner_base_dir }}/{{ item.key }}/config.toml"
  with_dict: "{{ runners }}"
  register: config

- name: Register a runner
  command: >
    docker run
    --rm
    -v {{ agpm_runner_base_dir }}/{{ item.key }}:/etc/gitlab-runner
    -v {{ agpm_runner_base_dir }}/certs:/etc/gitlab-runner/certs
    {{ agpm_runner_image }}
    register --non-interactive --tls-ca-file /etc/gitlab-runner/certs/default.crt
    --url "https://172.20.100.106/" --registration-token "{{ item.value.token }}"
    --name "gitlab-runner" --tag-list "runner,docker" --executor "docker"
    --docker-volumes /var/run/docker.sock:/var/run/docker.sock
    --docker-image alpine:latest --run-untagged="true"
    --locked="false" --access-level="not_protected"
  with_items: "{{ config.results }}"
  when: 
    - item.stat.exists == false
  environment:
    - constraint: [node == SRWDVNODE1.agpm.adm]

尝试运行我的 ansible 角色时会出现错误:

Trying to run my ansible role I will get the error:

TASK [agpm.runner : Test if config file exists] ****************************************************************************************************************************************************************************
ok: [192.168.171.113] => (item={'key': 'runner1', 'value': {'name': 'runner1', 'cpu': 0.5, 'mem': 256, 'concurrent': 2, 'token': 'rNTPkdzj-8RaYjfGrwbz'}}) => {"ansible_loop_var": "item", "changed": false, "item": {"key": "runner1", "value": {"concurrent": 2, "cpu": 0.5, "mem": 256, "name": "runner1", "token": "rNTPkdzj-8RaYjfGrwbz"}}, "stat": {"exists": false}}
ok: [192.168.171.113] => (item={'key': 'runner2', 'value': {'name': 'runner2', 'cpu': 0.5, 'mem': 256, 'concurrent': 3, 'token': 'rNTPkdzj-8RaYjfGrwbz'}}) => {"ansible_loop_var": "item", "changed": false, "item": {"key": "runner2", "value": {"concurrent": 3, "cpu": 0.5, "mem": 256, "name": "runner2", "token": "rNTPkdzj-8RaYjfGrwbz"}}, "stat": {"exists": false}}

TASK [agpm.runner : Register a runner] *************************************************************************************************************************************************************************************
fatal: [192.168.171.113]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'dict object' has no attribute 'key'\n\nThe error appears to be in '/root/2projet-runner/roles/agpm.runner/tasks/main.yml': line 46, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Register a runner\n  ^ here\n"}

推荐答案

类似的事情

- name: Register a runner if exist
  include_tasks: register_runner.yml
  with_dict: "{{ runners }}"

和新文件 register_runner.yml 包含:

- name: Test if config file exists
  ansible.builtin.stat:
     path: "{{ agpm_runner_base_dir }}/{{ item.key }}/config.toml"
  register: config

- name: Register a runner
  command: >
   docker run
     --rm
     -v {{ agpm_runner_base_dir }}/{{ item.key }}:/etc/gitlab-runner
     -v {{ agpm_runner_base_dir }}/certs:/etc/gitlab-runner/certs
        {{ agpm_runner_image }}
     register --non-interactive --tls-ca-file /etc/gitlab-runner/certs/default.crt
     --url "https://172.20.100.106/" --registration-token "{{ item.value.token }}"
     --name "gitlab-runner" --tag-list "runner,docker" --executor "docker"
     --docker-volumes /var/run/docker.sock:/var/run/docker.sock
     --docker-image alpine:latest --run-untagged="true"
     --locked="false" --access-level="not_protected"
  when: config.stat.exists == false
  environment:
    - constraint: [node == SRWDVNODE1.agpm.adm]

这篇关于Stat.exists 与字典中的 ansible的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆