Rush has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/337598 )

Change subject: openstack: nova_fullstack_test changes to daemonize
......................................................................

openstack: nova_fullstack_test changes to daemonize

Several assumptions for adhoc testing need to be
addressed in the automation case.  Also need to
add upstart logic (labnet's are trusty).

Change-Id: Ib449c63ac7d520449be320cd9c14fdc4b669230c
---
M modules/openstack/files/nova_fullstack_test.py
A modules/openstack/manifests/nova/fullstack.pp
A modules/openstack/templates/initscripts/nova-fullstack.upstart.erb
3 files changed, 110 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/puppet 
refs/changes/98/337598/1

diff --git a/modules/openstack/files/nova_fullstack_test.py 
b/modules/openstack/files/nova_fullstack_test.py
index 23a8d41..1d1cd0c 100644
--- a/modules/openstack/files/nova_fullstack_test.py
+++ b/modules/openstack/files/nova_fullstack_test.py
@@ -73,7 +73,11 @@
             break
 
 
-def run_remote(node, username, cmd, debug=False):
+def run_remote(node,
+               username,
+               keyfile,
+               cmd,
+               debug=False):
     """ Execute a remote command using SSH
     :param node: str
     :param cmd: str
@@ -96,7 +100,7 @@
         '-o',
         'LogLevel={}'.format('DEBUG' if debug else 'ERROR'),
         '-i',
-        'id_osstackcanary_rsa',
+        keyfile,
         '{}@{}'.format(username, node),
     ]
 
@@ -133,7 +137,7 @@
     return ns.interval
 
 
-def verify_ssh(address, user, timeout):
+def verify_ssh(address, user, keyfile, timeout):
     """ ensure SSH works to an instance
     :param address: str
     :param timeout: int
@@ -142,9 +146,9 @@
     with Timer() as vs:
         logging.info('SSH to {}'.format(address))
         while True:
-            time.sleep(60)
+            time.sleep(30)
             try:
-                run_remote(address, user, '/bin/true')
+                run_remote(address, user, keyfile, '/bin/true')
                 break
             except subprocess.CalledProcessError as e:
                 logging.debug(e)
@@ -156,7 +160,7 @@
     return vs.interval
 
 
-def verify_puppet(address, user, timeout):
+def verify_puppet(address, user, keyfile, timeout):
     """ Ensure Puppet has run on an instance
     :param address: str
     :param timeout: init
@@ -167,7 +171,7 @@
         while True:
             try:
                 cp = 'sudo cat /var/lib/puppet/state/last_run_summary.yaml'
-                out = run_remote(address, user, cp)
+                out = run_remote(address, user, keyfile, cp)
                 break
             except subprocess.CalledProcessError as e:
                 logging.debug(e)
@@ -277,6 +281,18 @@
     )
 
     argparser.add_argument(
+        '--keyfile',
+        default='',
+        help='Path to SSH key file for verification',
+    )
+
+    argparser.add_argument(
+        '--user',
+        default='',
+        help='Set username (Expected to be the same across all backends)',
+    )
+
+    argparser.add_argument(
         '--prepend',
         default='test-create',
         help='String to add to beginning of instance names',
@@ -304,7 +320,7 @@
 
     argparser.add_argument(
         '--creation-timeout',
-        default=120,
+        default=180,
         type=int,
         help='Allow this long for creation to succeed.',
     )
@@ -400,10 +416,17 @@
         logging.error("cannot skip SSH with adhoc command specified")
         sys.exit(1)
 
+    try:
+        with open(args.keyfile, 'r') as f:
+            f.read()
+    except:
+        logging.error("keyfile {} cannot be read".format(args.keyfile))
+        sys.exit(1)
+
     fulltimer = Timer()
 
     pw = os.environ.get('OS_PASSWORD')
-    user = os.environ.get('OS_USERNAME')
+    user = os.environ.get('OS_USERNAME') or args.user
     project = os.environ.get('OS_TENANT_NAME') or args.project
     if not all([user, pw, project]):
         logging.error('Set username and password environment variables')
@@ -464,12 +487,14 @@
         if not args.skip_ssh:
             vs = verify_ssh(addr,
                             user,
+                            args.keyfile,
                             args.ssh_timeout)
 
             stat('verify.ssh', vs)
             if args.adhoc_command:
                 sshout = run_remote(addr,
                                     user,
+                                    args.keyfile,
                                     args.adhoc_command,
                                     debug=args.debug)
                 logging.debug(sshout)
@@ -477,6 +502,7 @@
         if not args.skip_puppet:
             ps, puppetrun = verify_puppet(addr,
                                           user,
+                                          args.keyfile,
                                           args.puppet_timeout)
             stat('verify.puppet', ps)
 
diff --git a/modules/openstack/manifests/nova/fullstack.pp 
b/modules/openstack/manifests/nova/fullstack.pp
new file mode 100644
index 0000000..c97cc57
--- /dev/null
+++ b/modules/openstack/manifests/nova/fullstack.pp
@@ -0,0 +1,48 @@
+class openstack::nova::fullstack {
+
+    include passwords::openstack::nova
+    $fullstack_pass = $passwords::openstack::nova::osstackcanary_pass
+
+    group { 'osstackcanary':
+        ensure => present,
+        name   => 'osstackcanary',
+    }
+
+    user { 'osstackcanary':
+        ensure     => present,
+        gid        => 'osstackcanary',
+        shell      => '/bin/false',
+        home       => '/var/lib/osstackcanary',
+        managehome => true,
+        system     => true,
+        require    => Group['osstackcanary'],
+    }
+
+    file { '/usr/local/sbin/nova_fullstack_test':
+        ensure => present,
+        mode   => '0755',
+        owner  => 'osstackcanary',
+        group  => 'osstackcanary',
+        source => 'puppet:///modules/openstack/nova_fullstack_test.py',      
+
+    file { '/var/lib/osstackcanary/osstackcanary_id':
+        ensure => present,
+        mode   => '0600',
+        owner  => 'osstackcanary',
+        group  => 'osstackcanary',
+        content => secret('nova/osstackcanary'),
+    }
+
+    file { '/etc/init/nova-fullstack.conf':
+        ensure => present,
+        owner  => 'root',
+        group  => 'root',
+        content => 
template('openstack/initscripts/nova-fullstack.upstart.erb'),
+    }
+
+    base::service_unit { 'nova-fullstack':
+        ensure    => present,
+        upstart   => true,
+        subscribe => File['/etc/init/nova-fullstack.conf'],
+    }
+}
diff --git a/modules/openstack/templates/initscripts/nova-fullstack.upstart.erb 
b/modules/openstack/templates/initscripts/nova-fullstack.upstart.erb
new file mode 100644
index 0000000..2279df8
--- /dev/null
+++ b/modules/openstack/templates/initscripts/nova-fullstack.upstart.erb
@@ -0,0 +1,27 @@
+# nova-fullstack-otest
+
+description "test instance lifecycle (create/setup/delete)"
+author "Chase Pettet cpet...@wikimedia.org"
+
+# When to start the service
+start on runlevel [2345]
+
+# When to stop the service
+stop on runlevel [016]
+
+# Automatically restart process if crashed
+respawn
+
+script
+    export OS_USERNAME="osstackcanary"
+    export OS_PASSWORD="<%= @fullstack_pass %>"
+    /usr/local/sbin/nova_fullstack_test \
+                                       --interval 600 \
+                                       --max-pool 1 \
+                                       --project admin-monitoring \
+                                       --prepend fullstackd \
+                                       --image debian-8.6-jessie \
+                                       --flavor m1.small \
+                                       --keyfile 
/var/lib/osstackcanary/osstackcanary_id \
+                                       --statsd statsd.eqiad.wmnet
+end script

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib449c63ac7d520449be320cd9c14fdc4b669230c
Gerrit-PatchSet: 1
Gerrit-Project: operations/puppet
Gerrit-Branch: production
Gerrit-Owner: Rush <r...@wikimedia.org>

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

Reply via email to