2to3 fabfile.py

This commit is contained in:
Jonathan Math 2020-06-17 05:35:32 -04:00
parent 6303a77418
commit 3a56e34bd1

72
fabfile.py vendored
View file

@ -22,14 +22,14 @@ django.setup()
try: try:
import digitalocean import digitalocean
except ImportError: except ImportError:
print "Digital Ocean's API not loaded. Install python-digitalocean." print("Digital Ocean's API not loaded. Install python-digitalocean.")
django.settings_module('settings') django.settings_module('settings')
try: try:
from django.conf import settings as django_settings from django.conf import settings as django_settings
except ImportError: except ImportError:
print " ---> Django not installed yet." print(" ---> Django not installed yet.")
django_settings = None django_settings = None
# ============ # ============
@ -52,12 +52,12 @@ env.colorize_errors = True
try: try:
hosts_path = os.path.expanduser(os.path.join(env.SECRETS_PATH, 'configs/hosts.yml')) hosts_path = os.path.expanduser(os.path.join(env.SECRETS_PATH, 'configs/hosts.yml'))
roles = yaml.load(open(hosts_path)) roles = yaml.load(open(hosts_path))
for role_name, hosts in roles.items(): for role_name, hosts in list(roles.items()):
if isinstance(hosts, dict): if isinstance(hosts, dict):
roles[role_name] = [host for host in hosts.keys()] roles[role_name] = [host for host in list(hosts.keys())]
env.roledefs = roles env.roledefs = roles
except: except:
print " ***> No role definitions found in %s. Using default roles." % hosts_path print(" ***> No role definitions found in %s. Using default roles." % hosts_path)
env.roledefs = { env.roledefs = {
'app' : ['app01.newsblur.com'], 'app' : ['app01.newsblur.com'],
'db' : ['db01.newsblur.com'], 'db' : ['db01.newsblur.com'],
@ -101,19 +101,19 @@ def list_do():
role_costs[roledef] += cost role_costs[roledef] += cost
total_cost += cost total_cost += cost
print "\n\n Costs:" print("\n\n Costs:")
pprint(dict(role_costs)) pprint(dict(role_costs))
print " ---> Total cost: $%s/month" % total_cost print(" ---> Total cost: $%s/month" % total_cost)
def host(*names): def host(*names):
env.hosts = [] env.hosts = []
env.doname = ','.join(names) env.doname = ','.join(names)
hostnames = assign_digitalocean_roledefs(split=True) hostnames = assign_digitalocean_roledefs(split=True)
for role, hosts in hostnames.items(): for role, hosts in list(hostnames.items()):
for host in hosts: for host in hosts:
if isinstance(host, dict) and host['name'] in names: if isinstance(host, dict) and host['name'] in names:
env.hosts.append(host['address']) env.hosts.append(host['address'])
print " ---> Using %s as hosts" % env.hosts print(" ---> Using %s as hosts" % env.hosts)
# ================ # ================
# = Environments = # = Environments =
@ -127,7 +127,7 @@ def assign_digitalocean_roledefs(split=False):
server() server()
droplets = do_roledefs(split=split) droplets = do_roledefs(split=split)
if split: if split:
for roledef, hosts in env.roledefs.items(): for roledef, hosts in list(env.roledefs.items()):
if roledef not in droplets: if roledef not in droplets:
droplets[roledef] = hosts droplets[roledef] = hosts
@ -317,9 +317,9 @@ def setup_task_image():
# ================== # ==================
def done(): def done():
print "\n\n\n\n-----------------------------------------------------" print("\n\n\n\n-----------------------------------------------------")
print "\n\n %s / %s IS SUCCESSFULLY BOOTSTRAPPED" % (env.get('doname') or env.host_string, env.host_string) print("\n\n %s / %s IS SUCCESSFULLY BOOTSTRAPPED" % (env.get('doname') or env.host_string, env.host_string))
print "\n\n-----------------------------------------------------\n\n\n\n" print("\n\n-----------------------------------------------------\n\n\n\n")
def setup_installs(): def setup_installs():
packages = [ packages = [
@ -890,7 +890,7 @@ def config_haproxy(debug=False):
if haproxy_check.return_code == 0: if haproxy_check.return_code == 0:
sudo('/etc/init.d/haproxy reload') sudo('/etc/init.d/haproxy reload')
else: else:
print " !!!> Uh-oh, HAProxy config doesn't check out: %s" % haproxy_check.return_code print(" !!!> Uh-oh, HAProxy config doesn't check out: %s" % haproxy_check.return_code)
def build_haproxy(): def build_haproxy():
droplets = assign_digitalocean_roledefs(split=True) droplets = assign_digitalocean_roledefs(split=True)
@ -912,7 +912,7 @@ def build_haproxy():
check_inter = 3000 check_inter = 3000
if server['name'] in ignore_servers: if server['name'] in ignore_servers:
print " ---> Ignoring %s" % server['name'] print(" ---> Ignoring %s" % server['name'])
continue continue
if server_type == 'www': if server_type == 'www':
port = 81 port = 81
@ -943,7 +943,7 @@ def build_haproxy():
h = open(os.path.join(env.NEWSBLUR_PATH, 'config/haproxy.conf.template'), 'r') h = open(os.path.join(env.NEWSBLUR_PATH, 'config/haproxy.conf.template'), 'r')
haproxy_template = h.read() haproxy_template = h.read()
for sub, server_list in servers.items(): for sub, server_list in list(servers.items()):
sorted_servers = '\n'.join(sorted(server_list)) sorted_servers = '\n'.join(sorted(server_list))
haproxy_template = haproxy_template.replace("{{ %s }}" % sub, sorted_servers) haproxy_template = haproxy_template.replace("{{ %s }}" % sub, sorted_servers)
f = open(os.path.join(env.SECRETS_PATH, 'configs/haproxy.conf'), 'w') f = open(os.path.join(env.SECRETS_PATH, 'configs/haproxy.conf'), 'w')
@ -1479,11 +1479,11 @@ def setup_do(name, size=1, image=None):
image = images["app-2018-02"] image = images["app-2018-02"]
else: else:
images = dict((s.name, s.id) for s in doapi.get_all_images()) images = dict((s.name, s.id) for s in doapi.get_all_images())
print images print(images)
name = do_name(name) name = do_name(name)
env.doname = name env.doname = name
print "Creating droplet: %s" % name print("Creating droplet: %s" % name)
instance = digitalocean.Droplet(token=django_settings.DO_TOKEN_FABRIC, instance = digitalocean.Droplet(token=django_settings.DO_TOKEN_FABRIC,
name=name, name=name,
size_slug=instance_size, size_slug=instance_size,
@ -1495,22 +1495,22 @@ def setup_do(name, size=1, image=None):
instance.create() instance.create()
time.sleep(2) time.sleep(2)
instance = digitalocean.Droplet.get_object(django_settings.DO_TOKEN_FABRIC, instance.id) instance = digitalocean.Droplet.get_object(django_settings.DO_TOKEN_FABRIC, instance.id)
print "Booting droplet: %s / %s (size: %s)" % (instance.name, instance.ip_address, instance_size) print("Booting droplet: %s / %s (size: %s)" % (instance.name, instance.ip_address, instance_size))
i = 0 i = 0
while True: while True:
if instance.status == 'active': if instance.status == 'active':
print "...booted: %s" % instance.ip_address print("...booted: %s" % instance.ip_address)
time.sleep(5) time.sleep(5)
break break
elif instance.status == 'new': elif instance.status == 'new':
print ".", print(".", end=' ')
sys.stdout.flush() sys.stdout.flush()
instance = digitalocean.Droplet.get_object(django_settings.DO_TOKEN_FABRIC, instance.id) instance = digitalocean.Droplet.get_object(django_settings.DO_TOKEN_FABRIC, instance.id)
i += 1 i += 1
time.sleep(i) time.sleep(i)
else: else:
print "!!! Error: %s" % instance.status print("!!! Error: %s" % instance.status)
return return
host = instance.ip_address host = instance.ip_address
@ -1521,7 +1521,7 @@ def setup_do(name, size=1, image=None):
def do_name(name): def do_name(name):
if re.search(r"[0-9]", name): if re.search(r"[0-9]", name):
print " ---> Using %s as hostname" % name print(" ---> Using %s as hostname" % name)
return name return name
else: else:
hosts = do_roledefs(split=False) hosts = do_roledefs(split=False)
@ -1530,8 +1530,8 @@ def do_name(name):
for i in range(1, 100): for i in range(1, 100):
try_host = "%s%02d" % (name, i) try_host = "%s%02d" % (name, i)
if try_host not in existing_hosts: if try_host not in existing_hosts:
print " ---> %s hosts in %s (%s). %s is unused." % (len(existing_hosts), name, print(" ---> %s hosts in %s (%s). %s is unused." % (len(existing_hosts), name,
', '.join(existing_hosts), try_host) ', '.join(existing_hosts), try_host))
return try_host return try_host
@ -1562,21 +1562,21 @@ def setup_ec2():
key_name=env.user, key_name=env.user,
security_groups=['db-mongo']) security_groups=['db-mongo'])
instance = reservation.instances[0] instance = reservation.instances[0]
print "Booting reservation: %s/%s (size: %s)" % (reservation, instance, INSTANCE_TYPE) print("Booting reservation: %s/%s (size: %s)" % (reservation, instance, INSTANCE_TYPE))
i = 0 i = 0
while True: while True:
if instance.state == 'pending': if instance.state == 'pending':
print ".", print(".", end=' ')
sys.stdout.flush() sys.stdout.flush()
instance.update() instance.update()
i += 1 i += 1
time.sleep(i) time.sleep(i)
elif instance.state == 'running': elif instance.state == 'running':
print "...booted: %s" % instance.public_dns_name print("...booted: %s" % instance.public_dns_name)
time.sleep(5) time.sleep(5)
break break
else: else:
print "!!! Error: %s" % instance.state print("!!! Error: %s" % instance.state)
return return
host = instance.public_dns_name host = instance.public_dns_name
@ -1599,7 +1599,7 @@ def post_deploy():
cleanup_assets() cleanup_assets()
def role_for_host(): def role_for_host():
for role, hosts in env.roledefs.items(): for role, hosts in list(env.roledefs.items()):
if env.host in hosts: if env.host in hosts:
return role return role
@ -1751,8 +1751,8 @@ def compress_assets(bundle=False):
if not success: if not success:
raise Exception("Ack!") raise Exception("Ack!")
break break
except Exception, e: except Exception as e:
print " ***> %s. Trying %s more time%s..." % (e, tries_left, '' if tries_left == 1 else 's') print(" ***> %s. Trying %s more time%s..." % (e, tries_left, '' if tries_left == 1 else 's'))
tries_left -= 1 tries_left -= 1
if tries_left <= 0: break if tries_left <= 0: break
@ -1855,7 +1855,7 @@ if django_settings:
SECRET = django_settings.S3_SECRET SECRET = django_settings.S3_SECRET
BUCKET_NAME = django_settings.S3_BACKUP_BUCKET # Note that you need to create this bucket first BUCKET_NAME = django_settings.S3_BACKUP_BUCKET # Note that you need to create this bucket first
except: except:
print " ---> You need to fix django's settings. Enter python and type `import settings`." print(" ---> You need to fix django's settings. Enter python and type `import settings`.")
def save_file_in_s3(filename): def save_file_in_s3(filename):
conn = S3Connection(ACCESS_KEY, SECRET) conn = S3Connection(ACCESS_KEY, SECRET)
@ -1878,7 +1878,7 @@ def list_backup_in_s3():
bucket = conn.get_bucket(BUCKET_NAME) bucket = conn.get_bucket(BUCKET_NAME)
for i, key in enumerate(bucket.get_all_keys()): for i, key in enumerate(bucket.get_all_keys()):
print "[%s] %s" % (i, key.name) print("[%s] %s" % (i, key.name))
def delete_all_backups(): def delete_all_backups():
#FIXME: validate filename exists #FIXME: validate filename exists
@ -1886,7 +1886,7 @@ def delete_all_backups():
bucket = conn.get_bucket(BUCKET_NAME) bucket = conn.get_bucket(BUCKET_NAME)
for i, key in enumerate(bucket.get_all_keys()): for i, key in enumerate(bucket.get_all_keys()):
print "deleting %s" % (key.name) print("deleting %s" % (key.name))
key.delete() key.delete()
def add_revsys_keys(): def add_revsys_keys():
@ -1896,7 +1896,7 @@ def add_revsys_keys():
def upgrade_to_virtualenv(role=None): def upgrade_to_virtualenv(role=None):
if not role: if not role:
print " ---> You must specify a role!" print(" ---> You must specify a role!")
return return
setup_virtualenv() setup_virtualenv()
if role == "task" or role == "search": if role == "task" or role == "search":