public setValues ( array | ArrayObject $variables, integer $roleId, integer $farmId, integer $farmRoleId, string $serverId = '', boolean $throwException = true, boolean $skipValidation = false ) : array | boolean | ||
$variables | array | ArrayObject | |
$roleId | integer | optional |
$farmId | integer | optional |
$farmRoleId | integer | optional |
$serverId | string | optional |
$throwException | boolean | optional |
$skipValidation | boolean | optional |
return | array | boolean |
public function setValues($variables, $roleId = 0, $farmId = 0, $farmRoleId = 0, $serverId = '', $throwException = true, $skipValidation = false)
{
if (!$skipValidation) {
$validResult = $this->validateValues($variables, $roleId, $farmId, $farmRoleId, $serverId);
if ($validResult !== true) {
if ($throwException) {
throw new ValidationErrorException($this->getErrorMessage());
} else {
return $validResult;
}
}
}
$currentValues = $this->_getValues($roleId, $farmId, $farmRoleId, $serverId);
foreach ($variables as $variable) {
$deleteFlag = !empty($variable['flagDelete']) && $variable['flagDelete'] == 1 ? true : false;
$updateValue = true;
$name = $variable['name'];
if (empty($name)) {
continue;
}
if (empty($variable['current']) && !empty($variable['default'])) {
if (!empty($currentValues[$name]['current'])) {
$deleteFlag = true;
} else {
if (!$deleteFlag) {
continue;
}
}
$variable = $variable['default'];
} else {
if (!empty($variable['current'])) {
$variable = $variable['current'];
}
}
if (array_key_exists($name, $this->configurationVars) && empty($currentValues[$name]['default'])) {
$variable = array_merge($variable, $this->configurationVarsDefaults, $this->configurationVars[$name]);
}
$variable['value'] = isset($variable['value']) ? trim($variable['value']) : '';
if ($variable['value'] != '') {
$variable['value'] = $this->crypto->encrypt($variable['value']);
} else {
if (isset($currentValues[$name]['default'])) {
$deleteFlag = true;
}
}
if ($deleteFlag) {
$sql = array("`name` = ?");
$params = array($name);
} else {
$sql = $sqlUpdate = ["`flag_final` = ?", "`flag_required` = ?", "`flag_hidden` = ?", "`validator` = ?", "`format` = ?", "`description` = ?", "`category` = ?"];
$sql[] = "`name` = ?";
$params = array(!empty($variable['flagFinal']) && $variable['flagFinal'] == 1 ? 1 : 0, !empty($variable['flagRequired']) ? $variable['flagRequired'] : 'off', !empty($variable['flagHidden']) && $variable['flagHidden'] == 1 ? 1 : 0, !empty($variable['validator']) ? $variable['validator'] : '', !empty($variable['format']) ? $variable['format'] : '', !empty($variable['description']) ? $variable['description'] : '', !empty($variable['category']) ? strtolower($variable['category']) : '', $name);
$sqlUpdateParams = $params;
array_pop($sqlUpdateParams);
if ($updateValue) {
$sql[] = "`value` = ?";
$params[] = $variable["value"];
$sqlUpdate[] = "`value` = ?";
$sqlUpdateParams[] = $variable["value"];
}
}
switch ($this->scope) {
case ScopeInterface::SCOPE_SCALR:
$table = "variables";
break;
case ScopeInterface::SCOPE_ACCOUNT:
$table = "account_variables";
$sql[] = "account_id = ?";
$params[] = $this->accountId;
break;
case ScopeInterface::SCOPE_ENVIRONMENT:
$table = "client_environment_variables";
$sql[] = "env_id = ?";
$params[] = $this->envId;
break;
case ScopeInterface::SCOPE_ROLE:
$table = "role_variables";
$sql[] = "role_id = ?";
$params[] = $roleId;
break;
case ScopeInterface::SCOPE_FARM:
$table = "farm_variables";
$sql[] = "farm_id = ?";
$params[] = $farmId;
break;
case ScopeInterface::SCOPE_FARMROLE:
$table = "farm_role_variables";
$sql[] = "farm_role_id = ?";
$params[] = $farmRoleId;
break;
case ScopeInterface::SCOPE_SERVER:
$table = "server_variables";
$sql[] = "server_id = ?";
$params[] = $serverId;
break;
}
if ($deleteFlag) {
$this->db->Execute("DELETE FROM `{$table}` WHERE " . implode(" AND ", $sql), $params);
} else {
$this->db->Execute("INSERT INTO `{$table}` SET " . implode(",", $sql) . " ON DUPLICATE KEY UPDATE " . implode(",", $sqlUpdate), array_merge($params, $sqlUpdateParams));
}
}
return true;
}
public function applyDefinition($definition, $reset = false) { $resetSettings = array(Entity\FarmRoleSetting::BALANCING_USE_ELB, Entity\FarmRoleSetting::BALANCING_HOSTNAME, Entity\FarmRoleSetting::BALANCING_NAME, Entity\FarmRoleSetting::BALANCING_HC_TIMEOUT, Entity\FarmRoleSetting::BALANCING_HC_TARGET, Entity\FarmRoleSetting::BALANCING_HC_INTERVAL, Entity\FarmRoleSetting::BALANCING_HC_UTH, Entity\FarmRoleSetting::BALANCING_HC_HTH, Entity\FarmRoleSetting::BALANCING_HC_HASH, Entity\FarmRoleSetting::BALANCING_AZ_HASH, Entity\FarmRoleSetting::CLOUDSTACK_STATIC_NAT_MAP, Entity\FarmRoleSetting::AWS_ELASIC_IPS_MAP, Entity\FarmRoleSetting::AWS_S3_BUCKET, Entity\FarmRoleSetting::MYSQL_PMA_USER, Entity\FarmRoleSetting::MYSQL_PMA_PASS, Entity\FarmRoleSetting::MYSQL_PMA_REQUEST_ERROR, Entity\FarmRoleSetting::MYSQL_PMA_REQUEST_TIME, Entity\FarmRoleSetting::MYSQL_LAST_BCP_TS, Entity\FarmRoleSetting::MYSQL_LAST_BUNDLE_TS, Entity\FarmRoleSetting::MYSQL_IS_BCP_RUNNING, Entity\FarmRoleSetting::MYSQL_IS_BUNDLE_RUNNING, Entity\FarmRoleSetting::MYSQL_BCP_SERVER_ID, Entity\FarmRoleSetting::MYSQL_BUNDLE_SERVER_ID, Entity\FarmRoleSetting::MYSQL_SLAVE_TO_MASTER, Entity\FarmRoleSetting::MYSQL_ROOT_PASSWORD, Entity\FarmRoleSetting::MYSQL_REPL_PASSWORD, Entity\FarmRoleSetting::MYSQL_STAT_PASSWORD, Entity\FarmRoleSetting::MYSQL_LOG_FILE, Entity\FarmRoleSetting::MYSQL_LOG_POS, Entity\FarmRoleSetting::MYSQL_SCALR_SNAPSHOT_ID, Entity\FarmRoleSetting::MYSQL_SCALR_VOLUME_ID, Entity\FarmRoleSetting::MYSQL_SNAPSHOT_ID, Entity\FarmRoleSetting::MYSQL_MASTER_EBS_VOLUME_ID, Entity\FarmRoleSetting::AWS_ELB_ID, Entity\FarmRoleSetting::AWS_ELB_ENABLED, Scalr_Db_Msr::DATA_BACKUP_IS_RUNNING, Scalr_Db_Msr::DATA_BACKUP_LAST_TS, Scalr_Db_Msr::DATA_BACKUP_SERVER_ID, Scalr_Db_Msr::DATA_BUNDLE_IS_RUNNING, Scalr_Db_Msr::DATA_BUNDLE_LAST_TS, Scalr_Db_Msr::DATA_BUNDLE_SERVER_ID, Scalr_Db_Msr::SLAVE_TO_MASTER, Scalr_Db_Msr::SNAPSHOT_ID, Scalr_Db_Msr::VOLUME_ID, Scalr_Role_Behavior_RabbitMQ::ROLE_COOKIE_NAME, Scalr_Role_Behavior_RabbitMQ::ROLE_PASSWORD, Scalr_Role_Behavior_RabbitMQ::ROLE_CP_SERVER_ID, Scalr_Role_Behavior_RabbitMQ::ROLE_CP_REQUESTED, Scalr_Role_Behavior_RabbitMQ::ROLE_CP_REQUEST_TIME, Scalr_Role_Behavior_RabbitMQ::ROLE_CP_ERROR_MSG, Scalr_Role_Behavior_RabbitMQ::ROLE_CP_URL, Scalr_Role_Behavior_MongoDB::ROLE_PASSWORD, Scalr_Role_Behavior_MongoDB::ROLE_KEYFILE, Scalr_Role_Behavior_MongoDB::ROLE_CLUSTER_STATUS, Scalr_Role_Behavior_MongoDB::ROLE_CLUSTER_IS_REMOVING_SHARD_INDEX, Scalr_Role_Behavior_MongoDB::DATA_BUNDLE_IS_RUNNING, Scalr_Role_Behavior_MongoDB::DATA_BUNDLE_SERVER_ID, Scalr_Role_Behavior_MongoDB::DATA_BUNDLE_LAST_TS, Scalr_Role_Behavior_Router::ROLE_VPC_NID, Scalr_Role_Behavior_Router::ROLE_VPC_IP, Scalr_Role_Behavior_Router::ROLE_VPC_AID, Scalr_Role_Behavior_Router::ROLE_VPC_ROUTER_CONFIGURED); // Set settings foreach ($definition->settings as $key => $value) { if ($reset && in_array($key, $resetSettings)) { continue; } $this->SetSetting($key, $value, Entity\FarmRoleSetting::TYPE_CFG); } //Farm Global Variables $variables = new Scalr_Scripting_GlobalVariables($this->GetFarmObject()->ClientID, $this->GetFarmObject()->EnvID, ScopeInterface::SCOPE_FARMROLE); $variables->setValues($definition->globalVariables, $this->RoleID, $this->FarmID, $this->ID); //Storage $this->getStorage()->setConfigs($definition->storage); // Scripts $scripts = array(); foreach ($definition->scripts as $script) { $scripts[] = array('params' => $script->params, 'target' => $script->target, 'order_index' => $script->orderIndex, 'version' => (int) $script->version, 'isSync' => (int) $script->isSync, 'timeout' => $script->timeout, 'event' => $script->event, 'script_id' => (int) $script->scriptId, 'script_path' => $script->scriptPath, 'script_type' => $script->scriptType, 'run_as' => $script->runAs, 'target_roles' => $script->targetRoles, 'target_farmroles' => $script->targetFarmroles, 'target_behaviors' => $script->targetBehaviors); } $this->SetScripts($scripts); // Scaling times $this->DB->Execute("DELETE FROM farm_role_scaling_times WHERE farm_roleid=?", array($this->ID)); foreach ($definition->scalingTimes as $scalingPeriod) { $this->DB->Execute("INSERT INTO farm_role_scaling_times SET\n farm_roleid = ?,\n start_time = ?,\n end_time = ?,\n days_of_week = ?,\n instances_count = ?\n ", array($this->ID, $scalingPeriod->startTime, $scalingPeriod->endTime, $scalingPeriod->daysOfWeek, $scalingPeriod->instanceCount)); } // metrics $scalingManager = new Scalr_Scaling_Manager($this); $metrics = array(); foreach ($definition->scalingMetrics as $metric) { $metrics[$metric->metricId] = $metric->settings; } $scalingManager->setFarmRoleMetrics($metrics); return true; }