Не могу передать содержимое txt файла в команду оболочки ansible - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь передать содержимое текстового файла, находящегося в локальной папке, в команду оболочки Ansible, и по какой-то причине я не могу, и я уверен, что это что-то глупое, что я пропускаю .

Любая помощь будет очень признательна

Вот строка ansible:

    - name: Connect K8s cluster to Shipa
      shell: shipa cluster-add {{ cluster_name }} --addr $(< {{ cluster_name }}.txt)  --cacert {{ cluster_name }}.crt --pool {{ cluster_name }} --ingress-service-type=LoadBalancer
      args:
        executable: /bin/bash
      no_log: False

Всякий раз, когда я запускаю это, вот что я получаю в журнале:

fatal: [localhost]: FAILED! => {"changed": true, "cmd": "shipa cluster-add scale2 --addr $(< scale2.txt)  --cacert scale2.crt --pool scale2 --ingress-service-type=LoadBalancer", "delta": "0:00:00.096162", "end": "2020-04-30 21:32:54.245781", "msg": "non-zero return code", "rc": 1, "start": "2020-04-30 21:32:54.149619", "stderr": "Error: 500 Internal Server Error: parse \"https://\\x1b[0;33mhttps://192.196.192.156\\x1b[0m\": net/url: invalid control character in URL", "stderr_lines": ["Error: 500 Internal Server Error: parse \"https://\\x1b[0;33mhttps://192.196.192.156\\x1b[0m\": net/url: invalid control character in URL"], "stdout": "", "stdout_lines": []}

Вот содержимое файла:

# cat scale2.txt 
https://192.196.192.156

Вот что я пытаюсь передать в команде:

shipa cluster-add scale2 --addr https://192.196.192.156  --cacert scale2.crt --pool scale2 --ingress-service-type=LoadBalancer

РЕДАКТИРОВАТЬ:

Я также попробовал следующее:

 - name: Get K8s cluster address
      shell: kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'
      args:
        executable: /bin/bash
      register: cluster_address
      no_log: False

    - debug: var=cluster_address

    - name: Save to file
      copy:
        content: "{{ ''.join(cluster_address.stdout_lines)  | replace('\\u001b[0;33m', '')| replace('\\u001b[0m', '') }}"
        dest: "cluster_address.json"

    - name: Connect K8s cluster to Shipa
      shell: shipa cluster-add {{ cluster_name }} --addr {{ lookup('file', 'cluster_address.json') }} --cacert {{ cluster_name }}.crt --pool {{ cluster_name }} --ingress-service-type=LoadBalancer
      args:
        executable: /bin/bash
      no_log: False

Но он сохраняет следующее содержимое в файл:

# vi cluster_address.json 
^[[0;33mhttps://192.192.56.192^[[0m

Вот вывод выполнения ansible:

TASK [debug] **********************************************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "cluster_address": {
        "changed": true, 
        "cmd": "kubectl cluster-info | grep 'Kubernetes master' | awk '/http/ {print $NF}'", 
        "delta": "0:00:00.144193", 
        "end": "2020-04-30 22:54:21.970460", 
        "failed": false, 
        "rc": 0, 
        "start": "2020-04-30 22:54:21.826267", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "\u001b[0;33mhttps://192.192.56.192\u001b[0m", 
        "stdout_lines": [
            "\u001b[0;33mhttps://192.192.56.192\u001b[0m"
        ]
    }
}

TASK [Save to file] ***************************************************************************************************************************************************************************************************************************
changed: [localhost]

TASK [Connect K8s cluster to Shipa] ***********************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "shipa cluster-add scale1 --addr \u001b[0;33mhttps://192.192.56.192\u001b[0m --cacert scale1.crt --pool scale1 --ingress-service-type=LoadBalancer", "delta": "0:00:00.106936", "end": "2020-04-30 22:54:23.213485", "msg": "non-zero return code", "rc": 127, "start": "2020-04-30 22:54:23.106549", "stderr": "Error: 400 Bad Request: either default or a list of pools must be set\n/bin/bash: 33mhttps://192.192.56.192\u001b[0m: No such file or directory", "stderr_lines": ["Error: 400 Bad Request: either default or a list of pools must be set", "/bin/bash: 33mhttps://192.192.56.192\u001b[0m: No such file or directory"], "stdout": "", "stdout_lines": []}

1 Ответ

2 голосов
/ 01 мая 2020

Вы можете отключить причудливый вывод терминала, установив TERM на dumb

- shell: kubectl cluster-info | awk '/Kubernetes master/ {print $NF}'
  environment:
    TERM: dumb
  register: cluster_info

- set_fact:
    cluster_addr: '{{ cluster_info.stdout | trim }}'

, тогда отдельно вам не нужно использовать поиск файла для значения, которое вы имеете в переменная jinja2 уже:

- name: Connect K8s cluster to Shipa
  command: shipa cluster-add {{ cluster_name }} --addr {{ cluster_addr }} --cacert {{ cluster_name }}.crt --pool {{ cluster_name }} --ingress-service-type=LoadBalancer
  args:
    executable: /bin/bash
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...