Сразу хотел бы оговориться, что да в ansible есть возможность сохранения контекста в файле на remote хосте
- hosts: "{{ TARGET_HOSTS }}"
tasks:
- name: create target file on target host
copy:
content: "{{ TARGET_FILE_CONTEXT }}"
dest: "{{ TARGET_PATH_FILE }}"
force: yes
owner: "{{ TARGET_USERNAME }}"
group: "{{ TARGET_USERGROUP }}"
mode: "u=rwx,g=rx,o=rx"
но мне хотелось используя только
- hosts: "{{ TARGET_HOSTS }}"
tasks:
- name: execute shell script
shell: "{{ SHELL_SCRIPT }}"
из jenkinsfile транслировать контекст типа
def CONSUL_HCL_FILE_CONTEXT(name,port,target_host){
def CONTEXT="""
service {
name = "${name}"
port = ${port}
enable_tag_override = false
tags = ["prometheus"]
check {
name = "${name}"
tcp = "${target_host}:${port}"
interval = "60s"
}
}
"""
return CONTEXT;
}
в котором есть двойные кавычки в файл на remote хост
чтобы в результате получалось
service {
name = "metrics_from_hive"
port = 8006
enable_tag_override = false
tags = ["prometheus"]
check {
name = "metrics_from_hive"
tcp = "remote-001:8006"
interval = "60s"
}
}
Вот такая попытка
deploy = sh(script: "ansible -m shell -a 'echo \"${CONSUL_HCL_FILE_CONTEXT("${project}","${port}","${target_host}")}\" | tee /etc/consul.d/${project}.hcl' ${prometheus_host}", returnStdout: true).trim() as String
приводит к тому, что
service {
name = metrics_from_hive
port = 8006
enable_tag_override = false
tags = [prometheus]
check {
name = metrics_from_hive
tcp = remote-001:8006
interval = 60s
}
}