/** * Default action * @return void */ function listInstances() { $this->setHeaders(); $this->getOutput()->addModules('ext.openstack.Instance'); $projects = OpenStackNovaProject::getProjectsByName($this->userLDAP->getProjects()); $instanceOut = ''; $ownedProjects = array(); $instanceCount = 0; foreach ($projects as $project) { $projectName = $project->getProjectName(); $instancesInProject = 0; if ($this->userLDAP->inRole('projectadmin', $projectName)) { $ownedProjects[] = $projectName; } $projectactions = array('projectadmin' => array()); $regions = ''; $this->userNova->setProject($projectName); foreach ($this->userNova->getRegions('compute') as $region) { $regionactions = array(); $thisCount = 0; $instances = $this->getInstances($projectName, $region, $thisCount); $instancesInProject += $thisCount; if ($thisCount > 0) { $regions .= $this->createRegionSection($region, $projectName, $regionactions, $instances); } } if ($instancesInProject) { $instanceOut .= $this->createProjectSection($projectName, $projectactions, $regions); $instanceCount += $instancesInProject; } else { } } $out = ''; if ($ownedProjects) { $this->getOutput()->setPagetitle($this->msg('openstackmanager-ownedprojects', count($ownedProjects))); foreach ($ownedProjects as $ownedProject) { $projectNameOut = $this->createResourceLink($ownedProject); $out .= $projectNameOut . " "; } } else { $this->getOutput()->setPagetitle($this->msg('openstackmanager-noownedprojects')); } if ($instanceCount) { $out .= Html::rawElement('h1', array(), $this->msg('openstackmanager-ownedinstances', $instanceCount)->text()); $out .= $instanceOut; } else { $out .= Html::rawElement('h1', array(), $this->msg('openstackmanager-noownedinstances')->text()); } $this->getOutput()->addHTML($out); }
/** * @return void */ function listProjects() { $this->setHeaders(); $this->getOutput()->setPageTitle($this->msg('openstackmanager-projectlist')); $this->getOutput()->addModuleStyles('ext.openstack'); if ($this->getUser()->isAllowed('listall')) { $projects = OpenStackNovaProject::getAllProjects(); $this->showCreateProject(); } else { $projects = OpenStackNovaProject::getProjectsByName($this->userLDAP->getProjects()); } $this->showProjectFilter($projects); $projectfilter = $this->getProjectFilter(); if (!$projectfilter) { $this->getOutput()->addWikiMsg('openstackmanager-setprojectfilter'); return null; } $out = ''; foreach ($projects as $project) { $projectName = $project->getProjectName(); if (!in_array($projectName, $projectfilter)) { continue; } $actions = array(); $out .= $this->createProjectSection($projectName, $actions, $this->getProject($project)); } $this->getOutput()->addHTML($out); }
/** * @return void */ function listVolumes() { $this->setHeaders(); $this->getOutput()->addModuleStyles('ext.openstack'); $this->getOutput()->setPagetitle($this->msg('openstackmanager-volumelist')); if ($this->getUser()->isAllowed('listall')) { $projects = OpenStackNovaProject::getAllProjects(); } else { $projects = OpenStackNovaProject::getProjectsByName($this->userLDAP->getProjects()); } $this->showProjectFilter($projects); $projectfilter = $this->getProjectFilter(); if (!$projectfilter) { $this->getOutput()->addWikiMsg('openstackmanager-setprojectfilter'); return null; } $out = ''; foreach ($projects as $project) { $projectName = $project->getProjectName(); if (!in_array($projectName, $projectfilter)) { continue; } $projectactions = array('projectadmin' => array()); $regions = ''; $this->userNova->setProject($projectName); foreach ($this->userNova->getRegions('compute') as $region) { $regionactions = array('projectadmin' => array($this->createActionLink('openstackmanager-createvolume', array('action' => 'create', 'project' => $projectName, 'region' => $region)))); $volumes = $this->getVolumes($projectName, $region); $regions .= $this->createRegionSection($region, $projectName, $regionactions, $volumes); } $out .= $this->createProjectSection($projectName, $projectactions, $regions); } $this->getOutput()->addHTML($out); }
function addKey() { global $wgOpenStackManagerNovaKeypairStorage; $this->setHeaders(); $this->getOutput()->setPagetitle($this->msg('openstackmanager-addkey')); $returnto = $this->getRequest()->getVal('returnto'); $keyInfo = array(); if ($wgOpenStackManagerNovaKeypairStorage === 'nova') { $projects = $this->userLDAP->getProjects(); $keyInfo['keyname'] = array('type' => 'text', 'label-message' => 'openstackmanager-novakeyname', 'default' => '', 'name' => 'keyname'); $project_keys = array(); foreach ($projects as $project) { $project_keys[$project] = $project; } $keyInfo['project'] = array('type' => 'select', 'options' => $project_keys, 'label-message' => 'openstackmanager-project', 'name' => 'project'); } $keyInfo['key'] = array('type' => 'textarea', 'default' => '', 'label-message' => 'openstackmanager-novapublickey', 'name' => 'key'); $keyInfo['action'] = array('type' => 'hidden', 'default' => 'add', 'name' => 'action'); $keyInfo['returnto'] = array('type' => 'hidden', 'default' => $returnto, 'name' => 'returnto'); $keyForm = new HTMLForm($keyInfo, $this->getContext(), 'openstackmanager-novakey'); $keyForm->setSubmitID('novakey-form-createkeysubmit'); $keyForm->setSubmitCallback(array($this, 'tryImportSubmit')); $keyForm->show(); }
/** * @return void */ function listPuppetGroups() { $this->setHeaders(); $this->getOutput()->setPagetitle($this->msg('openstackmanager-puppetgrouplist')); $this->getOutput()->addModuleStyles('ext.openstack'); if ($this->getUser()->isAllowed('listall')) { $projects = OpenStackNovaProject::getAllProjects(); } else { $projects = OpenStackNovaProject::getProjectsByName($this->userLDAP->getProjects()); } $this->showProjectFilter($projects); $projectfilter = $this->getProjectFilter(); if (!$projectfilter) { $this->getOutput()->addWikiMsg('openstackmanager-setprojectfilter'); return null; } $out = ''; foreach ($projects as $project) { $projectName = $project->getProjectName(); if ($projectfilter && !in_array($projectName, $projectfilter)) { continue; } $actions = array('projectadmin' => array()); $actions['projectadmin'][] = $this->createActionLink('openstackmanager-createpuppetgroup', array('action' => 'create', 'project' => $projectName)); $out .= $this->createProjectSection($projectName, $actions, $this->getPuppetGroupOutput(OpenStackNovaPuppetGroup::getGroupList($projectName))); } $action = ''; $showlinks = $this->userCanExecute($this->getUser()); if ($showlinks) { $action = $this->createActionLink('openstackmanager-createpuppetgroup', array('action' => 'create')); $action = Html::rawElement('span', array('id' => 'novaaction'), "[{$action}]"); } $allProjectsMsg = Html::rawElement('span', array('class' => 'mw-customtoggle-allprojects', 'id' => 'novaproject'), $this->msg('openstackmanager-puppetallprojects')->escaped()); $out .= Html::rawElement('h2', array(), "{$allProjectsMsg} {$action}"); $groupsOut = $this->getPuppetGroupOutput(OpenStackNovaPuppetGroup::getGroupList(), $showlinks); $out .= Html::rawElement('div', array('class' => 'mw-collapsible', 'id' => 'mw-customcollapsible-allprojects'), $groupsOut); $this->getOutput()->addHTML($out); }
/** * @return void */ function listInstances() { $this->setHeaders(); $this->getOutput()->addModuleStyles('ext.openstack'); $this->getOutput()->setPagetitle(wfMsg('openstackmanager-instancelist')); $userProjects = $this->userLDAP->getProjects(); $out = ''; $instances = $this->adminNova->getInstances(); $header = Html::element('th', array(), wfMsg('openstackmanager-instancename')); $header .= Html::element('th', array(), wfMsg('openstackmanager-instanceid')); $header .= Html::element('th', array(), wfMsg('openstackmanager-instancestate')); $header .= Html::element('th', array(), wfMsg('openstackmanager-instancetype')); $header .= Html::element('th', array(), wfMsg('openstackmanager-instanceip')); $header .= Html::element('th', array(), wfMsg('openstackmanager-instancepublicip')); $header .= Html::element('th', array(), wfMsg('openstackmanager-securitygroups')); $header .= Html::element('th', array(), wfMsg('openstackmanager-availabilityzone')); $header .= Html::element('th', array(), wfMsg('openstackmanager-imageid')); $header .= Html::element('th', array(), wfMsg('openstackmanager-launchtime')); $header .= Html::element('th', array(), wfMsg('openstackmanager-actions')); $projectArr = array(); /** * @var $instance OpenStackNovaInstance */ foreach ($instances as $instance) { $project = $instance->getOwner(); if (!in_array($project, $userProjects)) { continue; } $instanceOut = Html::element('td', array(), $instance->getInstanceName()); $instanceId = $instance->getInstanceId(); $instanceId = htmlentities($instanceId); $title = Title::newFromText($instanceId, NS_NOVA_RESOURCE); $instanceIdLink = Linker::link($title, $instanceId); $instanceOut .= Html::rawElement('td', array(), $instanceIdLink); $instanceOut .= Html::element('td', array(), $instance->getInstanceState()); $instanceOut .= Html::element('td', array(), $instance->getInstanceType()); $privateip = $instance->getInstancePrivateIP(); $publicip = $instance->getInstancePublicIP(); $instanceOut .= Html::element('td', array(), $privateip); if ($privateip != $publicip) { $instanceOut .= Html::element('td', array(), $publicip); } else { $instanceOut .= Html::element('td', array(), ''); } $groupsOut = ''; foreach ($instance->getSecurityGroups() as $group) { $groupsOut .= Html::element('li', array(), $group); } $groupsOut = Html::rawElement('ul', array(), $groupsOut); $instanceOut .= Html::rawElement('td', array(), $groupsOut); $instanceOut .= Html::element('td', array(), $instance->getAvailabilityZone()); $instanceOut .= Html::element('td', array(), $instance->getImageId()); $instanceOut .= Html::element('td', array(), $instance->getLaunchTime()); $actions = ''; if ($this->userLDAP->inRole('sysadmin', $project)) { $msg = wfMsgHtml('openstackmanager-delete'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'delete', 'project' => $project, 'instanceid' => $instance->getInstanceId())); $actions = Html::rawElement('li', array(), $link); $msg = wfMsgHtml('openstackmanager-reboot'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'reboot', 'project' => $project, 'instanceid' => $instance->getInstanceId())); $actions .= Html::rawElement('li', array(), $link); $msg = wfMsgHtml('openstackmanager-configure'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'configure', 'project' => $project, 'instanceid' => $instance->getInstanceId())); $actions .= Html::rawElement('li', array(), $link); $msg = wfMsgHtml('openstackmanager-getconsoleoutput'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'consoleoutput', 'project' => $project, 'instanceid' => $instance->getInstanceId())); $actions .= Html::rawElement('li', array(), $link); $actions = Html::rawElement('ul', array(), $actions); } $instanceOut .= Html::rawElement('td', array(), $actions); if (isset($projectArr["{$project}"])) { $projectArr["{$project}"] .= Html::rawElement('tr', array(), $instanceOut); } else { $projectArr["{$project}"] = Html::rawElement('tr', array(), $instanceOut); } } foreach ($userProjects as $project) { $action = ''; if ($this->userLDAP->inRole('sysadmin', $project)) { $action = Linker::link($this->getTitle(), wfMsgHtml('openstackmanager-createinstance'), array(), array('action' => 'create', 'project' => $project)); $action = Html::rawElement('span', array('id' => 'novaaction'), "[{$action}]"); } $projectName = Html::rawElement('span', array('class' => 'mw-customtoggle-' . $project, 'id' => 'novaproject'), $project); $out .= Html::rawElement('h2', array(), "{$projectName} {$action}"); $projectOut = ''; if (isset($projectArr["{$project}"])) { $projectOut .= $header; $projectOut .= $projectArr["{$project}"]; $projectOut = Html::rawElement('table', array('id' => 'novainstancelist', 'class' => 'wikitable sortable'), $projectOut); } $out .= Html::rawElement('div', array('class' => 'mw-collapsible', 'id' => 'mw-customcollapsible-' . $project), $projectOut); } $this->getOutput()->addHTML($out); }
/** * @return void */ function listVolumes() { $this->setHeaders(); $this->getOutput()->setPagetitle( wfMsg( 'openstackmanager-volumelist' ) ); $userProjects = $this->userLDAP->getProjects(); $out = ''; $volumes = $this->adminNova->getVolumes(); $header = Html::element( 'th', array(), wfMsg( 'openstackmanager-volumename' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumeid' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumedescription' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumestate' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumeattachmentinstance' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumeattachmentdevice' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumeattachmentstatus' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumesize' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumedeleteonvolumedelete' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-availabilityzone' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-volumecreationtime' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-actions' ) ); $projectArr = array(); foreach ( $volumes as $volume ) { $project = $volume->getOwner(); if ( ! in_array( $project, $userProjects ) ) { continue; } $volumeOut = Html::element( 'td', array(), $volume->getVolumeName() ); $volumeId = $volume->getVolumeId(); $volumeId = htmlentities( $volumeId ); $title = Title::newFromText( $volumeId, NS_NOVA_RESOURCE ); $volumeIdLink = Linker::link( $title, $volumeId ); $volumeOut .= Html::rawElement( 'td', array(), $volumeIdLink ); $volumeOut .= Html::element( 'td', array(), $volume->getVolumeDescription() ); $volumeOut .= Html::element( 'td', array(), $volume->getVolumeStatus() ); $volumeOut .= Html::element( 'td', array(), $volume->getAttachedInstanceId() ); $volumeOut .= Html::element( 'td', array(), $volume->getAttachedDevice() ); $volumeOut .= Html::element( 'td', array(), $volume->getAttachmentStatus() ); $volumeOut .= Html::element( 'td', array(), $volume->getVolumeSize() ); $volumeOut .= Html::element( 'td', array(), $volume->deleteOnInstanceDeletion() ); $volumeOut .= Html::element( 'td', array(), $volume->getVolumeAvailabilityZone() ); $volumeOut .= Html::element( 'td', array(), $volume->getVolumeCreationTime() ); $msg = wfMsgHtml( 'openstackmanager-delete' ); $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'delete', 'project' => $project, 'volumeid' => $volume->getVolumeId() ) ); $actions = Html::rawElement( 'li', array(), $link ); #$msg = wfMsgHtml( 'openstackmanager-rename' ); #$actions .= Linker::link( $this->getTitle(), $msg, array(), # array( 'action' => 'rename', # 'project' => $project, # 'volumeid' => $volume->getVolumeId() ) ); $msg = wfMsgHtml( 'openstackmanager-attach' ); $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'attach', 'project' => $project, 'volumeid' => $volume->getVolumeId() ) ); $actions .= Html::rawElement( 'li', array(), $link ); $msg = wfMsgHtml( 'openstackmanager-detach' ); $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'detach', 'project' => $project, 'volumeid' => $volume->getVolumeId() ) ); $actions .= Html::rawElement( 'li', array(), $link ); $actions = Html::rawElement( 'ul', array(), $actions ); $volumeOut .= Html::rawElement( 'td', array(), $actions ); if ( isset( $projectArr["$project"] ) ) { $projectArr["$project"] .= Html::rawElement( 'tr', array(), $volumeOut ); } else { $projectArr["$project"] = Html::rawElement( 'tr', array(), $volumeOut ); } } foreach ( $userProjects as $project ) { $out .= Html::element( 'h2', array(), $project ); $out .= Linker::link( $this->getTitle(), wfMsgHtml( 'openstackmanager-createvolume' ), array(), array( 'action' => 'create', 'project' => $project ) ); if ( isset( $projectArr["$project"] ) ) { $projectOut = $header; $projectOut .= $projectArr["$project"]; $out .= Html::rawElement( 'table', array( 'id' => 'novavolumelist', 'class' => 'wikitable sortable collapsible' ), $projectOut ); } } $this->getOutput()->addHTML( $out ); }
public static function removeUserFromBastionProject($user, &$group) { global $wgOpenStackManagerRemoveUserFromBastionProjectOnShellDisable; global $wgOpenStackManagerRemoveUserFromAllProjectsOnShellDisable; global $wgOpenStackManagerBastionProjectName; // Check whether after removing the group the user would still // have the loginviashell permission. foreach ($user->getEffectiveGroups() as $g) { // Ignore the group that will be removed. if ($g === $group) { continue; } // If the user still has the loginviashell permission, we // can immediately return. if (User::groupHasPermission($g, 'loginviashell')) { return true; } } // At this point we know that the user will not have the // loginviashell permission after the group is removed so we // can remove him from the bastion projects if the // configuration requires that. $username = $user->getName(); if ($wgOpenStackManagerRemoveUserFromAllProjectsOnShellDisable) { // Get a users projects $userLDAP = new OpenStackNovaUser($username); foreach ($userLDAP->getProjects() as $projectName) { // Remove the user from the project $project = new OpenStackNovaProject($projectName); $project->deleteMember($username); } } elseif ($wgOpenStackManagerRemoveUserFromBastionProjectOnShellDisable) { // Remove the user from the bastion project $project = new OpenStackNovaProject($wgOpenStackManagerBastionProjectName); if (in_array($username, $project->getMembers())) { $project->deleteMember($username); } } return true; }
/** * @return void */ function listKeys() { global $wgOpenStackManagerNovaKeypairStorage; $this->setHeaders(); $this->getOutput()->setPagetitle(wfMsg('openstackmanager-keylist')); $this->getOutput()->addModuleStyles('ext.openstack'); $keyInfo = array(); if ($wgOpenStackManagerNovaKeypairStorage == 'nova') { $projects = $this->userLDAP->getProjects(); $keyInfo['keyname'] = array('type' => 'text', 'label-message' => 'openstackmanager-novakeyname', 'default' => '', 'section' => 'key', 'name' => 'keyname'); $project_keys = array(); foreach ($projects as $project) { $project_keys["{$project}"] = $project; } $keyInfo['project'] = array('type' => 'select', 'options' => $project_keys, 'label-message' => 'openstackmanager-project', 'name' => 'project'); } $keyInfo['key'] = array('type' => 'textarea', 'section' => 'key', 'default' => '', 'label-message' => 'openstackmanager-novapublickey', 'name' => 'key'); $keyForm = new SpecialNovaKeyForm($keyInfo, 'openstackmanager-novakey'); $keyForm->setTitle(SpecialPage::getTitleFor('NovaKey')); $keyForm->setSubmitID('novakey-form-createkeysubmit'); $keyForm->setSubmitCallback(array($this, 'tryImportSubmit')); $keyForm->show(); $out = ''; if ($wgOpenStackManagerNovaKeypairStorage == 'nova') { foreach ($projects as $project) { $userCredentials = $this->userLDAP->getCredentials(); $this->userNova = new OpenStackNovaController($userCredentials, $project); $keypairs = $this->userNova->getKeypairs(); if (!$keypairs) { continue; } $out .= Html::element('h2', array(), $project); $projectOut = Html::element('th', array(), wfMsg('openstackmanager-name')); $projectOut .= Html::element('th', array(), wfMsg('openstackmanager-fingerprint')); foreach ($keypairs as $keypair) { $keyOut = Html::element('td', array('class' => 'Nova_col'), $keypair->getKeyName()); $keyOut .= Html::element('td', array(), $keypair->getKeyFingerprint()); $projectOut .= Html::rawElement('tr', array(), $keyOut); } $out .= Html::rawElement('table', array('id' => 'novakeylist', 'class' => 'wikitable sortable collapsible'), $projectOut); } } elseif ($wgOpenStackManagerNovaKeypairStorage == 'ldap') { $keypairs = $this->userLDAP->getKeypairs(); $keysOut = ''; $keysOut .= Html::element('th', array(), wfMsg('openstackmanager-keys')); $keysOut .= Html::element('th', array(), wfMsg('openstackmanager-actions')); foreach ($keypairs as $hash => $key) { $keyOut = Html::element('td', array('class' => 'Nova_col'), $key); $msg = wfMsgHtml('openstackmanager-delete'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'delete', 'hash' => $hash)); $action = Html::rawElement('li', array(), $link); $action = Html::rawElement('ul', array(), $action); $keyOut .= Html::rawElement('td', array(), $action); $keysOut .= Html::rawElement('tr', array(), $keyOut); } $out .= Html::rawElement('table', array('id' => 'novakeylist', 'class' => 'wikitable'), $keysOut); } else { $this->getOutput()->addWikiMsg('openstackmanager-invalidkeypair'); } $this->getOutput()->addHTML($out); }
/** * @return bool */ function listAddresses() { $this->setHeaders(); $this->getOutput()->addModuleStyles( 'ext.openstack' ); $this->getOutput()->setPagetitle( wfMsg( 'openstackmanager-addresslist' ) ); $userProjects = $this->userLDAP->getProjects(); $out = ''; $header = Html::element( 'th', array(), wfMsg( 'openstackmanager-address' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-instanceid' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-instancename' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-hostnames' ) ); $header .= Html::element( 'th', array(), wfMsg( 'openstackmanager-actions' ) ); $addresses = $this->adminNova->getAddresses(); $projectArr = array(); foreach ( $addresses as $address ) { $ip = $address->getPublicIP(); $instanceid = $address->getInstanceId(); $project = $address->getProject(); $addressOut = Html::element( 'td', array(), $ip ); if ( $instanceid ) { $addressOut .= Html::element( 'td', array(), $instanceid ); $instance = $this->adminNova->getInstance( $instanceid ); $instancename = $instance->getInstanceName(); $addressOut .= Html::element( 'td', array(), $instancename ); } else { $addressOut .= Html::element( 'td', array(), '' ); $addressOut .= Html::element( 'td', array(), '' ); } $hosts = OpenStackNovaHost::getHostsByIP( $ip ); if ( $hosts ) { $hostsOut = ''; $msg = wfMsgHtml( 'openstackmanager-removehost-action' ); foreach ( $hosts as $host ) { $domain = $host->getDomain(); $fqdns = $host->getAssociatedDomains(); foreach ( $fqdns as $fqdn ) { $hostname = explode( '.', $fqdn ); $hostname = $hostname[0]; $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'removehost', 'ip' => $ip, 'project' => $project, 'domain' => $domain->getDomainName(), 'hostname' => $hostname ) ); $hostOut = htmlentities( $fqdn ) . ' ' . $link; $hostsOut .= Html::rawElement( 'li', array(), $hostOut ); } } $hostsOut = Html::rawElement( 'ul', array(), $hostsOut ); $addressOut .= Html::rawElement( 'td', array(), $hostsOut ); } else { $addressOut .= Html::element( 'td', array(), '' ); } $actions = ''; if ( $instanceid ) { $msg = wfMsgHtml( 'openstackmanager-reassociateaddress' ); } else { $msg = wfMsgHtml( 'openstackmanager-releaseaddress' ); $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'release', 'ip' => $ip, 'project' => $project ) ); $actions = Html::rawElement( 'li', array(), $link ); $msg = wfMsgHtml( 'openstackmanager-associateaddress' ); } $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'associate', 'ip' => $ip, 'project' => $project ) ); $actions .= Html::rawElement( 'li', array(), $link ); if ( $instanceid ) { $msg = wfMsgHtml( 'openstackmanager-disassociateaddress' ); $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'disassociate', 'ip' => $ip, 'project' => $project ) ); $actions .= Html::rawElement( 'li', array(), $link ); } $msg = wfMsgHtml( 'openstackmanager-addhost' ); $link = Linker::link( $this->getTitle(), $msg, array(), array( 'action' => 'addhost', 'ip' => $ip, 'project' => $project ) ); $actions .= Html::rawElement( 'li', array(), $link ); $actions = Html::rawElement( 'ul', array(), $actions ); $addressOut .= Html::rawElement( 'td', array(), $actions ); if ( isset( $projectArr["$project"] ) ) { $projectArr["$project"] .= Html::rawElement( 'tr', array(), $addressOut ); } else { $projectArr["$project"] = Html::rawElement( 'tr', array(), $addressOut ); } } foreach ( $userProjects as $project ) { $action = Linker::link( $this->getTitle(), wfMsgHtml( 'openstackmanager-allocateaddress' ), array(), array( 'action' => 'allocate', 'project' => $project ) ); $action = Html::rawElement( 'span', array( 'id' => 'novaaction' ), "[$action]" ); $projectName = Html::rawElement( 'span', array( 'class' => 'mw-customtoggle-' . $project, 'id' => 'novaproject' ), $project ); $out .= Html::rawElement( 'h2', array(), "$projectName $action" ); $projectOut = ''; if ( isset( $projectArr["$project"] ) ) { $projectOut = $header; $projectOut .= $projectArr["$project"]; $projectOut = Html::rawElement( 'table', array( 'id' => 'novainstancelist', 'class' => 'wikitable sortable collapsible' ), $projectOut ); } $out .= Html::rawElement( 'div', array( 'class' => 'mw-collapsible', 'id' => 'mw-customcollapsible-' . $project ), $projectOut ); } $this->getOutput()->addHTML( $out ); return true; }
/** * @return bool */ function listSecurityGroups() { $this->setHeaders(); $this->getOutput()->addModuleStyles('ext.openstack'); $this->getOutput()->setPagetitle(wfMsg('openstackmanager-securitygrouplist')); $userProjects = $this->userLDAP->getProjects(); $out = ''; $groupheader = Html::element('th', array(), wfMsg('openstackmanager-securitygroupname')); $groupheader .= Html::element('th', array(), wfMsg('openstackmanager-securitygroupdescription')); $groupheader .= Html::element('th', array(), wfMsg('openstackmanager-securitygrouprule')); $groupheader .= Html::element('th', array(), wfMsg('openstackmanager-actions')); $ruleheader = Html::element('th', array(), wfMsg('openstackmanager-securitygrouprule-fromport')); $ruleheader .= Html::element('th', array(), wfMsg('openstackmanager-securitygrouprule-toport')); $ruleheader .= Html::element('th', array(), wfMsg('openstackmanager-securitygrouprule-protocol')); $ruleheader .= Html::element('th', array(), wfMsg('openstackmanager-securitygrouprule-ipranges')); $ruleheader .= Html::element('th', array(), wfMsg('openstackmanager-securitygrouprule-groups')); $ruleheader .= Html::element('th', array(), wfMsg('openstackmanager-actions')); $projectArr = array(); $securityGroups = $this->adminNova->getSecurityGroups(); foreach ($securityGroups as $group) { $project = $group->getOwner(); if (!in_array($project, $userProjects)) { continue; } $groupname = $group->getGroupName(); $groupOut = Html::element('td', array(), $groupname); $groupOut .= Html::element('td', array(), $group->getGroupDescription()); # Add rules $rules = $group->getRules(); if ($rules) { $rulesOut = $ruleheader; foreach ($rules as $rule) { $fromport = $rule->getFromPort(); $toport = $rule->getToPort(); $ipprotocol = $rule->getIPProtocol(); $ruleOut = Html::element('td', array(), $fromport); $ruleOut .= Html::element('td', array(), $toport); $ruleOut .= Html::element('td', array(), $ipprotocol); $ranges = $rule->getIPRanges(); if ($ranges) { $rangesOut = ''; foreach ($ranges as $range) { $rangesOut .= Html::element('li', array(), $range); } $rangesOut = Html::rawElement('ul', array(), $rangesOut); $ruleOut .= Html::rawElement('td', array(), $rangesOut); } else { $ruleOut .= Html::rawElement('td', array(), ''); } $sourcegroups = $rule->getGroups(); $groupinfo = array(); if ($sourcegroups) { $sourcegroupsOut = ''; foreach ($sourcegroups as $sourcegroup) { $groupinfo[] = $sourcegroup['groupname'] . ':' . $sourcegroup['project']; $sourcegroupinfo = $sourcegroup['groupname'] . ' (' . $sourcegroup['project'] . ')'; $sourcegroupsOut .= Html::element('li', array(), $sourcegroupinfo); } $sourcegroupsOut = Html::rawElement('ul', array(), $sourcegroupsOut); $ruleOut .= Html::rawElement('td', array(), $sourcegroupsOut); } else { $ruleOut .= Html::rawElement('td', array(), ''); } $actions = ''; if ($this->userLDAP->inRole('netadmin', $project)) { $msg = wfMsgHtml('openstackmanager-removerule-action'); $args = array('action' => 'removerule', 'project' => $project, 'groupname' => $groupname, 'fromport' => $fromport, 'toport' => $toport, 'protocol' => $ipprotocol, 'ranges' => implode(',', $ranges), 'groups' => implode(',', $groupinfo)); $link = Linker::link($this->getTitle(), $msg, array(), $args); $actions = Html::rawElement('li', array(), $link); $actions = Html::rawElement('ul', array(), $actions); } $ruleOut .= Html::rawElement('td', array(), $actions); $rulesOut .= Html::rawElement('tr', array(), $ruleOut); } $rulesOut = Html::rawElement('table', array('id' => 'novasecuritygrouplist', 'class' => 'wikitable sortable collapsible'), $rulesOut); $groupOut .= Html::rawElement('td', array(), $rulesOut); } else { $groupOut .= Html::rawElement('td', array(), ''); } $actions = ''; if ($this->userLDAP->inRole('netadmin', $project)) { $msg = wfMsgHtml('openstackmanager-delete'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'delete', 'project' => $project, 'groupname' => $group->getGroupName())); $actions = Html::rawElement('li', array(), $link); #$msg = wfMsgHtml( 'openstackmanager-configure' ); #$link = Linker::link( $this->getTitle(), $msg, array(), # array( 'action' => 'configure', # 'project' => $project, # 'groupname' => $group->getGroupName() ) ); #$actions .= Html::rawElement( 'li', array(), $link ); $msg = wfMsgHtml('openstackmanager-addrule-action'); $link = Linker::link($this->getTitle(), $msg, array(), array('action' => 'addrule', 'project' => $project, 'groupname' => $group->getGroupName())); $actions .= Html::rawElement('li', array(), $link); $actions = Html::rawElement('ul', array(), $actions); } $groupOut .= Html::rawElement('td', array(), $actions); if (isset($projectArr["{$project}"])) { $projectArr["{$project}"] .= Html::rawElement('tr', array(), $groupOut); } else { $projectArr["{$project}"] = Html::rawElement('tr', array(), $groupOut); } } foreach ($userProjects as $project) { $action = ''; if ($this->userLDAP->inRole('netadmin', $project)) { $action = Linker::link($this->getTitle(), wfMsgHtml('openstackmanager-createnewsecuritygroup'), array(), array('action' => 'create', 'project' => $project)); $action = Html::rawElement('span', array('id' => 'novaaction'), "[{$action}]"); } $projectName = Html::rawElement('span', array('class' => 'mw-customtoggle-' . $project, 'id' => 'novaproject'), $project); $out .= Html::rawElement('h2', array(), "{$projectName} {$action}"); if (isset($projectArr["{$project}"])) { $projectOut = $groupheader; $projectOut .= $projectArr["{$project}"]; $projectOut = Html::rawElement('table', array('id' => 'novainstancelist', 'class' => 'wikitable sortable'), $projectOut); } $out .= Html::rawElement('div', array('class' => 'mw-collapsible', 'id' => 'mw-customcollapsible-' . $project), $projectOut); } $this->getOutput()->addHTML($out); return true; }