mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-03 21:43:21 +00:00 
			
		
		
		
	This should make it more obvious that these functions will exit the script if the check fails.
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
import os
 | 
						|
import sys
 | 
						|
import subprocess
 | 
						|
import configparser
 | 
						|
import re
 | 
						|
from lib.zulip_tools import parse_lsb_release, assert_running_as_root
 | 
						|
 | 
						|
assert_running_as_root()
 | 
						|
 | 
						|
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 = configparser.RawConfigParser()
 | 
						|
config.read("/etc/zulip/zulip.conf")
 | 
						|
 | 
						|
if not os.path.exists("/etc/puppet/hiera.yaml"):
 | 
						|
    codename = parse_lsb_release()['DISTRIB_CODENAME']
 | 
						|
    if codename in ["trusty", "stretch", "xenial"]:
 | 
						|
        # Suppress warnings in old puppet about hiera.yaml not existing.
 | 
						|
        open("/etc/puppet/hiera.yaml", "a").close()
 | 
						|
 | 
						|
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,)
 | 
						|
 | 
						|
# We use the puppet configuration from the same Zulip checkout as this script
 | 
						|
puppet_module_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "puppet")
 | 
						|
puppet_cmd = ["puppet", "apply", "--modulepath", puppet_module_path, "-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] ")
 | 
						|
        sys.stdout.flush()
 | 
						|
        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)
 |