Ansible模块,用于在vCenter Server或“运行证书管理器”中运行命令

时间:2019-03-29 06:34:28

标签: ansible ssl-certificate vmware ca vcenter

我想通过适用于vcenter的ansible剧本使用vcenter的证书管理器来自动执行“替换证书”的过程。我拥有所有3个必需的证书(我是从第三方CA生成的),我们需要将其传递给证书管理器,并手动按预期工作。 我写了一个ansible-playbook,它将生成所有这些证书,并通过将这些证书复制到vcenter中并手动将其应用于证书管理器中,可以正常工作。

我想从外部使用ansible模块来自动化上述过程。我拥有vcenter的所有必需数据(IP地址,凭据等),并希望从我的本地linux计算机上运行它,该计算机将运行并执行与证书管理器相同的工作。

为此,我想到了两种方法。 (可能还有其他更好的方法)

  1. 找到任何可帮助我在vcenter服务器中运行命令的ansible模块,然后我将运行证书管理器以及Expect(pexpect)模块,并按照我在运行证书管理器时手动遵循的步骤进行操作
  2. 我需要编写/使用ansible模块,它将为我完成完全相同的工作,而不是一个一个地执行所有命令。

我希望有人在这方面帮助我。

希望你有问题。

谢谢。

1 个答案:

答案 0 :(得分:0)

最后我使用 VMARE 的 API REST 来完成它,而不是在 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

可以在您的 VCENTER 中检查和测试 API REST 端点

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