/** * @param string $name * @param string $code_name * @param string $description * @return IOpenStackComponent */ public function buildOpenStackComponent($name, $code_name, $description) { $component = new OpenStackComponent(); $component->setName($name); $component->setCodeName($code_name); $component->setDescription($description); return $component; }
public function updateCMSFields(FieldList $fields) { Requirements::javascript('marketplace/code/ui/admin/js/openstack.release.supported.api.version.admin.ui.js'); $fields->removeByName('ApiVersionID'); $versions = OpenStackApiVersion::get()->map('ID', 'Version'); $ddl = new DropdownField('ApiVersionID', 'API Version', $versions); $ddl->addExtraClass('ddl-api-version-id'); $ddl->setEmptyString('--Select An API Version --'); $fields->insertAfter($ddl, 'OpenStackComponentID'); $versions = array(); foreach (OpenStackComponent::get()->filter('SupportsVersioning', true) as $component) { foreach ($component->getVersions() as $version) { if (!array_key_exists(intval($component->getIdentifier()), $versions)) { $versions[intval($component->getIdentifier())] = array(); } array_push($versions[intval($component->getIdentifier())], array('value' => intval($version->getIdentifier()), 'text' => $version->getVersion())); } } $json_data = json_encode($versions); $script = <<<JS \t\t<script> \t\tvar versions = {$json_data}; \t\t</script> JS; $fields->add(new LiteralField('js_data', $script)); $fields->removeByName('OpenStackComponentID'); //kludge; get parent id from url.... $url = preg_split('/\\//', $_REQUEST['url']); $release_id = (int) $url[8]; //components $components = OpenStackComponent::get()->filter('SupportsVersioning', true)->innerJoin('OpenStackRelease_OpenStackComponents', "OpenStackRelease_OpenStackComponents.OpenStackComponentID = OpenStackComponent.ID AND OpenStackReleaseID = {$release_id} "); $components_source = array(); foreach ($components as $comp) { $components_source[$comp->ID] = sprintf('%s (%s)', $comp->Name, $comp->CodeName); } $ddl = new DropdownField('OpenStackComponentID', 'OpenStack Component', $components_source); $ddl->setEmptyString('--Select A OS Component--'); $ddl->addExtraClass('ddl-os-component-id'); $fields->insertBefore($ddl, 'ApiVersionID'); $fields->insertAfter(new TextField("ReleaseVersion", "Release Version"), 'ReleaseID'); $fields->insertAfter(new LiteralField('ReleaseVersionTitle', '<p>You could get this data from <a href="http://docs.openstack.org/releases" target="_blank">http://docs.openstack.org/releases</a></p>'), 'ReleaseVersion'); return $fields; }
private function processProjects() { $url = "https://raw.githubusercontent.com/openstack/governance/master/reference/projects.yaml"; $response = null; try { $response = $this->client->get($url); } catch (Exception $ex) { echo $ex->getMessage() . PHP_EOL; SS_Log::log($ex->getMessage(), SS_Log::WARN); } if (is_null($response)) { return; } if ($response->getStatusCode() != 200) { return; } $body = $response->getBody(); if (is_null($body)) { return; } $content = $body->getContents(); if (empty($content)) { return; } try { $projects = Spyc::YAMLLoadString($content); foreach ($projects as $project_name => $info) { $component = OpenStackComponent::get()->filter('CodeName', ucfirst($project_name))->first(); if (is_null($component)) { $component = OpenStackComponent::get()->filter('Name', ucfirst($project_name))->first(); } echo sprintf('processing component %s', $project_name) . PHP_EOL; if (is_null($component)) { echo sprintf('component %s not found!', $project_name) . PHP_EOL; continue; } $ptl = isset($info['ptl']) ? $info['ptl'] : null; $wiki = isset($info['url']) ? $info['url'] : null; $tags = isset($info['tags']) ? $info['tags'] : []; $ptl_member = null; if (!empty($ptl)) { if (is_array($ptl) && isset($ptl['name'])) { $ptl_names = preg_split("/\\s/", $ptl['name']); $fname = $ptl_names[0]; $lname = $ptl_names[1]; } else { $ptl_names = preg_split("/\\s/", $ptl); $fname = $ptl_names[0]; $lname = $ptl_names[1]; } $email = isset($ptl['email']) ? trim($ptl['email']) : null; echo sprintf('PTL %s %s (%s)', $fname, $lname, $email) . PHP_EOL; if (!empty($email)) { $ptl_member = Member::get()->filter(array('Email' => $email))->first(); } if (is_null($ptl_member)) { $ptl_member = Member::get()->filter(array('FirstName' => $fname, 'Surname' => $lname))->first(); } } $team_diverse_affiliation = false; $is_service = false; $has_stable_branches = false; $tc_approved_release = false; $release_milestones = false; $release_intermediary = false; $release_independent = false; $starter_kit = false; $vulnerability_managed = false; $follows_standard_deprecation = false; $supports_upgrade = false; $supports_rolling_upgrade = false; foreach ($tags as $tag) { if ($tag === "team:diverse-affiliation") { $team_diverse_affiliation = true; } } $deliverables = isset($info['deliverables']) ? $info['deliverables'] : array(); $service_info = isset($deliverables[$project_name]) ? $deliverables[$project_name] : array(); $service_tags = isset($service_info['tags']) ? $service_info['tags'] : array(); foreach ($service_tags as $tag) { if ($tag === "type:service") { $is_service = true; } if ($tag === "stable:follows-policy") { $has_stable_branches = true; } if ($tag === "release:cycle-with-milestones") { $release_milestones = true; } if ($tag === "release:cycle-with-intermediary") { $release_intermediary = true; } if ($tag === "release:independent") { $release_independent = true; } if ($tag === "tc-approved-release") { $tc_approved_release = true; } if ($tag === "starter-kit:compute") { $starter_kit = true; } if ($tag === "vulnerability:managed") { $vulnerability_managed = true; } if ($tag === "assert:follows-standard-deprecation") { $follows_standard_deprecation = true; } if ($tag === "assert:supports-upgrade") { $supports_upgrade = true; } if ($tag === "assert:supports-rolling-upgrade") { $supports_rolling_upgrade = true; } } $component->HasStableBranches = $has_stable_branches; $component->WikiUrl = $wiki; $component->TCApprovedRelease = $tc_approved_release; $component->ReleaseMileStones = $release_milestones; $component->ReleaseCycleWithIntermediary = $release_intermediary; $component->ReleaseIndependent = $release_independent; $component->HasTeamDiversity = $team_diverse_affiliation; $component->IncludedComputeStarterKit = $starter_kit; $component->VulnerabilityManaged = $vulnerability_managed; $component->FollowsStandardDeprecation = $follows_standard_deprecation; $component->SupportsUpgrade = $supports_upgrade; $component->SupportsRollingUpgrade = $supports_rolling_upgrade; if (!is_null($ptl_member)) { echo sprintf('setting PTL %s %s (%s) to Component %s', $ptl_member->FirstName, $ptl_member->Surname, $ptl_member->Email, $component->Name) . PHP_EOL; $component->LatestReleasePTLID = $ptl_member->ID; } $component->write(); } } catch (Exception $ex) { echo $ex->getMessage() . PHP_EOL; SS_Log::log($ex->getMessage(), SS_Log::ERR); return; } }
private function processProjects() { $url = "https://raw.githubusercontent.com/openstack/governance/master/reference/projects.yaml"; $client = new HttpClient(); try { $response = $client->get($url); } catch (HttpException $ex) { return; } if (is_null($response)) { return; } if ($response->getStatusCode() != 200) { return; } $body = $response->getBody(); if (is_null($body)) { return; } $content = $body->getContents(); if (empty($content)) { return; } $yaml = new Parser(); try { $projects = $yaml->parse($content); foreach ($projects as $project_name => $info) { $component = OpenStackComponent::get()->filter('CodeName', ucfirst($project_name))->first(); if (is_null($component)) { continue; } $ptl = isset($info['ptl']) ? $info['ptl'] : null; $wiki = isset($info['url']) ? $info['url'] : null; $tags = isset($info['tags']) ? $info['tags'] : array(); $ptl_member = null; if (!empty($ptl)) { if (is_array($ptl) && isset($ptl['name'])) { $ptl_names = preg_split("/\\s/", $ptl['name']); $fname = $ptl_names[0]; $lname = $ptl_names[1]; } else { $ptl_names = preg_split("/\\s/", $ptl); $fname = $ptl_names[0]; $lname = $ptl_names[1]; } $ptl_member = Member::get()->filter(array('FirstName' => $fname, 'Surname' => $lname))->first(); } $team_diverse_affiliation = false; $is_service = false; $has_stable_branches = false; $tc_approved_release = false; $release_milestones = false; $release_intermediary = false; $release_independent = false; $starter_kit = false; $vulnerability_managed = false; foreach ($tags as $tag) { if ($tag === "team:diverse-affiliation") { $team_diverse_affiliation = true; } } $deliverables = isset($info['deliverables']) ? $info['deliverables'] : array(); $service_info = isset($deliverables[$project_name]) ? $deliverables[$project_name] : array(); $service_tags = isset($service_info['tags']) ? $service_info['tags'] : array(); foreach ($service_tags as $tag) { if ($tag === "type:service") { $is_service = true; } if ($tag === "release:has-stable-branches") { $has_stable_branches = true; } if ($tag === "release:cycle-with-milestones") { $release_milestones = true; } if ($tag === "release:cycle-with-intermediary") { $release_intermediary = true; } if ($tag === "release:independent") { $release_independent = true; } if ($tag === "tc-approved-release") { $tc_approved_release = true; } if ($tag === "starter-kit:compute") { $starter_kit = true; } if ($tag === "vulnerability:managed") { $vulnerability_managed = true; } } if (!$is_service) { continue; } $component->HasStableBranches = $has_stable_branches; $component->WikiUrl = $wiki; $component->TCApprovedRelease = $tc_approved_release; $component->ReleaseMileStones = $release_milestones; $component->ReleaseCycleWithIntermediary = $release_intermediary; $component->ReleaseIndependent = $release_independent; $component->HasTeamDiversity = $team_diverse_affiliation; $component->IncludedComputeStarterKit = $starter_kit; $component->VulnerabilityManaged = $vulnerability_managed; if (!is_null($ptl_member)) { $component->LatestReleasePTLID = $ptl_member->ID; } $component->write(); } } catch (ParseException $e) { return; } }