public function VclHandler::uploadEdgeModule in Fastly 8.3
Uploads Edge module to fastly.
Parameters
$name: Name of the module.
$values: Values array for vcl template.
Return value
bool Successfull or not.
Throws
File
- src/
VclHandler.php, line 1264
Class
- VclHandler
- Class to control the VCL handling.
Namespace
Drupal\fastlyCode
public function uploadEdgeModule($name, $values) {
$this
->cloneLastActiveVersion();
switch ($name) {
case 'blackfire_integration':
case 'cors_headers':
case 'countryblock':
case 'datadome_integration':
case 'force_cache_miss_on_hard_reload_for_admins':
case 'increase_timeouts_long_jobs':
case 'mobile_device_detection':
case 'netacea_integration':
case 'disable_cache':
case 'other_cms_integration':
case 'redirect_hosts':
case 'url_rewrites':
// Load module config.
$moduleConfig = FastlyEdgeModulesHelper::getModules();
$moduleConfig = $moduleConfig[$name];
// Go through each vcl config upload it to fastly.
foreach ($moduleConfig['vcl'] as $vcl) {
if (isset($vcl['priority'])) {
$data['priority'] = $vcl['priority'];
}
$data['name'] = FastlyEdgeModulesHelper::FASTLY_EDGE_MODULE_PREFIX . $name . '_' . $vcl['type'];
// load vcl template and render it
$path = drupal_get_path('module', 'fastly') . '/fastly_edge_modules/templates/';
$loader = new \Twig\Loader\ArrayLoader([
'template' => file_get_contents($path . $vcl['template'] . '.html.twig', TRUE),
]);
$twig = new \Twig\Environment($loader);
$data['content'] = $twig
->render('template', $values);
// Skip if template is empty.
if (empty($data['content'])) {
continue;
}
$data['type'] = $vcl['type'];
$requests = $this
->prepareSingleVcl($data, FastlyEdgeModulesHelper::FASTLY_EDGE_MODULE_PREFIX);
foreach ($requests as $request) {
$request['headers'] = is_null($request['headers']) ? [] : $request['headers'];
$response = $this
->vclRequestWrapper($request['url'], $request['headers'], $request['data'], $request['type']);
if ($response
->getStatusCode() != "200") {
return FALSE;
}
}
}
break;
}
// Activation of version.
$request = $this
->prepareActivateVersion();
$response = $this
->vclRequestWrapper($request['url'], $request['headers'], [], $request['type']);
if ($response
->getStatusCode() != "200") {
$this->messenger
->addError($response
->getBody());
return FALSE;
}
return TRUE;
}