jenkins-bot has submitted this change and it was merged.

Change subject: Add 'updatedomains' maintenance script.
......................................................................


Add 'updatedomains' maintenance script.

This adds project-qualified fqdns to all instances in ldap.

Change-Id: If638d8cf23ec3eb75360674761f3e1e0ea012d03
---
A maintenance/updatedomains.php
1 file changed, 117 insertions(+), 0 deletions(-)

Approvals:
  coren: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/maintenance/updatedomains.php b/maintenance/updatedomains.php
new file mode 100644
index 0000000..12432d4
--- /dev/null
+++ b/maintenance/updatedomains.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * This script will display or modify puppet information for a given
+ * puppet host.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup Maintenance
+ * @author Ryan Lane
+ */
+
+$IP = getenv( 'MW_INSTALL_PATH' );
+
+if ( $IP === false ) {
+       $IP = __DIR__ . '/../../..';
+
+}
+require_once( "$IP/maintenance/Maintenance.php" );
+
+class UpdateDomains extends Maintenance {
+       public function __construct() {
+               parent::__construct();
+               $this->addOption( 'instance', 'The instance hostname, e.g. 
i-00000001', false, true );
+               $this->addOption( 'name', 'The instance hostname, e.g. 
i-00000001', false, true );
+               $this->addOption( 'project', 'The instance hostname, e.g. 
i-00000001', false, true );
+               $this->addOption( 'region', 'The instance region, e.g. pmtpa', 
false, true );
+               $this->addOption( 'all-instances', 'Run this command on every 
instance.', false, false );
+       }
+
+       public function execute() {
+               global $wgAuth;
+               global $wgOpenStackManagerLDAPUsername;
+               global $wgOpenStackManagerLDAPUserPassword;
+
+               if ( $this->hasOption( 'all-instances' ) ) {
+                       if ( $this->hasOption( 'region' ) ) {
+                               $this->error( "--all-instances cannot be used 
with --region.\n", true );
+                       }
+                       $instancelist = array();
+                       $user = new OpenStackNovaUser( 
$wgOpenStackManagerLDAPUsername );
+                       $userNova = OpenStackNovaController::newFromUser( $user 
);
+                       $projects = OpenStackNovaProject::getAllProjects();
+                       $userNova->setProject( 'bastion' );
+                       $userNova->authenticate( 
$wgOpenStackManagerLDAPUsername, $wgOpenStackManagerLDAPUserPassword );
+                       $regions = $userNova->getRegions( 'compute' );
+                       foreach ( $regions as $region ) {
+                               foreach ( $projects as $project ) {
+                                       $projectName = 
$project->getProjectName();
+                                       $userNova->setProject( $projectName );
+                                       $userNova->setRegion( $region );
+                                       $instances = $userNova->getInstances();
+                                       if ( $instances ) {
+                                               foreach ( $instances as 
$instance ) {
+                                                       $id = 
$instance->getInstanceId();
+                                                       $instancelist[] = 
array( $instance->getInstanceId(), $region,
+                                                                               
  $instance->getInstanceName(), $projectName );
+                                               }
+                                       }
+                               }
+                       }
+               } elseif ( $this->hasOption( 'instance' ) )  {
+                       if ( ! $this->hasOption( 'region' ) ) {
+                               $this->error( "--instance requires 
--region.\n", true );
+                       }
+                       if ( ! $this->hasOption( 'name' ) ) {
+                               $this->error( "--instance requires --name.\n", 
true );
+                       }
+                       if ( ! $this->hasOption( 'project' ) ) {
+                               $this->error( "--instance requires 
--project.\n", true );
+                       }
+                       $instancelist = array( array( $this->getOption( 
'instance' ), $this->getOption( 'region' ),
+                                                      $this->getOption( 'name' 
), $this->getOption( 'project' ), ) );
+               } else {
+                       $this->error( "Must specify either --instance or 
--all-instances.\n", true );
+               }
+
+               if ( !class_exists( 'OpenStackNovaHost' ) ) {
+                       $this->error( "Couldn't find OpenStackNovaHost 
class.\n", true );
+               }
+               OpenStackNovaLdapConnection::connect();
+               foreach ( $instancelist as $instancepair ) {
+                       $instance = $instancepair[0];
+                       $instanceregion = $instancepair[1];
+                       $instancename = $instancepair[2];
+                       $instanceproject = $instancepair[3];
+                       $host = OpenStackNovaHost::getHostByInstanceId( 
$instance, $instanceregion );
+                       if ( ! $host ) {
+                               print "Skipping $instance.$instanceregion; not 
found.\n";
+                               continue;
+                       }
+
+                       print "\nFor instance $instance name $instancename in 
region $instanceregion and project $instanceproject:\n\n";
+
+                       $idfqdn = $instance . '.' . $instanceproject . '.' . 
$instanceregion . '.' . 'wmflabs';
+                       $host->addAssociatedDomain($idfqdn);
+                       $namefqdn = $instancename . '.' . $instanceproject . 
'.' . $instanceregion . '.' . 'wmflabs';
+                       $host->addAssociatedDomain($namefqdn);
+               }
+       }
+}
+
+$maintClass = "UpdateDomains";
+require_once( RUN_MAINTENANCE_IF_MAIN );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: If638d8cf23ec3eb75360674761f3e1e0ea012d03
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/OpenStackManager
Gerrit-Branch: master
Gerrit-Owner: Andrew Bogott <abog...@wikimedia.org>
Gerrit-Reviewer: coren <mpellet...@wikimedia.org>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to