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