BundleTask::getOsDetails PHP Method

getOsDetails() public method

public getOsDetails ( )
    public function getOsDetails()
    {
        $retval = new stdClass();
        switch ($this->osFamily) {
            case "windows":
                $retval->family = "windows";
                if (strpos($this->osName, '2008Server') === 0) {
                    $generation = '2008';
                } elseif (strpos($this->osName, '2012Server') === 0) {
                    $generation = '2012';
                }
                $retval->generation = $generation;
                $retval->version = $this->osVersion;
                $retval->name = "Windows {$generation}";
                if (substr($this->osName, -2) == 'R2') {
                    $retval->name .= " R2";
                }
                break;
            case "ubuntu":
                $retval->family = $this->osFamily;
                $retval->generation = $this->osVersion;
                $retval->version = $this->osVersion;
                $retval->name = "Ubuntu {$retval->version} " . ucfirst($this->osName);
                break;
            case "centos":
                $retval->family = $this->osFamily;
                $retval->generation = (int) substr($this->osVersion, 0, 1);
                $retval->version = $this->osVersion;
                $retval->name = "CentOS {$retval->version} Final";
                break;
            case "amazon":
                $retval->family = $this->osFamily;
                $retval->generation = $this->osVersion;
                $retval->version = $this->osVersion;
                $retval->name = "Amazon Linux {$retval->version}";
                break;
            case "oel":
                $retval->family = $this->osFamily;
                $retval->generation = (int) substr($this->osVersion, 0, 1);
                $retval->version = $this->osVersion;
                $retval->name = "Oracle Enterprise Linux Server {$this->osVersion}";
                if ($retval->generation == 5) {
                    $retval->name .= " Tikanga";
                } elseif ($retval->generation == 6) {
                    $retval->name .= " Santiago";
                }
                break;
            case "redhat":
                $retval->family = $this->osFamily;
                $retval->generation = (int) substr($this->osVersion, 0, 1);
                $retval->version = $this->osVersion;
                $retval->name = "Redhat {$this->osVersion}";
                if ($retval->generation == 5) {
                    $retval->name .= " Tikanga";
                } elseif ($retval->generation == 6) {
                    $retval->name .= " Santiago";
                }
                break;
            case "scientific":
                $retval->family = $this->osFamily;
                $retval->generation = (int) substr($this->osVersion, 0, 1);
                $retval->version = $this->osVersion;
                $retval->name = "Scientific {$this->osVersion}";
                if ($retval->generation == 5) {
                    $retval->name .= " Boron";
                } elseif ($retval->generation == 6) {
                    $retval->name .= " Carbon";
                }
                break;
            case "debian":
                $retval->family = $this->osFamily;
                $retval->generation = (int) substr($this->osVersion, 0, 1);
                $retval->version = $this->osVersion;
                $retval->name = "Debian {$this->osVersion}";
                if ($retval->generation == 5) {
                    $retval->name .= " Lenny";
                } elseif ($retval->generation == 6) {
                    $retval->name .= " Squeeze";
                } elseif ($retval->generation == 7) {
                    $retval->name .= " Wheezy";
                }
                break;
            default:
                $retval->generation = '';
                $retval->version = '';
                $retval->name = $this->osName;
        }
        $osIds = Os::findIdsBy($retval->family, $retval->generation, $retval->version);
        if (count($osIds) > 0) {
            $retval->id = $osIds[0];
        } else {
            $osIds = Os::findIdsBy($retval->family, $retval->generation, NULL);
            if (count($osIds) > 0) {
                $retval->id = $osIds[0];
            } else {
                $retval->id = Os::UNKNOWN_OS;
            }
        }
        return $retval;
    }

Usage Example

