Есть такой скриптец который считывает с токена и передает на удаленный комп контейнер с эцп крипто-про.
cat xxx.sh
#!/bin/sh
cont_name='\\.\Aktiv Co. Rutoken S 00 00\ab70d299-d9b0-4e2b-8cdc-f919540f20e9'
echo "cont_name: "$cont_name
cont_name2='\\.\HDIMAGE\1'
echo "cont_name2: "$cont_name2
/opt/cprocsp/bin/amd64/csptest -keycopy -pinsrc 12345678 -contsrc "$cont_name" -contdest "$cont_name2" -pindest 12345678
ansible-playbook -s /etc/ansible/playbooks/transfer_ecp_cont.yml -i /etc/ansible/all -e "var1=$cont_name" -e "var2=$cont_name2"
Собственно текст playbook-а ansible, которому передаются имена контейнеров исходного и приёмного, чтобы на удаленной машине записать контейнеры назад на токен.
cat transfer_ecp_cont.yml
# Переброска контейнеров с эцп на удаленный токен
---
- name: transfer
hosts: all
vars:
cont1: "{{var1}}"
cont2: "{{var2}}"
tasks:
- name: Print Container1
debug:
msg: "cont1:{{ cont1 }}"
- name: Print Container2
debug:
msg: "cont2:{{ cont2 }}"
- name: Запускаем update.sh
shell: "/opt/cprocsp/bin/amd64/csptest -keycopy -pinsrc 12345678 -contsrc {{ cont2 }} -contdest {{ cont1 }} -pindest 12345678"
На выходе имеем:
...
PLAY [transfer template] ********************************************************************************************************************************************************
TASK [Gathering Facts] **********************************************************************************************************************************************************
ok: [192.168.1.35]
TASK [Print Conteiner1] *********************************************************************************************************************************************************
ok: [192.168.1.35] => {
"msg": "cont1:\\.\\Aktiv Co. Rutoken S 00 00\f192b87c-0e1f-43c9-8b47-4ac397fb05be"
}
TASK [Print Conteiner2] *********************************************************************************************************************************************************
ok: [192.168.1.35] => {
"msg": "cont2:\\.\\HDIMAGE\\1"
}
...
Проблема заключается в том, что некорректно передаются параметры (имена контейнеров) в ansible
Передаём: сont_name: \\.\Aktiv Co. Rutoken S 00 00\f192b87c-0e1f-43c9-8b47-4ac397fb05be сont_name2: \\.\HDIMAGE\1
Ansible получает: сont1:\\.\\Aktiv Co. Rutoken S 00 00\f192b87c-0e1f-43c9-8b47-4ac397fb05be" сont2:\\.\\HDIMAGE\\1"
Лишние «\» в первой переменной в одном месте, сразу перед Aktiv Co и во второй переменной в двух местах, перед HDIMAGE и после. Соответственно запись контейнеров назад на токен завершается с ошибкой, т.к. не верные имена.
Как бороться с данным косяком? Пробовал «экранировать» переменные по всякому, но результат отрицательный.