#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 подхода, на мой взгляд. (Также может быть любой другой лучший подход)
- Найдите любой модуль ansible, который поможет мне запускать команды внутри сервера vcenter, и я запущу certificate-manager вместе с модулем expect (ожидать) и выполните шаги, которые я выполнил вручную при запуске certificate manager
- Мне нужно написать / использовать модуль 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