У меня есть следующий образ докера, который я использую для выполнения команды azure cli в Ansible Tower (AWX), чтобы избежать установки инструментов на контейнеры AWX.
FROM alpine:3.9
RUN \
apk update && \
apk add bash py-pip && \
apk add --virtual=build gcc libffi-dev musl-dev openssl-dev python-dev make && \
pip --no-cache-dir install -U pip && \
pip install azure-cli && \
apk del --purge build
CMD /usr/bin/az login --service-principal \
-u $AZURE_APPLICATION_ID \
-p $AZURE_SECRET \
--tenant $AZURE_TENANT_ID > /dev/null && \
$CMD
Я использую образ так, как вAnsible:
- name: Execute azure-cli command
command: |
docker run --rm --name azure-cli{{ 99 | random }}
-e AZURE_APPLICATION_ID={{ client_id }} \
-e AZURE_SECRET={{ vault_azure_secret }} \
-e AZURE_TENANT_ID={{ tenant }} \
-e CMD="/usr/bin/{{ az_command }}" azure-cli:latest
register: az_command_output
delegate_to: awx.domain.com
Следующая команда не работает:
az monitor activity-log list --offset 24h --select authorization caller category eventTimestamp httpRequest operationName properties resourceType status submissionTimestamp --namespace Microsoft.Network --query "[?resourceType.value == 'Microsoft.Network/networkSecurityGroups/securityRules'] && [?category.value == 'Administrative'] | [?status.value == 'Accepted']" --output json
Ошибка:
fatal: [127.0.0.1 -> awx.domain.com]: FAILED! => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"cmd": [
"docker",
"run",
"--rm",
"--name",
"azure-cli19",
"-e",
"AZURE_APPLICATION_ID=hidden",
"-e",
"AZURE_SECRET=hidden",
"-e",
"AZURE_TENANT_ID=hidden",
"-e",
"CMD=/usr/bin/az monitor activity-log list --offset 24h --select authorization caller category eventTimestamp httpRequest operationName properties resourceType status submissionTimestamp --namespace Microsoft.Network --query [?resourceType.value",
"==",
"Microsoft.Network/networkSecurityGroups/securityRules]",
"&&",
"[?category.value",
"==",
"Administrative]",
"|",
"[?status.value",
"==",
"Accepted] --output json\n",
"azure-cli:latest"
],
"delta": "0:00:00.109458",
"end": "2019-12-11 11:55:36.385994",
"invocation": {
"module_args": {
"_raw_params": "docker run --rm --name azure-cli19\n-e AZURE_APPLICATION_ID=hidden -e AZURE_SECRET=hidden- -e AZURE_TENANT_ID=hidden -e CMD=\"/usr/bin/az monitor activity-log list --offset 24h --select authorization caller category eventTimestamp httpRequest operationName properties resourceType status submissionTimestamp --namespace Microsoft.Network --query \"[?resourceType.value == 'Microsoft.Network/networkSecurityGroups/securityRules'] && [?category.value == 'Administrative'] | [?status.value == 'Accepted']\" --output json\n\" azure-cli:latest\n",
"_uses_shell": false,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"msg": "non-zero return code",
"rc": 125,
"start": "2019-12-11 11:55:36.276536",
"stderr": "docker: invalid reference format.\nSee 'docker run --help'.",
"stderr_lines": [
"docker: invalid reference format.",
"See 'docker run --help'."
],
"stdout": "",
"stdout_lines": []
}
Я уверен, что это как-то связано с одиночным идвойные кавычки, но я пробовал разные варианты без удачи. Кто-нибудь знает, как это решить?