Azure-Cli Docker容器无法执行命令

时间:2019-12-11 10:58:59

标签: docker ansible azure-cli

我有以下docker镜像,用于在Ansible Tower(AW​​X)中执行azure cli命令,以避免在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": []
}

我确定这与单引号和双引号有关,但是我尝试了不同的转义,但是没有运气。有人知道如何解决这个问题吗?

0 个答案:

没有答案