/** * Adds a host entry based on the hostname, IP addrss, and a domain. Returns null * if the entry already exists, or if the additional fails. This function should be used * for adding public DNS entries. * * @static * @param $hostname * @param $ip * @param $domain OpenStackNovaDomain * @return bool|null|OpenStackNovaHost */ static function addPublicHost( $hostname, $ip, $domain ) { global $wgAuth; global $wgOpenStackManagerLDAPInstanceBaseDN; OpenStackNovaLdapConnection::connect(); $domainname = $domain->getFullyQualifiedDomainName(); $host = OpenStackNovaHost::getHostByName( $hostname, $domain ); if ( $host ) { $wgAuth->printDebug( "Failed to add public host $hostname as the DNS entry already exists", NONSENSITIVE ); return null; } $hostEntry = array(); $hostEntry['objectclass'][] = 'dcobject'; $hostEntry['objectclass'][] = 'dnsdomain'; $hostEntry['objectclass'][] = 'domainrelatedobject'; $hostEntry['dc'] = $hostname; $hostEntry['arecord'] = $ip; $hostEntry['associateddomain'][] = $hostname . '.' . $domainname; $dn = 'dc=' . $hostname . ',dc=' . $domain->getDomainName() . ',' . $wgOpenStackManagerLDAPInstanceBaseDN; $success = LdapAuthenticationPlugin::ldap_add( $wgAuth->ldapconn, $dn, $hostEntry ); if ( $success ) { $domain->updateSOA(); $wgAuth->printDebug( "Successfully added public host $hostname", NONSENSITIVE ); return new OpenStackNovaHost( $hostname, $domain ); } else { $wgAuth->printDebug( "Failed to add public host $hostname", NONSENSITIVE ); return null; } }
/** * @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; }