Problem: Semaphore doesn't reads `ansible.cfg`
ramiuslr opened this issue · comments
Issue
Here is the error I get (log from web ui):
ERROR! the role 'ping' was not found in /tmp/semaphore/repository_1_1/playbooks/all/roles:/tmp/semaphore/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/tmp/semaphore/repository_1_1/playbooks/all
Here is the ansible.cfg
in the root of my ansible repository:
[defaults]
host_key_checking = False
roles_path = roles/all:roles/linux:roles/vmware:roles/windows
[inventory]
enable_plugins = yaml, vmware_vm_inventory
So why Ansible isn't looking in the ./roles
directory ?
It works fine on my local computer with a fresh Ansible setup, but not on my Semaphore server.
I thought it could be because of /tmp/semaphore
permissions, as Ansible doesn't reads config files that are in world writable directories.
Unfortunatly that's probaly not the cause of this issue:
e825aa11cc8d:~$ ls -l /tmp/
total 4
drwxr-xr-x 1 semaphor root 4096 Jun 3 08:19 semaphore
Impact
Ansible (task execution)
Installation method
Docker
Database
MySQL
Browser
No response
Semaphore Version
develop-80e2c8e-1717270566
Ansible Version
No response
Logs & errors
root@semaphore:~# docker compose logs semaphore
semaphore-1 | Attempting to connect to database semaphore on semaphore-mariadb:3306 with user semaphore ...
semaphore-1 | No additional system dependencies to install
semaphore-1 | Installing additional python dependencies
semaphore-1 | ..Collecting git+https://github.com/vmware/vsphere-automation-sdk-python.git (from -r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Cloning https://github.com/vmware/vsphere-automation-sdk-python.git to /tmp/pip-req-build-qkf8dkrl
semaphore-1 | Running command git clone --filter=blob:none --quiet https://github.com/vmware/vsphere-automation-sdk-python.git /tmp/pip-req-build-qkf8dkrl
semaphore-1 | Resolved https://github.com/vmware/vsphere-automation-sdk-python.git to commit 99ee630cb819495f572e9775b48ce0ac1b0263de
semaphore-1 | Installing build dependencies: started
semaphore-1 | Installing build dependencies: finished with status 'done'
semaphore-1 | Getting requirements to build wheel: started
semaphore-1 | Getting requirements to build wheel: finished with status 'done'
semaphore-1 | Installing backend dependencies: started
semaphore-1 | Installing backend dependencies: finished with status 'done'
semaphore-1 | Preparing metadata (pyproject.toml): started
semaphore-1 | Preparing metadata (pyproject.toml): finished with status 'done'
semaphore-1 | Collecting pyvmomi (from -r /etc/semaphore/requirements.txt (line 1))
semaphore-1 | Downloading pyvmomi-8.0.2.0.1.tar.gz (852 kB)
semaphore-1 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 852.2/852.2 kB 7.9 MB/s eta 0:00:00
semaphore-1 | Installing build dependencies: started
semaphore-1 | Installing build dependencies: finished with status 'done'
semaphore-1 | Getting requirements to build wheel: started
semaphore-1 | Getting requirements to build wheel: finished with status 'done'
semaphore-1 | Installing backend dependencies: started
semaphore-1 | Installing backend dependencies: finished with status 'done'
semaphore-1 | Preparing metadata (pyproject.toml): started
semaphore-1 | Preparing metadata (pyproject.toml): finished with status 'done'
semaphore-1 | Collecting pywinrm[credssp] (from -r /etc/semaphore/requirements.txt (line 2))
semaphore-1 | Downloading pywinrm-0.4.3-py2.py3-none-any.whl.metadata (11 kB)
semaphore-1 | Requirement already satisfied: six>=1.7.3 in /opt/semaphore/venv/lib/python3.11/site-packages (from pyvmomi->-r /etc/semaphore/requirements.txt (line 1)) (1.16.0)
semaphore-1 | Collecting xmltodict (from pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2))
semaphore-1 | Downloading xmltodict-0.13.0-py2.py3-none-any.whl.metadata (7.7 kB)
semaphore-1 | Requirement already satisfied: requests>=2.9.1 in /opt/semaphore/venv/lib/python3.11/site-packages (from pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (2.32.3)
semaphore-1 | Collecting requests-ntlm>=1.1.0 (from pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2))
semaphore-1 | Downloading requests_ntlm-1.2.0-py3-none-any.whl.metadata (2.4 kB)
semaphore-1 | Collecting requests-credssp>=1.0.0 (from pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2))
semaphore-1 | Downloading requests_credssp-2.0.0-py2.py3-none-any.whl.metadata (10 kB)
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/vapi-runtime/vapi_runtime-2.44.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/vcenter-bindings/vcenter_bindings-4.2.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/vapi-common-client/vapi_common_client-2.44.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/vmwarecloud-aws/vmwarecloud_aws-1.64.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/nsx-python-sdk/nsx_python_sdk-4.1.2.0.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/nsx-policy-python-sdk/nsx_policy_python_sdk-4.1.2.0.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/nsx-vmc-policy-python-sdk/nsx_vmc_policy_python_sdk-4.1.2.0.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/nsx-vmc-aws-integration-python-sdk/nsx_vmc_aws_integration_python_sdk-4.1.2.0.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Processing //tmp/pip-req-build-qkf8dkrl/lib/vmwarecloud-draas/vmwarecloud_draas-1.23.0-py2.py3-none-any.whl (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Collecting lxml>=4.3.0 (from vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Downloading lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl.metadata (3.4 kB)
semaphore-1 | Requirement already satisfied: charset-normalizer<4,>=2 in /opt/semaphore/venv/lib/python3.11/site-packages (from requests>=2.9.1->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (3.3.2)
semaphore-1 | Requirement already satisfied: idna<4,>=2.5 in /opt/semaphore/venv/lib/python3.11/site-packages (from requests>=2.9.1->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (3.7)
semaphore-1 | Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/semaphore/venv/lib/python3.11/site-packages (from requests>=2.9.1->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (2.2.1)
semaphore-1 | Requirement already satisfied: certifi>=2017.4.17 in /opt/semaphore/venv/lib/python3.11/site-packages (from requests>=2.9.1->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (2024.2.2)
semaphore-1 | Requirement already satisfied: cryptography in /opt/semaphore/venv/lib/python3.11/site-packages (from requests-credssp>=1.0.0->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (42.0.7)
semaphore-1 | Collecting pyspnego>=0.5.0 (from requests-credssp>=1.0.0->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2))
semaphore-1 | Downloading pyspnego-0.10.2-py3-none-any.whl.metadata (5.4 kB)
semaphore-1 | Collecting pyOpenSSL (from vapi-runtime@ file://localhost//tmp/pip-req-build-qkf8dkrl/lib/vapi-runtime/vapi_runtime-2.44.0-py2.py3-none-any.whl->vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3))
semaphore-1 | Downloading pyOpenSSL-24.1.0-py3-none-any.whl.metadata (12 kB)
semaphore-1 | Requirement already satisfied: setuptools in /opt/semaphore/venv/lib/python3.11/site-packages (from vcenter-bindings@ file://localhost//tmp/pip-req-build-qkf8dkrl/lib/vcenter-bindings/vcenter_bindings-4.2.0-py2.py3-none-any.whl->vsphere-automation-sdk==1.86.0->-r /etc/semaphore/requirements.txt (line 3)) (65.5.0)
semaphore-1 | Requirement already satisfied: cffi>=1.12 in /opt/semaphore/venv/lib/python3.11/site-packages (from cryptography->requests-credssp>=1.0.0->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (1.16.0)
semaphore-1 | Requirement already satisfied: pycparser in /opt/semaphore/venv/lib/python3.11/site-packages (from cffi>=1.12->cryptography->requests-credssp>=1.0.0->pywinrm[credssp]->-r /etc/semaphore/requirements.txt (line 2)) (2.22)
semaphore-1 | Downloading lxml-5.2.2-cp311-cp311-musllinux_1_2_x86_64.whl (5.0 MB)
semaphore-1 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 56.7 MB/s eta 0:00:00
semaphore-1 | Downloading requests_credssp-2.0.0-py2.py3-none-any.whl (10 kB)
semaphore-1 | Downloading requests_ntlm-1.2.0-py3-none-any.whl (6.0 kB)
semaphore-1 | Downloading pywinrm-0.4.3-py2.py3-none-any.whl (44 kB)
semaphore-1 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 44.1/44.1 kB 7.5 MB/s eta 0:00:00
semaphore-1 | Downloading xmltodict-0.13.0-py2.py3-none-any.whl (10.0 kB)
semaphore-1 | Downloading pyspnego-0.10.2-py3-none-any.whl (129 kB)
semaphore-1 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 129.9/129.9 kB 23.7 MB/s eta 0:00:00
semaphore-1 | Downloading pyOpenSSL-24.1.0-py3-none-any.whl (56 kB)
semaphore-1 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 56.9/56.9 kB 10.1 MB/s eta 0:00:00
semaphore-1 | Building wheels for collected packages: pyvmomi, vsphere-automation-sdk
semaphore-1 | Building wheel for pyvmomi (pyproject.toml): started
semaphore-1 | Building wheel for pyvmomi (pyproject.toml): finished with status 'done'
semaphore-1 | Created wheel for pyvmomi: filename=pyvmomi-8.0.2.0.1-py2.py3-none-any.whl size=527673 sha256=26909db37b6590ec724f35810362a9349bce46f701ece146fd4788ca0f9f837f
semaphore-1 | Stored in directory: /home/semaphore/.cache/pip/wheels/58/00/35/035f172707b539c0edd6e086053a4f177a424c0ab807799d1f
semaphore-1 | Building wheel for vsphere-automation-sdk (pyproject.toml): started
semaphore-1 | Building wheel for vsphere-automation-sdk (pyproject.toml): finished with status 'done'
semaphore-1 | Created wheel for vsphere-automation-sdk: filename=vsphere_automation_sdk-1.86.0-py3-none-any.whl size=2324 sha256=991228ee7d54835b18dcec5d2b702f9dcfc79df8efbcd609e2b75dda30bc37d5
semaphore-1 | Stored in directory: /tmp/pip-ephem-wheel-cache-8fn28ahv/wheels/32/3f/75/62d9c317cd99d4f8b7abfe4e2ac50658e57b7cc1984bb0bc28
semaphore-1 | Successfully built pyvmomi vsphere-automation-sdk
semaphore-1 | Installing collected packages: xmltodict, pyvmomi, lxml, pyspnego, pyOpenSSL, vapi-runtime, requests-ntlm, requests-credssp, vcenter-bindings, vapi-common-client, pywinrm, vmwarecloud-draas, vmwarecloud-aws, nsx-vmc-policy-python-sdk, nsx-vmc-aws-integration-python-sdk, nsx-python-sdk, nsx-policy-python-sdk, vsphere-automation-sdk
semaphore-1 | WARNING: The script pyspnego-parse is installed in '/home/semaphore/.local/bin' which is not on PATH.
semaphore-1 | Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
semaphore-1 | WARNING: The script vapi-server is installed in '/home/semaphore/.local/bin' which is not on PATH.
semaphore-1 | Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
semaphore-1 | Successfully installed lxml-5.2.2 nsx-policy-python-sdk-4.1.2.0.0 nsx-python-sdk-4.1.2.0.0 nsx-vmc-aws-integration-python-sdk-4.1.2.0.0 nsx-vmc-policy-python-sdk-4.1.2.0.0 pyOpenSSL-24.1.0 pyspnego-0.10.2 pyvmomi-8.0.2.0.1 pywinrm-0.4.3 requests-credssp-2.0.0 requests-ntlm-1.2.0 vapi-common-client-2.44.0 vapi-runtime-2.44.0 vcenter-bindings-4.2.0 vmwarecloud-aws-1.64.0 vmwarecloud-draas-1.23.0 vsphere-automation-sdk-1.86.0 xmltodict-0.13.0
semaphore-1 | Starting semaphore server
semaphore-1 | Loading config
semaphore-1 | Validating config
semaphore-1 | MySQL semaphore@semaphore-mariadb:3306 semaphore
semaphore-1 | Tmp Path (projects home) /tmp/semaphore
semaphore-1 | Semaphore develop-80e2c8e-1717270566
semaphore-1 | Interface
semaphore-1 | Port 3000
semaphore-1 | Server is running
semaphore-1 | time="2024-06-03T08:19:47Z" level=info msg="Task 14 added to queue"
semaphore-1 | time="2024-06-03T08:19:49Z" level=info msg="Set resource locker with TaskRunner 14"
semaphore-1 | time="2024-06-03T08:19:49Z" level=info msg="Task 14 removed from queue"
semaphore-1 | time="2024-06-03T08:19:52Z" level=error msg="remove /tmp/semaphore/inventory_14: directory not empty"
semaphore-1 | time="2024-06-03T08:19:52Z" level=info msg="Stopped running TaskRunner 14"
semaphore-1 | time="2024-06-03T08:19:52Z" level=info msg="Release resource locker with TaskRunner 14"
Manual installation - system information
No response
Configuration
compose.yml
:
---
services:
# Semaphore
semaphore-mariadb:
restart: unless-stopped
image: mariadb:latest
hostname: mariadb
volumes:
- /srv/semaphore/data:/var/lib/mysql
expose:
- 3306
environment:
MYSQL_RANDOM_ROOT_PASSWORD: 'yes'
MYSQL_DATABASE: 'semaphore'
MYSQL_USER: 'semaphore'
MYSQL_PASSWORD: '<redacted>'
semaphore:
image: semaphoreui/semaphore:develop
restart: unless-stopped
environment:
SEMAPHORE_DB_USER: 'semaphore'
SEMAPHORE_DB_PASS: '<redacted>'
SEMAPHORE_DB_HOST: 'semaphore-mariadb'
SEMAPHORE_DB_PORT: 3306
SEMAPHORE_DB_DIALECT: 'mysql'
SEMAPHORE_DB: 'semaphore'
depends_on:
- semaphore-mariadb
volumes:
- ./config.json:/etc/semaphore/config.json:ro
- ./requirements.txt:/etc/semaphore/requirements.txt:ro
expose:
- 3000
# Caddy reverse proxy
caddy:
image: 'caddy:latest'
restart: unless-stopped
ports:
- 0.0.0.0:80:80
- 0.0.0.0:443:443
- 0.0.0.0:443:443/udp
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- /srv/caddy/data:/data
- /srv/caddy/config:/config
- ./certs:/certs:ro
...
config.json
:
{
"port": "3000",
"web_host": "https://semaphore.example.org",
"tmp_path": "/tmp/semaphore/",
"access_key_encryption": "<redacted>",
"cookie_hash": "<redacted>",
"cookie_encryption": "<redacted>",
"ldap_enable": true,
"ldap_needtls": false,
"ldap_binddn": "<redacted>",
"ldap_bindpassword": "<redacted>",
"ldap_server": "<redacted>:389",
"ldap_searchdn": "<redacted>",
"ldap_searchfilter": "(&(mail=%s)(memberOf:1.2.840.113556.1.4.1941:=<redacted>)(objectClass=user))",
"ldap_mappings": {
"dn": "dn",
"mail": "mail",
"uid": "mail",
"cn": "cn"
}
}
requirements.txt
:
pyvmomi
pywinrm[credssp]
git+https://github.com/vmware/vsphere-automation-sdk-python.git
Additional information
No response
Similar Issue for me, looks like Semaphore is creating an empty ansible.cfg in /tmp/semaphore/ansible.cfg you can over-mount from the host as a workarround.
Similar issue here. Just getting started with Semaphore, so I might be missing a setting or something.
I got a repository that contains a subfolder with all the ansible stuff, something like this:
repo/
repo/av2/
repo/av2/ansible.cfg
repo/av2/inventory/
repo/av2/plays/
repo/av2/plays/ansible.cfg
repo/av2/plugins/
repo/av2/roles/
Where repo/av2/ansible.cfg
contains this:
[defaults]
inventory = ./inventory/
roles_path = ./roles/:/etc/ansible/roles/
filter_plugins = ./plugins/filter/
vault_password_file = ./.ansible.vault.pass.txt
And repo/av2/plays/ansible.cfg
contains this:
[defaults]
inventory = ../inventory/
roles_path = ../roles/:/etc/ansible/roles/
filter_plugins = ../plugins/filter/
vault_password_file = ../.ansible.vault.pass.txt
It works fine on my workstation but Semaphore seems to be ignoring the ansible.cfg
files; I have a task setup to execute a playbook at repo/av2/plays/full.yml
that immediately fails when including roles from repo/av2/roles/
:
11:45:45 AM
TASK [system] ******************************************************************
11:45:45 AM
ERROR! the role 'system' was not found in /tmp/semaphore/repository_2_5/av2/plays/roles:/tmp/semaphore/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/tmp/semaphore/repository_2_5/av2/plays
11:45:45 AM
11:45:45 AM
The error appears to be in '/tmp/semaphore/repository_2_5/av2/plays/full.yml': line 8, column 15, but may
11:45:45 AM
be elsewhere in the file depending on the exact syntax problem.
11:45:45 AM
11:45:45 AM
The offending line appears to be:
11:45:45 AM
11:45:45 AM
ansible.builtin.include_role:
11:45:45 AM
name: "system"
11:45:45 AM
^ here
I just saw that #1036 suggests that ansible.cfg
has to be located in the repository root. The Ansible documentation just states it reads ansible.cfg
from the "current directory".
Is there a way to tell Semaphore to cd av2/
first?
Not directly a solution for loading the ansible.cfg, but all mentioned configs you guys try to apply you should be able to change via environment variables.
I'd prefer Semaphore to read the settings from the file so I don't have to maintain them in one more place.
Also I have far more settings in there, those are just the most important.
I think the solution to cd
somewhere first would make most sense, maybe a config option like working directory
or something?
Has been suggested in #1984, too.
I tested with an ansible.cfg
like this at the root of the repository:
[defaults]
inventory = ./av2/inventory/
roles_path = ./av2/roles/:/etc/ansible/roles/
filter_plugins = ./av2/plugins/filter/
vault_password_file = ./av2/.ansible.vault.pass.txt
Still does not work, same error. So Semaphore seems to be ignoring the config completely?
Running v2.9.113-beta
.
Hey guys thank's for your interest in this issue, I confirm as I said in my first post that my ansible.cfg
is also in the root of my repository, and that it works fine on my laptop.
Not directly a solution for loading the ansible.cfg, but all mentioned configs you guys try to apply you should be able to change via environment variables.
@tboerger thank for your advice, I'm gonna try this as a workaround !
However I agree with @davidwinterstein I think it would be great to manage general Ansible config in a file in the repo, that would be easier to port and maintain in my opinion.
Same issue, I have my own custom ansible.cfg and since recent semaphore update all stop working. Inventory cannot find the proper ssh keys.
Same issue here.
ansible.cfg contains this line:
roles_path = /opt/ansiblectrl/roles:./roles:roles
which worked just fine on v.2.9.75, but isnt working anymore on v.2.9.112.
ERROR! the role 'aptUpdate' was not found in /tmp/semaphore/repository_1_1/playbooks/roles: /tmp/semaphore/.ansible/roles: /usr/share/ansible/roles: /etc/ansible/roles: /tmp/semaphore/repository_1_1/playbooks
Same issue here. ansible.cfg contains this line:
roles_path = /opt/ansiblectrl/roles:./roles:roles
which worked just fine on v.2.9.75, but isnt working anymore on v.2.9.112.
ERROR! the role 'aptUpdate' was not found in /tmp/semaphore/repository_1_1/playbooks/roles: /tmp/semaphore/.ansible/roles: /usr/share/ansible/roles: /etc/ansible/roles: /tmp/semaphore/repository_1_1/playbooks
In effect the version v2.9.75 works with my ansible repository and makes use of my ansible.cfg
👍 I might need to stick to that version until this is fixed.
Same issue here. ansible.cfg contains this line:
roles_path = /opt/ansiblectrl/roles:./roles:roles
which worked just fine on v.2.9.75, but isnt working anymore on v.2.9.112.
ERROR! the role 'aptUpdate' was not found in /tmp/semaphore/repository_1_1/playbooks/roles: /tmp/semaphore/.ansible/roles: /usr/share/ansible/roles: /etc/ansible/roles: /tmp/semaphore/repository_1_1/playbooks
In effect the version v2.9.75 works with my ansible repository and makes use of my
ansible.cfg
👍 I might need to stick to that version until this is fixed.
I am just very happy that I encountered this bug in my homelab, where I can just go back to using ansible CLI.
I am going to stay on v.2.9.75 in my work production setup for now...
Similar Issue for me, looks like Semaphore is creating an empty ansible.cfg in /tmp/semaphore/ansible.cfg you can over-mount from the host as a workarround.
I attempted this, but it still ignores it.
I Use exec'ed in to the container and checked the contents of /tmp/semaphore/ansible.cfg after volume mounting it. I see my ansible.cfg file there, but Semaphore still ignores it.
Similar Issue for me, looks like Semaphore is creating an empty ansible.cfg in /tmp/semaphore/ansible.cfg you can over-mount from the host as a workarround.
I attempted this, but it still ignores it.
I Use exec'ed in to the container and checked the contents of /tmp/semaphore/ansible.cfg after volume mounting it. I see my ansible.cfg file there, but Semaphore still ignores it.
Works for me on the current 2.9.112 Docker Image at least, but I didn't set an EnvVar for the Config anywhere else.
Not directly a solution for loading the ansible.cfg, but all mentioned configs you guys try to apply you should be able to change via environment variables.
Could you elaborate on this? I am not sure I understand what you mean here?
Not directly a solution for loading the ansible.cfg, but all mentioned configs you guys try to apply you should be able to change via environment variables.
But each project + playbook is creating new folder in which ansible.cfg is stored. For this solution to work i would need to make new enviroment for each playbook in project and set its path to correct one.
Solution i found so far is to create enviromental variable ANSIBLE_CONFIG = /tmp/semaphore/repository_3_*
[SEMAPHORE_PLAYBOOK_PATH] + 'repository_' +[REPOSITORY NUMBER] + '_*' to get config from any repository that is already checked out.
But this works until you edit something in config - you would need to clear all checked out repositories to make sure it loads config from last commit
I am also setting up Semaphore for the first time and testing it out, I am running into the same issue. I have a folder structure where separate internal and external roles and this is set in the ansible.cfg
└── roles
├── external
└── internal
[defaults]
roles_path = roles/internal:roles/external:roles
I am also setting up Semaphore for the first time and testing it out, I am running into the same issue. I have a folder structure where separate internal and external roles and this is set in the ansible.cfg
└── roles ├── external └── internal
[defaults] roles_path = roles/internal:roles/external:roles
If you are setting semaphore up as a podman or docker container, you can use v. 2.9.75 for now, and it will work.
I just updated my SemaphoreUI running as a podman Quadlet, to version 2.10.7 ( https://github.com/semaphoreui/semaphore/releases/tag/v2.10.7 ) and this issue seems to be fixed. I reads my ansible.cfg again.
Thank you for fixing this