【问题标题】:How can I pass variable inside k8s module to another yml as parameter如何将 k8s 模块中的变量作为参数传递给另一个 yml
【发布时间】:2019-07-18 08:08:27
【问题描述】:

我想将变量从 ansible k8s 模块传递给另一个 yml

- name: Create a Secret
  hosts: 127.0.0.1
  connection: local
  become: yes
  tasks:
    - name: Create minio-pvc
      k8s:
        state: present
        kind: PersistentVolumeClaim
        namespace: "{{ item.namespace }}"
        src: /tasks/minio-pvc.yml
      with_items:
        - { namespace: demo1}
        - { namespace: demo2}
        - { namespace: test}

这是我要在里面发送参数的 yml 文件。所以我可以创造 动态 PersistentVolumeClaim。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    pv.kubernetes.io/bind-completed: "yes"
    pv.kubernetes.io/bound-by-controller: "yes"
  creationTimestamp: null
  labels:
    app: minio-storage-claim
  name: minio-pv-claim
  selfLink: /api/v1/namespaces/demo/persistentvolumeclaims/minio-pv-claim
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  volumeName: $param(which must be in here)

类似这样的东西;

        namespace: "{{ item.namespace }}"
        src: /tasks/minio-pvc.yml
        param: "{{ item.param }}"
      with_items:
        - { namespace: demo1 , param: pv1}
        - { namespace: demo2 , param: pv2}
        - { namespace: test , param: pv3}

【问题讨论】:

    标签: kubernetes parameters ansible yaml persistent-volumes


    【解决方案1】:

    你可以在下面使用。

    - name: Create a Secret
      hosts: 127.0.0.1
      connection: local
      become: yes
      tasks:
        - name: Create minio-pvc
          k8s:
            state: present
            kind: PersistentVolumeClaim
            namespace: "{{ item.namespace }}"
            definition: "{{ lookup('template', '/tasks/minio-pvc.yml') | regex_replace('\\$param', item.param) }}"
          with_items:
            - { namespace: demo1, param: pv1 }
            - { namespace: demo2, param: pv2 }
            - { namespace: test, param: pv3 }
    

    【讨论】:

    • 当我尝试时发生错误失败:[127.0.0.1] (item={'namespace': 'asd', 'param': 'pv0002'}) => {"ansible_loop_var": " item", "changed": false, "item": {"namespace": "asd", "param": "pv0002"}, "msg": "Error access apiVersion: v1 ... resources:\n requests: \n 存储:5Gi\n 卷名:pv0002。文件是否存在?"}
    • 它将 yaml 文件放入此 yaml 中。但我需要显示执行该 yaml 的源代码。
    • 将 src 更改为定义。更新了我的答案。
    • 它执行 "resource_definition": "apiVersion: v1\nkind: PersistentVolumeClaim\nmetadata:... accessModes:\n - ReadWriteOnce\n 资源:\n 请求:\n 存储: 5Gi\n volumeName : pv0004",
    • 感谢你我找到了。只是我更改了元数据:名称:也像您写的那样动态。现在可以了。
    猜你喜欢
    • 2015-09-28
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2023-03-24
    • 2013-10-23
    相关资源
    最近更新 更多