Initial commit: VMware vSphere API simulator scaffold.
Add the FastAPI app, PostgreSQL migrations, Docker/Helm packaging, API contracts, docs, client examples, and the unit/integration/compatibility test suite for local client and tooling labs without a real vCenter.
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
---
|
||||
# vSphere Automation REST cookbook against the API simulator.
|
||||
# ansible-playbook -i inventory.ini vsphere_playbook.yml
|
||||
#
|
||||
# Requires: gateway https://localhost (or set vsphere_base).
|
||||
|
||||
- name: vSphere API simulator lifecycle
|
||||
hosts: simulator
|
||||
gather_facts: false
|
||||
vars:
|
||||
vsphere_base: "https://localhost"
|
||||
vsphere_user: "administrator@vsphere.local"
|
||||
vsphere_password: "VMware1!"
|
||||
vm_name: "ansible-lab-01"
|
||||
tasks:
|
||||
- name: Create CIS session
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/session"
|
||||
method: POST
|
||||
url_username: "{{ vsphere_user }}"
|
||||
url_password: "{{ vsphere_password }}"
|
||||
force_basic_auth: true
|
||||
validate_certs: false
|
||||
status_code: [200, 201]
|
||||
return_content: true
|
||||
register: session
|
||||
|
||||
- name: Set session header
|
||||
ansible.builtin.set_fact:
|
||||
vsphere_headers:
|
||||
vmware-api-session-id: "{{ session.json }}"
|
||||
|
||||
- name: List VMs
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/vcenter/vm"
|
||||
headers: "{{ vsphere_headers }}"
|
||||
validate_certs: false
|
||||
return_content: true
|
||||
register: vms
|
||||
|
||||
- name: Show inventory size
|
||||
ansible.builtin.debug:
|
||||
msg: "VMs in inventory: {{ vms.json | length }}"
|
||||
|
||||
- name: Create VM
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/vcenter/vm"
|
||||
method: POST
|
||||
headers: "{{ vsphere_headers }}"
|
||||
body_format: json
|
||||
body:
|
||||
name: "{{ vm_name }}"
|
||||
guest_OS: OTHER_GUEST_64
|
||||
placement:
|
||||
folder: group-v23
|
||||
host: host-11
|
||||
datastore: datastore-31
|
||||
resource_pool: resgroup-22
|
||||
cpu:
|
||||
count: 1
|
||||
memory:
|
||||
size_MiB: 512
|
||||
validate_certs: false
|
||||
status_code: [200, 201]
|
||||
return_content: true
|
||||
register: created
|
||||
|
||||
- name: Power on
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/vcenter/vm/{{ created.json }}/power?action=start"
|
||||
method: POST
|
||||
headers: "{{ vsphere_headers }}"
|
||||
validate_certs: false
|
||||
status_code: [200, 204]
|
||||
return_content: true
|
||||
register: power_on
|
||||
|
||||
- name: Poll CIS task when returned
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/cis/tasks/{{ power_on.json.task }}"
|
||||
headers: "{{ vsphere_headers }}"
|
||||
validate_certs: false
|
||||
return_content: true
|
||||
register: task
|
||||
when: power_on.json is mapping and power_on.json.task is defined
|
||||
until: task.json.status in ['SUCCEEDED', 'FAILED']
|
||||
retries: 30
|
||||
delay: 1
|
||||
|
||||
- name: Write guest file (lab virtual FS)
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/vcenter/vm/{{ created.json }}/guest/filesystem?path=/tmp/ansible-marker"
|
||||
method: PUT
|
||||
headers: "{{ vsphere_headers }}"
|
||||
body_format: json
|
||||
body:
|
||||
content: "ansible-ok"
|
||||
validate_certs: false
|
||||
status_code: [200, 204]
|
||||
|
||||
- name: Power off
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/vcenter/vm/{{ created.json }}/power?action=stop"
|
||||
method: POST
|
||||
headers: "{{ vsphere_headers }}"
|
||||
validate_certs: false
|
||||
status_code: [200, 204]
|
||||
|
||||
- name: Delete VM
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/vcenter/vm/{{ created.json }}"
|
||||
method: DELETE
|
||||
headers: "{{ vsphere_headers }}"
|
||||
validate_certs: false
|
||||
status_code: [200, 204]
|
||||
|
||||
- name: Delete session
|
||||
ansible.builtin.uri:
|
||||
url: "{{ vsphere_base }}/api/session"
|
||||
method: DELETE
|
||||
headers: "{{ vsphere_headers }}"
|
||||
validate_certs: false
|
||||
status_code: [200, 204]
|
||||
Reference in New Issue
Block a user