Andrew Bogott has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/88187


Change subject: DRAFT  --  add a gui for invisible unicorn
......................................................................

DRAFT  --  add a gui for invisible unicorn

Change-Id: I9844258ef4fcf1045e02202fd3fe67d14a6ffad5
---
M OpenStackManager.i18n.php
M OpenStackManager.php
M nova/OpenStackNovaController.php
A nova/OpenStackNovaProxy.php
A special/SpecialNovaProxy.php
5 files changed, 550 insertions(+), 0 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/OpenStackManager 
refs/changes/87/88187/1

diff --git a/OpenStackManager.i18n.php b/OpenStackManager.i18n.php
index da3c9a3..e8b0025 100644
--- a/OpenStackManager.i18n.php
+++ b/OpenStackManager.i18n.php
@@ -40,6 +40,7 @@
        'novarole' => 'Manage global roles',
        'novavolume' => 'Manage storage volumes',
        'novasudoer' => 'Manage sudo policies',
+       'novaproxy' => 'Manage instance proxies',
        'novapuppetgroup' => 'Manage Puppet groups',
 
        'openstackmanager-novadomain' => 'Nova domain',
@@ -385,6 +386,20 @@
        'openstackmanager-modifiedsudoer' => 'Successfully modified sudo 
policy.',
        'openstackmanager-nonexistantsudoer' => 'The requested sudo policy does 
not exist.',
 
+       'openstackmanager-proxylist' => 'Instance proxy list',
+       'openstackmanager-createproxy' => 'Create proxy',
+       'openstackmanager-deleteproxy' => 'Delete proxy',
+       'openstackmanager-deleteproxysuccess' => 'Deleted proxy at $1',
+       'openstackmanager-deleteproxyfailed' => 'Failed to delete proxy at $1',
+       'openstackmanager-deleteproxy-confirm' => 'Are you sure you would like 
to delete the proxy at $1?',
+       'openstackmanager-proxyname' => 'DNS hostname',
+       'openstackmanager-proxybackend' => 'Instance',
+       'openstackmanager-proxyport' => 'Instance port',
+       'openstackmanager-novaproxy-frontend' => 'New proxy frontend',
+       'openstackmanager-novaproxy-backend' => 'New proxy backend',
+       'openstackmanager-createproxyfailed' => 'Failed to create new proxy 
$1.',
+       'openstackmanager-createdproxy' => 'Successfully created new proxy $1 
for backend $2.',
+
        'openstackmanager-novapuppetgroup' => 'Nova Puppet group',
        'openstackmanager-puppetgrouplist' => 'Puppet group list',
        'openstackmanager-puppetallprojects' => 'All projects',
diff --git a/OpenStackManager.php b/OpenStackManager.php
index 6d67f7d..67275d9 100644
--- a/OpenStackManager.php
+++ b/OpenStackManager.php
@@ -65,6 +65,10 @@
 // %u is username, %p is $wgOpenStackManagerServiceGroupPrefix.
 $wgOpenStackManagerServiceGroupHomedirPattern = '/home/%p%u/';
 
