Ansible, k8s и переменные - PullRequest
       23

Ansible, k8s и переменные

1 голос
/ 24 апреля 2019

Я использую Ansible и модуль k8s для развертывания приложений в кластере OpenShift. В целом это работает очень хорошо.

Однако, когда я пытаюсь установить значение порта в конфигурации развертывания, используя значение из переменной, все не так радует.

У меня в качестве примера приведено следующее задание:

- name: Create app service
      k8s:
        name: "{{ name | lower }}"
        state: present
        definition:
          apiVersion: v1
          kind: Service
          metadata:
            annotations:
            labels:
              app: "{{ name | lower }}"
            name: "{{ name | lower }}"
            namespace: "{{ name | lower }}"
          spec:
            ports:
              - name: "{{ port }}-tcp"
                port: "{{ port  }}"
                protocol: TCP
                targetPort: "{{ port | int }}" <--- the problem!
            selector:
              deploymentconfig: "{{ name | lower }}"
            sessionAffinity: None
            type: ClusterIP
          status:
            loadBalancer: {}

Переменная задается в файле yaml, который читается в playbook, а переменная устанавливается как port: "5000".

Если я изменю это значение на port: 5000, то это решит проблему, но я использую эту переменную в нескольких других местах и ​​других книгах, поэтому я бы предпочел оставить эту переменную такой, как есть.

Я попытался использовать подходы для решения этой проблемы: "{{ port | int }}"

Пример ошибки, которую я получаю:

fatal: [localhost]: FAILED! => {"changed": false, "error": 422, "msg": "Failed to patch object: {\"kind\":\"Status\",\"apiVersion\":\"v1\",\"metadata\":{},\"status\":\"Failure\",\"message\":\"Service \\\"myapp\\\" is invalid: spec.ports[0].targetPort: Invalid value: \\\"7001\\\": must contain at least one letter or number (a-z, 0-9)\",\"reason\":\"Invalid\",\"details\":{\"name\":\"usdt-wallet\",\"kind\":\"Service\",\"causes\":[{\"reason\":\"FieldValueInvalid\",\"message\":\"Invalid value: \\\"5000\\\": must contain at least one letter or number (a-z, 0-9)\",\"field\":\"spec.ports[0].targetPort\"}]},\"code\":422}\n", "reason": "Unprocessable Entity", "status": 422}

1 Ответ

0 голосов
/ 24 апреля 2019

Согласно опубликованному сообщению об ошибке, ваша проблема не |int или |string - хотя я согласен, что сообщение об ошибке вводит в заблуждение:

"message": "Служба \" usdt-кошелек \ "недопустима: spec.ports [0] .targetPort: Неверное значение: \" 70001 \ ": должно содержать хотя бы одну букву или цифру (az, 0- 9)»,

но это вызвано попыткой использовать 70001 в качестве целевого порта, но TCP-порты должны быть в диапазоне от 1 до 65535 включительно, как указано подробное руководство

...