From e0516b6d47c2ad00704a73e1c79affe42bc4ea2f Mon Sep 17 00:00:00 2001 From: Chris Ladd Date: Tue, 19 Feb 2019 09:32:45 -0800 Subject: [PATCH 01/15] INTERNAL: Fixes to Jenkinsfile and extra isos support in test-framework In the Jenkinsfile, the cron option takes UTC, not local timezone. Also fix Amazon S3 upload path. In `test-framework`, the `--extra-isos` arg wasn't being passed to the setup called for unit and integration test-suites. --- Jenkinsfile | 10 +++++----- test-framework/run-tests.sh | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index d3ba312f2..8532e237d 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -27,7 +27,7 @@ pipeline { triggers { // Nightly build of develop (at 3am) - cron(env.BRANCH_NAME == 'develop' ? 'H 3 * * *' : '') + cron(env.BRANCH_NAME == 'develop' ? 'H 11 * * *' : '') } stages { @@ -748,7 +748,7 @@ pipeline { s3Upload( file: env.ISO_FILENAME, bucket: 'teradata-stacki', - path: '/release/stacki/5.x/', + path: 'release/stacki/5.x/', acl: 'PublicRead' ) @@ -756,7 +756,7 @@ pipeline { s3Upload( file: env.STACKIOS_FILENAME, bucket: 'teradata-stacki', - path: '/release/stacki/5.x/', + path: 'release/stacki/5.x/', acl: 'PublicRead' ) } @@ -875,7 +875,7 @@ pipeline { s3Upload( file: env.QCOW_FILENAME, bucket: 'teradata-stacki', - path: '/release/stacki/5.x/', + path: 'release/stacki/5.x/', acl: 'PublicRead' ) } @@ -954,7 +954,7 @@ pipeline { } post { - // Clean up afte ourselves + // Clean up after ourselves always { cleanWs() } diff --git a/test-framework/run-tests.sh b/test-framework/run-tests.sh index f45610977..25ba721d2 100755 --- a/test-framework/run-tests.sh +++ b/test-framework/run-tests.sh @@ -161,7 +161,7 @@ if [[ $ALL -eq 1 || $UNIT -eq 1 ]] then echo echo -e "\033[34mRunning unit test suite ...\033[0m" - ./test-suites/unit/set-up.sh $STACKI_ISO + ./test-suites/unit/set-up.sh $STACKI_ISO "${EXTRA_ISOS[@]}" if [[ $COVERAGE -eq 1 ]] then @@ -187,7 +187,7 @@ if [[ $ALL -eq 1 || $INTEGRATION -eq 1 ]] then echo echo -e "\033[34mRunning integration test suite ...\033[0m" - ./test-suites/integration/set-up.sh $STACKI_ISO + ./test-suites/integration/set-up.sh $STACKI_ISO "${EXTRA_ISOS[@]}" if [[ $COVERAGE -eq 1 ]] then From 8ee209f0af57ce68870ace82581da5be1ed0226c Mon Sep 17 00:00:00 2001 From: Chris Ladd Date: Tue, 19 Feb 2019 16:02:16 -0800 Subject: [PATCH 02/15] INTERNAL: Fix slack message --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8532e237d..4976361ba 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -906,8 +906,8 @@ pipeline { color: 'good', message: """\ New Stacki QCow2 uploaded to Amazon S3. - *URL* http://teradata-stacki.s3.amazonaws.com/release/stacki/5.x/${env.QCOW_FILENAME} - *StackiOS:* http://teradata-stacki.s3.amazonaws.com/release/stacki/5.x/${env.STACKIOS_FILENAME} + *QCow2:* ${env.QCOW_FILENAME} + *URL:* http://teradata-stacki.s3.amazonaws.com/release/stacki/5.x/${env.QCOW_FILENAME} """.stripIndent(), tokenCredentialId: 'slack_jenkins_integration_token' ) From 1391a5c7d2c6c89bbb06e4c02749aeb036cef424 Mon Sep 17 00:00:00 2001 From: "Mason J. Katz" Date: Thu, 21 Feb 2019 11:53:30 -0800 Subject: [PATCH 03/15] FEATURE: Move the frontend to its own box Doing this so `run pallet` becomes simpler and doesn't change the box used for backend nodes. `default` box is remains for that. --- common/nodes/database-data-init.xml | 4 ++ .../integration/tests/list/test_list_box.py | 1 + tools/fab/frontend-install.py | 54 +++++++++++-------- 3 files changed, 37 insertions(+), 22 deletions(-) diff --git a/common/nodes/database-data-init.xml b/common/nodes/database-data-init.xml index 2bbb7e939..5a5ad2133 100644 --- a/common/nodes/database-data-init.xml +++ b/common/nodes/database-data-init.xml @@ -150,6 +150,9 @@ with open('/tmp/site.json', 'w') as file: ], "software": { "box": [ + { + "name": "frontend", + }, { "name": "default" } @@ -158,6 +161,7 @@ with open('/tmp/site.json', 'w') as file: "appliance": [ { "name": "frontend", + "box": "frontend", "public": false, "attr": [ { "name": "node", "value": "server" }, diff --git a/test-framework/test-suites/integration/tests/list/test_list_box.py b/test-framework/test-suites/integration/tests/list/test_list_box.py index c01d7879d..357acacc9 100644 --- a/test-framework/test-suites/integration/tests/list/test_list_box.py +++ b/test-framework/test-suites/integration/tests/list/test_list_box.py @@ -23,6 +23,7 @@ def test_no_args(self, host, host_os): # Make sure we got data for both our boxes boxes = {box['name']: box['os'] for box in json.loads(result.stdout)} assert boxes == { + 'frontend': host_os, 'default': host_os, 'test': host_os } diff --git a/tools/fab/frontend-install.py b/tools/fab/frontend-install.py index b26c28782..bcff9adfd 100755 --- a/tools/fab/frontend-install.py +++ b/tools/fab/frontend-install.py @@ -60,6 +60,7 @@ def banner(message): print(message) print('#######################################') + def copy(source, dest): isodir = tempfile.tempdir() banner("Copying %s to local disk" % source) @@ -68,13 +69,16 @@ def copy(source, dest): subprocess.call(['cp', '-r', isodir, dest]) umount(isodir) + def mount(source, dest): subprocess.call(['mkdir', '-p', dest]) subprocess.call(['mount', '-o', 'loop,ro', source, dest]) + def umount(dest): subprocess.call(['umount', dest]) + def installrpms(pkgs): if osname == 'redhat': cmd = [ 'yum', '-y', 'install' ] @@ -83,17 +87,19 @@ def installrpms(pkgs): cmd += pkgs return subprocess.call(cmd) + def generate_multicast(): - a = random.randrange(225,240) + a = random.randrange(225, 240) # Exclude 232 while a == 232: - a = random.randrange(225,240) - b = random.randrange(1,255) - c = random.randrange(1,255) - d = random.randrange(1,255) - return str(a)+'.'+str(b)+'.'+str(c)+'.'+str(d) + a = random.randrange(225, 240) + b = random.randrange(1, 255) + c = random.randrange(1, 255) + d = random.randrange(1, 255) + return str(a) + '.' + str(b) + '.' + str(c) + '.' + str(d) + -def find_repos(iso, stacki_only = False): +def find_repos(iso, stacki_only=False): ''' supports jumbo pallets as well as not blowing up on stackios ''' mountdir = os.path.join('/run', os.path.basename(iso)) @@ -116,6 +122,7 @@ def find_repos(iso, stacki_only = False): # umount(mountdir) return repodirs + def repoconfig(stacki_iso, extra_isos): # we only want to pull stacki from 'stacki_iso' # but we'll look for all pallets in 'extra_isos' @@ -173,6 +180,7 @@ def repoconfig(stacki_iso, extra_isos): cmd = [ 'zypper', 'clean', '--all' ] return subprocess.call(cmd) + def ldconf(): file = open('/etc/ld.so.conf.d/foundation.conf', 'w') file.write('/opt/stack/lib\n') @@ -180,6 +188,7 @@ def ldconf(): subprocess.call(['ldconfig']) + def usage(): print("Required arguments:") print("\t--stacki-iso=ISO : path to stacki ISO") @@ -187,9 +196,9 @@ def usage(): print("\t--extra-iso=iso1,iso2,iso3.. : list of pallets to add") print("\t--use-existing : use the existing system settings and root password") -## -## MAIN -## +# +# MAIN +# # # log all output to a file too @@ -300,7 +309,7 @@ def usage(): attrs['DOMAIN'] = '.'.join(fqdn) # Reject frontend and backend as hostnames - if attrs['HOSTNAME'].lower() in ['frontend', 'backend']: + if attrs['HOSTNAME'].lower() in ['frontend', 'backend']: print('Cannot have an appliance name as a hostname') sys.exit(1) @@ -320,7 +329,7 @@ def usage(): print("\nI found more than one interface, which one do you want to use?\n") for ndx, interface in enumerate(interfaces): print(" {}) {} {}".format( - ndx+1, + ndx + 1, interface[0], re.search(r'inet\s+([\d.]+)/', interface[1]).group(1) )) @@ -388,7 +397,7 @@ def usage(): print("\nI found more than one default gateway, which one do you want to use?\n") for ndx, gateway in enumerate(gateways): print(" {}) {} {}".format( - ndx+1, + ndx + 1, gateway[0], gateway[1] )) @@ -482,17 +491,17 @@ def usage(): # add missing attrs to site.attrs f = open("/tmp/site.attrs", "a") - str= "Kickstart_Multicast:"+generate_multicast()+"\n" - str+= "Server_Partitioning:force-default-root-disk-only\n" + str = "Kickstart_Multicast:" + generate_multicast() + "\n" + str += "Server_Partitioning:force-default-root-disk-only\n" f.write(str) f.close() # convert site.attrs to python dict -f = [line.strip() for line in open("/tmp/site.attrs","r")] +f = [line.strip() for line in open("/tmp/site.attrs", "r")] attributes = {} for line in f: - split = line.split(":",1) - attributes[split[0]]=split[1] + split = line.split(":", 1) + attributes[split[0]] = split[1] # Reject frontend and backend as hostnames hostname = attributes['Kickstart_PrivateHostname'].lower() @@ -535,7 +544,7 @@ def usage(): f.close() if rc: - print ("Could not generate XML") + print("Could not generate XML") sys.exit(rc) banner("Process XML") @@ -550,15 +559,15 @@ def usage(): outfile.close() if rc: - print ("Could not process XML") + print("Could not process XML") sys.exit(rc) banner("Run Setup Script") # run run.sh -p = subprocess.Popen(['sh','/tmp/run.sh']) +p = subprocess.Popen(['sh', '/tmp/run.sh']) rc = p.wait() if rc: - print ("Setup Script Failed") + print("Setup Script Failed") sys.exit(rc) banner("Adding Pallets") @@ -567,6 +576,7 @@ def usage(): iso = os.path.abspath(iso) subprocess.call([stackpath, 'add', 'pallet', iso]) subprocess.call([stackpath, 'enable', 'pallet', '%']) +subprocess.call([stackpath, 'enable', 'pallet', '%', 'box=frontend']) # all done banner("Done") From 0ebdb87d2879fd9852f0a0cc49ed0aa3d631ea92 Mon Sep 17 00:00:00 2001 From: "Mason J. Katz" Date: Wed, 13 Feb 2019 14:12:24 -0800 Subject: [PATCH 04/15] BUGFIX: really send ws logs to /var/log/local1 --- common/src/stack/ws/cgi-bin/wsgi.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/stack/ws/cgi-bin/wsgi.py b/common/src/stack/ws/cgi-bin/wsgi.py index 5e9e52d99..b08775be7 100644 --- a/common/src/stack/ws/cgi-bin/wsgi.py +++ b/common/src/stack/ws/cgi-bin/wsgi.py @@ -26,11 +26,11 @@ import logging.handlers # Set logging -log = logging.getLogger("stack-ws") +log = logging.getLogger("SWS") log.setLevel(logging.DEBUG) handler = logging.handlers.SysLogHandler(address='/dev/log', - facility=logging.handlers.SysLogHandler.LOG_LOCAL2) + facility=logging.handlers.SysLogHandler.LOG_LOCAL1) formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s") handler.setFormatter(formatter) From 6e6bac1e4a71122f1a5d87ca18881e18f8e3f731 Mon Sep 17 00:00:00 2001 From: "Mason J. Katz" Date: Thu, 21 Feb 2019 16:09:49 -0800 Subject: [PATCH 05/15] BUGFIX: dump of carts matches pallets --- common/src/stack/command/stack/commands/dump/cart/__init__.py | 2 +- .../test-suites/integration/tests/dump/test_dump_software.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/common/src/stack/command/stack/commands/dump/cart/__init__.py b/common/src/stack/command/stack/commands/dump/cart/__init__.py index 8dd940638..6a623fb69 100644 --- a/common/src/stack/command/stack/commands/dump/cart/__init__.py +++ b/common/src/stack/command/stack/commands/dump/cart/__init__.py @@ -18,7 +18,7 @@ def run(self, params, args): dump = [] for row in self.call('list.cart'): - dump.append(row['name']) + dump.append(OrderedDict(name = row['name'])) self.addText(json.dumps(OrderedDict(version = stack.version, software = {'cart' : dump}), diff --git a/test-framework/test-suites/integration/tests/dump/test_dump_software.py b/test-framework/test-suites/integration/tests/dump/test_dump_software.py index d3d8eeb94..1f3c6a020 100644 --- a/test-framework/test-suites/integration/tests/dump/test_dump_software.py +++ b/test-framework/test-suites/integration/tests/dump/test_dump_software.py @@ -81,6 +81,6 @@ def test_cart(self, host, revert_export_stack_carts): # check to make sure that our dump contains accurate cart information check = False for cart in dumped_data['software']['cart']: - if cart == 'test': + if cart['name'] == 'test': check = True assert check == True From d762fd4a3bb2e9a79767371e64cb6d345def9833 Mon Sep 17 00:00:00 2001 From: bgreenb Date: Tue, 19 Feb 2019 13:57:50 -0800 Subject: [PATCH 06/15] BUGFIX: Make enable pallet error message more explicit When a pallet is trying to be enabled after being added, if a parameter mismatches, the stack command would just say the pallet isn't valid. This isn't a clear enough error message to the user so instead the error message was made more explicit. Now when the same thing occurs, the error message includes a list of the parameters entered. --- .../src/stack/command/stack/commands/__init__.py | 2 +- common/src/stack/pylib/stack/exception.py | 11 ++++++++--- .../tests/disable/test_disable_pallet.py | 2 +- .../tests/enable/test_enable_pallet.py | 15 ++++++++++++++- .../tests/remove/test_remove_pallet.py | 4 ++-- 5 files changed, 26 insertions(+), 8 deletions(-) diff --git a/common/src/stack/command/stack/commands/__init__.py b/common/src/stack/command/stack/commands/__init__.py index caa551284..a4b2aa82d 100644 --- a/common/src/stack/command/stack/commands/__init__.py +++ b/common/src/stack/command/stack/commands/__init__.py @@ -473,7 +473,7 @@ def getPallets(self, args, params): """, (arg, version, rel, arch, os)) if not rows and arg != '%': - raise ArgNotFound(self, arg, 'pallet') + raise ArgNotFound(self, arg, 'pallet', params) # Add our pallet models to the list pallets.extend([Pallet(*row) for row in rows]) diff --git a/common/src/stack/pylib/stack/exception.py b/common/src/stack/pylib/stack/exception.py index d6c856118..a91acf8b0 100644 --- a/common/src/stack/pylib/stack/exception.py +++ b/common/src/stack/pylib/stack/exception.py @@ -96,9 +96,14 @@ def __init__(self, cmd, arg=None): class ArgNotFound(ArgError): - def __init__(self, cmd, arg, argtype): - super(ArgNotFound, self).__init__(cmd, arg, 'is not a valid %s' % argtype) - + def __init__(self, cmd, arg, argtype, params = None): + if params is None or not params: + error_msg = f'is not a valid {argtype}' + else: + param_errors = ','.join(f' {key}={value}' for key, value in params.items()) + error_msg = f'is not a valid {argtype} with parameters{param_errors}' + + super(ArgNotFound, self).__init__(cmd, arg, error_msg) class ParamError(ArgParamBaseError): diff --git a/test-framework/test-suites/integration/tests/disable/test_disable_pallet.py b/test-framework/test-suites/integration/tests/disable/test_disable_pallet.py index cd7a32232..ed8f3dd0f 100644 --- a/test-framework/test-suites/integration/tests/disable/test_disable_pallet.py +++ b/test-framework/test-suites/integration/tests/disable/test_disable_pallet.py @@ -17,7 +17,7 @@ def test_invalid_pallet(self, host): result = host.run('stack disable pallet test') assert result.rc == 255 assert result.stderr == dedent('''\ - error - "test" argument is not a valid pallet + error - "test" argument is not a valid pallet with parameters arch=x86_64 {pallet ...} [arch=string] [box=string] [os=string] [release=string] [version=string] ''') diff --git a/test-framework/test-suites/integration/tests/enable/test_enable_pallet.py b/test-framework/test-suites/integration/tests/enable/test_enable_pallet.py index 1c2412bb2..1194ef419 100644 --- a/test-framework/test-suites/integration/tests/enable/test_enable_pallet.py +++ b/test-framework/test-suites/integration/tests/enable/test_enable_pallet.py @@ -15,7 +15,7 @@ def test_invalid_pallet(self, host): result = host.run('stack enable pallet test') assert result.rc == 255 assert result.stderr == dedent('''\ - error - "test" argument is not a valid pallet + error - "test" argument is not a valid pallet with parameters arch=x86_64 {pallet ...} [arch=string] [box=string] [os=string] [release=string] [version=string] ''') @@ -33,6 +33,19 @@ def test_incompatable_os(self, host, create_pallet_isos): result = host.run(f'stack enable pallet test-different-os') assert result.rc == 255 assert result.stderr == 'error - incompatible pallet "test-different-os" with OS "ubuntu"\n' + + def test_wrong_version(self, host, create_pallet_isos): + # Add our test pallet + result = host.run(f'stack add pallet {create_pallet_isos}/test-different-version-2.0-prod.x86_64.disk1.iso') + assert result.rc == 0 + + # Try to enable it with the version parameter being wrong + result = host.run(f'stack enable pallet test-different-version version=1.0') + assert result.rc == 255 + assert result.stderr == dedent('''\ + error - "test-different-version" argument is not a valid pallet with parameters version=1.0, arch=x86_64 + {pallet ...} [arch=string] [box=string] [os=string] [release=string] [version=string] + ''') def test_default_box(self, host, host_os, create_pallet_isos, revert_etc, revert_export_stack_pallets): # Add our test pallet diff --git a/test-framework/test-suites/integration/tests/remove/test_remove_pallet.py b/test-framework/test-suites/integration/tests/remove/test_remove_pallet.py index 6f6a51b0b..1bd2e72ec 100644 --- a/test-framework/test-suites/integration/tests/remove/test_remove_pallet.py +++ b/test-framework/test-suites/integration/tests/remove/test_remove_pallet.py @@ -119,7 +119,7 @@ def test_no_arch_match(self, host, create_pallet_isos, revert_export_stack_palle result = host.run('stack remove pallet minimal arch=x86') assert result.rc == 255 assert result.stderr == dedent('''\ - error - "minimal" argument is not a valid pallet + error - "minimal" argument is not a valid pallet with parameters arch=x86 {pallet ...} [arch=string] [os=string] [release=string] [version=string] ''') @@ -166,7 +166,7 @@ def test_no_os_match(self, host, create_pallet_isos, revert_export_stack_pallets result = host.run('stack remove pallet minimal os=redhat') assert result.rc == 255 assert result.stderr == dedent('''\ - error - "minimal" argument is not a valid pallet + error - "minimal" argument is not a valid pallet with parameters os=redhat {pallet ...} [arch=string] [os=string] [release=string] [version=string] ''') From c00790051d39ca2b3eb80b0e00fd6bf99a0977da Mon Sep 17 00:00:00 2001 From: Ryan Causey Date: Wed, 20 Feb 2019 11:06:31 -0800 Subject: [PATCH 07/15] BUGFIX: Treat certain scenarios in manifest-check and get3rdparty as errors This updates manifest-check.py to return a nonzero exit code if there are no manifest files found. This also updates get3rdparty.py to return a nonzero exit code if it fails to fetch a 3rd party package. --- .../stack/build/build/src/pallet/bin/get3rdparty.py | 10 ++++++++-- .../stack/build/build/src/pallet/bin/manifest-check.py | 6 +++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/common/src/stack/build/build/src/pallet/bin/get3rdparty.py b/common/src/stack/build/build/src/pallet/bin/get3rdparty.py index 114533a63..6a9e2d0f3 100755 --- a/common/src/stack/build/build/src/pallet/bin/get3rdparty.py +++ b/common/src/stack/build/build/src/pallet/bin/get3rdparty.py @@ -66,6 +66,7 @@ def download_url(source, target, curl_args): curl_cmd.extend(curl_args) curl_cmd.extend(['-sSo%s' % target, source]) print('download %s\n\t%s' % (source, target)) + success = False while retry: p = subprocess.Popen(curl_cmd, stdout=subprocess.PIPE, @@ -79,24 +80,29 @@ def download_url(source, target, curl_args): else: if o.strip() == '200': retry = 0 + success = True else: retry = retry - 1 print("Error: Cannot download. HTTP STATUS: %s" % o) os.unlink(target) time.sleep(1) + if not success: + print("Failed to fetch {}".format(source)) + sys.exit(-1) + def get_auth_info(authfile, url): curl_args = [] if not os.path.exists(authfile): - sys.stderr.write("Cannot find auth file %s for %s\n" % + sys.stderr.write("Cannot find auth file %s for %s\n" % (authfile, url)) auth = None with open(authfile, 'r') as a: auth = json.load(a) if not auth: - sys.stderr.write("Cannot read auth file %s for %s\n" % + sys.stderr.write("Cannot read auth file %s for %s\n" % (authfile, url)) if auth['type'].lower() == 'basic': diff --git a/common/src/stack/build/build/src/pallet/bin/manifest-check.py b/common/src/stack/build/build/src/pallet/bin/manifest-check.py index 5941274aa..43586a29e 100755 --- a/common/src/stack/build/build/src/pallet/bin/manifest-check.py +++ b/common/src/stack/build/build/src/pallet/bin/manifest-check.py @@ -90,7 +90,7 @@ if not found: print('Cannot find any manifest files') - sys.exit(0) + sys.exit(1) built = [] notmanifest = [] @@ -118,13 +118,13 @@ for pkg in manifest: if pkg not in built: print('\t%s' % pkg) - exit_code += 1 + exit_code = 2 if len(notmanifest) > 0: print('\nERROR - the following packages were built but not in manifest:') for pkg in notmanifest: print('\t%s' % pkg) - exit_code += 1 + exit_code = 3 if exit_code == 0: print('passed') From 3d2e7a7f82c4a0cda71ad2c2d089bf492d0391c9 Mon Sep 17 00:00:00 2001 From: Ryan Causey Date: Tue, 19 Feb 2019 18:19:18 -0800 Subject: [PATCH 08/15] BUGFIX: Find and check all RPMS regardless of architecture --- .../build/build/src/pallet/bin/manifest-check.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/common/src/stack/build/build/src/pallet/bin/manifest-check.py b/common/src/stack/build/build/src/pallet/bin/manifest-check.py index 43586a29e..5b10b758e 100755 --- a/common/src/stack/build/build/src/pallet/bin/manifest-check.py +++ b/common/src/stack/build/build/src/pallet/bin/manifest-check.py @@ -17,6 +17,7 @@ import os import sys +from pathlib import Path import stack.util from stack.file import RPMFile @@ -37,14 +38,11 @@ except: release = None -builtfiles = [] -for arch in [ 'noarch', 'i386', 'x86_64', 'armv7hl' ]: - try: - with os.scandir(os.path.join(buildpath, 'RPMS', arch)) as d: - for pkg in d: - builtfiles.append(RPMFile(pkg.path)) - except FileNotFoundError: - pass +# Gather all .rpm files under the RPMS folder in the buildpath. +# If the path doesn't exist, or no .rpm files exist, glob will return an empty list. +builtfiles = [ + RPMFile(str(pkg)) for pkg in Path(buildpath).joinpath("RPMS").resolve().glob("**/*.rpm") +] manifests = [ ] search = [ 'common', '.', buildpath ] From 22ed858fbf5bceddf9be8483e175ffd452b535a0 Mon Sep 17 00:00:00 2001 From: Chris Ladd Date: Fri, 22 Feb 2019 10:54:40 -0800 Subject: [PATCH 09/15] INTERNAL: Remove the Auto PR creation --- Jenkinsfile | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4976361ba..7d7757378 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -132,25 +132,6 @@ pipeline { } } } - - stage('Auto PR') { - // Create the automatic pull request, if needed - steps { - sh ''' - # Get the number of pull requests on this branch - set +e - PULL_REQUESTS=$(curl -s "https://api.github.com/repos/Teradata/stacki/pulls?access_token=$GITHUB_TOKEN" | grep -c "\\"ref\\": \\"$GIT_BRANCH\\"") - set -e - - # Are there already any pull requests? - if [[ $PULL_REQUESTS == "0" ]] - then - # Create the pull request - curl -H "Content-Type: application/json" -d "{\\"title\\":\\"Auto PR: $GIT_BRANCH\\",\\"head\\":\\"$GIT_BRANCH\\",\\"base\\":\\"develop\\"}" "https://api.github.com/repos/Teradata/stacki/pulls?access_token=$GITHUB_TOKEN" - fi - ''' - } - } } } From f439677b86c0defbec24f77d031cf55d8176cd12 Mon Sep 17 00:00:00 2001 From: Chris Ladd Date: Wed, 20 Feb 2019 16:27:52 -0800 Subject: [PATCH 10/15] INTERNAL: Make a few tests work when testing other pallets --- Jenkinsfile | 2 +- .../test-suites/integration/run-tests.sh | 4 +- .../tests/list/test_list_appliance.py | 48 +++++++++---------- .../tests/list/test_list_appliance_xml.py | 3 ++ .../tests/list/test_list_box_pallet.py | 12 +++-- .../tests/list/test_list_pallet_command.py | 4 +- 6 files changed, 38 insertions(+), 35 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 7d7757378..96dd73194 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -27,7 +27,7 @@ pipeline { triggers { // Nightly build of develop (at 3am) - cron(env.BRANCH_NAME == 'develop' ? 'H 11 * * *' : '') + cron(env.BRANCH_NAME == 'develop' ? '0 11 * * *' : '') } stages { diff --git a/test-framework/test-suites/integration/run-tests.sh b/test-framework/test-suites/integration/run-tests.sh index 8a8f33036..4f097de4a 100755 --- a/test-framework/test-suites/integration/run-tests.sh +++ b/test-framework/test-suites/integration/run-tests.sh @@ -25,7 +25,7 @@ then set +e vagrant ssh frontend -c "sudo -i pytest -vvv \ --dist=loadfile -n 4 \ - --reruns=2 --reruns-delay=60 \ + --reruns=1 --reruns-delay=10 \ --timeout=300 --timeout_method=signal \ --junit-xml=/export/reports/integration-junit.xml \ --cov-config=/export/test-suites/_common/$COVERAGERC \ @@ -47,7 +47,7 @@ then else vagrant ssh frontend -c "sudo -i pytest -vvv \ --dist=loadfile -n 4 \ - --reruns=2 --reruns-delay=60 \ + --reruns=1 --reruns-delay=10 \ --timeout=300 --timeout_method=signal \ --junit-xml=/export/reports/integration-junit.xml \ /export/test-suites/integration/tests/" diff --git a/test-framework/test-suites/integration/tests/list/test_list_appliance.py b/test-framework/test-suites/integration/tests/list/test_list_appliance.py index 58ada5ae1..4349994c5 100644 --- a/test-framework/test-suites/integration/tests/list/test_list_appliance.py +++ b/test-framework/test-suites/integration/tests/list/test_list_appliance.py @@ -14,32 +14,28 @@ def test_invalid(self, host): def test_no_args(self, host): result = host.run('stack list appliance output-format=json') assert result.rc == 0 - assert json.loads(result.stdout) == [ - { - 'appliance': 'backend', - 'public': 'yes' - }, - { - 'appliance': 'barnacle', - 'public': 'no' - }, - { - 'appliance': 'builder', - 'public': 'no' - }, - { - 'appliance': 'frontend', - 'public': 'no' - }, - { - 'appliance': 'replicant', - 'public': 'yes' - }, - { - 'appliance': 'switch', - 'public': 'no' - } - ] + + # Make sure some common appliances exist + output = json.loads(result.stdout) + assert { + 'appliance': 'backend', + 'public': 'yes' + } in output + + assert { + 'appliance': 'barnacle', + 'public': 'no' + } in output + + assert { + 'appliance': 'frontend', + 'public': 'no' + } in output + + assert { + 'appliance': 'switch', + 'public': 'no' + } in output def test_one_arg(self, host): result = host.run('stack list appliance backend output-format=json') diff --git a/test-framework/test-suites/integration/tests/list/test_list_appliance_xml.py b/test-framework/test-suites/integration/tests/list/test_list_appliance_xml.py index 87869fa89..94e2b6548 100644 --- a/test-framework/test-suites/integration/tests/list/test_list_appliance_xml.py +++ b/test-framework/test-suites/integration/tests/list/test_list_appliance_xml.py @@ -1,6 +1,8 @@ import json from textwrap import dedent +import pytest + class TestListApplianceXML: def test_invalid(self, host): @@ -11,6 +13,7 @@ def test_invalid(self, host): [appliance ...] ''') + @pytest.mark.skip() def test_no_args(self, host, revert_export_stack_carts): # Check the command works and returned a bunch of lines result = host.run('stack list appliance xml') diff --git a/test-framework/test-suites/integration/tests/list/test_list_box_pallet.py b/test-framework/test-suites/integration/tests/list/test_list_box_pallet.py index 5e9201001..bcb3f5fb3 100644 --- a/test-framework/test-suites/integration/tests/list/test_list_box_pallet.py +++ b/test-framework/test-suites/integration/tests/list/test_list_box_pallet.py @@ -25,8 +25,10 @@ def test_no_args(self, host, revert_etc): assert result.rc == 0 # Make sure we got data for both our boxes - boxes = [item['box'] for item in json.loads(result.stdout)] - assert boxes == ['default', 'default', 'test'] + boxes = set(item['box'] for item in json.loads(result.stdout)) + assert len(boxes) == 2 + assert 'default' in boxes + assert 'test' in boxes def test_one_arg(self, host, revert_etc): # Add a second box @@ -67,5 +69,7 @@ def test_multiple_args(self, host, host_os, revert_etc): assert result.rc == 0 # Make sure we got data only for the two boxes - boxes = [item['box'] for item in json.loads(result.stdout)] - assert boxes == ['default', 'default', 'test'] + boxes = set(item['box'] for item in json.loads(result.stdout)) + assert len(boxes) == 2 + assert 'default' in boxes + assert 'test' in boxes diff --git a/test-framework/test-suites/integration/tests/list/test_list_pallet_command.py b/test-framework/test-suites/integration/tests/list/test_list_pallet_command.py index 9dfd88124..d635f9600 100644 --- a/test-framework/test-suites/integration/tests/list/test_list_pallet_command.py +++ b/test-framework/test-suites/integration/tests/list/test_list_pallet_command.py @@ -22,8 +22,8 @@ def test_no_args(self, host, host_os): for item in json.loads(result.stdout): commands[item['pallet']].append(item['command']) - # We should have two pallets - assert len(commands) == 2 + # We should have at least two pallets + assert len(commands) >= 2 # That stacki pallet should have a ton of commands assert len(commands['stacki']) > 200 From 13fa762dfbcbb34a025a53cd8932ad11f094811b Mon Sep 17 00:00:00 2001 From: Chris Ladd Date: Thu, 21 Feb 2019 09:57:39 -0800 Subject: [PATCH 11/15] FEATURE: Add `cluster-up` tool to tools directory --- tools/cluster-up/.gitignore | 5 + tools/cluster-up/README.md | 135 ++++++ tools/cluster-up/Vagrantfile | 155 ++++++ tools/cluster-up/cart/graph/cart-vagrant.xml | 10 + .../cart/nodes/cart-vagrant-backend.xml | 39 ++ tools/cluster-up/cluster-down.sh | 19 + tools/cluster-up/cluster-up.sh | 446 ++++++++++++++++++ .../hooks/post-backends/.placeholder | 0 .../hooks/post-cluster-up/.placeholder | 0 .../cluster-up/hooks/post-export/.placeholder | 0 .../hooks/post-frontend/.placeholder | 0 .../hooks/pre-backends/.placeholder | 0 .../hooks/pre-cluster-up/.placeholder | 0 .../cluster-up/hooks/pre-export/.placeholder | 0 .../hooks/pre-frontend/.placeholder | 0 tools/cluster-up/provision-frontend.sh | 53 +++ 16 files changed, 862 insertions(+) create mode 100644 tools/cluster-up/.gitignore create mode 100644 tools/cluster-up/README.md create mode 100644 tools/cluster-up/Vagrantfile create mode 100644 tools/cluster-up/cart/graph/cart-vagrant.xml create mode 100644 tools/cluster-up/cart/nodes/cart-vagrant-backend.xml create mode 100755 tools/cluster-up/cluster-down.sh create mode 100755 tools/cluster-up/cluster-up.sh create mode 100644 tools/cluster-up/hooks/post-backends/.placeholder create mode 100644 tools/cluster-up/hooks/post-cluster-up/.placeholder create mode 100644 tools/cluster-up/hooks/post-export/.placeholder create mode 100644 tools/cluster-up/hooks/post-frontend/.placeholder create mode 100644 tools/cluster-up/hooks/pre-backends/.placeholder create mode 100644 tools/cluster-up/hooks/pre-cluster-up/.placeholder create mode 100644 tools/cluster-up/hooks/pre-export/.placeholder create mode 100644 tools/cluster-up/hooks/pre-frontend/.placeholder create mode 100644 tools/cluster-up/provision-frontend.sh diff --git a/tools/cluster-up/.gitignore b/tools/cluster-up/.gitignore new file mode 100644 index 000000000..2b2bdd316 --- /dev/null +++ b/tools/cluster-up/.gitignore @@ -0,0 +1,5 @@ +.vagrant/ +*.iso +*.box +*.json +randomfile diff --git a/tools/cluster-up/README.md b/tools/cluster-up/README.md new file mode 100644 index 000000000..def90896a --- /dev/null +++ b/tools/cluster-up/README.md @@ -0,0 +1,135 @@ +# Stacki Cluster Up + +This project will bring up a cluster of boxes consisting of a Stacki frontend and an optional number of backends. + +## Installation + +You need to have [Vagrant](https://www.vagrantup.com/) installed, and either +[VirtualBox](https://www.virtualbox.org/) or Libvirt/KVM. If using Libvirt/KVM, you also need to +[install the vagrant-libvirt plugin](https://github.com/vagrant-libvirt/vagrant-libvirt#installation) +and NFS server on the host. Then clone this project on your computer. + +*Also of note:* You need to be on the Teradata network, either in the building or VPN'ed in, to use a SLES version of Stacki to bring up a cluster with this tool. + +## Usage +Open up a terminal on your computer, change to the project directory, then run: + + ./cluster-up.sh [options...] STACKI_ISO + +where STACKI_ISO is the path to the Stacki ISO you want to base the cluster on. +It can be either a SLES 12 or Centos 7 based ISO, and the path can be relative +or absolute. The ISO argument can also be a URL, which will be downloaded into +the download directory before bringing up the cluster. + +There are some optional arguments you can pass to the command: + + --backends=[0-253] The number backends to create. Default: 0 + --fqdn=FQDN The FQDN of the frontend. Default: cluster-up-frontend.localdomain + --name=NAME The name to uniquely identify this cluster. Default: cluster-up-RRRRRRRR + --download-dir=DIRECTORY The directory to store installer ISOs. Default: '.' + --use-the-src-dir=DIRECTORY The directory will be mounted and symlinked into the frontend. + --export-frontend Export the frontend as a vagrant box with the same name as the STACK_ISO + +You can also specify the following flags, which will switch cluster-up to create +the second interface to a bridge interface on the VM host. If you specify a bridged +interface, then no backends will be automatically created, as they rely on host only +networking. Instead, you can create your own backends over the bridged interface. + + --bridge=INTERFACE Bridge interface on the host. Default: Use host only networking + --ip=IP_ADDRESS IP Address for the bridge network. Default: Use DHCP + --netmask=NETMASK The netmask for the bridge network. Default: 255.255.255.0 + --gateway=GATEWAY_ADDRESS Gateway address for the bridged interface. + --dns=DNS_ADDRESS[,DNS2] Comma seperated list of DNS servers. + +The script will create a generic OS frontend box in Virtualbox or KVM, install +Stacki on it, then pxe-boot the number of backends requested (None by default) and +install an OS on them from the Stacki frontend. + +Once all of that is done, you can ssh into the frontend as `root` with the command: + + vagrant ssh frontend + +The backends are named 'backend-0-N' where N is the number of backends +created, starting at zero. So, to ssh into the backend-0-0 you would run: + + vagrant ssh backend-0-0 + +When you are done with the cluster, you can destroy it with the command: + + ./cluster-down.sh + +## Examples +The simplest invocation of the tool is to create a cluster with the frontend +and no backends. That command would simply look like: + + ./cluster-up.sh stacki-05.02.04.00-redhat7.x86_64.disk1.iso + +If you want a handful of backends, assign your frontend a specific FQDN, and to +fetch the ISO from a URL, the comand would look like: + + ./cluster-up.sh \ + --backends=3 \ + --fqdn=stacki-frontend.example.com \ + http://example.com/stacki-05.02.04.00-redhat7.x86_64.disk1.iso + +You can create a development environment, with a checkout of the Stacki code +repository mapped into it, by using the `--use-the-src-dir` flag like so: + + ./cluster-up.sh --use-the-src-dir=~/Code/stacki \ + http://example.com/stacki-05.02.04.00-redhat7.x86_64.disk1.iso + +A more complicated use of the tool is to create a Stacki frontend that can +provision physical backends. For this, you need to have a bridged network +interface set up in either KVM or Virtualbox. + +You then specify all your +bridge network infomation via flags, such as: + + ./cluster-up.sh \ + --fqdn=sd-stacki-147.labs.teradata.com \ + --bridge=br1 \ + --ip=10.25.250.147 \ + --gateway=10.25.250.254 \ + --dns=153.64.251.200 \ + stacki-05.02.04.00-sles12.x86_64.disk1.iso + +It is a little annoying that in Virtualbox, at least under the Mac, the bridge +interface names are a little unwieldy, and you have to specify the entire name, +or else it will prompt you several times to select your bridge. + +So, under Virtualbox, your command might look like: + + ./cluster-up.sh \ + --fqdn=sd-stacki-147.labs.teradata.com \ + --bridge="en8: Belkin USB-C LAN" \ + --ip=10.25.250.147 \ + --gateway=10.25.250.254 \ + --dns=153.64.251.200 \ + stacki-05.02.04.00-sles12.x86_64.disk1.iso + +## Hooks +Customization scripts can be added into a set of folders under the `hooks` folder, to be +invoked at various points in the `cluster-up.sh` process. The hook scripts must have the +execute bit set. + +The various hook run points are: +- **pre-cluster-up** - After parsing the command arguments but prior to anything else. + +- **pre-frontend** - Right before vagrant is used to start the frontend VM. + +- **post-frontend** - After the installation reboot for the frontend. + +- **pre-export** - Before the vagrant box is exported but after the frontend has been set +up to install backends. _Only ran if the `--export-frontend` flag is set._ + +- **post-export** - After the vagrant box has been exported and the frontend has been +restarted. _Only ran if the `--export-frontend` flag is set._ + +- **pre-backends** - After discovery has been started on the frontend but before any backends +have been started by vagrant. _Only ran if backends are to be provisioned._ + +- **post-backends** - After all backends have been provisioned but before discovery has been +disabled on the frontend. _Only ran if backends are to be provisioned._ + +- **post-cluster-up** - Right before the `cluster-up.sh` exits and after the success message +has been printed out to the terminal. diff --git a/tools/cluster-up/Vagrantfile b/tools/cluster-up/Vagrantfile new file mode 100644 index 000000000..bd151f808 --- /dev/null +++ b/tools/cluster-up/Vagrantfile @@ -0,0 +1,155 @@ +require 'json' + + +if File.file?('.vagrant/cluster-up.json') + json_data = File.read('.vagrant/cluster-up.json') + settings = JSON.parse(json_data) + + OS = settings['OS'] + ISO_PATH = settings['ISO_PATH'] + ISO_FILENAME = settings['ISO_FILENAME'] + BACKENDS = settings['BACKENDS'] + NAME = settings['NAME'] + DOWNLOAD_DIR = settings['DOWNLOAD_DIR'] + SRC_DIR = settings['SRC_DIR'] + FQDN = settings['FQDN'] + BRIDGE = settings['BRIDGE'] + IP = settings['IP'] + NETMASK = settings['NETMASK'] + GATEWAY = settings['GATEWAY'] + DNS = settings['DNS'] + INTERNAL = settings['INTERNAL'] + + Vagrant.configure("2") do |config| + config.vm.define "frontend", autostart: false do |config| + if OS == 'sles12' + config.vm.box = "stacki/sles-12.3" + config.vm.box_url = "http://stacki-builds.labs.teradata.com/vagrant-boxes/sles-12.3.json" + elsif OS == 'redhat7' + config.vm.box = "stacki/centos-7.4" + if INTERNAL + config.vm.box_url = "http://stacki-builds.labs.teradata.com/vagrant-boxes/centos-7.4.json" + end + end + + config.vm.provider "virtualbox" do |provider, config| + provider.name = NAME + "_frontend" + provider.gui = false + + provider.memory = "2048" + provider.cpus = 1 + + config.vm.synced_folder ".", "/vagrant", type: "virtualbox" + config.vm.synced_folder DOWNLOAD_DIR, "/export/installer-iso/", type: "virtualbox" + config.vm.synced_folder ISO_PATH, "/export/stacki-iso/", type: "virtualbox" + config.vm.synced_folder SRC_DIR, "/export/src/", type: "virtualbox" + end + + config.vm.provider "libvirt" do |provider, config| + provider.default_prefix = NAME + provider.driver = "kvm" + provider.connect_via_ssh = false + + provider.memory = "2048" + provider.cpus = 1 + provider.nic_model_type = "e1000" + provider.random :model => "random" + + config.vm.synced_folder ".", "/vagrant", nfs: true, nfs_version: 3, nfs_udp: false + config.vm.synced_folder DOWNLOAD_DIR, "/export/installer-iso/", nfs: true, nfs_version: 3, nfs_udp: false + config.vm.synced_folder ISO_PATH, "/export/stacki-iso/", nfs: true, nfs_version: 3, nfs_udp: false + config.vm.synced_folder SRC_DIR, "/export/src/", nfs: true, nfs_version: 3, nfs_udp: false + end + + config.vm.hostname = FQDN + + if BRIDGE == '' + config.vm.network "private_network", + ip: "192.168.0.2", + virtualbox__intnet: NAME, + libvirt__network_name: NAME, + libvirt__dhcp_enabled: false, + libvirt__forward_mode: "veryisolated", + libvirt__adapter: 1 + else + if IP == '' + config.vm.network "public_network", + bridge: BRIDGE, + dev: BRIDGE, + libvirt__adapter: 1 + else + config.vm.network "public_network", + ip: IP, + netmask: NETMASK, + bridge: BRIDGE, + dev: BRIDGE, + libvirt__adapter: 1 + end + end + + config.vm.provision "shell", path: "provision-frontend.sh", env: settings + end + + (0..BACKENDS-1).each do |i| + config.vm.define "backend-0-#{i}", autostart: false do |config| + config.vm.box = "stacki/pxe-boot" + config.vm.box_url = "http://stacki-builds.labs.teradata.com/vagrant-boxes/pxe-boot.json" + config.vm.boot_timeout = 3600 + + config.vm.provider "virtualbox" do |vb, config| + vb.name = NAME + "_backend-0-#{i}" + vb.gui = false + + vb.memory = "2048" + vb.cpus = 1 + + vb.check_guest_additions = false + vb.functional_vboxsf = false + + vb.customize ['modifyvm', :id, '--boot1', 'net'] + vb.customize ['modifyvm', :id, '--boot2', 'disk'] + vb.customize ['modifyvm', :id, '--biospxedebug', 'on'] + vb.customize ['modifyvm', :id, '--cableconnected2', 'on'] + vb.customize ['modifyvm', :id, '--nicbootprio2', '1'] + vb.customize ['modifyvm', :id, "--nictype2", '82540EM'] + + config.vm.network "private_network", + mac: sprintf("5254000000%02X", i+3), + type: "dhcp", + virtualbox__intnet: NAME, + auto_config: false + end + + config.vm.provider "libvirt" do |provider, config| + provider.default_prefix = NAME + provider.driver = "kvm" + provider.connect_via_ssh = false + + provider.memory = "2048" + provider.cpus = 1 + provider.nic_model_type = "e1000" + provider.random :model => "random" + + boot_network = {'network' => NAME} + provider.boot boot_network + provider.boot 'hd' + provider.qemuargs :value => "-boot" + provider.qemuargs :value => "reboot-timeout=10" + + config.vm.network "private_network", + mac: sprintf("5254000000%02X", i+3), + libvirt__network_name: NAME, + libvirt__dhcp_enabled: false, + libvirt__forward_mode: "veryisolated", + libvirt__adapter: 1, + auto_config: false + end + + config.vm.synced_folder '.', '/vagrant', disabled: true + end + end + + end +else + abort("\033[31mError: you need to run cluster-up.sh first\033[0m") +end diff --git a/tools/cluster-up/cart/graph/cart-vagrant.xml b/tools/cluster-up/cart/graph/cart-vagrant.xml new file mode 100644 index 000000000..b4b3e3745 --- /dev/null +++ b/tools/cluster-up/cart/graph/cart-vagrant.xml @@ -0,0 +1,10 @@ + + + + vagrant cart + + + + + + diff --git a/tools/cluster-up/cart/nodes/cart-vagrant-backend.xml b/tools/cluster-up/cart/nodes/cart-vagrant-backend.xml new file mode 100644 index 000000000..076e54b3f --- /dev/null +++ b/tools/cluster-up/cart/nodes/cart-vagrant-backend.xml @@ -0,0 +1,39 @@ + +Create vagrant user and install SSH key + + +/usr/sbin/useradd -m -p '$6$UgKtUD0AUMIA$VWLyc2Uvl0Lk6xxfTuoRb0/jrhZ9IJG/Gtx/DkZUEWZm.JYO1Q1fvPo6gDxQAHp38kQ1DG1vNGRgu2T/z/vih.' vagrant + +/usr/bin/mkdir /home/vagrant/.ssh +/usr/bin/chmod 700 /home/vagrant/.ssh +/usr/bin/chown vagrant:users /home/vagrant/.ssh + + +ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key + + +echo -e "vagrant ALL=(ALL) NOPASSWD: ALL\n" >> /etc/sudoers + + + +/etc/sysconfig/network-scripts/ifcfg-$NIC < + + + + +BOOTPROTO='dhcp' +STARTMODE='auto' +DHCLIENT_SET_DEFAULT_ROUTE='yes' + + + + diff --git a/tools/cluster-up/cluster-down.sh b/tools/cluster-up/cluster-down.sh new file mode 100755 index 000000000..1fc697f06 --- /dev/null +++ b/tools/cluster-up/cluster-down.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Make sure we are in the project directory +cd `dirname "${BASH_SOURCE[0]}"` + +# Make sure we actually have a cluster +if [[ ! -f .vagrant/cluster-up.json ]] +then + echo -e "\033[31mError: no cluster exists.\033[0m" + exit 1 +fi + +# Destroy the virtual machines +vagrant destroy -f + +# Remove the cluster-up settings +rm -f ./.vagrant/cluster-up.json + +exit 0 diff --git a/tools/cluster-up/cluster-up.sh b/tools/cluster-up/cluster-up.sh new file mode 100755 index 000000000..ac70a91ea --- /dev/null +++ b/tools/cluster-up/cluster-up.sh @@ -0,0 +1,446 @@ +#!/bin/bash + +# Call with the hooks to run. EX: run_hook "pre-frontend" +run_hooks() { + if [[ -d "hooks/$1" ]] + then + for HOOK_FILE in hooks/$1/* + do + if [[ -f "$HOOK_FILE" && -x "$HOOK_FILE" ]] + then + "./$HOOK_FILE" + fi + done + fi +} + +# Bail on script errors +set -e + +# Parse the command line +BACKENDS=0 +NAME="cluster-up-`printf '%04x%04x' $RANDOM $RANDOM`" +DOWNLOAD_DIR="." +SRC_DIR="" +EXPORT_FRONTEND=0 +ISO="" +PROVIDER="virtualbox" +FQDN="cluster-up-frontend.localdomain" +BRIDGE="" +IP="" +NETMASK="255.255.255.0" +GATEWAY="" +DNS="" + +while [[ "$#" -gt 0 ]] +do + case "$1" in + --backends=*) + BACKENDS="${1#*=}" + shift 1 + ;; + --name=*) + NAME="${1#*=}" + shift 1 + ;; + --download-dir=*) + DOWNLOAD_DIR="${1#*=}" + shift 1 + ;; + --use-the-src-dir=*) + SRC_DIR="${1#*=}" + shift 1 + ;; + --export-frontend) + EXPORT_FRONTEND=1 + shift 1 + ;; + --fqdn=*) + FQDN="${1#*=}" + shift 1 + ;; + --bridge=*) + BRIDGE="${1#*=}" + shift 1 + ;; + --ip=*) + IP="${1#*=}" + shift 1 + ;; + --netmask=*) + NETMASK="${1#*=}" + shift 1 + ;; + --gateway=*) + GATEWAY="${1#*=}" + shift 1 + ;; + --dns=*) + DNS="${1#*=}" + shift 1 + ;; + *) + ISO="$1" + shift 1 + ;; + esac +done + +if [[ -z "$ISO" ]] +then + echo "Usage: ./cluster-up.sh [options...] STACKI_ISO" + echo "Options:" + echo -e " --backends=[0-253]\t\tThe number backends to create. Default: 1" + echo -e " --fqdn=FQDN\t\t\tThe FQDN of the frontend. Default: cluster-up-frontend.localdomain" + echo -e " --name=NAME\t\t\tThe name to uniquely identify this cluster. Default: YYYYMMDD_HHMMSS_RRRR" + echo -e " --download-dir=DIRECTORY\tThe directory to store installer ISOs. Default: '.'" + echo -e " --use-the-src-dir=DIRECTORY\tThe directory will be mounted and symlinked into the frontend." + echo -e " --export-frontend\t\tExport the frontend as a vagrant box." + echo -e " --bridge=INTERFACE\t\tBridge interface on the host. Default: Use host only networking" + echo -e " --ip=IP_ADDRESS\t\tIP Address for the bridge network. Default: Use DHCP" + echo -e " --netmask=NETMASK\t\tThe netmask for the bridge network. Default: 255.255.255.0" + echo -e " --gateway=GATEWAY_ADDRESS\tGateway address for the bridged interface." + echo -e " --dns=DNS_ADDRESS[,DNS2]\tComma seperated list of DNS servers." + exit 1 +fi + +# If we set an BRIDGE interface or IP, we disable creating virtual backends +if [[ -n "$BRIDGE" || -n $IP ]] +then + BACKENDS=0 +fi + +# Make sure a sane number of backends were requested +if [[ $BACKENDS -gt 253 || $BACKENDS -lt 0 ]] +then + echo -e "\033[31mError: backends needs to be a number between 0 and 253\033[0m" + exit 1 +fi + + +# Convert DOWNLOAD_DIR to be absolute +DOWNLOAD_DIR="$(cd "${DOWNLOAD_DIR/#~/$HOME}"; pwd)" +if [[ ! -z "$SRC_DIR" ]] +then + SRC_DIR="$(cd "${SRC_DIR/#~/$HOME}"; pwd)" +fi + +# Convert ISO to be absolute, if it isn't a URL +if [[ ! $ISO =~ https?:// ]] +then + ISO="$(cd "$(dirname "${ISO/#~/$HOME}")"; pwd)/$(basename "$ISO")" +fi + +# Make sure we are in the project directory +cd "$(dirname "${BASH_SOURCE[0]}")" + +# Run the pre-cluster-up hooks +run_hooks "pre-cluster-up" + +# Make sure we already don't have a cluster +if [[ -f .vagrant/cluster-up.json ]] +then + echo -e "\033[31mError: a cluster already exists. Run './cluster-down.sh' to destroy it.\033[0m" + exit 1 +fi + +# Figure out if we are rockin' VirtualBox or we try libvirt +if [[ ! -x "`command -v VBoxManage`" ]] +then + # No VBoxManager, assume we are libvirt. See if we have libvirtd installed. + if [[ ! -x "`command -v libvirtd`" ]] + then + echo -e "\033[31mError: It looks like you don't have VirtualBox or libvirt installed\033[0m" + exit 1 + fi + + # See if we have the vagrant-libvirt plugin installed + if [[ ! "`vagrant plugin list`" =~ "vagrant-libvirt" ]] + then + echo -e "\033[31mError: Looks like you need to install the vagrant-libvirt plugin\033[0m" + exit 1 + else + PROVIDER="libvirt" + fi +fi + +# If the ISO starts with http we assume it is remote and go fetch it +if [[ $ISO =~ https?:// ]] +then + DOWNLOAD_ISO=$DOWNLOAD_DIR/`basename $ISO` + + if [[ ! -f "$DOWNLOAD_ISO" ]] + then + echo + echo -e "\033[34mDownloading `basename $ISO` ...\033[0m" + curl -f --progress-bar -o $DOWNLOAD_ISO $ISO + fi + + ISO=$DOWNLOAD_ISO +fi + +# Figure out if we are SLES or CentOS +if [[ $ISO =~ "-sles12." ]] +then + OS="sles12" +elif [[ $ISO =~ "-redhat7." ]] +then + OS="redhat7" +else + echo -e "\033[31mError: Need a sles12 OR redhat7 Stacki ISO\033[0m" + exit 1 +fi + +# Split up the ISO path and ISO filename +ISO_PATH=`dirname "$ISO"` +ISO_FILENAME=`basename "$ISO"` + +# Figure out if are on the Teradata network or not +INTERNAL="false" +if host stacki-builds.labs.teradata.com >/dev/null +then + INTERNAL="true" +fi + +if [[ OS == "sles12" && INTERNAL == "false" ]] +then + echo -e "\033[31mError: Only CentOS Stacki is supported outside of the Teradata network\033[0m" + exit 1 +fi + +# Write out some settings for the Vagrantfile +mkdir -p ".vagrant" +cat > ".vagrant/cluster-up.json" <<-EOF +{ + "OS": "$OS", + "ISO_PATH": "$ISO_PATH", + "ISO_FILENAME": "$ISO_FILENAME", + "NAME": "$NAME", + "BACKENDS": $BACKENDS, + "DOWNLOAD_DIR": "$DOWNLOAD_DIR", + "SRC_DIR": "$SRC_DIR", + "PROVIDER": "$PROVIDER", + "FQDN": "$FQDN", + "BRIDGE": "$BRIDGE", + "IP": "$IP", + "NETMASK": "$NETMASK", + "GATEWAY": "$GATEWAY", + "DNS": "$DNS", + "INTERNAL": $INTERNAL +} +EOF + +# Download the installer ISO if it doesn't exist +if [[ $OS == "sles12" ]] +then + if [[ ! -f "$DOWNLOAD_DIR/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso" ]] + then + echo + echo -e "\033[34mDownloading SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso ...\033[0m" + curl -f --progress-bar --retry 3 -o $DOWNLOAD_DIR/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso http://stacki-builds.labs.teradata.com/installer-isos/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso + fi +elif [[ $OS == "redhat7" ]] +then + if [[ ! -f "$DOWNLOAD_DIR/CentOS-7-x86_64-Everything-1708.iso" ]] + then + echo + echo -e "\033[34mDownloading CentOS-7-x86_64-Everything-1708.iso ...\033[0m" + + if [[ $INTERNAL == "true" ]] + then + curl -f --progress-bar --retry 3 -o $DOWNLOAD_DIR/CentOS-7-x86_64-Everything-1708.iso http://stacki-builds.labs.teradata.com/installer-isos/CentOS-7-x86_64-Everything-1708.iso + else + curl -f --progress-bar --retry 3 -o $DOWNLOAD_DIR/CentOS-7-x86_64-Everything-1708.iso http://archive.kernel.org/centos-vault/7.5.1804/isos/x86_64/CentOS-7-x86_64-DVD-1804.iso + fi + fi +fi + +# Make sure the boxes are up-to-date +echo +echo -e "\033[34mChecking the vagrant boxes for updates ...\033[0m" +vagrant box update + +# Run the pre-frontend hooks +run_hooks "pre-frontend" + +# Bring up the frontend VM +echo +echo -e "\033[34mBringing up the frontend ...\033[0m" +vagrant up frontend + +# Reboot the frontend after the barnacle +vagrant reload frontend + +# Run the post-frontend hooks +run_hooks "post-frontend" + +# Add the OS pallet +echo +echo -e "\033[34mAdding the OS pallet to the frontend ...\033[0m" +if [[ $OS == "sles12" ]] +then + vagrant ssh frontend -c "sudo -i stack add pallet /export/installer-iso/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso" + vagrant ssh frontend -c "sudo -i stack enable pallet SLES" +elif [[ $OS == "redhat7" ]] +then + vagrant ssh frontend -c "sudo -i stack add pallet /export/installer-iso/CentOS-7-x86_64-Everything-1708.iso" + vagrant ssh frontend -c "sudo -i stack enable pallet CentOS" +fi + +# Copy the vagrant cart into place and enable it +echo +echo -e "\033[34mAdding the vagrant cart to the frontend ...\033[0m" +vagrant ssh frontend -c "sudo -i cp -r /vagrant/cart /export/stack/carts/vagrant" +vagrant ssh frontend -c "sudo -i stack add cart vagrant" +vagrant ssh frontend -c "sudo -i stack enable cart vagrant" + +# Export the frontend box, if requested +if [[ $EXPORT_FRONTEND -eq 1 ]] +then + # Run the pre-export hooks + run_hooks "pre-export" + + # Package up the frontend + BOX_NAME=$ISO_PATH/${ISO_FILENAME/.iso/.box} + BOX_JSON=$ISO_PATH/${ISO_FILENAME/.iso/.json} + BOX_VERSION=$(vagrant ssh frontend -c "sudo -i stack report version" | tr -d '\r' | tr '_' '-') + + set +e + SHASUM_EXE=$(which sha1sum) + [ -z $SHASUM_EXE ] && SHASUM_EXE=$(which shasum) + set -e + + echo + echo -e "\033[34mExporting the frontend as a vagrant box ...\033[0m" + vagrant halt frontend + vagrant package --output $BOX_NAME frontend + BOX_SHA=$($SHASUM_EXE $BOX_NAME | awk '{print $1;}') + cat > $BOX_JSON </dev/null & + sleep 10 + done + + # Wait for them to finish installing themselves, or in the case of libvirt, + # to timeout before install is done. + wait + + # Check that the backends are really up + for ((i=0; i < $BACKENDS; i += 1)) + do + BACKEND_UP[$i]=0 + done + BACKENDS_UP=0 + + # Check for the backends to come up for roughly an hour + for ((attempt=0; attempt < 60; attempt += 1)) + do + for ((i=0; i < $BACKENDS; i += 1)) + do + if [[ BACKEND_UP[$i] -eq 0 ]] + then + vagrant ssh backend-0-$i -c "echo backend-0-$i is up" 2>/dev/null + if [[ $? -eq 0 ]] + then + BACKEND_UP[$i]=1 + BACKENDS_UP=$((BACKENDS_UP + 1)) + fi + fi + done + + if [[ $BACKENDS_UP -eq $BACKENDS ]] + then + break + else + sleep 55 + fi + done + set -e + + # Run the post-backends hooks + run_hooks "post-backends" + + # Shut down node discovery + vagrant ssh frontend -c "sudo -i stack disable discovery" +fi + +# Write out the access instructions +set +x +echo +echo +echo " ###############################" +echo +echo " SUCCESS" +echo +echo " To log in to the frontend:" +echo +echo " vagrant ssh frontend" + +if [[ $BACKENDS -gt 0 ]] +then + echo + echo + echo " To log in to the backend(s):" + echo + for ((i=0; i < $BACKENDS; i += 1)) + do + echo " vagrant ssh backend-0-$i" + done +fi + +echo +echo " ###############################" +echo +echo + +# if we mapped the stacki source, symlink it in to place +if [[ -d "$SRC_DIR" ]] +then + vagrant ssh frontend -c "sudo -i python3 /export/src/tools/use_the_source/use_the_source.py /export/src/" +fi + +# Run the post-cluster-up hooks +run_hooks "post-cluster-up" + +# Have vagrant ssh automatically sudo to root +vagrant ssh frontend -c 'echo "if [[ -n \$SSH_TTY ]]; then sudo -i && exit >/dev/null; fi" >> /home/vagrant/.bash_profile' + +exit 0 diff --git a/tools/cluster-up/hooks/post-backends/.placeholder b/tools/cluster-up/hooks/post-backends/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/post-cluster-up/.placeholder b/tools/cluster-up/hooks/post-cluster-up/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/post-export/.placeholder b/tools/cluster-up/hooks/post-export/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/post-frontend/.placeholder b/tools/cluster-up/hooks/post-frontend/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/pre-backends/.placeholder b/tools/cluster-up/hooks/pre-backends/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/pre-cluster-up/.placeholder b/tools/cluster-up/hooks/pre-cluster-up/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/pre-export/.placeholder b/tools/cluster-up/hooks/pre-export/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/hooks/pre-frontend/.placeholder b/tools/cluster-up/hooks/pre-frontend/.placeholder new file mode 100644 index 000000000..e69de29bb diff --git a/tools/cluster-up/provision-frontend.sh b/tools/cluster-up/provision-frontend.sh new file mode 100644 index 000000000..2f17279fc --- /dev/null +++ b/tools/cluster-up/provision-frontend.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Bail on script errors +set -e + +# Output the commands as they are run +set -x + +# Add the installer ISO for SLES +if [[ $OS == "sles12" ]] +then + zypper addrepo iso:/?iso=/export/installer-iso/SLE-12-SP3-Server-DVD-x86_64-GM-DVD1.iso os + zypper update +fi + +# Vagrant monkeys with the hosts file, set it back to something known +cat > /etc/hosts < /etc/sysconfig/network + echo 'DEFROUTE="no"' >> /etc/sysconfig/network-scripts/ifcfg-eth0 + echo 'PEERDNS="no"' >> /etc/sysconfig/network-scripts/ifcfg-eth0 + + systemctl restart network + fi +fi + +# Set the DNS servers, if they were provided +if [[ -n $DNS ]] +then + sed -i "/nameserver/d" /etc/resolv.conf + echo "nameserver ${DNS//,/ /}" >> /etc/resolv.conf +fi + +# Fetch the barnacle script +curl -sfSLO --retry 3 https://raw.githubusercontent.com/Teradata/stacki/develop/tools/fab/frontend-install.py +chmod u+x frontend-install.py + +# Barnacle myself, choosing the second interface +./frontend-install.py --use-existing --stacki-iso="/export/stacki-iso/$ISO_FILENAME" <<< "2" + +exit 0 From b53be554c77f2c108f69b8cbc73f153b3f9e8ac7 Mon Sep 17 00:00:00 2001 From: "Mason J. Katz" Date: Mon, 25 Feb 2019 12:25:48 -0800 Subject: [PATCH 12/15] INTERNAL: 2019 Copyrights --- Makefile | 2 +- common/graph/backend.xml | 2 +- common/graph/base.xml | 2 +- common/graph/frontend.xml | 2 +- common/graph/replicant.xml | 2 +- common/nodes/ansible-backend.xml | 2 +- common/nodes/ansible-base.xml | 2 +- common/nodes/ansible-server.xml | 2 +- common/nodes/aws-client.xml | 2 +- common/nodes/aws-server.xml | 2 +- common/nodes/aws-ssh-key.xml | 2 +- common/nodes/barnacle.xml | 2 +- common/nodes/builder.xml | 2 +- common/nodes/database-data-init.xml | 2 +- common/nodes/database-data.xml | 2 +- common/nodes/database-migration.xml | 2 +- common/nodes/database-schema.xml | 2 +- common/nodes/database.xml | 2 +- common/nodes/dns-server.xml | 2 +- common/nodes/docker-server.xml | 3 +++ common/nodes/foundation-python.xml | 2 +- common/nodes/hash-client.xml | 2 +- common/nodes/ldconfig.xml | 2 +- common/nodes/mq-base.xml | 2 +- common/nodes/mq-client.xml | 2 +- common/nodes/mq-server.xml | 2 +- common/nodes/node-certs.xml | 2 +- common/nodes/node.xml | 2 +- common/nodes/peerdone.xml | 2 +- common/nodes/replicant.xml | 2 +- common/nodes/routes-server.xml | 2 +- common/nodes/ssh-base.xml | 2 +- common/nodes/ssl-base.xml | 2 +- common/nodes/time-base.xml | 2 +- common/src/Makefile | 2 +- common/src/foundation/Makefile | 2 +- common/src/foundation/MegaCLI/Makefile | 2 +- common/src/foundation/StorCLI/Makefile | 2 +- common/src/foundation/comps/Makefile | 2 +- common/src/foundation/fb-tftpd/Makefile | 2 +- common/src/foundation/fio/Makefile | 2 +- common/src/foundation/fio/extras/fio.py | 2 +- common/src/foundation/iperf/Makefile | 2 +- common/src/foundation/iperf/files/iperf3.py | 2 +- common/src/foundation/newt/Makefile | 2 +- common/src/foundation/python-packages/Makefile | 2 +- common/src/foundation/python/Makefile | 2 +- common/src/foundation/rcs/Makefile | 2 +- common/src/foundation/redis/Makefile | 2 +- common/src/foundation/redis/redis-server.init | 2 +- common/src/foundation/sc-im/Makefile | 2 +- common/src/foundation/stream/Makefile | 2 +- common/src/foundation/stream/extras/stream.py | 2 +- common/src/foundation/zeromq/Makefile | 2 +- common/src/stack/Makefile | 2 +- common/src/stack/admin/Makefile | 2 +- common/src/stack/aws-client/Makefile | 2 +- common/src/stack/aws-client/aws-client-register.py | 2 +- common/src/stack/aws-server/Makefile | 2 +- common/src/stack/aws-server/aws-server-init.py | 2 +- common/src/stack/aws-server/register.py | 2 +- common/src/stack/barnacle/Makefile | 2 +- common/src/stack/barnacle/aws-barnacle-prep-image.sh | 2 +- common/src/stack/barnacle/aws-barnacle.sh | 2 +- common/src/stack/build/Makefile | 2 +- common/src/stack/build/build/bin/gen-order | 2 +- common/src/stack/build/build/bin/os | 2 +- common/src/stack/build/build/bin/os-release | 2 +- common/src/stack/build/build/bin/package-install | 2 +- common/src/stack/build/build/bin/pip2src | 2 +- common/src/stack/build/build/etc/CCCommon.mk | 2 +- common/src/stack/build/build/etc/CCRules.mk | 2 +- common/src/stack/build/build/etc/Rules-redhat.mk | 2 +- common/src/stack/build/build/etc/Rules-sles.mk | 2 +- common/src/stack/build/build/etc/Rules.mk | 2 +- common/src/stack/build/build/etc/create-package.mk | 2 +- common/src/stack/build/build/etc/python.mk | 2 +- common/src/stack/build/build/etc/stack-version.mk | 2 +- .../src/stack/build/build/src/pallet/bin/gen-release-notes.py | 3 +++ common/src/stack/build/build/src/pallet/bin/get3rdparty.py | 2 +- common/src/stack/build/build/src/pallet/bin/manifest-check.py | 2 +- common/src/stack/build/build/src/pallet/doc/Makefile | 2 +- common/src/stack/build/build/src/pallet/etc/CCRolls.mk | 2 +- common/src/stack/build/build/src/pallet/etc/Compat.mk | 2 +- common/src/stack/build/build/src/pallet/etc/Rolls.mk | 2 +- .../build/build/src/pallet/etc/doc/rocksplus-copyright.sgml | 2 +- .../build/src/pallet/etc/doc/rocksplus-general-entities.sgml | 2 +- .../build/src/pallet/etc/doc/rocksplus-overview-entities.sgml | 2 +- .../build/build/src/pallet/etc/doc/rocksplus-overview.sgml | 2 +- common/src/stack/build/build/src/pallet/template/Makefile | 2 +- .../src/stack/build/build/src/pallet/template/graph/PALLET.xml | 2 +- .../build/build/src/pallet/template/nodes/PALLET-base.xml | 2 +- .../build/build/src/pallet/template/nodes/PALLET-client.xml | 2 +- .../build/build/src/pallet/template/nodes/PALLET-server.xml | 2 +- common/src/stack/build/build/src/pallet/template/src/Makefile | 2 +- .../build/build/src/pallet/template/src/template/Makefile | 2 +- common/src/stack/build/stack-build.csh | 2 +- common/src/stack/build/stack-build.sh | 2 +- common/src/stack/command/Makefile | 2 +- common/src/stack/command/stack.py | 2 +- common/src/stack/command/stack/__init__.py | 2 +- common/src/stack/command/stack/commands/__init__.py | 2 +- .../src/stack/command/stack/commands/add/appliance/__init__.py | 2 +- .../command/stack/commands/add/appliance/attr/__init__.py | 2 +- .../command/stack/commands/add/appliance/firewall/__init__.py | 2 +- .../command/stack/commands/add/appliance/route/__init__.py | 2 +- .../commands/add/appliance/storage/controller/__init__.py | 2 +- common/src/stack/command/stack/commands/add/attr/__init__.py | 2 +- .../stack/command/stack/commands/add/bootaction/__init__.py | 2 +- common/src/stack/command/stack/commands/add/box/__init__.py | 2 +- common/src/stack/command/stack/commands/add/cart/__init__.py | 2 +- .../src/stack/command/stack/commands/add/copyright/__init__.py | 2 +- .../stack/commands/add/copyright/copyright-stacki-short | 2 +- .../stack/command/stack/commands/add/environment/__init__.py | 2 +- .../command/stack/commands/add/environment/attr/__init__.py | 2 +- .../stack/commands/add/environment/firewall/__init__.py | 2 +- .../command/stack/commands/add/environment/route/__init__.py | 2 +- .../commands/add/environment/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/add/firewall/__init__.py | 2 +- common/src/stack/command/stack/commands/add/group/__init__.py | 2 +- common/src/stack/command/stack/commands/add/host/__init__.py | 2 +- .../stack/command/stack/commands/add/host/alias/__init__.py | 2 +- .../src/stack/command/stack/commands/add/host/attr/__init__.py | 2 +- .../stack/command/stack/commands/add/host/bonded/__init__.py | 2 +- .../stack/command/stack/commands/add/host/bridge/__init__.py | 2 +- .../stack/command/stack/commands/add/host/firewall/__init__.py | 2 +- .../stack/command/stack/commands/add/host/group/__init__.py | 2 +- .../command/stack/commands/add/host/interface/__init__.py | 2 +- .../src/stack/command/stack/commands/add/host/key/__init__.py | 2 +- .../stack/command/stack/commands/add/host/message/__init__.py | 2 +- .../command/stack/commands/add/host/partition/__init__.py | 2 +- .../stack/command/stack/commands/add/host/route/__init__.py | 2 +- .../stack/commands/add/host/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/add/network/__init__.py | 2 +- .../src/stack/command/stack/commands/add/os/attr/__init__.py | 2 +- .../stack/command/stack/commands/add/os/firewall/__init__.py | 2 +- .../src/stack/command/stack/commands/add/os/route/__init__.py | 2 +- .../stack/commands/add/os/storage/controller/__init__.py | 2 +- common/src/stack/command/stack/commands/add/pallet/__init__.py | 2 +- .../stack/command/stack/commands/add/pallet/imp_disk_pallet.py | 2 +- .../command/stack/commands/add/pallet/imp_foreign_redhat.py | 2 +- .../command/stack/commands/add/pallet/imp_foreign_sles.py | 2 +- .../command/stack/commands/add/pallet/imp_foreign_sles12.py | 2 +- .../command/stack/commands/add/pallet/imp_native_redhat.py | 2 +- .../stack/command/stack/commands/add/pallet/imp_native_sles.py | 2 +- .../command/stack/commands/add/pallet/imp_network_pallet.py | 2 +- .../stack/command/stack/commands/add/pallet/tag/__init__.py | 2 +- common/src/stack/command/stack/commands/add/route/__init__.py | 2 +- .../command/stack/commands/add/storage/controller/__init__.py | 2 +- .../command/stack/commands/add/storage/partition/__init__.py | 2 +- .../src/stack/command/stack/commands/compile/cart/__init__.py | 2 +- .../command/stack/commands/config/host/interface/__init__.py | 2 +- .../src/stack/command/stack/commands/create/keys/__init__.py | 2 +- .../src/stack/command/stack/commands/create/mirror/__init__.py | 2 +- .../stack/command/stack/commands/create/new/pallet/__init__.py | 2 +- .../stack/command/stack/commands/create/package/__init__.py | 2 +- .../src/stack/command/stack/commands/create/pallet/__init__.py | 2 +- .../src/stack/command/stack/commands/disable/cart/__init__.py | 2 +- .../src/stack/command/stack/commands/disable/host/__init__.py | 2 +- .../stack/command/stack/commands/disable/pallet/__init__.py | 2 +- common/src/stack/command/stack/commands/dump/__init__.py | 2 +- .../stack/command/stack/commands/dump/appliance/__init__.py | 2 +- .../stack/command/stack/commands/dump/bootaction/__init__.py | 2 +- common/src/stack/command/stack/commands/dump/box/__init__.py | 2 +- common/src/stack/command/stack/commands/dump/cart/__init__.py | 2 +- .../stack/command/stack/commands/dump/environment/__init__.py | 2 +- common/src/stack/command/stack/commands/dump/group/__init__.py | 2 +- common/src/stack/command/stack/commands/dump/host/__init__.py | 2 +- .../src/stack/command/stack/commands/dump/network/__init__.py | 2 +- common/src/stack/command/stack/commands/dump/os/__init__.py | 2 +- .../src/stack/command/stack/commands/dump/pallet/__init__.py | 2 +- .../src/stack/command/stack/commands/dump/plugin_appliance.py | 2 +- .../src/stack/command/stack/commands/dump/plugin_bootaction.py | 2 +- .../stack/command/stack/commands/dump/plugin_environment.py | 2 +- common/src/stack/command/stack/commands/dump/plugin_group.py | 2 +- common/src/stack/command/stack/commands/dump/plugin_host.py | 2 +- common/src/stack/command/stack/commands/dump/plugin_network.py | 2 +- common/src/stack/command/stack/commands/dump/plugin_os.py | 2 +- .../src/stack/command/stack/commands/dump/plugin_software.py | 2 +- .../src/stack/command/stack/commands/enable/cart/__init__.py | 2 +- .../src/stack/command/stack/commands/enable/host/__init__.py | 2 +- .../src/stack/command/stack/commands/enable/pallet/__init__.py | 2 +- common/src/stack/command/stack/commands/help/__init__.py | 2 +- .../src/stack/command/stack/commands/iterate/host/__init__.py | 2 +- common/src/stack/command/stack/commands/list/__init__.py | 2 +- .../src/stack/command/stack/commands/list/access/__init__.py | 2 +- .../stack/command/stack/commands/list/appliance/__init__.py | 2 +- .../command/stack/commands/list/appliance/attr/__init__.py | 2 +- .../command/stack/commands/list/appliance/firewall/__init__.py | 2 +- .../command/stack/commands/list/appliance/route/__init__.py | 3 +++ .../commands/list/appliance/storage/controller/__init__.py | 2 +- .../command/stack/commands/list/appliance/xml/__init__.py | 2 +- common/src/stack/command/stack/commands/list/attr/__init__.py | 2 +- .../src/stack/command/stack/commands/list/attr/doc/__init__.py | 2 +- .../stack/command/stack/commands/list/bootaction/__init__.py | 2 +- common/src/stack/command/stack/commands/list/box/__init__.py | 2 +- .../stack/command/stack/commands/list/box/pallet/__init__.py | 2 +- common/src/stack/command/stack/commands/list/cart/__init__.py | 2 +- .../stack/command/stack/commands/list/environment/__init__.py | 2 +- .../command/stack/commands/list/environment/attr/__init__.py | 2 +- .../stack/commands/list/environment/firewall/__init__.py | 2 +- .../command/stack/commands/list/environment/route/__init__.py | 2 +- .../commands/list/environment/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/list/firewall/__init__.py | 2 +- .../command/stack/commands/list/firewall/plugin_intrinsic.py | 2 +- common/src/stack/command/stack/commands/list/group/__init__.py | 2 +- common/src/stack/command/stack/commands/list/help/__init__.py | 2 +- common/src/stack/command/stack/commands/list/host/__init__.py | 2 +- .../stack/command/stack/commands/list/host/alias/__init__.py | 2 +- .../stack/command/stack/commands/list/host/attr/__init__.py | 2 +- .../stack/command/stack/commands/list/host/boot/__init__.py | 2 +- .../command/stack/commands/list/host/firewall/__init__.py | 2 +- .../stack/command/stack/commands/list/host/graph/__init__.py | 2 +- .../stack/command/stack/commands/list/host/group/__init__.py | 2 +- .../stack/command/stack/commands/list/host/hash/__init__.py | 2 +- .../command/stack/commands/list/host/interface/__init__.py | 2 +- .../src/stack/command/stack/commands/list/host/key/__init__.py | 2 +- .../stack/command/stack/commands/list/host/message/__init__.py | 2 +- .../src/stack/command/stack/commands/list/host/plugin_basic.py | 2 +- .../stack/command/stack/commands/list/host/plugin_comment.py | 2 +- .../command/stack/commands/list/host/plugin_hash_status.py | 2 +- .../stack/command/stack/commands/list/host/power/__init__.py | 2 +- .../stack/command/stack/commands/list/host/profile/__init__.py | 2 +- .../command/stack/commands/list/host/profile/imp_redhat.py | 2 +- .../stack/command/stack/commands/list/host/profile/imp_sles.py | 2 +- .../stack/command/stack/commands/list/host/route/__init__.py | 2 +- .../stack/command/stack/commands/list/host/status/__init__.py | 2 +- .../command/stack/commands/list/host/status/plugin_health.py | 2 +- .../stack/commands/list/host/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/list/host/xml/__init__.py | 2 +- .../src/stack/command/stack/commands/list/network/__init__.py | 2 +- .../src/stack/command/stack/commands/list/node/xml/__init__.py | 2 +- .../src/stack/command/stack/commands/list/node/xml/imp_xml.py | 2 +- .../command/stack/commands/list/node/xml/plugin_profile_cfg.py | 2 +- .../stack/command/stack/commands/list/node/xml/plugin_salt.py | 2 +- .../command/stack/commands/list/node/xml/plugin_stacki.py | 2 +- common/src/stack/command/stack/commands/list/os/__init__.py | 2 +- .../src/stack/command/stack/commands/list/os/attr/__init__.py | 2 +- .../stack/command/stack/commands/list/os/firewall/__init__.py | 2 +- .../src/stack/command/stack/commands/list/os/route/__init__.py | 2 +- .../stack/commands/list/os/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/list/pallet/__init__.py | 2 +- .../command/stack/commands/list/pallet/command/__init__.py | 2 +- .../stack/command/stack/commands/list/pallet/tag/__init__.py | 2 +- common/src/stack/command/stack/commands/list/route/__init__.py | 2 +- .../command/stack/commands/list/storage/controller/__init__.py | 2 +- .../command/stack/commands/list/storage/partition/__init__.py | 2 +- common/src/stack/command/stack/commands/load/__init__.py | 2 +- .../src/stack/command/stack/commands/load/attrfile/__init__.py | 2 +- .../command/stack/commands/load/attrfile/imp_load_default.py | 2 +- .../stack/commands/load/attrfile/plugin_load_default.py | 2 +- common/src/stack/command/stack/commands/load/host/__init__.py | 2 +- .../src/stack/command/stack/commands/load/hostfile/__init__.py | 2 +- .../command/stack/commands/load/hostfile/imp_load_default.py | 2 +- .../stack/commands/load/hostfile/plugin_load_default.py | 2 +- .../stack/command/stack/commands/load/networkfile/__init__.py | 2 +- .../stack/commands/load/networkfile/imp_load_default.py | 2 +- .../stack/commands/load/networkfile/plugin_load_default.py | 2 +- common/src/stack/command/stack/commands/load/plugin_api.py | 2 +- .../src/stack/command/stack/commands/load/plugin_appliance.py | 2 +- .../src/stack/command/stack/commands/load/plugin_bootaction.py | 2 +- .../stack/command/stack/commands/load/plugin_environment.py | 2 +- common/src/stack/command/stack/commands/load/plugin_global.py | 2 +- common/src/stack/command/stack/commands/load/plugin_group.py | 2 +- common/src/stack/command/stack/commands/load/plugin_host.py | 2 +- common/src/stack/command/stack/commands/load/plugin_network.py | 2 +- common/src/stack/command/stack/commands/load/plugin_os.py | 2 +- common/src/stack/command/stack/commands/load/plugin_route.py | 2 +- .../src/stack/command/stack/commands/load/plugin_software.py | 2 +- .../command/stack/commands/load/storage/controller/__init__.py | 2 +- .../stack/commands/load/storage/controller/imp_load_default.py | 2 +- .../commands/load/storage/controller/plugin_load_default.py | 2 +- .../command/stack/commands/load/storage/partition/__init__.py | 2 +- .../stack/commands/load/storage/partition/imp_load_default.py | 2 +- .../commands/load/storage/partition/plugin_load_default.py | 2 +- common/src/stack/command/stack/commands/pack/cart/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/access/__init__.py | 2 +- .../stack/command/stack/commands/remove/appliance/__init__.py | 2 +- .../command/stack/commands/remove/appliance/attr/__init__.py | 2 +- .../stack/commands/remove/appliance/firewall/__init__.py | 2 +- .../command/stack/commands/remove/appliance/plugin_attr.py | 2 +- .../command/stack/commands/remove/appliance/route/__init__.py | 2 +- .../commands/remove/appliance/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/attr/__init__.py | 2 +- common/src/stack/command/stack/commands/remove/box/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/cart/__init__.py | 2 +- .../command/stack/commands/remove/environment/__init__.py | 2 +- .../command/stack/commands/remove/environment/attr/__init__.py | 2 +- .../stack/commands/remove/environment/firewall/__init__.py | 2 +- .../command/stack/commands/remove/environment/plugin_attr.py | 2 +- .../stack/commands/remove/environment/plugin_environment.py | 2 +- .../stack/commands/remove/environment/route/__init__.py | 2 +- .../commands/remove/environment/storage/controller/__init__.py | 2 +- .../stack/command/stack/commands/remove/firewall/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/group/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/host/__init__.py | 2 +- .../stack/command/stack/commands/remove/host/alias/__init__.py | 2 +- .../stack/command/stack/commands/remove/host/attr/__init__.py | 2 +- .../stack/command/stack/commands/remove/host/boot/__init__.py | 2 +- .../command/stack/commands/remove/host/boot/plugin_pxe.py | 2 +- .../command/stack/commands/remove/host/boot/plugin_uefi.py | 2 +- .../command/stack/commands/remove/host/firewall/__init__.py | 2 +- .../stack/command/stack/commands/remove/host/group/__init__.py | 2 +- .../command/stack/commands/remove/host/interface/__init__.py | 2 +- .../stack/commands/remove/host/interface/plugin_alias.py | 2 +- .../stack/commands/remove/host/interface/plugin_interface.py | 2 +- .../stack/command/stack/commands/remove/host/key/__init__.py | 2 +- .../command/stack/commands/remove/host/partition/__init__.py | 2 +- .../stack/command/stack/commands/remove/host/plugin_alias.py | 2 +- .../stack/command/stack/commands/remove/host/plugin_attr.py | 2 +- .../stack/command/stack/commands/remove/host/plugin_boot.py | 2 +- .../stack/command/stack/commands/remove/host/plugin_group.py | 2 +- .../stack/command/stack/commands/remove/host/plugin_host.py | 2 +- .../command/stack/commands/remove/host/plugin_interface.py | 2 +- .../src/stack/command/stack/commands/remove/host/plugin_key.py | 2 +- .../command/stack/commands/remove/host/plugin_partition.py | 2 +- .../stack/command/stack/commands/remove/host/route/__init__.py | 2 +- .../stack/commands/remove/host/storage/controller/__init__.py | 2 +- .../stack/command/stack/commands/remove/network/__init__.py | 2 +- common/src/stack/command/stack/commands/remove/os/__init__.py | 2 +- .../stack/command/stack/commands/remove/os/attr/__init__.py | 2 +- .../command/stack/commands/remove/os/firewall/__init__.py | 2 +- common/src/stack/command/stack/commands/remove/os/plugin_os.py | 2 +- .../stack/command/stack/commands/remove/os/route/__init__.py | 2 +- .../stack/commands/remove/os/storage/controller/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/pallet/__init__.py | 2 +- .../stack/command/stack/commands/remove/pallet/tag/__init__.py | 2 +- .../src/stack/command/stack/commands/remove/route/__init__.py | 2 +- .../stack/commands/remove/storage/controller/__init__.py | 2 +- .../stack/commands/remove/storage/partition/__init__.py | 2 +- common/src/stack/command/stack/commands/report/__init__.py | 2 +- .../stack/command/stack/commands/report/attrfile/__init__.py | 2 +- .../src/stack/command/stack/commands/report/dbhost/__init__.py | 2 +- .../src/stack/command/stack/commands/report/dhcpd/__init__.py | 2 +- .../src/stack/command/stack/commands/report/host/__init__.py | 2 +- .../command/stack/commands/report/host/bootfile/__init__.py | 2 +- .../stack/commands/report/host/bootfile/imp_redhat_pxe.py | 2 +- .../stack/commands/report/host/bootfile/imp_redhat_uefi.py | 2 +- .../stack/commands/report/host/bootfile/imp_sles_pxe.py | 2 +- .../stack/commands/report/host/bootfile/imp_sles_uefi.py | 2 +- .../command/stack/commands/report/host/bootfile/plugin_pxe.py | 2 +- .../command/stack/commands/report/host/bootfile/plugin_uefi.py | 2 +- .../command/stack/commands/report/host/firewall/__init__.py | 2 +- .../command/stack/commands/report/host/interface/__init__.py | 2 +- .../command/stack/commands/report/host/interface/imp_redhat.py | 2 +- .../command/stack/commands/report/host/interface/imp_sles.py | 2 +- .../stack/command/stack/commands/report/host/mq/__init__.py | 2 +- .../command/stack/commands/report/host/network/__init__.py | 2 +- .../stack/command/stack/commands/report/host/repo/__init__.py | 2 +- .../command/stack/commands/report/host/repo/imp_redhat.py | 2 +- .../stack/command/stack/commands/report/host/repo/imp_sles.py | 2 +- .../command/stack/commands/report/host/resolv/__init__.py | 2 +- .../stack/command/stack/commands/report/host/route/__init__.py | 2 +- .../command/stack/commands/report/host/route/imp_redhat.py | 2 +- .../stack/command/stack/commands/report/host/route/imp_sles.py | 2 +- .../stack/commands/report/host/storage/controller/__init__.py | 2 +- .../stack/commands/report/host/storage/partition/__init__.py | 2 +- .../stack/command/stack/commands/report/host/time/__init__.py | 2 +- .../command/stack/commands/report/host/time/imp_time_chrony.py | 2 +- .../command/stack/commands/report/host/time/imp_time_ntp.py | 2 +- .../stack/command/stack/commands/report/hostfile/__init__.py | 2 +- .../src/stack/command/stack/commands/report/named/__init__.py | 2 +- .../command/stack/commands/report/networkfile/__init__.py | 2 +- .../src/stack/command/stack/commands/report/script/__init__.py | 2 +- .../stack/command/stack/commands/report/siteattr/__init__.py | 2 +- .../stack/command/stack/commands/report/version/__init__.py | 2 +- .../src/stack/command/stack/commands/report/zones/__init__.py | 2 +- common/src/stack/command/stack/commands/run/host/__init__.py | 2 +- common/src/stack/command/stack/commands/run/host/imp_ssh.py | 2 +- common/src/stack/command/stack/commands/run/pallet/__init__.py | 2 +- common/src/stack/command/stack/commands/set/access/__init__.py | 2 +- .../command/stack/commands/set/appliance/attr/__init__.py | 2 +- common/src/stack/command/stack/commands/set/attr/__init__.py | 2 +- .../src/stack/command/stack/commands/set/attr/doc/__init__.py | 2 +- .../stack/command/stack/commands/set/bootaction/__init__.py | 2 +- .../command/stack/commands/set/bootaction/args/__init__.py | 2 +- .../command/stack/commands/set/bootaction/kernel/__init__.py | 2 +- .../command/stack/commands/set/bootaction/ramdisk/__init__.py | 2 +- .../stack/command/stack/commands/set/environment/__init__.py | 2 +- .../command/stack/commands/set/environment/attr/__init__.py | 2 +- common/src/stack/command/stack/commands/set/host/__init__.py | 2 +- .../command/stack/commands/set/host/appliance/__init__.py | 2 +- .../src/stack/command/stack/commands/set/host/attr/__init__.py | 2 +- .../src/stack/command/stack/commands/set/host/boot/__init__.py | 2 +- .../command/stack/commands/set/host/bootaction/__init__.py | 2 +- .../src/stack/command/stack/commands/set/host/box/__init__.py | 2 +- .../stack/command/stack/commands/set/host/comment/__init__.py | 2 +- .../command/stack/commands/set/host/environment/__init__.py | 2 +- .../command/stack/commands/set/host/interface/__init__.py | 2 +- .../stack/commands/set/host/interface/channel/__init__.py | 2 +- .../stack/commands/set/host/interface/default/__init__.py | 2 +- .../stack/commands/set/host/interface/interface/__init__.py | 2 +- .../command/stack/commands/set/host/interface/ip/__init__.py | 2 +- .../command/stack/commands/set/host/interface/mac/__init__.py | 2 +- .../stack/commands/set/host/interface/module/__init__.py | 2 +- .../command/stack/commands/set/host/interface/name/__init__.py | 2 +- .../stack/commands/set/host/interface/network/__init__.py | 2 +- .../stack/commands/set/host/interface/options/__init__.py | 2 +- .../command/stack/commands/set/host/interface/vlan/__init__.py | 2 +- .../stack/command/stack/commands/set/host/metadata/__init__.py | 2 +- .../src/stack/command/stack/commands/set/host/name/__init__.py | 2 +- .../stack/command/stack/commands/set/host/power/__init__.py | 2 +- .../src/stack/command/stack/commands/set/host/rack/__init__.py | 2 +- .../src/stack/command/stack/commands/set/host/rank/__init__.py | 2 +- .../stack/command/stack/commands/set/host/storage/__init__.py | 2 +- .../src/stack/command/stack/commands/set/network/__init__.py | 2 +- .../command/stack/commands/set/network/address/__init__.py | 2 +- .../stack/command/stack/commands/set/network/dns/__init__.py | 2 +- .../command/stack/commands/set/network/gateway/__init__.py | 2 +- .../stack/command/stack/commands/set/network/mask/__init__.py | 2 +- .../stack/command/stack/commands/set/network/mtu/__init__.py | 2 +- .../stack/command/stack/commands/set/network/name/__init__.py | 2 +- .../stack/command/stack/commands/set/network/pxe/__init__.py | 2 +- .../stack/command/stack/commands/set/network/zone/__init__.py | 2 +- .../src/stack/command/stack/commands/set/os/attr/__init__.py | 2 +- common/src/stack/command/stack/commands/set/pallet/__init__.py | 3 +++ .../stack/command/stack/commands/set/pallet/tag/__init__.py | 2 +- .../src/stack/command/stack/commands/set/password/__init__.py | 2 +- .../stack/command/stack/commands/set/password/plugin_unix.py | 2 +- .../command/stack/commands/swap/host/interface/__init__.py | 2 +- common/src/stack/command/stack/commands/sync/__init__.py | 2 +- .../src/stack/command/stack/commands/sync/config/__init__.py | 2 +- .../stack/command/stack/commands/sync/config/plugin_dhcpd.py | 2 +- .../src/stack/command/stack/commands/sync/config/plugin_dns.py | 2 +- .../stack/command/stack/commands/sync/config/plugin_host.py | 2 +- .../stack/command/stack/commands/sync/config/plugin_repo.py | 2 +- common/src/stack/command/stack/commands/sync/dhcpd/__init__.py | 2 +- common/src/stack/command/stack/commands/sync/dns/__init__.py | 2 +- common/src/stack/command/stack/commands/sync/dns/plugin_dns.py | 2 +- .../src/stack/command/stack/commands/sync/dns/plugin_named.py | 2 +- .../src/stack/command/stack/commands/sync/dns/plugin_resolv.py | 2 +- common/src/stack/command/stack/commands/sync/host/__init__.py | 2 +- .../stack/command/stack/commands/sync/host/ansible/__init__.py | 2 +- .../stack/command/stack/commands/sync/host/boot/__init__.py | 2 +- .../stack/command/stack/commands/sync/host/config/__init__.py | 2 +- .../command/stack/commands/sync/host/config/plugin_pxecfg.py | 2 +- .../command/stack/commands/sync/host/firewall/__init__.py | 2 +- .../stack/command/stack/commands/sync/host/network/__init__.py | 2 +- .../stack/command/stack/commands/sync/host/repo/__init__.py | 2 +- .../stack/command/stack/commands/unload/attrfile/__init__.py | 2 +- .../stack/commands/unload/attrfile/imp_unload_default.py | 2 +- .../stack/commands/unload/attrfile/plugin_unload_default.py | 2 +- .../stack/command/stack/commands/unload/hostfile/__init__.py | 2 +- .../stack/commands/unload/hostfile/imp_unload_default.py | 2 +- common/src/stack/command/stack/commands/verify/xml/__init__.py | 2 +- common/src/stack/command/tests/__init__.py | 2 +- common/src/stack/command/tests/test_api.py | 2 +- common/src/stack/command/tests/test_argument_processors.py | 2 +- common/src/stack/command/tests/test_attr.py | 2 +- common/src/stack/command/tests/test_box.py | 2 +- common/src/stack/command/tests/test_scale.py | 2 +- common/src/stack/config-server/Makefile | 2 +- common/src/stack/config-server/mq/producers/switch_health.py | 2 +- common/src/stack/config/Makefile | 2 +- common/src/stack/config/init.d/stack-shutdown | 3 +++ common/src/stack/discovery/Makefile | 2 +- common/src/stack/discovery/bin/discover-nodes.py | 2 +- .../src/stack/discovery/command/disable/discovery/__init__.py | 2 +- .../src/stack/discovery/command/enable/discovery/__init__.py | 2 +- .../src/stack/discovery/command/report/discovery/__init__.py | 2 +- common/src/stack/discovery/pylib/discovery.py | 2 +- common/src/stack/docker/Makefile | 3 +++ common/src/stack/docker/docker-barnacle.sh | 3 +++ common/src/stack/ekv/Makefile | 2 +- common/src/stack/examples/Makefile | 2 +- common/src/stack/kickstart/Makefile | 2 +- common/src/stack/kickstart/__init__.py | 2 +- common/src/stack/kickstart/profile.py | 2 +- common/src/stack/kickstart/redhat.py | 2 +- common/src/stack/kickstart/sles.py | 2 +- common/src/stack/kickstart/utils/setDbPartitions.cgi | 2 +- common/src/stack/ludicrous-speed/Makefile | 2 +- common/src/stack/mq/Makefile | 2 +- common/src/stack/mq/clients/channel-ctrl.py | 2 +- common/src/stack/mq/clients/publish.py | 2 +- common/src/stack/mq/daemons/init.d/smq-processor | 2 +- common/src/stack/mq/daemons/init.d/smq-producer | 2 +- common/src/stack/mq/daemons/init.d/smq-publisher | 2 +- common/src/stack/mq/daemons/init.d/smq-shipper | 2 +- common/src/stack/mq/daemons/processor.py | 2 +- common/src/stack/mq/daemons/producer.py | 2 +- common/src/stack/mq/daemons/publisher.py | 2 +- common/src/stack/mq/daemons/shipper.py | 2 +- common/src/stack/mq/processors/__init__.py | 2 +- common/src/stack/mq/processors/alert.py | 2 +- common/src/stack/mq/processors/health.py | 2 +- common/src/stack/mq/processors/installhash.py | 2 +- common/src/stack/mq/producers/__init__.py | 2 +- common/src/stack/mq/producers/health.py | 2 +- common/src/stack/mq/producers/installhash.py | 2 +- common/src/stack/mq/pylib/mq/__init__.py | 2 +- common/src/stack/pxeboot/Makefile | 2 +- common/src/stack/pxeboot/setPxeboot.cgi | 2 +- common/src/stack/pylib/Makefile | 2 +- common/src/stack/pylib/stack/api/__init__.py | 2 +- common/src/stack/pylib/stack/api/get.py | 2 +- common/src/stack/pylib/stack/attr.py | 2 +- common/src/stack/pylib/stack/bool.py | 2 +- common/src/stack/pylib/stack/bootable.py | 2 +- common/src/stack/pylib/stack/cond.py | 2 +- common/src/stack/pylib/stack/csv.py | 2 +- common/src/stack/pylib/stack/dist.py | 2 +- common/src/stack/pylib/stack/download.py | 2 +- common/src/stack/pylib/stack/exception.py | 2 +- common/src/stack/pylib/stack/expatreader.py | 2 +- common/src/stack/pylib/stack/file.py | 2 +- common/src/stack/pylib/stack/gen.py | 2 +- common/src/stack/pylib/stack/lock.py | 2 +- common/src/stack/pylib/stack/media.py | 2 +- common/src/stack/pylib/stack/password.py | 2 +- common/src/stack/pylib/stack/profile.py | 2 +- common/src/stack/pylib/stack/redhat/gen.py | 2 +- common/src/stack/pylib/stack/sles/gen.py | 2 +- common/src/stack/pylib/stack/text.py | 2 +- common/src/stack/pylib/stack/util.py | 2 +- common/src/stack/pylib/stack/wizard.py | 2 +- common/src/stack/pylib/tests/test_bool.py | 2 +- common/src/stack/pylib/tests/test_cond.py | 2 +- common/src/stack/pylib/tests/test_version.py | 2 +- common/src/stack/releasenotes/Makefile | 2 +- common/src/stack/report-system/Makefile | 2 +- .../src/stack/report-system/command/report/system/__init__.py | 2 +- common/src/stack/storage-config/Makefile | 2 +- common/src/stack/storage-config/bin/configure-controllers.py | 2 +- common/src/stack/storage-config/bin/configure-partitions.py | 2 +- common/src/stack/storage-config/bin/initialize-storage.py | 2 +- common/src/stack/storage-config/bin/record-partitions.py | 2 +- common/src/stack/storage-config/lib/stacki_storage.py | 2 +- common/src/stack/switch/Makefile | 2 +- common/src/stack/switch/command/add/switch/host/__init__.py | 2 +- .../src/stack/switch/command/add/switch/partition/__init__.py | 2 +- .../switch/command/add/switch/partition/member/__init__.py | 2 +- .../switch/command/create/host/switch/mapping/__init__.py | 2 +- .../switch/command/create/host/switch/mapping/imp_x1052.py | 2 +- common/src/stack/switch/command/list/host/switch/__init__.py | 2 +- common/src/stack/switch/command/list/switch/__init__.py | 2 +- common/src/stack/switch/command/list/switch/config/__init__.py | 2 +- .../src/stack/switch/command/list/switch/config/imp_x1052.py | 2 +- common/src/stack/switch/command/list/switch/host/__init__.py | 2 +- common/src/stack/switch/command/list/switch/mac/__init__.py | 2 +- common/src/stack/switch/command/list/switch/mac/imp_x1052.py | 2 +- .../src/stack/switch/command/list/switch/partition/__init__.py | 2 +- .../switch/command/list/switch/partition/member/__init__.py | 2 +- common/src/stack/switch/command/list/switch/plugin_basic.py | 2 +- .../switch/command/list/switch/plugin_ib_subnetmanager.py | 2 +- common/src/stack/switch/command/list/switch/status/__init__.py | 2 +- .../src/stack/switch/command/list/switch/status/imp_m7800.py | 2 +- .../src/stack/switch/command/list/switch/status/imp_x1052.py | 2 +- .../src/stack/switch/command/list/switch/support/__init__.py | 2 +- common/src/stack/switch/command/remove/switch/__init__.py | 2 +- common/src/stack/switch/command/remove/switch/host/__init__.py | 2 +- .../stack/switch/command/remove/switch/partition/__init__.py | 2 +- .../switch/command/remove/switch/partition/member/__init__.py | 2 +- common/src/stack/switch/command/report/switch/__init__.py | 2 +- .../stack/switch/command/report/switch/hostfile/__init__.py | 2 +- common/src/stack/switch/command/report/switch/imp_x1052.py | 2 +- common/src/stack/switch/command/report/switchfile/__init__.py | 2 +- common/src/stack/switch/command/set/switch/__init__.py | 2 +- common/src/stack/switch/command/set/switch/host/__init__.py | 2 +- .../stack/switch/command/set/switch/host/interface/__init__.py | 2 +- .../src/stack/switch/command/set/switch/host/port/__init__.py | 2 +- .../switch/command/set/switch/partition/membership/__init__.py | 2 +- .../switch/command/set/switch/partition/options/__init__.py | 2 +- common/src/stack/switch/command/set/switch/sm/__init__.py | 2 +- common/src/stack/switch/command/sync/switch/__init__.py | 2 +- common/src/stack/switch/command/sync/switch/ib/__init__.py | 2 +- common/src/stack/switch/command/sync/switch/ib/imp_m7800.py | 2 +- common/src/stack/switch/command/sync/switch/imp_x1052.py | 2 +- common/src/stack/uefi-boot-method/Makefile | 2 +- common/src/stack/uefi-boot-method/uefi-boot-method.init | 2 +- common/src/stack/uefi-boot-method/uefi_boot_method.py | 2 +- common/src/stack/wizard/Makefile | 2 +- common/src/stack/ws-client/Makefile | 2 +- common/src/stack/ws-client/bin/wsclient.py | 2 +- common/src/stack/ws-client/pylib/wsclient.py | 2 +- common/src/stack/ws/Makefile | 2 +- common/src/stack/ws/cgi-bin/wsgi.py | 2 +- common/src/stack/ws/command/add/api/group/__init__.py | 2 +- common/src/stack/ws/command/add/api/group/perms/__init__.py | 2 +- common/src/stack/ws/command/add/api/user/__init__.py | 2 +- common/src/stack/ws/command/add/api/user/group/__init__.py | 2 +- common/src/stack/ws/command/add/api/user/perms/__init__.py | 2 +- common/src/stack/ws/command/dump/api/__init__.py | 2 +- common/src/stack/ws/command/dump/plugin_api.py | 2 +- common/src/stack/ws/command/list/api/group/__init__.py | 2 +- common/src/stack/ws/command/list/api/group/perms/__init__.py | 2 +- common/src/stack/ws/command/list/api/user/__init__.py | 2 +- common/src/stack/ws/command/list/api/user/perms/__init__.py | 2 +- common/src/stack/ws/command/remove/api/group/__init__.py | 2 +- common/src/stack/ws/command/remove/api/group/perms/__init__.py | 2 +- common/src/stack/ws/command/remove/api/user/__init__.py | 2 +- common/src/stack/ws/command/remove/api/user/group/__init__.py | 2 +- common/src/stack/ws/command/remove/api/user/perms/__init__.py | 2 +- common/src/stack/ws/command/set/api/user/admin/__init__.py | 2 +- common/src/stack/ws/command/sync/api/sudo/command/__init__.py | 3 +++ common/src/stack/ws/pylib/django_env.py | 2 +- common/src/stack/ws/restapi/auth.py | 2 +- common/src/stack/ws/restapi/models.py | 2 +- common/src/stack/ws/restapi/settings.py | 2 +- common/src/stack/ws/restapi/urls.py | 2 +- common/src/stack/ws/restapi/views.py | 2 +- common/src/stack/ws/setup/django_db_reset.py | 2 +- common/src/stack/ws/setup/django_db_setup.py | 2 +- common/src/stack/ws/setup/django_secret.py | 2 +- docker/barnacle.sh | 3 +++ redhat/bootstrap.mk | 2 +- redhat/nodes/apache.xml | 2 +- redhat/nodes/central.xml | 2 +- redhat/nodes/client.xml | 2 +- redhat/nodes/firewall-base.xml | 2 +- redhat/nodes/firewall-client.xml | 2 +- redhat/nodes/firewall-server.xml | 2 +- redhat/nodes/foundation-server.xml | 2 +- redhat/nodes/frontend.xml | 2 +- redhat/nodes/insert-rolls.xml | 2 +- redhat/nodes/install.xml | 2 +- redhat/nodes/kernel-server.xml | 2 +- redhat/nodes/logrotate.xml | 2 +- redhat/nodes/ludicrous-client.xml | 2 +- redhat/nodes/ludicrous-server.xml | 2 +- redhat/nodes/networking-client.xml | 2 +- redhat/nodes/networking-server.xml | 2 +- redhat/nodes/pre-ssh-key.xml | 2 +- redhat/nodes/pxe.xml | 2 +- redhat/nodes/pxeboot.xml | 2 +- redhat/nodes/redhat-base.xml | 2 +- redhat/nodes/redhat-bootaction.xml | 2 +- redhat/nodes/repo-client.xml | 2 +- redhat/nodes/repo-server.xml | 2 +- redhat/nodes/resolv.xml | 2 +- redhat/nodes/restapi.xml | 2 +- redhat/nodes/routes-client.xml | 2 +- redhat/nodes/server.xml | 2 +- redhat/nodes/ssh-client.xml | 2 +- redhat/nodes/ssh-server.xml | 2 +- redhat/nodes/storage-client.xml | 2 +- redhat/nodes/storage-server.xml | 2 +- redhat/nodes/storage.xml | 2 +- redhat/nodes/time-client.xml | 2 +- redhat/nodes/time-server.xml | 2 +- redhat/nodes/uefi-base.xml | 2 +- redhat/nodes/uefi-client.xml | 2 +- redhat/nodes/uefi-server.xml | 2 +- redhat/nodes/yum-base.xml | 2 +- redhat/src/Makefile | 2 +- redhat/src/foundation/Makefile | 2 +- redhat/src/foundation/redhat/getrpms.py | 2 +- redhat/src/stack/Makefile | 2 +- redhat/src/stack/images/6.9/Makefile | 2 +- redhat/src/stack/images/6.9/initrd.img/Makefile | 2 +- redhat/src/stack/images/6.9/initrd.img/anaconda/Makefile | 2 +- redhat/src/stack/images/6.9/install.img/Makefile | 2 +- .../stack/images/6.9/install.img/patch-files/usr/bin/anaconda | 2 +- redhat/src/stack/images/6.9/isolinux/Makefile | 2 +- redhat/src/stack/images/6.9/vmlinuz/Makefile | 2 +- redhat/src/stack/images/7.1708/Makefile | 2 +- redhat/src/stack/images/7.1708/initrd.img/Makefile | 2 +- redhat/src/stack/images/7.1708/isolinux/Makefile | 2 +- redhat/src/stack/images/7.1708/updates.img/Makefile | 2 +- .../images/7.1708/updates.img/opt/stack/bin/stacki-profile.py | 2 +- .../images/7.1708/updates.img/opt/stack/bin/stacki-status.py | 2 +- redhat/src/stack/images/7.1708/vmlinuz/Makefile | 2 +- redhat/src/stack/images/Makefile | 2 +- sles/bootstrap.mk | 2 +- sles/graph/sles-backend.xml | 2 +- sles/nodes/add-on.xml | 2 +- sles/nodes/apache.xml | 2 +- sles/nodes/backend.xml | 2 +- sles/nodes/bootloader.xml | 2 +- sles/nodes/firewall-base.xml | 2 +- sles/nodes/firewall-client.xml | 2 +- sles/nodes/firewall-server.xml | 2 +- sles/nodes/install.xml | 2 +- sles/nodes/kernel-server.xml | 2 +- sles/nodes/logrotate.xml | 2 +- sles/nodes/ludicrous-server.xml | 2 +- sles/nodes/networking-server.xml | 2 +- sles/nodes/partitioning.xml | 2 +- sles/nodes/pxe.xml | 2 +- sles/nodes/restapi.xml | 2 +- sles/nodes/server.xml | 2 +- sles/nodes/sles-base.xml | 2 +- sles/nodes/sles-bootaction.xml | 2 +- sles/nodes/ssh-client.xml | 2 +- sles/nodes/storage-controller-server.xml | 2 +- sles/nodes/storage.xml | 2 +- sles/nodes/time-client.xml | 2 +- sles/nodes/time-server.xml | 2 +- sles/nodes/uefi-client.xml | 2 +- sles/nodes/uefi-server.xml | 2 +- sles/nodes/users.xml | 2 +- sles/src/Makefile | 2 +- sles/src/stack/Makefile | 2 +- sles/src/stack/images/Makefile | 2 +- sles/src/stack/images/SLES/11.3/1.138/Makefile | 2 +- sles/src/stack/images/SLES/12/sp2/Makefile | 2 +- sles/src/stack/images/SLES/12/sp3/Makefile | 2 +- sles/src/stack/images/common/images.mk | 2 +- .../common/sles-stacki.img-patches/opt/stack/bin/fix_fstab.py | 2 +- .../sles-stacki.img-patches/opt/stack/bin/fix_partition.py | 2 +- .../sles-stacki.img-patches/opt/stack/bin/output-bootloader.py | 2 +- .../sles-stacki.img-patches/opt/stack/bin/output-partition.py | 2 +- .../sles-stacki.img-patches/opt/stack/bin/stacki-profile.py | 2 +- .../usr/lib/YaST2/startup/First-Stage/F08-stacki | 2 +- .../usr/lib/YaST2/startup/First-Stage/F10-a-fix-partitions | 2 +- .../usr/lib/YaST2/startup/First-Stage/F10-a-stacki-debug | 2 +- .../integration/files/verify/xml/pallet-verifyxmltest.xml | 2 +- 707 files changed, 725 insertions(+), 698 deletions(-) diff --git a/Makefile b/Makefile index c31f81350..5dcc7400a 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/graph/backend.xml b/common/graph/backend.xml index b52f2a3d4..9d739af82 100644 --- a/common/graph/backend.xml +++ b/common/graph/backend.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/graph/base.xml b/common/graph/base.xml index f4dfa5de0..98364a4d1 100644 --- a/common/graph/base.xml +++ b/common/graph/base.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/graph/frontend.xml b/common/graph/frontend.xml index d9dd50cf3..85043ab9c 100644 --- a/common/graph/frontend.xml +++ b/common/graph/frontend.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/graph/replicant.xml b/common/graph/replicant.xml index 1b956e30d..246d4aa8d 100644 --- a/common/graph/replicant.xml +++ b/common/graph/replicant.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/ansible-backend.xml b/common/nodes/ansible-backend.xml index 9a5e15cac..c91138215 100644 --- a/common/nodes/ansible-backend.xml +++ b/common/nodes/ansible-backend.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/ansible-base.xml b/common/nodes/ansible-base.xml index 6f87f17c4..05be4f23f 100644 --- a/common/nodes/ansible-base.xml +++ b/common/nodes/ansible-base.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/ansible-server.xml b/common/nodes/ansible-server.xml index e7e308fc7..6f0b3063f 100644 --- a/common/nodes/ansible-server.xml +++ b/common/nodes/ansible-server.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/aws-client.xml b/common/nodes/aws-client.xml index 617e4cdcc..9f5da78ff 100644 --- a/common/nodes/aws-client.xml +++ b/common/nodes/aws-client.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/aws-server.xml b/common/nodes/aws-server.xml index 9e1388b33..b5d5d1093 100644 --- a/common/nodes/aws-server.xml +++ b/common/nodes/aws-server.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/aws-ssh-key.xml b/common/nodes/aws-ssh-key.xml index 9d3aa8ff8..ff4af6d39 100644 --- a/common/nodes/aws-ssh-key.xml +++ b/common/nodes/aws-ssh-key.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/barnacle.xml b/common/nodes/barnacle.xml index 0a6549dbe..c2fa45603 100644 --- a/common/nodes/barnacle.xml +++ b/common/nodes/barnacle.xml @@ -6,7 +6,7 @@ - Copyright (c) 2006 - 2017 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/builder.xml b/common/nodes/builder.xml index 1e895c320..e574b6640 100644 --- a/common/nodes/builder.xml +++ b/common/nodes/builder.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/database-data-init.xml b/common/nodes/database-data-init.xml index 5a5ad2133..de96a030f 100644 --- a/common/nodes/database-data-init.xml +++ b/common/nodes/database-data-init.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/database-data.xml b/common/nodes/database-data.xml index c8ae32a15..af00acad0 100644 --- a/common/nodes/database-data.xml +++ b/common/nodes/database-data.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/database-migration.xml b/common/nodes/database-migration.xml index 85f4b80dc..d43b87d6a 100644 --- a/common/nodes/database-migration.xml +++ b/common/nodes/database-migration.xml @@ -1,7 +1,7 @@ - Copyright (c) 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/database-schema.xml b/common/nodes/database-schema.xml index cb1835b08..60045564d 100644 --- a/common/nodes/database-schema.xml +++ b/common/nodes/database-schema.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/database.xml b/common/nodes/database.xml index da8797ccb..ed409ffac 100644 --- a/common/nodes/database.xml +++ b/common/nodes/database.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/dns-server.xml b/common/nodes/dns-server.xml index 51b8f71ad..263ef607d 100644 --- a/common/nodes/dns-server.xml +++ b/common/nodes/dns-server.xml @@ -7,7 +7,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/docker-server.xml b/common/nodes/docker-server.xml index 1b3afef0a..b25bebb64 100644 --- a/common/nodes/docker-server.xml +++ b/common/nodes/docker-server.xml @@ -1,6 +1,9 @@ + Copyright (c) 2006 - 2019 Teradata + All rights reserved. Stacki(r) v5.x stacki.com + https://github.com/Teradata/stacki/blob/master/LICENSE.txt stack-docker diff --git a/common/nodes/foundation-python.xml b/common/nodes/foundation-python.xml index fdb751fa0..7bab506bb 100644 --- a/common/nodes/foundation-python.xml +++ b/common/nodes/foundation-python.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/hash-client.xml b/common/nodes/hash-client.xml index d9fe3b97e..64dba92a1 100644 --- a/common/nodes/hash-client.xml +++ b/common/nodes/hash-client.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/ldconfig.xml b/common/nodes/ldconfig.xml index 274d36a99..8f198b8e4 100644 --- a/common/nodes/ldconfig.xml +++ b/common/nodes/ldconfig.xml @@ -5,7 +5,7 @@ Fix LDConfig for all hosts -Copyright (c) 2006 - 2018 Teradata +Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/mq-base.xml b/common/nodes/mq-base.xml index 2a61ab18c..08d7b09a5 100644 --- a/common/nodes/mq-base.xml +++ b/common/nodes/mq-base.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/mq-client.xml b/common/nodes/mq-client.xml index 793b69168..a83a7a77a 100644 --- a/common/nodes/mq-client.xml +++ b/common/nodes/mq-client.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/mq-server.xml b/common/nodes/mq-server.xml index ea63f5261..7b767586e 100644 --- a/common/nodes/mq-server.xml +++ b/common/nodes/mq-server.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/node-certs.xml b/common/nodes/node-certs.xml index f09457cd3..789aac99f 100644 --- a/common/nodes/node-certs.xml +++ b/common/nodes/node-certs.xml @@ -6,7 +6,7 @@ If additional keys are listed in the authorized_keys attribute, copy those as we -Copyright (c) 2006 - 2018 Teradata +Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/node.xml b/common/nodes/node.xml index cc676a09f..0850a2f4c 100644 --- a/common/nodes/node.xml +++ b/common/nodes/node.xml @@ -6,7 +6,7 @@ and get DHCP/NIS state from the frontend. -Copyright (c) 2006 - 2018 Teradata +Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/peerdone.xml b/common/nodes/peerdone.xml index b5b174934..8b6183637 100644 --- a/common/nodes/peerdone.xml +++ b/common/nodes/peerdone.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/replicant.xml b/common/nodes/replicant.xml index 1b0c408e1..e9a333ce5 100644 --- a/common/nodes/replicant.xml +++ b/common/nodes/replicant.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/routes-server.xml b/common/nodes/routes-server.xml index bc9a054d2..9056d0cc0 100644 --- a/common/nodes/routes-server.xml +++ b/common/nodes/routes-server.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/ssh-base.xml b/common/nodes/ssh-base.xml index 9de84fb11..ed47f1194 100644 --- a/common/nodes/ssh-base.xml +++ b/common/nodes/ssh-base.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/ssl-base.xml b/common/nodes/ssl-base.xml index beafb4058..c28e9dd8d 100644 --- a/common/nodes/ssl-base.xml +++ b/common/nodes/ssl-base.xml @@ -1,7 +1,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/nodes/time-base.xml b/common/nodes/time-base.xml index a0bca426f..1b9c2a13c 100644 --- a/common/nodes/time-base.xml +++ b/common/nodes/time-base.xml @@ -5,7 +5,7 @@ - Copyright (c) 2006 - 2018 Teradata + Copyright (c) 2006 - 2019 Teradata All rights reserved. Stacki(r) v5.x stacki.com https://github.com/Teradata/stacki/blob/master/LICENSE.txt diff --git a/common/src/Makefile b/common/src/Makefile index 95f5491ea..caa044dae 100644 --- a/common/src/Makefile +++ b/common/src/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/Makefile b/common/src/foundation/Makefile index ae7a4fe7c..dab02f99b 100644 --- a/common/src/foundation/Makefile +++ b/common/src/foundation/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/MegaCLI/Makefile b/common/src/foundation/MegaCLI/Makefile index 20161edcf..235f71eda 100644 --- a/common/src/foundation/MegaCLI/Makefile +++ b/common/src/foundation/MegaCLI/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/StorCLI/Makefile b/common/src/foundation/StorCLI/Makefile index 1b3c6e19d..45f752482 100644 --- a/common/src/foundation/StorCLI/Makefile +++ b/common/src/foundation/StorCLI/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/comps/Makefile b/common/src/foundation/comps/Makefile index 63cd25cb9..f84aef78c 100644 --- a/common/src/foundation/comps/Makefile +++ b/common/src/foundation/comps/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/fb-tftpd/Makefile b/common/src/foundation/fb-tftpd/Makefile index 8793de27e..2f5ce13a2 100644 --- a/common/src/foundation/fb-tftpd/Makefile +++ b/common/src/foundation/fb-tftpd/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/fio/Makefile b/common/src/foundation/fio/Makefile index 2939e958c..883a6934d 100644 --- a/common/src/foundation/fio/Makefile +++ b/common/src/foundation/fio/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/fio/extras/fio.py b/common/src/foundation/fio/extras/fio.py index e467f36c2..2c48af2d2 100644 --- a/common/src/foundation/fio/extras/fio.py +++ b/common/src/foundation/fio/extras/fio.py @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/iperf/Makefile b/common/src/foundation/iperf/Makefile index 5a2456bcf..3cb5e195f 100644 --- a/common/src/foundation/iperf/Makefile +++ b/common/src/foundation/iperf/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/iperf/files/iperf3.py b/common/src/foundation/iperf/files/iperf3.py index 12987c8cf..d6e755d6c 100644 --- a/common/src/foundation/iperf/files/iperf3.py +++ b/common/src/foundation/iperf/files/iperf3.py @@ -1,7 +1,7 @@ #!/opt/stack/bin/python3 # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/newt/Makefile b/common/src/foundation/newt/Makefile index eafed3dac..201fe27af 100644 --- a/common/src/foundation/newt/Makefile +++ b/common/src/foundation/newt/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/python-packages/Makefile b/common/src/foundation/python-packages/Makefile index 893fe2db9..1c3cf2d7d 100644 --- a/common/src/foundation/python-packages/Makefile +++ b/common/src/foundation/python-packages/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/python/Makefile b/common/src/foundation/python/Makefile index 7cf6d8c53..4edcb4299 100644 --- a/common/src/foundation/python/Makefile +++ b/common/src/foundation/python/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/rcs/Makefile b/common/src/foundation/rcs/Makefile index 528411717..b3bde8af4 100644 --- a/common/src/foundation/rcs/Makefile +++ b/common/src/foundation/rcs/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/redis/Makefile b/common/src/foundation/redis/Makefile index 96fe82f00..0995486a3 100644 --- a/common/src/foundation/redis/Makefile +++ b/common/src/foundation/redis/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/redis/redis-server.init b/common/src/foundation/redis/redis-server.init index 4d44dac76..5357a4b8f 100644 --- a/common/src/foundation/redis/redis-server.init +++ b/common/src/foundation/redis/redis-server.init @@ -6,7 +6,7 @@ # pidfile: /var/run/redis-server.pid # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/sc-im/Makefile b/common/src/foundation/sc-im/Makefile index 53047a0d0..ec9fea296 100644 --- a/common/src/foundation/sc-im/Makefile +++ b/common/src/foundation/sc-im/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/stream/Makefile b/common/src/foundation/stream/Makefile index ff6130d2c..c404d73c8 100644 --- a/common/src/foundation/stream/Makefile +++ b/common/src/foundation/stream/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/stream/extras/stream.py b/common/src/foundation/stream/extras/stream.py index ac95016ed..95f1b6e3f 100644 --- a/common/src/foundation/stream/extras/stream.py +++ b/common/src/foundation/stream/extras/stream.py @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/foundation/zeromq/Makefile b/common/src/foundation/zeromq/Makefile index 092b7c9ff..7049686f5 100644 --- a/common/src/foundation/zeromq/Makefile +++ b/common/src/foundation/zeromq/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/Makefile b/common/src/stack/Makefile index 43b2738eb..96b2997ea 100644 --- a/common/src/stack/Makefile +++ b/common/src/stack/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/admin/Makefile b/common/src/stack/admin/Makefile index 259fc434c..3a9664499 100644 --- a/common/src/stack/admin/Makefile +++ b/common/src/stack/admin/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/aws-client/Makefile b/common/src/stack/aws-client/Makefile index 193c6aea5..f7d17c911 100644 --- a/common/src/stack/aws-client/Makefile +++ b/common/src/stack/aws-client/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/aws-client/aws-client-register.py b/common/src/stack/aws-client/aws-client-register.py index 2acadf726..e33bbbaf8 100644 --- a/common/src/stack/aws-client/aws-client-register.py +++ b/common/src/stack/aws-client/aws-client-register.py @@ -7,7 +7,7 @@ # dependencies added to the installation AMI. # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/aws-server/Makefile b/common/src/stack/aws-server/Makefile index ba84db25f..92821f86f 100644 --- a/common/src/stack/aws-server/Makefile +++ b/common/src/stack/aws-server/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/aws-server/aws-server-init.py b/common/src/stack/aws-server/aws-server-init.py index ca190ede3..a69994079 100644 --- a/common/src/stack/aws-server/aws-server-init.py +++ b/common/src/stack/aws-server/aws-server-init.py @@ -1,7 +1,7 @@ #! /opt/stack/bin/python3 # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/aws-server/register.py b/common/src/stack/aws-server/register.py index 861da772b..d6bfcc084 100644 --- a/common/src/stack/aws-server/register.py +++ b/common/src/stack/aws-server/register.py @@ -1,7 +1,7 @@ #! /opt/stack/bin/python3 # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/barnacle/Makefile b/common/src/stack/barnacle/Makefile index 5d8f57f59..b6414a22d 100644 --- a/common/src/stack/barnacle/Makefile +++ b/common/src/stack/barnacle/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/barnacle/aws-barnacle-prep-image.sh b/common/src/stack/barnacle/aws-barnacle-prep-image.sh index 3a1a6d9af..d864dafce 100644 --- a/common/src/stack/barnacle/aws-barnacle-prep-image.sh +++ b/common/src/stack/barnacle/aws-barnacle-prep-image.sh @@ -8,7 +8,7 @@ # can then create a new image (AMI) from the stopped instance. # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/barnacle/aws-barnacle.sh b/common/src/stack/barnacle/aws-barnacle.sh index 9d9038e99..003d4e52f 100644 --- a/common/src/stack/barnacle/aws-barnacle.sh +++ b/common/src/stack/barnacle/aws-barnacle.sh @@ -1,7 +1,7 @@ #! /bin/bash # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/Makefile b/common/src/stack/build/Makefile index bc473d3d3..91062c658 100644 --- a/common/src/stack/build/Makefile +++ b/common/src/stack/build/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/bin/gen-order b/common/src/stack/build/build/bin/gen-order index c0b167f92..9e5eb2e5f 100755 --- a/common/src/stack/build/build/bin/gen-order +++ b/common/src/stack/build/build/bin/gen-order @@ -1,7 +1,7 @@ #! /usr/bin/python # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/bin/os b/common/src/stack/build/build/bin/os index 734766149..0a28422ec 100755 --- a/common/src/stack/build/build/bin/os +++ b/common/src/stack/build/build/bin/os @@ -1,7 +1,7 @@ #! /bin/sh # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/bin/os-release b/common/src/stack/build/build/bin/os-release index 16f801951..fd8d3f6f7 100755 --- a/common/src/stack/build/build/bin/os-release +++ b/common/src/stack/build/build/bin/os-release @@ -1,7 +1,7 @@ #! /bin/sh # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/bin/package-install b/common/src/stack/build/build/bin/package-install index 17b25fd6e..496e05ccf 100755 --- a/common/src/stack/build/build/bin/package-install +++ b/common/src/stack/build/build/bin/package-install @@ -1,7 +1,7 @@ #!/bin/bash # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/bin/pip2src b/common/src/stack/build/build/bin/pip2src index a260ab668..66b321beb 100755 --- a/common/src/stack/build/build/bin/pip2src +++ b/common/src/stack/build/build/bin/pip2src @@ -2,7 +2,7 @@ # -*- python -*- # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/CCCommon.mk b/common/src/stack/build/build/etc/CCCommon.mk index a92d2ac43..132b75007 100644 --- a/common/src/stack/build/build/etc/CCCommon.mk +++ b/common/src/stack/build/build/etc/CCCommon.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/CCRules.mk b/common/src/stack/build/build/etc/CCRules.mk index c675198e4..cd0a02baf 100644 --- a/common/src/stack/build/build/etc/CCRules.mk +++ b/common/src/stack/build/build/etc/CCRules.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/Rules-redhat.mk b/common/src/stack/build/build/etc/Rules-redhat.mk index c31edd379..0a239eacf 100644 --- a/common/src/stack/build/build/etc/Rules-redhat.mk +++ b/common/src/stack/build/build/etc/Rules-redhat.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/Rules-sles.mk b/common/src/stack/build/build/etc/Rules-sles.mk index 6d655eabd..f3e3ffa5e 100644 --- a/common/src/stack/build/build/etc/Rules-sles.mk +++ b/common/src/stack/build/build/etc/Rules-sles.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/Rules.mk b/common/src/stack/build/build/etc/Rules.mk index 4116f714c..52a7a091e 100644 --- a/common/src/stack/build/build/etc/Rules.mk +++ b/common/src/stack/build/build/etc/Rules.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/create-package.mk b/common/src/stack/build/build/etc/create-package.mk index 82ee882b3..899aa7ca0 100644 --- a/common/src/stack/build/build/etc/create-package.mk +++ b/common/src/stack/build/build/etc/create-package.mk @@ -3,7 +3,7 @@ # directory into an RPM copied into the contrib area. # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/python.mk b/common/src/stack/build/build/etc/python.mk index df004d14c..129e9b580 100644 --- a/common/src/stack/build/build/etc/python.mk +++ b/common/src/stack/build/build/etc/python.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/etc/stack-version.mk b/common/src/stack/build/build/etc/stack-version.mk index 4935d97cf..adab8316f 100644 --- a/common/src/stack/build/build/etc/stack-version.mk +++ b/common/src/stack/build/build/etc/stack-version.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/bin/gen-release-notes.py b/common/src/stack/build/build/src/pallet/bin/gen-release-notes.py index 082ca8736..5ac5092d0 100755 --- a/common/src/stack/build/build/src/pallet/bin/gen-release-notes.py +++ b/common/src/stack/build/build/src/pallet/bin/gen-release-notes.py @@ -1,6 +1,9 @@ #! /opt/stack/bin/python3 # # @copyright@ +# Copyright (c) 2006 - 2019 Teradata +# All rights reserved. Stacki(r) v5.x stacki.com +# https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ import sys diff --git a/common/src/stack/build/build/src/pallet/bin/get3rdparty.py b/common/src/stack/build/build/src/pallet/bin/get3rdparty.py index 6a9e2d0f3..772f33fbe 100755 --- a/common/src/stack/build/build/src/pallet/bin/get3rdparty.py +++ b/common/src/stack/build/build/src/pallet/bin/get3rdparty.py @@ -1,7 +1,7 @@ #!/usr/bin/python # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/bin/manifest-check.py b/common/src/stack/build/build/src/pallet/bin/manifest-check.py index 5b10b758e..45c06a94a 100755 --- a/common/src/stack/build/build/src/pallet/bin/manifest-check.py +++ b/common/src/stack/build/build/src/pallet/bin/manifest-check.py @@ -4,7 +4,7 @@ # when 'make roll' is run # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/doc/Makefile b/common/src/stack/build/build/src/pallet/doc/Makefile index a89966bf5..25e4f2b19 100644 --- a/common/src/stack/build/build/src/pallet/doc/Makefile +++ b/common/src/stack/build/build/src/pallet/doc/Makefile @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/etc/CCRolls.mk b/common/src/stack/build/build/src/pallet/etc/CCRolls.mk index b9f1f4467..62e6530a6 100644 --- a/common/src/stack/build/build/src/pallet/etc/CCRolls.mk +++ b/common/src/stack/build/build/src/pallet/etc/CCRolls.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/etc/Compat.mk b/common/src/stack/build/build/src/pallet/etc/Compat.mk index b980bb2a6..7506228f5 100644 --- a/common/src/stack/build/build/src/pallet/etc/Compat.mk +++ b/common/src/stack/build/build/src/pallet/etc/Compat.mk @@ -2,7 +2,7 @@ # Make rules for Compat libraries from Rolls. # # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/etc/Rolls.mk b/common/src/stack/build/build/src/pallet/etc/Rolls.mk index fa3a7f101..fbf50d93e 100644 --- a/common/src/stack/build/build/src/pallet/etc/Rolls.mk +++ b/common/src/stack/build/build/src/pallet/etc/Rolls.mk @@ -1,5 +1,5 @@ # @copyright@ -# Copyright (c) 2006 - 2018 Teradata +# Copyright (c) 2006 - 2019 Teradata # All rights reserved. Stacki(r) v5.x stacki.com # https://github.com/Teradata/stacki/blob/master/LICENSE.txt # @copyright@ diff --git a/common/src/stack/build/build/src/pallet/etc/doc/rocksplus-copyright.sgml b/common/src/stack/build/build/src/pallet/etc/doc/rocksplus-copyright.sgml index 6f36d15d6..754021217 100644 --- a/common/src/stack/build/build/src/pallet/etc/doc/rocksplus-copyright.sgml +++ b/common/src/stack/build/build/src/pallet/etc/doc/rocksplus-copyright.sgml @@ -1,6 +1,6 @@