def gather_user_variables(variables, region): if click.confirm('Do you want to set the docker image now? [No]'): prompt(variables, "docker_image", "Docker Image Version", default=get_latest_spilo_image()) prompt(variables, 'wal_s3_bucket', 'Postgres WAL S3 bucket to use', default='zalando-spilo-app') prompt(variables, 'instance_type', 'EC2 instance type', default='t2.micro') prompt(variables, 'hosted_zone', 'Hosted Zone', default=get_default_zone(region) or 'example.com') if (variables['hosted_zone'][-1:] != '.'): variables['hosted_zone'] += '.' prompt(variables, 'discovery_domain', 'ETCD Discovery Domain', default='postgres.'+variables['hosted_zone'][:-1]) if variables['instance_type'].lower().split('.')[0] in ('c3', 'g2', 'hi1', 'i2', 'm3', 'r3'): variables['use_ebs'] = click.confirm('Do you want database data directory on external (EBS) storage? [Yes]', default=True) else: variables['use_ebs'] = True if variables['use_ebs']: prompt(variables, 'volume_size', 'Database volume size (GB, 10 or more)', default=10) prompt(variables, 'volume_type', 'Database volume type (gp2, io1 or standard)', default='gp2') if variables['volume_type'] == 'io1': pio_max = variables['volume_size'] * 30 prompt(variables, "volume_iops", 'Provisioned I/O operations per second (100 - {0})'. format(pio_max), default=str(pio_max)) prompt(variables, "snapshot_id", "ID of the snapshot to populate EBS volume from", default="") if ebs_optimized_supported(variables['instance_type']): variables['ebs_optimized'] = True prompt(variables, "fstype", "Filesystem for the data partition", default="ext4") prompt(variables, "fsoptions", "Filesystem mount options (comma-separated)", default="noatime,nodiratime,nobarrier") prompt(variables, "scalyr_account_key", "Account key for your scalyr account", "") variables['postgres_port'] = POSTGRES_PORT variables['healthcheck_port'] = HEALTHCHECK_PORT sg_name = 'app-spilo' rules_missing = check_security_group(sg_name, [('tcp', 22), ('tcp', POSTGRES_PORT), ('tcp', HEALTHCHECK_PORT)], region, allow_from_self=True) if ('tcp', 22) in rules_missing: warning('Security group {} does not allow SSH access, you will not be able to ssh into your servers'. format(sg_name)) if ('tcp', POSTGRES_PORT) in rules_missing: error('Security group {} does not allow inbound TCP traffic on the default postgres port ({})'.format( sg_name, POSTGRES_PORT )) if ('tcp', HEALTHCHECK_PORT) in rules_missing: error('Security group {} does not allow inbound TCP traffic on the default health check port ({})'. format(sg_name, HEALTHCHECK_PORT)) variables['spilo_sg_id'] = get_security_group(region, sg_name).id check_s3_bucket(variables['wal_s3_bucket'], region) return variables
def gather_user_variables(variables, region): if click.confirm("Do you want to set the docker image now? [No]"): prompt(variables, "docker_image", "Docker Image Version", default=get_latest_spilo_image()) prompt(variables, "wal_s3_bucket", "Postgres WAL S3 bucket to use", default="zalando-spilo-app") prompt(variables, "instance_type", "EC2 instance type", default="t2.micro") prompt(variables, "hosted_zone", "Hosted Zone", default=get_default_zone(region) or "example.com") if variables["hosted_zone"][-1:] != ".": variables["hosted_zone"] += "." prompt(variables, "discovery_domain", "ETCD Discovery Domain", default="postgres." + variables["hosted_zone"][:-1]) if variables["instance_type"].lower().split(".")[0] in ("c3", "g2", "hi1", "i2", "m3", "r3"): variables["use_ebs"] = click.confirm( "Do you want database data directory on external (EBS) storage? [Yes]", default=True ) else: variables["use_ebs"] = True if variables["use_ebs"]: prompt(variables, "volume_size", "Database volume size (GB, 10 or more)", default=10) prompt(variables, "volume_type", "Database volume type (gp2, io1 or standard)", default="gp2") if variables["volume_type"] == "io1": pio_max = variables["volume_size"] * 30 prompt( variables, "volume_iops", "Provisioned I/O operations per second (100 - {0})".format(pio_max), default=str(pio_max), ) prompt(variables, "snapshot_id", "ID of the snapshot to populate EBS volume from", default="") if ebs_optimized_supported(variables["instance_type"]): variables["ebs_optimized"] = True prompt(variables, "fstype", "Filesystem for the data partition", default="ext4") prompt(variables, "fsoptions", "Filesystem mount options (comma-separated)", default="noatime,nodiratime,nobarrier") prompt(variables, "scalyr_account_key", "Account key for your scalyr account", "") variables["postgres_port"] = POSTGRES_PORT variables["healthcheck_port"] = HEALTHCHECK_PORT sg_name = "app-spilo" rules_missing = check_security_group( sg_name, [("tcp", 22), ("tcp", POSTGRES_PORT), ("tcp", HEALTHCHECK_PORT)], region, allow_from_self=True ) if ("tcp", 22) in rules_missing: warning( "Security group {} does not allow SSH access, you will not be able to ssh into your servers".format(sg_name) ) if ("tcp", POSTGRES_PORT) in rules_missing: error( "Security group {} does not allow inbound TCP traffic on the default postgres port ({})".format( sg_name, POSTGRES_PORT ) ) if ("tcp", HEALTHCHECK_PORT) in rules_missing: error( "Security group {} does not allow inbound TCP traffic on the default health check port ({})".format( sg_name, HEALTHCHECK_PORT ) ) variables["spilo_sg_id"] = get_security_group(region, sg_name).id check_s3_bucket(variables["wal_s3_bucket"], region) return variables
def gather_user_variables(variables, region): if click.confirm('Do you want to set the docker image now? [No]'): prompt(variables, "docker_image", "Docker Image Version", default=get_latest_spilo_image()) else: variables['docker_image'] = None prompt(variables, 'wal_s3_bucket', 'Postgres WAL S3 bucket to use', default='{}-{}-spilo-app'.format(get_account_alias(region), region)) prompt(variables, 'instance_type', 'EC2 instance type', default='t2.micro') prompt(variables, 'hosted_zone', 'Hosted Zone', default=get_default_zone(region) or 'example.com') if (variables['hosted_zone'][-1:] != '.'): variables['hosted_zone'] += '.' prompt(variables, 'discovery_domain', 'ETCD Discovery Domain', default='postgres.' + variables['hosted_zone'][:-1]) if variables['instance_type'].lower().split('.')[0] in ('c3', 'g2', 'hi1', 'i2', 'm3', 'r3'): variables['use_ebs'] = click.confirm( 'Do you want database data directory on external (EBS) storage? [Yes]', default=True) else: variables['use_ebs'] = True variables['ebs_optimized'] = None variables['volume_iops'] = None variables['snapshot_id'] = None if variables['use_ebs']: prompt(variables, 'volume_size', 'Database volume size (GB, 10 or more)', default=10) prompt(variables, 'volume_type', 'Database volume type (gp2, io1 or standard)', default='gp2') if variables['volume_type'] == 'io1': pio_max = variables['volume_size'] * 30 prompt(variables, "volume_iops", 'Provisioned I/O operations per second (100 - {0})'.format( pio_max), default=str(pio_max)) prompt(variables, "snapshot_id", "ID of the snapshot to populate EBS volume from", default="") if ebs_optimized_supported(variables['instance_type']): variables['ebs_optimized'] = True prompt(variables, "fstype", "Filesystem for the data partition", default="ext4") prompt(variables, "fsoptions", "Filesystem mount options (comma-separated)", default="noatime,nodiratime,nobarrier") prompt(variables, "scalyr_account_key", "Account key for your scalyr account", "") variables['postgres_port'] = POSTGRES_PORT variables['healthcheck_port'] = HEALTHCHECK_PORT sg_name = 'app-spilo' rules_missing = check_security_group(sg_name, [('tcp', 22), ('tcp', POSTGRES_PORT), ('tcp', HEALTHCHECK_PORT)], region, allow_from_self=True) if ('tcp', 22) in rules_missing: warning( 'Security group {} does not allow SSH access, you will not be able to ssh into your servers' .format(sg_name)) if ('tcp', POSTGRES_PORT) in rules_missing: error( 'Security group {} does not allow inbound TCP traffic on the default postgres port ({})' .format(sg_name, POSTGRES_PORT)) if ('tcp', HEALTHCHECK_PORT) in rules_missing: error( 'Security group {} does not allow inbound TCP traffic on the default health check port ({})' .format(sg_name, HEALTHCHECK_PORT)) variables['spilo_sg_id'] = get_security_group(region, sg_name).id check_s3_bucket(variables['wal_s3_bucket'], region) return variables