/** * @param $formData * @param string $entryPoint * @return bool */ function tryAddRuleSubmit($formData, $entryPoint = 'internal') { $fromport = $formData['fromport']; $toport = $formData['toport']; $protocol = $formData['protocol']; $range = $formData['range']; $group = $formData['group']; $groupid = $formData['groupid']; $sourcegroupid = ''; if ($group) { $securityGroups = $this->userNova->getSecurityGroups(); foreach ($securityGroups as $securityGroup) { if ($group === $securityGroup->getGroupName()) { $sourcegroupid = $securityGroup->getGroupId(); } } } $success = $this->userNova->addSecurityGroupRule($groupid, $fromport, $toport, $protocol, $range, $sourcegroupid); if ($success) { $this->getOutput()->addWikiMsg('openstackmanager-addedrule'); } else { $this->getOutput()->addWikiMsg('openstackmanager-addrulefailed'); } $out = '<br />'; $out .= Linker::link($this->getPageTitle(), $this->msg('openstackmanager-backsecuritygrouplist')->escaped()); $this->getOutput()->addHTML($out); return true; }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryCreateSubmit($formData, $entryPoint = 'internal') { global $wgOpenStackManagerDefaultSecurityGroupRules; $success = OpenStackNovaProject::createProject($formData['projectname']); if (!$success) { $this->getOutput()->addWikiMsg('openstackmanager-createprojectfailed'); return false; } $project = OpenStackNovaProject::getProjectByName($formData['projectname']); $username = $this->userLDAP->getUsername(); $project->addMember($username); $members = explode(',', $formData['member']); foreach ($members as $member) { $project->addMember($member); } $roles = $project->getRoles(); foreach ($roles as $role) { if (in_array($role->getRoleName(), $formData['roles'])) { foreach ($members as $member) { $role->addMember($member); } } // We also need to ensure the project creator is in all roles $role->addMember($username); } # Change the connection to reference this project $this->userNova->setProject($formData['projectname']); $regions = $this->userNova->getRegions('compute'); foreach ($regions as $region) { $this->userNova->setRegion($region); $securityGroups = $this->userNova->getSecurityGroups(); $groupid = ''; foreach ($securityGroups as $securityGroup) { if ($securityGroup->getGroupName() === 'default') { $groupid = $securityGroup->getGroupId(); } } if (!$groupid) { continue; } foreach ($wgOpenStackManagerDefaultSecurityGroupRules as $rule) { $fromport = ''; $toport = ''; $protocol = ''; $range = ''; $sourcegroupid = ''; if (array_key_exists('fromport', $rule)) { $fromport = $rule['fromport']; } if (array_key_exists('toport', $rule)) { $toport = $rule['toport']; } if (array_key_exists('protocol', $rule)) { $protocol = $rule['protocol']; } if (array_key_exists('range', $rule)) { $range = $rule['range']; } if (array_key_exists('group', $rule)) { foreach ($securityGroups as $securityGroup) { if ($rule['group'] === $securityGroup->getGroupName()) { $sourcegroupid = $securityGroup->getGroupId(); } } } $this->userNova->addSecurityGroupRule($groupid, $fromport, $toport, $protocol, $range, $sourcegroupid); } } $project->setVolumeSettings(array('home', 'project')); $project->editArticle(); $this->getOutput()->addWikiMsg('openstackmanager-createdproject'); $out = '<br />'; $out .= Linker::link($this->getPageTitle(), $this->msg('openstackmanager-addadditionalproject')->escaped()); $this->getOutput()->addHTML($out); return true; }
/** * Handle ?action=create * @return bool */ function createInstance() { global $wgOpenStackManagerPuppetOptions; global $wgOpenStackManagerInstanceBannedInstanceTypes; global $wgOpenStackManagerInstanceDefaultImage; $this->setHeaders(); $this->getOutput()->setPagetitle($this->msg('openstackmanager-createinstance')); $project = $this->getRequest()->getText('project'); $region = $this->getRequest()->getText('region'); if (!$this->userLDAP->inRole('projectadmin', $project)) { $this->notInRole('projectadmin', $project); return false; } $instanceInfo = array(); $instanceInfo['instancename'] = array('type' => 'text', 'label-message' => 'openstackmanager-instancename', 'validation-callback' => array($this, 'validateText'), 'default' => '', 'section' => 'info', 'name' => 'instancename'); $instanceTypes = $this->userNova->getInstanceTypes(); $instanceType_keys = array(); foreach ($instanceTypes as $instanceType) { $instanceTypeName = $instanceType->getInstanceTypeName(); if (in_array($instanceTypeName, $wgOpenStackManagerInstanceBannedInstanceTypes)) { continue; } $instanceTypeId = $instanceType->getInstanceTypeId(); $cpus = $instanceType->getNumberOfCPUs(); $ram = $instanceType->getMemorySize(); $root_storage = $instanceType->getRootStorageSize(); $storage = $instanceType->getStorageSize(); // @todo FIXME: Hard coded parentheses. $instanceLabel = $instanceTypeName . ' (' . $this->msg('openstackmanager-instancetypelabel', $cpus, $ram, $root_storage, $storage)->text() . ')'; $instanceType_keys[$instanceLabel] = $instanceTypeId; } $instanceInfo['instanceType'] = array('type' => 'select', 'label-message' => 'openstackmanager-instancetype', 'section' => 'info', 'options' => $instanceType_keys, 'name' => 'instanceType'); $instanceInfo['region'] = array('type' => 'hidden', 'default' => $region, 'name' => 'region'); # Image names can't be translated. Get the image, and make an array # where the name points to itself as a value $images = $this->userNova->getImages(); $image_keys = array(); $default = ""; foreach ($images as $image) { if ($image->getImageState() !== "ACTIVE") { continue; } $imageName = $image->getImageName(); if ($imageName === '') { continue; } $showImage = $image->getImageMetadata('show'); if (!$showImage) { continue; } $imageLabel = $imageName; $isDefault = $image->getImageMetadata('default'); if ($isDefault) { $default = $imageLabel; } $image_keys[$imageLabel] = $image->getImageId(); } if (isset($image_keys[$default])) { $default = $image_keys[$default]; } $instanceInfo['imageType'] = array('type' => 'select', 'section' => 'info', 'options' => $image_keys, 'default' => $default, 'label-message' => 'openstackmanager-imagetype', 'name' => 'imageType'); # Keypair names can't be translated. Get the keys, and make an array # where the name points to itself as a value # TODO: get keypairs as the user, not the admin # $keypairs = $this->userNova->getKeypairs(); # $keypair_keys = array(); # foreach ( array_keys( $keypairs ) as $keypair_key ) { # $keypair_keys[$keypair_key] = $keypair_key; # } # $instanceInfo['keypair'] = array( # 'type' => 'select', # 'section' => 'info', # 'options' => $keypair_keys, # 'label-message' => 'keypair', # ); #$domains = OpenStackNovaDomain::getAllDomains( 'local' ); #$domain_keys = array(); #foreach ( $domains as $domain ) { # $domainname = $domain->getDomainName(); # $domain_keys[$domainname] = $domainname; #} #$instanceInfo['domain'] = array( # 'type' => 'select', # 'section' => 'info', # 'options' => $domain_keys, # 'label-message' => 'openstackmanager-dnsdomain', # 'name' => 'domain', #); $securityGroups = $this->userNova->getSecurityGroups(); $group_keys = array(); $defaults = array(); foreach ($securityGroups as $securityGroup) { if ($securityGroup->getProject() === $project) { $securityGroupName = $securityGroup->getGroupName(); $group_keys[$securityGroupName] = $securityGroupName; if ($securityGroupName === "default") { $defaults["default"] = "default"; } } } $instanceInfo['groups'] = array('type' => 'multiselect', 'section' => 'info', 'options' => $group_keys, 'default' => $defaults, 'label-message' => 'openstackmanager-securitygroups', 'name' => 'groups'); $instanceInfo['project'] = array('type' => 'hidden', 'default' => $project, 'name' => 'project'); $instanceInfo['action'] = array('type' => 'hidden', 'default' => 'create', 'name' => 'action'); $instanceForm = new HTMLForm($instanceInfo, $this->getContext(), 'openstackmanager-novainstance'); $instanceForm->addHeaderText($this->msg('openstackmanager-createinstancepuppetwarning')->text() . '<div class="mw-collapsible mw-collapsed">', 'puppetinfo'); $instanceForm->addFooterText('</div>', 'puppetinfo'); $instanceForm->setSubmitID('openstackmanager-novainstance-createinstancesubmit'); $instanceForm->setSubmitCallback(array($this, 'tryCreateSubmit')); $instanceForm->show(); return true; }