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 [email protected]"
+
+# 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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits