public function provisionNode(ParameterBag $parameters)
{
$options = [];
$label = $parameters->get('label');
$stackScriptId = $parameters->get('stackscriptid');
$distributionId = $parameters->get('distributionid');
$diskSize = $parameters->get('disksize');
$swapSize = $parameters->get('swapsize');
$rootPassword = $parameters->get('rootpassword');
$stackScriptUDFResponses = $parameters->get('StackScriptUDFResponses');
// ==================
$command = new LinodeCommand('create');
$options['planid'] = $parameters->get('size')->getId();
$options['datacenterid'] = $parameters->get('location')->getId();
$parameters->get('paymentterm') ? $options['paymentterm'] = $parameters->get('paymentterm') : null;
$command->setOptions($options);
$response = $this->linode->execute($command);
$nodeId = $response['LinodeID'];
// ================
$command = new LinodeDiskCommand('createfromstackscript');
$options['linodeid'] = $nodeId;
$options['StackScriptID'] = $stackScriptId;
$options['DistributionID'] = $distributionId;
$options['Label'] = "OS " . $label;
$options['Size'] = $diskSize;
$options['RootPass'] = $rootPassword;
$options['StackScriptUDFResponses'] = $stackScriptUDFResponses;
$command->setOptions($options);
$response = $this->linode->execute($command);
$osDiskId = $response['DiskID'];
// ==========
$command = new LinodeDiskCommand('create');
$options['linodeid'] = $nodeId;
$options['Label'] = "SWAP " . $label;
$options['Size'] = $swapSize;
$options['Type'] = 'swap';
$command->setOptions($options);
$response = $this->linode->execute($command);
//print_r($response);
$swapDiskId = $response['DiskID'];
// ==========
$command = new LinodeConfigCommand('create');
$options['linodeid'] = $nodeId;
$options['KernelID'] = 138;
$options['Label'] = "Config " . $label;
$options['DiskList'] = $osDiskId . ',' . $swapDiskId;
$command->setOptions($options);
$response = $this->linode->execute($command);
$configId = $response['ConfigID'];
// ==========
$command = new LinodeIpCommand('addprivate');
$options['linodeid'] = $nodeId;
$command->setOptions($options);
$response = $this->linode->execute($command);
$privateIpId = $response['IPADDRESSID'];
$privateIpAddress = $response['IPADDRESS'];
$command = new LinodeCommand('update');
$options['linodeid'] = $nodeId;
$options['Label'] = str_replace(' ', '_', $label);
$command->setOptions($options);
$response = $this->linode->execute($command);
}