// static/js/graph/wizard/step2_render.js import { renderAnsible } from './api.js'; import { getTargetHostData } from './step0_target.js'; export function mountStep2Render() { const btn = document.getElementById('btn-create-yaml'); const badge = document.getElementById('yaml-badge'); if (!btn) return; btn.onclick = null; // Remove any previous handler btn.addEventListener('click', async () => { const origText = btn.textContent; btn.disabled = true; btn.textContent = 'Creating…'; badge.className = 'badge bg-secondary'; badge.textContent = 'Running'; try { const val = (id) => (document.getElementById(id)?.value || '').trim(); // Target IP priority: localStorage → helper → DOM const lsIp = localStorage.getItem('targetHostIp') || ''; const target = (typeof getTargetHostData === 'function' ? getTargetHostData() : {}) || {}; const domIp = (document.querySelector('#target-host-row input')?.value || '').trim(); const ansibleHostIp = (lsIp || target.ip || domIp || '').trim(); // Get eth0 info from Stage 1 UI fields const eth0Cidr = val('ip-core-mgmt'); const eth0Gw = val('ip-core-mgmt-gw'); const payload = { hostname: val('network-name-input') || 'AIO-1', network_name: val('network-name-input'), plmn: val('plmn-input') || '315-010', dns: (val('dns-input') || '8.8.8.8').split(',').map(s => s.trim()).filter(Boolean), ntp: (val('ntp-input') || '0.pool.ntp.org, 1.pool.ntp.org').split(',').map(s => s.trim()).filter(Boolean), ran: { cidr: val('ip-core-ran'), gw: val('ip-core-ran-gw') }, mgmt: { cidr: eth0Cidr, gw: eth0Gw }, dn: { cidr: val('ip-core-dn'), gw: val('ip-core-dn-gw'), vlan: val('ip-core-dn-vlan') ? Number(val('ip-core-dn-vlan')) : undefined, ue_pool: val('ip-core-dn-uepool'), dnn: 'internet' }, inventory_host: 'GBP08-AIO-1', esxi_host: 'ESXI-1', version: '25.1', ova_file: '/home/mjensen/OVA/HPE_ANW_P5G_Core-1.25.1.1-qemux86-64.ova', ansible_host_ip: ansibleHostIp }; const res = await renderAnsible(payload); badge.className = 'badge bg-success'; badge.textContent = 'Created'; btn.textContent = origText; btn.disabled = false; // Show YAML context in the UI for debug let debugDiv = document.getElementById('yaml-debug-info'); if (!debugDiv) { debugDiv = document.createElement('div'); debugDiv.id = 'yaml-debug-info'; debugDiv.className = 'mt-3 alert alert-info'; btn.parentNode.appendChild(debugDiv); } debugDiv.innerHTML = `YAML files created in: ${res.staging}
Payload used:
${JSON.stringify(payload, null, 2)}
`; } catch (err) { badge.className = 'badge bg-danger'; badge.textContent = 'Failed'; btn.textContent = origText; btn.disabled = false; alert(`Failed to create YAML files:\n${err.message || err}`); } }); }