/**
  * 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;
 }
コード例 #3
0
 /**
  * @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;
 }
コード例 #6
0
	/**
	 * 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;
		}
	}
コード例 #7
0
	/**
	 * 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;
		}
	}
コード例 #8
0
	/**
	 * @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;
 }