Files
inecs f8d3cbdd59 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.
2026-07-18 04:42:11 +03:00

124 lines
3.7 KiB
YAML

---
# 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]