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;
}