Модуль Ansible для выполнения команд внутри сервера vcenter или запуска менеджера сертификатов

#ansible #ssl-certificate #vmware #ca #vcenter

#ansible #ssl-сертификат #vmware #ca #vcenter

Вопрос:

Я хочу автоматизировать процесс «Замены сертификата» с помощью диспетчера сертификатов vcenter через ansible playbook для vcenter. У меня есть все 3 необходимых сертификата (я сгенерировал их из центра сертификации третьей части), которые нам нужно передать внутри certificate-manager, и вручную он работает, как ожидалось. Я написал ansible-playbook, который сгенерирует все эти сертификаты, и, скопировав эти сертификаты в vcenter и применив их в диспетчере сертификатов вручную, он работает так, как ожидалось.

Я хочу автоматизировать вышеупомянутый процесс, используя модуль ansible извне. У меня есть все необходимые данные vcenter (IP-адрес, учетные данные и т.д.), И я хочу запустить их со своего локального компьютера Linux, который будет запускаться и выполнять ту же работу, что и менеджер сертификатов.

Для этого у меня есть 2 подхода, на мой взгляд. (Также может быть любой другой лучший подход)

  1. Найдите любой модуль ansible, который поможет мне запускать команды внутри сервера vcenter, и я запущу certificate-manager вместе с модулем expect (ожидать) и выполните шаги, которые я выполнил вручную при запуске certificate manager
  2. Мне нужно написать / использовать модуль ansible, который будет выполнять всю ту же работу за меня, а не выполнять все команды одну за другой.

Комментарии:

1. Подход 1. будет работать так, как ожидалось.

2. @Nick Спасибо за предложения. Можете ли вы предоставить команду для того же?

3. Это оставлено в качестве упражнения для читателя 🙂

Ответ №1:

Наконец, я сделал это, используя REST API VMARE, не запуская команды внутри VCENTER

    - name: Get authentication cookie
  uri:
    url: "https://{{ vcenter_hostname }}/rest/com/vmware/cis/session"
    method: POST
    user: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    validate_certs: no
    force_basic_auth: yes
    status_code: 200,404
    timeout: 10
  delegate_to: localhost
  register: session_cookie

- name: Upload Trusted CA
  uri:
    url: "https://{{ vcenter_hostname }}/rest/vcenter/certificate-management/vcenter/trusted-root-chains/"
    method: POST
    validate_certs: no
    return_content: yes
    status_code: 200
    timeout: 10
    headers:
      vmware-api-session-id: "{{ session_cookie.cookies['vmware-api-session-id'] }}"
      Content-Type: application/json
    body_format: json
    body: {"spec":{"cert_chain":{"cert_chain":["{{ lookup('file', '/usr/local/share/ca-certificates/root-ca.crt')| trim }}"]}}}
  delegate_to: localhost
  register: upload_trusted_ca_output
  ignore_errors: true

- name: Upload VCENTER's KEY and CRT
  uri:
    url: "https://{{ vcenter_hostname }}/rest/vcenter/certificate-management/vcenter/tls"
    method: PUT
    validate_certs: no
    return_content: yes
    status_code: 200
    timeout: 10
    headers:
      vmware-api-session-id: "{{ session_cookie.cookies['vmware-api-session-id'] }}"
      Content-Type: application/json
    body_format: json
    body: {"spec":{"cert":"{{ lookup('file', '/tmp/{{ hostvars[inventory_hostname].vars.vcenter_hostname }}.crt')| trim }}","key":"{{ lookup('file', '/tmp/{{ hostvars[inventory_hostname].vars.vcenter_hostname }}-noRSA.key')| trim }}"}}
  delegate_to: localhost
  

Затем вам нужно подождать около 10 минут, чтобы убедиться, что сертификаты применены, и, наконец, перезагрузить VCENTER

Конечные точки API REST могут быть проверены и протестированы в вашем VCENTER

https://VCENTER_IP/ui/#?extensionId=com.vmware.vsphere.client.h5.devcenter.apiexplorer amp;forceNavigate