mirror of
https://github.com/zulip/zulip.git
synced 2025-11-04 22:13:26 +00:00
Apparently, puppet has messed up exit codes and doesn't by default return the usual 0=success, nonzero=failure codes. By default, it seems to always return 0; and with `--detailed-exitcodes`, it returns the complicated thing documented in the comments. We fix this by checking the exit code and translating it to what we actually care about, namely whether errors occurred. See https://tickets.puppetlabs.com/browse/PUP-2754 for details. Fixes #1094.
47 lines
1.2 KiB
Python
Executable File
47 lines
1.2 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
import subprocess
|
|
import six.moves.configparser
|
|
import re
|
|
|
|
force = False
|
|
extra_args = sys.argv[1:]
|
|
|
|
if len(extra_args) and extra_args[0] in ('-f', '--force'):
|
|
force = True
|
|
extra_args = extra_args[1:]
|
|
|
|
config = six.moves.configparser.RawConfigParser()
|
|
config.read("/etc/zulip/zulip.conf")
|
|
|
|
puppet_config = """
|
|
Exec { path => "/usr/sbin:/usr/bin:/sbin:/bin" }
|
|
include apt
|
|
"""
|
|
|
|
for pclass in re.split(r'\s*,\s*', config.get('machine', 'puppet_classes')):
|
|
puppet_config += "include %s\n" % (pclass,)
|
|
|
|
puppet_cmd = ["puppet", "apply", "--modulepath=/root/zulip/puppet", "-e", puppet_config]
|
|
puppet_cmd += extra_args
|
|
|
|
if not force:
|
|
subprocess.check_call(puppet_cmd + ['--noop', '--show_diff'])
|
|
|
|
do_apply = None
|
|
while do_apply != 'y':
|
|
sys.stdout.write("Apply changes? [y/N] ")
|
|
do_apply = sys.stdin.readline().strip().lower()
|
|
if do_apply == '' or do_apply == 'n':
|
|
sys.exit(0)
|
|
|
|
ret = subprocess.call(puppet_cmd + ['--detailed-exitcodes'])
|
|
# ret = 0 => no changes, no errors
|
|
# ret = 2 => changes, no errors
|
|
# ret = 4 => no changes, yes errors
|
|
# ret = 6 => changes, yes errors
|
|
if ret != 0 and ret != 2:
|
|
sys.exit(1)
|