Многословность (в сравнении с вызовом функций) меня также убивает:
```yaml
- name: "xxxx"
files:
path: /a/b/c
state: directory
```
вместо ожидаемого
```python
# xxxx
files('/a/b/c', kind='directory')
```
- name: xxx
  command: mkdir /a/b/c- name: xxx
  files:
    path: /a/b/c
    state: directory- есть роль которая зависит от другой роли (например некоторый сервис, который должен быть выставлен через nginx - т.е. зависим от nginx'a). Настройка nginx'a специфична, может быть использована независимо от сервиса.
- нужно установить три раза одну и ту же роль, но с разными параметрами (например - выдача сертификатов на разные домены на одну машину). Либо include_role с vars, либо копипаста. Многословно. Хотелось бы сделать функцию а-ля `install_certs(domain)` и вызвать ее.
ssl_frontend_domain:
  - domain1.ru
  - domain2.com- name: Get new certificate for "{{ ssl_frontend_domain }} list"
  debug:
    msg: "certbot certonly -m my@mail.ru --agree-tos --no-eff-email -d {{ ssl_frontend_domain | join(',') }} --redirect --webroot -w /opt/tmp"- name: Get certs
  hosts: localhost
  connection: local
  roles:
    - my_roleansible-playbook playbook.ymlTASK [my_role : Get new certificate for "['domain1.ru', 'domain2.com'] list"] ***********************
ok: [localhost] => {
    "msg": "certbot certonly -m my@mail.ru --agree-tos --no-eff-email -d domain1.ru,domain2.com --redirect --webroot -w /opt/tmp"
}# If enabled, this directive will configure
# all clients to redirect their default
# network gateway through the VPN, causing
# all IP traffic such as web browsing and
# and DNS lookups to go through the VPN
# (The OpenVPN server machine may need to NAT
# or bridge the TUN/TAP interface to the internet
# in order for this to work properly).
;push "redirect-gateway def1 bypass-dhcp"
Как раз это 3 и 4 пункты.
Попробуйте для начала не использовать volumes, просто монтируйте текущий каталог (т.е. каталог проекта в котором находится раннер при выполнении скриптов).
Т.е. перепишите докерфайлы и протестируйте локально. Если дело не в правах, то в путанице с каталогами
Затем, поскольку раннер уже запускает скрипты в $CI_PROJECT_PATH и при создании каталога надо просто сделать примерно так:
При этом, сам контейнер должен класть артефакты в artifacts