+// For the moment the instance proxy only lives in one place.
+$wgOpenStackManagerProxyServiceRegion = 'pmtpa';
+$wgOpenStackManagerProxyGateway = '10.4.0.214';
+
 $wgOpenStackManagerIdRanges = array(
        'service' => array(
                'gid' => array( 'min' => 40000, 'max' => 49999 ),
@@ -152,6 +156,7 @@
 $wgAutoloadClasses['OpenStackNovaServiceGroup'] = $dir . 
'nova/OpenStackNovaServiceGroup.php';
 $wgAutoloadClasses['OpenStackNovaVolume'] = $dir . 
'nova/OpenStackNovaVolume.php';
 $wgAutoloadClasses['OpenStackNovaSudoer'] = $dir . 
'nova/OpenStackNovaSudoer.php';
+$wgAutoloadClasses['OpenStackNovaProxy'] = $dir . 
'nova/OpenStackNovaProxy.php';
 $wgAutoloadClasses['OpenStackNovaArticle'] = $dir . 
'nova/OpenStackNovaArticle.php';
 $wgAutoloadClasses['OpenStackNovaHostJob'] = $dir . 
'nova/OpenStackNovaHostJob.php';
 $wgAutoloadClasses['OpenStackNovaPuppetGroup'] = $dir . 
'nova/OpenStackNovaPuppetGroup.php';
@@ -169,6 +174,7 @@
 $wgAutoloadClasses['SpecialNovaServiceGroup'] = $dir . 
'special/SpecialNovaServiceGroup.php';
 $wgAutoloadClasses['SpecialNovaVolume'] = $dir . 
'special/SpecialNovaVolume.php';
 $wgAutoloadClasses['SpecialNovaSudoer'] = $dir . 
'special/SpecialNovaSudoer.php';
+$wgAutoloadClasses['SpecialNovaProxy'] = $dir . 'special/SpecialNovaProxy.php';
 $wgAutoloadClasses['SpecialNovaPuppetGroup'] = $dir . 
'special/SpecialNovaPuppetGroup.php';
 $wgAutoloadClasses['SpecialNova'] = $dir . 'special/SpecialNova.php';
 $wgAutoloadClasses['ApiNovaInstance'] = $dir . 'api/ApiNovaInstance.php';
@@ -199,6 +205,8 @@
 $wgSpecialPageGroups['NovaVolume'] = 'nova';
 $wgSpecialPages['NovaSudoer'] = 'SpecialNovaSudoer';
 $wgSpecialPageGroups['NovaSudoer'] = 'nova';
+$wgSpecialPages['NovaProxy'] = 'SpecialNovaProxy';
+$wgSpecialPageGroups['NovaProxy'] = 'nova';
 $wgJobClasses['addDNSHostToLDAP'] = 'OpenStackNovaHostJob';
 $wgSpecialPageGroups['NovaPuppetGroup'] = 'nova';
 $wgSpecialPages['NovaPuppetGroup'] = 'SpecialNovaPuppetGroup';
diff --git a/nova/OpenStackNovaController.php b/nova/OpenStackNovaController.php
index 830d418..3e6d606 100644
--- a/nova/OpenStackNovaController.php
+++ b/nova/OpenStackNovaController.php
@@ -155,6 +155,83 @@
                return null;
        }
 
+       function createProxy( $fqdn, $backendHost, $backendPort ) {
+               $data = array( 'domain' => $fqdn, 'backends' => array ( 
$backendHost . ':' . $backendPort ) );
+               $ret = $this->restCall( 'proxy', '/mapping', 'PUT', $data );
+
+               if ( $ret['code'] !== 200 ) {
+                       return null;
+               }
+
+               $proxyObj = new OpenStackNovaProxy( $this->project, $fqdn, 
$backendHost, $backendPort );
+               return $proxyObj;
+       }
+
+       function deleteProxy( $fqdn ) {
+               $ret = $this->restCall( 'proxy', '/mapping/' . $fqdn, 'DELETE' 
);
+
+               if ( $ret['code'] !== 200 ) {
+                       return false;
+               }
+
+               return true;
+       }
+
+       /**
+        * @return array
+        */
+       function getProxiesForProject() {
+               global $wgAuth;
+
+               $proxyarr = array();
+               $ret = $this->restCall( 'proxy', '/mapping', 'GET' );
+               $proxies = self::_get_property( $ret['body'], 'routes' );
+               if ( !$proxies ) {
+                       return $proxyarr;
+               }
+               foreach ( $proxies as $proxy ) {
+                       $domain = self::_get_property( $proxy, 'domain' );
+                       $backends = self::_get_property( $proxy, 'backends' );
+
+                       if ( (count( $backends ) ) > 1 ) {
+                               $wgAuth->printDebug( "Warning!  proxy $domain 
has multiple backends but we only support one backend per proxy.", NONSENSITIVE 
);
+                       }
+                       $backend = $backends[0];
+                       $backendarray = explode(  ':', $backends[0] );
+
+                       if ( strpos( $backend, "http" ) === 0 ) {
+                               if ( ( count( $backendarray ) < 2 ) or ( count( 
$backendarray ) > 3 ) ) {
+                                       $wgAuth->printDebug( "Unable to parse 
backend $backend, discarding.", NONSENSITIVE );
+                               } elseif ( count( $backendarray ) == 2 ) {
+                                       $backendHost = $backend;
+                                       $backendPort = null;
+                               } else {
+                                       $backendHost = $backendarray[0] . ":" . 
$backendarray[1];
+                                       $backendPort = $backendarray[2];
+                               }
+                       } else {
+                               if ( ( count( $backendarray ) < 1 ) or ( count( 
$backendarray ) > 2 ) ) {
+                                       $wgAuth->printDebug( "Unable to parse 
backend $backend, discarding.", NONSENSITIVE );
+                               } elseif ( count( $backendarray ) == 1 ) {
+                                       $backendHost = $backend;
+                                       $backendPort = null;
+                               } else {
+                                       $backendHost = $backendarray[0];
+                                       $backendPort = $backendarray[1];
+                               }
+                       }
+
+                       if ( $backendPort ) {
+                               $proxyObj = new OpenStackNovaProxy( 
$this->project, $domain, $backendHost, $backendPort );
+                       } else {
+                               $proxyObj = new OpenStackNovaProxy( 
$this->project, $domain, $backendHost );
+                       }
+
+                       $proxyarr[] = $proxyObj;
+               }
+               return $proxyarr;
+       }
+
        /**
         * @return array
         */
diff --git a/nova/OpenStackNovaProxy.php b/nova/OpenStackNovaProxy.php
new file mode 100644
index 0000000..b684da5
--- /dev/null
+++ b/nova/OpenStackNovaProxy.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * class for nova sudoers
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class OpenStackNovaProxy {
+
+       var $proxyFQDN;
+       var $backendName;
+       var $backendPort;
+
+       /**
+        * @param $sudoername
+        * @param $projectName
+        */
+       function __construct( $projectName, $proxyFQDN, $backendName = "", 
$backendPort = '80' ) {
+               $this->projectName = $projectName;
+               $this->proxyFQDN = $proxyFQDN;
+               if ( ! $backendName ) {
+                       $this->fetchProxyInfo();
+               } else {
+                       $this->backendName = $backendName;
+                       $this->backendPort = $backendPort;
+               }
+       }
+
+       function fetchProxyInfo() {
+               global $wgMemc;
+
+               # TODO:  Implement rest backend
+               $this->backendName = "fake";
+               $this->backendPort = "80";
+       }
+
+       /**
+        * Return the proxy hostname
+        *
+        * @return string
+        */
+       function getProxyFQDN() {
+               return $this->proxyFQDN;
+       }
+
+       /**
+        * Return the proxy hostname
+        *
+        * @return string
+        */
+       function getBackend() {
+               $backend = $this->backendName . ":" . $this->backendPort;
+               return $backend;
+       }
+
+       /**
+        * Get all proxies for a given project
+        *
+        * @param $projectName
+        * @return array of OpenStackNovaProxy
+        */
+       static function getAllProxiesByProject( $projectName ) {
+               $proxyObjList = $this->userNova->getProxies();
+               return $proxyObjList;
+
+               #TODO:  implement this for real
+               $proxyList = array();
+               $proxyList[] = "$projectName" . "-fakeproxy1";
+               $proxyList[] = "$projectName" . "-fakeproxy2";
+               $proxyList[] = "$projectName" . "-fakeproxy3";
+
+               $proxyObjList = array();
+               foreach ( $proxyList as $proxy ) {
+                       $proxyObjList[] = new OpenStackNovaProxy( $projectName, 
$proxy );
+               }
+
+               return $proxyObjList;
+       }
+}
diff --git a/special/SpecialNovaProxy.php b/special/SpecialNovaProxy.php
new file mode 100644
index 0000000..c67fbb2
--- /dev/null
+++ b/special/SpecialNovaProxy.php
@@ -0,0 +1,369 @@
+<?php
+
+/**
+ * todo comment me
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class SpecialNovaProxy extends SpecialNova {
+       var $userLDAP;
+       var $userNova;
+
+       function __construct() {
+               parent::__construct( 'NovaProxy' );
+       }
+
+       function execute( $par ) {
+               global $wgOpenStackManagerProxyServiceRegion;
+               if ( !$this->getUser()->isLoggedIn() ) {
+                       $this->notLoggedIn();
+                       return;
+               }
+               $this->userLDAP = new OpenStackNovaUser();
+               if ( !$this->userLDAP->exists() ) {
+                       $this->noCredentials();
+                       return;
+               }
+               $this->checkTwoFactor();
+               $project = $this->getRequest()->getText( 'project' );
+               $region = $wgOpenStackManagerProxyServiceRegion;
+               $this->userNova = OpenStackNovaController::newFromUser( 
$this->userLDAP );
+               $this->userNova->setProject( $project );
+               $this->userNova->setRegion( $region );
+
+               $action = $this->getRequest()->getVal( 'action' );
+               $this->projectName = $this->getRequest()->getText( 'project' );
+               $this->project = OpenStackNovaProject::getProjectByName( 
$this->projectName );
+               if ( $action === "create" ) {
+                       if ( ! $this->userLDAP->inProject( $this->projectName ) 
) {
+                               $this->notInProject( $this->projectName );
+                               return;
+                       }
+                       $this->createProxy();
+               } elseif ( $action === "delete" ) {
+                       if ( ! $this->userLDAP->inProject( $this->projectName ) 
) {
+                               $this->notInProject( $this->project );
+                               return;
+                       }
+                       $this->deleteProxy();
+               } elseif ( $action === "modify" ) {
+                       if ( ! $this->userLDAP->inProject( $this->projectName ) 
) {
+                               $this->notInProject( $this->project );
+                               return;
+                       }
+                       $this->modifyProxy();
+               } else {
+                       $this->listProxies();
+               }
+       }
+
+       /**
+        * @return bool
+        */
+       function createProxy() {
+               $project = $this->getRequest()->getText( 'project' );
+               $this->setHeaders();
+               $this->getOutput()->setPagetitle( $this->msg( 
'openstackmanager-createproxy' ) );
+               if ( ! $this->userLDAP->inRole( 'projectadmin', 
$this->projectName ) ) {
+                       $this->notInRole( 'projectadmin', $this->projectName );
+                       return false;
+               }
+               $instance_keys = array();
+               $regions = $this->userNova->getRegions( 'compute' );
+               foreach ( $regions as $region ) {
+                       $this->userNova->setRegion( $region );
+                       $instances = $this->userNova->getInstances();
+                       foreach ( $instances as $instance ) {
+                               if ( $instance->getProject() === 
$this->projectName ) {
+                                       $instancename = 
$instance->getHost()->getFullyQualifiedDisplayName();
+                                       $instance_keys[$instancename] = 
$instancename;
+                               }
+                       }
+               }
+               ksort( $instance_keys );
+
+               $domains = OpenStackNovaDomain::getAllDomains( 'public' );
+               $domain_keys = array();
+               foreach ( $domains as $domain ) {
+                       $domainname = $domain->getDomainName();
+                       $fqdn = $domain->getFullyQualifiedDomainName();
+                       $domain_keys[$fqdn] = $domainname;
+               }
+               ksort( $domain_keys );
+
+               $proxyInfo = array();
+               $proxyInfo['proxyname'] = array(
+                       'type' => 'text',
+                       'label-message' => 'openstackmanager-proxyname',
+                       'default' => '',
+                       'section' => 'frontend',
+                       'name' => 'proxyname',
+               );
+               $proxyInfo['domain'] = array(
+                       'type' => 'select',
+                       'options' => $domain_keys,
+                       'label-message' => 'openstackmanager-dnsdomain',
+                       'section' => 'frontend',
+                       'name' => 'domain',
+               );
+               $proxyInfo['backendhost'] = array(
+                       'type' => 'select',
+                       'label-message' => 'openstackmanager-proxybackend',
+                       'options' => $instance_keys,
+                       'section' => 'backend',
+                       'name' => 'backendhost',
+               );
+               $proxyInfo['backendport'] = array(
+                       'type' => 'text',
+                       'label-message' => 'openstackmanager-proxyport',
+                       'default' => '80',
+                       'section' => 'backend',
+                       'name' => 'backendport',
+               );
+               $proxyInfo['action'] = array(
+                       'type' => 'hidden',
+                       'default' => 'create',
+                       'name' => 'action',
+               );
+               $proxyInfo['project'] = array(
+                       'type' => 'hidden',
+                       'default' => $project,
+                       'name' => 'project',
+               );
+
+               $proxyForm = new HTMLForm( $proxyInfo, 
'openstackmanager-novaproxy' );
+               $proxyForm->setTitle( SpecialPage::getTitleFor( 'NovaProxy' ) );
+               $proxyForm->setSubmitID( 'novaproxy-form-createproxysubmit' );
+               $proxyForm->setSubmitCallback( array( $this, 'tryCreateSubmit' 
) );
+               $proxyForm->show();
+
+               return true;
+       }
+
+       /**
+        * @return bool
+        */
+       function deleteProxy() {
+               $this->setHeaders();
+               $this->getOutput()->setPagetitle( $this->msg( 
'openstackmanager-deleteproxy' ) );
+               if ( ! $this->userLDAP->inRole( 'projectadmin', 
$this->projectName ) ) {
+                       $this->notInRole( 'projectadmin', $this->projectName );
+                       return false;
+               }
+               $proxyfqdn = $this->getRequest()->getText( 'proxyfqdn' );
+               if ( ! $this->getRequest()->wasPosted() ) {
+                       $this->getOutput()->addWikiMsg( 
'openstackmanager-deleteproxy-confirm', $proxyfqdn );
+               }
+               $proxyInfo = array();
+               $proxyInfo['proxyfqdn'] = array(
+                       'type' => 'hidden',
+                       'default' => $proxyfqdn,
+                       'name' => 'proxyfqdn',
+               );
+               $proxyInfo['project'] = array(
+                       'type' => 'hidden',
+                       'default' => $this->projectName,
+                       'name' => 'project',
+               );
+               $proxyInfo['action'] = array(
+                       'type' => 'hidden',
+                       'default' => 'delete',
+                       'name' => 'action',
+               );
+               $proxyForm = new HTMLForm( $proxyInfo, 
'openstackmanager-novaproxy' );
+               $proxyForm->setTitle( SpecialPage::getTitleFor( 'NovaProxy' ) );
+               $proxyForm->setSubmitID( 'novaproxy-form-deleteproxysubmit' );
+               $proxyForm->setSubmitCallback( array( $this, 'tryDeleteSubmit' 
) );
+               $proxyForm->show();
+
+               return true;
+       }
+
+       /**
+        * @return void
+        */
+       function listProxies() {
+               $this->setHeaders();
+               $this->getOutput()->addModuleStyles( 'ext.openstack' );
+               $this->getOutput()->setPagetitle( $this->msg( 
'openstackmanager-proxylist' ) );
+
+               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;
+                       }
+                       $actions = array( 'projectadmin' => array() );
+                       $actions['projectadmin'][] = $this->createActionLink( 
'openstackmanager-createproxy', array( 'action' => 'create', 'project' => 
$projectName ) );
+                       $out .= $this->createProjectSection( $projectName, 
$actions, $this->getProxies( $projectName ) );
+               }
+
+               $this->getOutput()->addHTML( $out );
+       }
+
+       function getProxies( $projectName ) {
+               $this->userNova->setProject( $projectName );
+               $proxies = $this->userNova->getProxiesForProject();
+               $proxyRows = array();
+               foreach ( $proxies as $proxy ) {
+                       $fqdn = $proxy->getProxyFQDN();
+                       if ( $fqdn ) {
+                               // $instanceNames will be output later with no 
change of escaping
+                               $proxyRow = array();
+                               $this->pushRawResourceColumn( $proxyRow, $fqdn 
);
+                               $this->pushRawResourceColumn( $proxyRow, 
$proxy->getBackend() );
+
+                   $actions = array();
+                   $actions[] = $this->createActionLink( 
'openstackmanager-delete',
+                                                                       array( 
'action' => 'delete', 'proxyfqdn' => $fqdn, 'project' => $projectName ) );
+                   $this->pushRawResourceColumn( $proxyRow, 
$this->createResourceList( $actions ) );
+
+
+                               $proxyRows[] = $proxyRow;
+                       }
+               }
+               if ( $proxyRows ) {
+                       $headers = array( 'openstackmanager-proxyname', 
'openstackmanager-proxybackend', 'openstackmanager-actions' );
+                       $out = $this->createResourceTable( $headers, $proxyRows 
);
+               } else {
+                       $out = '';
+               }
+
+               return $out;
+       }
+
+       function addHost($hostName, $domain, $ip) {
+               $domain = OpenStackNovaDomain::getDomainByName( $domain );
+               $hostbyip = OpenStackNovaHost::getHostByPublicIP( $ip );
+               $fqdn = $hostName . '.' . 
$domain->getFullyQualifiedDomainName();
+
+               if ( $hostbyip ) {
+                       # We need to add an associateddomain, if the 
associateddomain doesn't already exist
+                       $success = $hostbyip->addAssociatedDomain( $fqdn );
+                       if ( ! $success ) {
+                               return false;
+                       }
+               } else {
+                       # This is a new host entry
+                       $host = OpenStackNovaHost::addPublicHost( $hostName, 
$ip, $domain );
+                       if ( ! $host ) {
+                               return false;
+                       }
+               }
+
+               return true;
+       }
+
+       function deleteHost($fqdn, $ip) {
+               $host = OpenStackNovaHost::getHostByPublicIP( $ip );
+        if ( $host ) {
+                       $records = $host->getAssociatedDomains();
+                               if ( count( $records ) > 1 ) {
+                               # We need to keep the host, but remove the fqdn
+                               $success = $host->deleteAssociatedDomain( $fqdn 
);
+                               if ( $success ) {
+                                       return true;
+                               } else {
+                                       return false;
+                               }
+                       } else {
+                               # We need to remove the host entry
+                               $success = $host->deleteHost();
+                               if ( $success ) {
+                                       return true;
+                               } else {
+                                       return false;
+                               }
+                       }
+               } else {
+                       # No such host!
+                       return false;
+               }
+       }
+
+       /**
+        * @param  $formData
+        * @param string $entryPoint
+        * @return bool
+        */
+       function tryDeleteSubmit( $formData, $entryPoint = 'internal' ) {
+               global $wgOpenStackManagerProxyGateway;
+
+               $outputPage = $this->getOutput();
+               $fqdn = $formData['proxyfqdn'];
+
+               $success =  $this->userNova->deleteProxy( $fqdn );
+               if ( $success ) {
+                       $success = $this->deleteHost( $fqdn, 
$wgOpenStackManagerProxyGateway );
+                       if ( ! $success ) {
+                               $outputPage->addWikiMsg( 
'openstackmanager-removehostfailed', $fqdn );
+                       }
+               } else {
+                       $outputPage->addWikiMsg( 
'openstackmanager-deleteproxyfailed', $fqdn );
+                       return false;
+               }
+
+               $outputPage->addWikiMsg( 'openstackmanager-deleteproxysuccess', 
$fqdn );
+               return true;
+       }
+
+
+       /**
+        * @param  $formData
+        * @param string $entryPoint
+        * @return bool
+        */
+       function tryCreateSubmit( $formData, $entryPoint = 'internal' ) {
+               global $wgOpenStackManagerProxyGateway;
+               $gatewayIP = $wgOpenStackManagerProxyGateway;
+               
+               $project = $formData['project'];
+               $backendPort = $formData['backendport'];
+               $backendHost = $formData['backendhost'];
+
+               $proxyName = $formData['proxyname'];
+               $proxyDomain = $formData['domain'];
+
+               $domain = OpenStackNovaDomain::getDomainByName( $proxyDomain );
+               $gatewayhostbyip = OpenStackNovaHost::getHostByPublicIP( 
$gatewayIP );
+               $fqdn = $proxyName . '.' . 
$domain->getFullyQualifiedDomainName();
+
+               $outputPage = $this->getOutput();
+
+               $dnsSuccess = $this->addHost($proxyName, $proxyDomain, 
$gatewayIP);
+               if ( $dnsSuccess ) {
+                       $outputPage->addWikiMsg( 'openstackmanager-addedhost', 
$proxyName, $gatewayIP );
+               } else {
+                       $outputPage->addWikiMsg( 
'openstackmanager-addhostfailed', $proxyName, $gatewayIP );
+                       return false;
+               }
+
+               # 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);
+                       return false;
+               }
+
+               return true;
+       }
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/88187
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9844258ef4fcf1045e02202fd3fe67d14a6ffad5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/OpenStackManager
Gerrit-Branch: master
Gerrit-Owner: Andrew Bogott <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to