我正在使用Ansible和k8s
模块将应用程序部署到OpenShift集群。总的来说这很有效。
但是,当我尝试在部署配置中设置端口值时,使用变量中的值,事情就不那么开心了。
我有以下ansible任务作为例子:
- 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}
根据发布的错误消息,您的问题不是|int
或|string
- 虽然我同意错误消息是误导性的:
“message”:“Service \”usdt-wallet \“无效:spec.ports [0] .targetPort:无效值:\”70001 \“:必须包含至少一个字母或数字(az,0-9)” ,
但它是由尝试使用70001作为目标端口引起的,但TCP端口必须在1到65535之间,包括the fine manual所述