/** * Return the domain associated with this host * * @return OpenStackNovaDomain */ function getDomain() { global $wgAuth; if (!$this->domainCache) { $this->domainCache = OpenStackNovaDomain::getDomainByHostIP($this->ip); if (!$this->domainCache) { $wgAuth->printDebug("Looked up domain for ip {$this->ip} but domainCache is still empty.", NONSENSITIVE); } } return $this->domainCache; }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryDeleteSubmit($formData, $entryPoint = 'internal') { list($success, $errmsg) = OpenStackNovaDomain::deleteDomain($formData['domainname']); if ($success) { $this->getOutput()->addWikiMsg('openstackmanager-deleteddomain'); } else { $this->getOutput()->addWikiMsg($errmsg); } $out = '<br />'; $out .= Linker::link($this->getPageTitle(), $this->msg('openstackmanager-backdomainlist')->escaped()); $this->getOutput()->addHTML($out); return true; }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryCreateSubmit($formData, $entryPoint = 'internal') { $domain = OpenStackNovaDomain::getDomainByName($formData['domain']); if (!$domain) { $this->getOutput()->addWikiMsg('openstackmanager-invaliddomain'); return true; } $instance = $this->userNova->createInstance($formData['instancename'], $formData['imageType'], '', $formData['instanceType'], $formData['availabilityZone'], $formData['groups']); if ($instance) { $host = OpenStackNovaHost::addHost($instance, $domain, $this->getPuppetInfo($formData)); if ($host) { $title = Title::newFromText($this->getOutput()->getPageTitle()); $job = new OpenStackNovaHostJob($title, array('instanceid' => $instance->getInstanceId())); $job->insert(); $this->getOutput()->addWikiMsg('openstackmanager-createdinstance', $instance->getInstanceID(), $instance->getImageId(), $host->getFullyQualifiedHostName()); } else { $this->userNova->terminateInstance($instance->getInstanceId()); $this->getOutput()->addWikiMsg('openstackmanager-createfailedldap'); } # TODO: also add puppet } else { $this->getOutput()->addWikiMsg('openstackmanager-createinstancefailed'); } $out = '<br />'; $out .= Linker::link($this->getTitle(), wfMsgHtml('openstackmanager-backinstancelist')); $this->getOutput()->addHTML($out); return true; }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryCreateSubmit($formData, $entryPoint = 'internal') { global $wgUser; global $wgAuth; $domain = OpenStackNovaDomain::getDomainByName($formData['region']); $project = $formData['project']; $region = $formData['region']; if (!$domain) { $this->getOutput()->addWikiMsg('openstackmanager-invaliddomain'); return true; } $instance = $this->userNova->createInstance($formData['instancename'], $formData['imageType'], '', $formData['instanceType'], $formData['groups']); if ($instance) { // In essex it seems attributes from extensions aren't returned. So, // for now we need to work around this by fetching the instance again. $instanceId = $instance->getInstanceOSId(); $instance = $this->userNova->getInstance($instanceId); $image = $this->userNova->getImage($instance->getImageId()); $imageName = $image->getImageName(); $this->getOutput()->addWikiMsg('openstackmanager-createdinstance', $instance->getInstanceID(), $imageName); } else { $this->getOutput()->addWikiMsg('openstackmanager-createinstancefailed'); } $out = '<br />'; $out .= Linker::link($this->getPageTitle(), $this->msg('openstackmanager-backinstancelist')->escaped()); $this->getOutput()->addHTML($out); return true; }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryCreateSubmit($formData, $entryPoint = 'internal') { global $wgOpenStackManagerProxyGateways; $goback = '<br />'; $goback .= Linker::link($this->getPageTitle(), $this->msg('openstackmanager-backproxylist')->escaped()); $project = $formData['project']; $backendPort = $formData['backendport']; $backendHost = $formData['backendhost']; $region = $formData['region']; $proxyName = $formData['proxyname']; $proxyDomain = $formData['domain']; $outputPage = $this->getOutput(); $gatewayIP = $wgOpenStackManagerProxyGateways[$region]; if (!array_key_exists($region, $wgOpenStackManagerProxyGateways)) { $outputPage->addWikiMsg('openstackmanager-addhostfailed', $proxyName, $gatewayIP); $outputPage->addHTML($goback); return true; } $domain = OpenStackNovaDomain::getDomainByName($proxyDomain); $gatewayhostbyip = OpenStackNovaHost::getHostByPublicIP($gatewayIP); $fqdn = $proxyName . '.' . $domain->getFullyQualifiedDomainName(); $dnsSuccess = $this->addHost($proxyName, $proxyDomain, $gatewayIP); if ($dnsSuccess) { $outputPage->addWikiMsg('openstackmanager-addedhost', $proxyName, $gatewayIP); } else { $outputPage->addWikiMsg('openstackmanager-addhostfailed', $proxyName, $gatewayIP); $outputPage->addHTML($goback); return true; } # DNS looks good, now we can set up the proxy. $newProxy = $this->userNova->createProxy($fqdn, $backendHost, $backendPort); if ($newProxy) { $outputPage->addWikiMsg('openstackmanager-createdproxy', $fqdn, $backendHost . ":" . $backendPort); } else { $outputPage->addWikiMsg('openstackmanager-createproxyfailed', $fqdn); $this->deleteHost($fqdn, $gatewayIP); $outputPage->addHTML($goback); return true; } $outputPage->addHTML($goback); return true; }
/** * Create a new domain based on shortname, fully qualified domain name * and location. If location is an empty string, the domain created will * be a public domain, otherwise it will be a private domain for instance * creation. Returns null on domain creation failure. * * @static * @param $domainname * @param $fqdn * @param $location * @return null|OpenStackNovaDomain */ static function createDomain( $domainname, $fqdn, $location ) { global $wgAuth; global $wgOpenStackManagerLDAPInstanceBaseDN; global $wgOpenStackManagerDNSOptions; OpenStackNovaLdapConnection::connect(); $soa = OpenStackNovaDomain::generateSOA(); $domain = array(); $domain['objectclass'][] = 'dcobject'; $domain['objectclass'][] = 'dnsdomain'; $domain['objectclass'][] = 'domainrelatedobject'; $domain['dc'] = $domainname; $domain['soarecord'] = $wgOpenStackManagerDNSOptions['servers']['primary'] . ' ' . $soa; $domain['associateddomain'] = $fqdn; if ( $location ) { $domain['l'] = $location; } $dn = 'dc=' . $domainname . ',' . $wgOpenStackManagerLDAPInstanceBaseDN; $success = LdapAuthenticationPlugin::ldap_add( $wgAuth->ldapconn, $dn, $domain ); if ( $success ) { $wgAuth->printDebug( "Successfully added domain $domainname", NONSENSITIVE ); return new OpenStackNovaDomain( $domainname ); } else { $wgAuth->printDebug( "Failed to add domain $domainname", NONSENSITIVE ); return null; } }
/** * Get all host entries that have the specified IP address assigned. Returns * an empty array if none are found. * * @static * @param $ip * @return array */ static function getHostsByIP( $ip ) { global $wgAuth; global $wgOpenStackManagerLDAPInstanceBaseDN; $result = LdapAuthenticationPlugin::ldap_search( $wgAuth->ldapconn, $wgOpenStackManagerLDAPInstanceBaseDN, '(arecord=' . $ip . ')' ); $hostsInfo = LdapAuthenticationPlugin::ldap_get_entries( $wgAuth->ldapconn, $result ); if ( $hostsInfo["count"] == "0" ) { return array(); } else { $hosts = array(); array_shift( $hostsInfo ); foreach ( $hostsInfo as $host ) { $hostname = $host['dc'][0]; $domainname = explode( '.', $host['associateddomain'][0] ); $domainname = $domainname[1]; $domain = OpenStackNovaDomain::getDomainByName( $domainname ); $hostObject = OpenStackNovaHost::getHostByName( $hostname, $domain ); if ( $hostObject ) { $hosts[] = $hostObject; } } return $hosts; } }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryRemoveHostSubmit( $formData, $entryPoint = 'internal' ) { $ip = $formData['ip']; $project = $formData['project']; $address = $this->adminNova->getAddress( $ip ); $outputPage = $this->getOutput(); if ( ! $address ) { $outputPage->addWikiMsg( 'openstackmanager-invalidaddress', $ip ); return true; } if ( $address->getProject() != $project ) { $outputPage->addWikiMsg( 'openstackmanager-invalidaddressforproject', $ip ); return true; } $hostname = $formData['hostname']; $domain = $formData['domain']; $domain = OpenStackNovaDomain::getDomainByName( $domain ); $host = OpenStackNovaHost::getHostByName( $hostname, $domain ); if ( $host ) { $fqdn = $hostname . '.' . $domain->getFullyQualifiedDomainName(); $records = $host->getAssociatedDomains(); if ( count( $records ) > 1 ) { # We need to keep the host, but remove the fqdn $success = $host->deleteAssociatedDomain( $fqdn ); if ( $success ) { $outputPage->addWikiMsg( 'openstackmanager-removedhost', $hostname, $ip ); } else { $outputPage->addWikiMsg( 'openstackmanager-removehostfailed', $ip, $hostname ); } } else { # We need to remove the host entry $success = OpenStackNovaHost::deleteHost( $hostname, $domain ); if ( $success ) { $outputPage->addWikiMsg( 'openstackmanager-removedhost', $hostname, $ip ); } else { $outputPage->addWikiMsg( 'openstackmanager-removehostfailed', $ip, $hostname ); } } } else { $outputPage->addWikiMsg( 'openstackmanager-nonexistenthost' ); } $out = '<br />'; $out .= Linker::link( $this->getTitle(), wfMsgHtml( 'openstackmanager-backaddresslist' ) ); $outputPage->addHTML( $out ); return true; }
/** * @param $formData * @param string $entryPoint * @return bool */ function tryAddHostSubmit($formData, $entryPoint = 'internal') { $id = $formData['id']; $address = $this->userNova->getAddress($id); $ip = $address->getPublicIp(); $outputPage = $this->getOutput(); if (!$address) { $outputPage->addWikiMsg('openstackmanager-invalidaddress', $ip); return true; } $hostname = $formData['hostname']; $domain = $formData['domain']; $domain = OpenStackNovaDomain::getDomainByName($domain); $hostbyip = OpenStackNovaHost::getHostByPublicIP($ip); if ($hostbyip) { # We need to add an associateddomain, if the associateddomain doesn't already exist $success = $hostbyip->addAssociatedDomain($hostname . '.' . $domain->getFullyQualifiedDomainName()); if ($success) { $outputPage->addWikiMsg('openstackmanager-addedhost', $hostname, $ip); } else { $outputPage->addWikiMsg('openstackmanager-addhostfailed', $hostname, $ip); } } else { # This is a new host entry $host = OpenStackNovaHost::addPublicHost($hostname, $ip, $domain); if ($host) { $outputPage->addWikiMsg('openstackmanager-addedhost', $hostname, $ip); } else { $outputPage->addWikiMsg('openstackmanager-addhostfailed', $hostname, $ip); } } $this->getOutput(); $out = '<br />'; $out .= Linker::link($this->getPageTitle(), $this->msg('openstackmanager-backaddresslist')->escaped()); $outputPage->addHTML($out); return true; }