Kubernetes Ansible Операторы - исправление существующего ресурса Kubernetes - PullRequest
1 голос
/ 28 февраля 2020

С ansible: возможно ли исправить ресурсы с помощью json или фрагментов yaml? Я в основном хочу иметь возможность выполнить sh то же самое, что и kubectl patch <Resource> <Name> --type='merge' -p='{"spec":{ "test":"hello }}', добавить / изменить спецификации ресурса.

https://docs.ansible.com/ansible/latest/modules/k8s_module.html Возможно ли это сделать с помощью k8s ansible модуль? Это говорит о том, что если ресурс уже существует и «status: present» установлен, он будет его исправлять, однако, насколько я могу судить, это не исправление

Спасибо

1 Ответ

1 голос
/ 28 февраля 2020

Да, вы можете предоставить только патч, и если ресурс уже существует, он должен отправить стратегию c -merge-patch (или просто merge-patch, если это пользовательский ресурс). Вот пример playbook, который создает и изменяет карту конфигурации:

---                                                                                                                                                                                                                                           
- hosts: localhost                                                                                                                                                                                                                            
  connection: local                                                                                                                                                                                                                           
  gather_facts: no                                                                                                                                                                                                                            

  vars:                                                                                                                                                                                                                                       
    cm: "{{ lookup('k8s',                                                                                                                                                                                                                     
      api_version='v1',                                                                                                                                                                                                                       
      kind='ConfigMap',                                                                                                                                                                                                                       
      namespace='default',                                                                                                                                                                                                                    
      resource_name='test') }}" 

  tasks:                                                                                                                                                                                                                                      
    - name: Create the ConfigMap                                                                                                                                                                                                              
      k8s:                                                                                                                                                                                                                                    
        definition:                                                                                                                                                                                                                           
          apiVersion: v1                                                                                                                                                                                                                      
          kind: ConfigMap                                                                                                                                                                                                                     
          metadata:
            name: test
            namespace: default
          data:
            hello: world

    - name: We will see the ConfigMap defined above
      debug:
        var: cm

    - name: Add a field to the ConfigMap (this will be a PATCH request)
      k8s:
        definition:
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: test
            namespace: default
          data:
            added: field

    - name: The same ConfigMap as before, but with an extra field in data
      debug:
        var: cm

    - name: Change a field in the ConfigMap (this will be a PATCH request)
      k8s:
        definition:
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: test
            namespace: default
          data:
            hello: everyone

    - name: The added field is unchanged, but the hello field has a new value
      debug:
        var: cm

    - name: Delete the added field in the ConfigMap (this will be a PATCH request)
      k8s:
        definition:
          apiVersion: v1
          kind: ConfigMap
          metadata:
            name: test
            namespace: default
          data:
            added: null

    - name: The hello field is unchanged, but the added field is now gone
      debug:
        var: cm
...