コード例 #1
0
ファイル: class.DBRole.php プロジェクト: recipe/scalr
 public static function createFromBundleTask(BundleTask $BundleTask)
 {
     $db = \Scalr::getDb();
     $DBServer = DBServer::LoadByID($BundleTask->serverId);
     if ($BundleTask->prototypeRoleId) {
         $proto_role = $db->GetRow("SELECT * FROM roles WHERE id=? LIMIT 1", array($BundleTask->prototypeRoleId));
         if (!$proto_role['architecture']) {
             $proto_role['architecture'] = $DBServer->GetProperty(SERVER_PROPERTIES::ARCHITECTURE);
         }
     } else {
         $proto_role = array("behaviors" => $DBServer->GetProperty(SERVER_PROPERTIES::SZR_IMPORTING_BEHAVIOR), "architecture" => $DBServer->GetProperty(SERVER_PROPERTIES::ARCHITECTURE), "name" => "*import*");
     }
     if (!$proto_role['architecture']) {
         $proto_role['architecture'] = 'x86_64';
     }
     if (!$BundleTask->cloudLocation) {
         if ($DBServer) {
             $BundleTask->cloudLocation = $DBServer->GetCloudLocation();
         }
     }
     $osInfo = $BundleTask->getOsDetails();
     $meta = $BundleTask->getSnapshotDetails();
     if (!$osInfo->family || !$osInfo->generation) {
         $osInfo = new stdClass();
         if ($proto_role) {
             $osInfo->name = $proto_role['os'];
             $osInfo->family = $proto_role['os_family'];
             $osInfo->generation = $proto_role['os_generation'];
             $osInfo->version = $proto_role['os_version'];
         } elseif ($meta['os'] && $meta['os']->version) {
             if ($meta['os']->version == '2008Server') {
                 $osInfo->name = 'Windows 2008 Server';
                 $osInfo->family = 'windows';
                 $osInfo->generation = '2008';
                 $osInfo->version = '2008Server';
             } elseif ($meta['os']->version == '2008ServerR2') {
                 $osInfo->name = 'Windows 2008 Server R2';
                 $osInfo->family = 'windows';
                 $osInfo->generation = '2008';
                 $osInfo->version = '2008ServerR2';
             }
         }
     }
     if ($proto_role['cat_id']) {
         $catId = $proto_role['cat_id'];
     } else {
         $catId = ROLE_BEHAVIORS::GetCategoryId($proto_role['behaviors']);
     }
     $db->Execute("INSERT INTO roles SET\n            name\t\t\t= ?,\n            origin\t\t\t= ?,\n            dtadded         = NOW(),\n            client_id\t\t= ?,\n            env_id\t\t\t= ?,\n            cat_id          = ?,\n            description\t\t= ?,\n            behaviors\t\t= ?,\n            history\t\t\t= ?,\n            generation\t\t= ?,\n            added_by_email  = ?,\n            added_by_userid = ?,\n            os\t\t\t\t= ?,\n            os_family       = ?,\n            os_version      = ?,\n            os_generation   = ?\n        ", array($BundleTask->roleName, ROLE_TYPE::CUSTOM, $BundleTask->clientId, $BundleTask->envId, $catId, $BundleTask->description, $proto_role['behaviors'], trim("{$proto_role['history']},{$proto_role['name']}", ","), 2, $BundleTask->createdByEmail, $BundleTask->createdById, $osInfo->name, $osInfo->family, $osInfo->version, $osInfo->generation));
     $role_id = $db->Insert_Id();
     $BundleTask->roleId = $role_id;
     $BundleTask->Save();
     $BundleTask->Log(sprintf("Created new role. Role name: %s. Role ID: %s", $BundleTask->roleName, $BundleTask->roleId));
     $role = self::loadById($role_id);
     $behaviors = explode(",", $proto_role['behaviors']);
     foreach ($behaviors as $behavior) {
         $db->Execute("INSERT INTO role_behaviors SET\n                role_id\t\t\t= ?,\n                behavior\t\t= ?\n            ", array($role_id, $behavior));
     }
     // Set image
     $role->setImage($BundleTask->snapshotId, $BundleTask->platform, $BundleTask->platform != SERVER_PLATFORMS::GCE ? $BundleTask->cloudLocation : "", $meta['szr_version'], $proto_role['architecture']);
     // Set params
     if ($proto_role['id']) {
         $dbParams = $db->GetAll("SELECT name,type,isrequired,defval,allow_multiple_choice,options,hash,issystem\n                FROM role_parameters WHERE role_id = ?", array($proto_role['id']));
         $role->setParameters($dbParams);
         $dbSecRules = $db->GetAll("SELECT * FROM role_security_rules WHERE role_id = ?", array($proto_role['id']));
         foreach ($dbSecRules as $dbSecRule) {
             $db->Execute("INSERT INTO role_security_rules SET role_id = ?, rule = ?", array($role_id, $dbSecRule['rule']));
         }
         $props = $db->GetAll("SELECT * FROM role_properties WHERE role_id=?", array($proto_role['id']));
         foreach ($props as $prop) {
             $role->setProperty($prop['name'], $prop['value']);
         }
         $scripts = $db->GetAll("SELECT * FROM role_scripts WHERE role_id=?", array($proto_role['id']));
         foreach ($scripts as &$script) {
             $script['params'] = unserialize($script['params']);
         }
         $role->setScripts($scripts);
         $variables = new Scalr_Scripting_GlobalVariables($proto_role['env_id'], Scalr_Scripting_GlobalVariables::SCOPE_ROLE);
         $variables->setValues($variables->getValues($proto_role['id']), $role->id);
     }
     // Set software
     if ($meta) {
         $software = array();
         foreach ((array) $meta['software'] as $soft) {
             $software[$soft->name] = $soft->version;
         }
         $role->setSoftware($software);
         $role->setTags((array) $meta['tags']);
         if ($BundleTask->platform == SERVER_PLATFORMS::NIMBULA) {
             $props = array(array('name' => self::PROPERTY_NIMBULA_INIT_ROOT_USER, 'value' => $meta['init_root_user']), array('name' => self::PROPERTY_NIMBULA_INIT_ROOT_PASS, 'value' => $meta['init_root_pass']), array('name' => self::PROPERTY_NIMBULA_ENTRY, 'value' => ''));
             foreach ($props as $prop) {
                 $role->setProperty($prop['name'], $prop['value']);
             }
         }
     }
     return $role;
 }