Skip to content

Instantly share code, notes, and snippets.

@NoelDavies
Last active January 27, 2023 16:27
Show Gist options
  • Save NoelDavies/08fc43bfef4ad81bdfe6f16f472305d9 to your computer and use it in GitHub Desktop.
Save NoelDavies/08fc43bfef4ad81bdfe6f16f472305d9 to your computer and use it in GitHub Desktop.
Generated by XState Viz: https://xstate.js.org/viz
const states = {
IDLE: 'IDLE',
GENERATING_MANIFEST: 'GENERATING_MANIFEST',
ISSUEING_MANIFEST: 'ISSUEING_MANIFEST',
MANIFEST_ISSUED: 'MANIFEST_ISSUED',
FAILED_DURING_SETUP: 'FAILED_DURING_SETUP',
POWERING_ON_DEVICE: 'POWERING_ON_DEVICE',
IPXE_BOOT_IN_PROGRESS: 'IPXE_BOOT_IN_PROGRESS',
BOOTSTRAPPING: 'BOOTSTRAPPING',
OS_FETCHING: 'OS_FETCHING',
OS_INSTALLED: 'OS_INSTALLED',
RUNNING_WORKFLOWS: 'RUNNING_WORKFLOWS',
POWERED_ON: 'POWERED_ON',
POWERED_OFF: 'POWERED_OFF',
}
const provisionBareMetalMachine = Machine({
id: 'provisionBME',
initial: states.IDLE,
context: {
retries: 0
},
states: {
[states.IDLE]: {
on: {
provision_start: {
target: states.GENERATING_MANIFEST,
actions: ['generateManifest']
},
}
},
[states.GENERATING_MANIFEST]: {
on: {
fail: {
target: states.FAILED_DURING_SETUP,
actions: ['logError']
},
success: {
target: states.ISSUEING_MANIFEST,
actions: ['issueManifest']
},
}
},
[states.ISSUEING_MANIFEST]: {
on: {
deviceManifestIssued: {
target: states.MANIFEST_ISSUED,
actions: ['issueManifest']
}
}
},
[states.MANIFEST_ISSUED]: {
on: {
deviceManifestIssued: {
target: states.POWERING_ON_DEVICE,
actions: ['powerOnDevice']
}
}
},
[states.POWERING_ON_DEVICE]: {
on: {
poweredOn: {
target: states.BOOTSTRAPPING,
// actions: ['powerOnDevice']
}
}
},
[states.BOOTSTRAPPING]: {
boostrapCompleted: {
target: states.RUNNING_WORKFLOWS,
// actions: ['powerOnDevice']
}
},
[states.RUNNING_WORKFLOWS]: {
workflowsCompleted: {
target: states.POVISIONING_COMPLETED,
// actions: ['powerOnDevice']
}
},
[states.POVISIONING_COMPLETED]: {
},
[states.POWERED_ON]: {
},
[states.POWERED_OFF]: {
},
[states.FAILED_DURING_SETUP]: {
},
},
actions: {
generateManifest: ( cxt, evt ) => {},
logError: ( cxt, evt ) => {},
issueManifest: ( cxt, evt ) => {},
powerOnDevice: ( cxt, evt ) => {
// cxt.transition()
send({ type: 'poweredOn' })
},
}
} )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment