def confirm_on_latest_rc(affect_remote: bool) -> None: latest_tag = get_latest_tag(affect_remote) if not git.is_ancestor(f"v{latest_tag}", "HEAD"): ancestor_tag = git.describe() click.confirm( f"You are about to create a release based on: {ancestor_tag}\n" f"Which is not the latest prerelease: v{latest_tag}\n" "Are you sure?", abort=True, )
def confirm_on_latest_rc() -> None: tags = git.get_version_tags() latest_tag = tags[0] if not git.is_ancestor(f"v{latest_tag}", "HEAD"): ancestor_tag = git.describe() click.confirm( f"You are about to create a release based on: {ancestor_tag}\n" f"Which is not the latest prerelease: v{latest_tag}\n" "Are you sure?", abort=True, )
def launch( *, key_name: Optional[str], instance_type: str, ami: str, tags: Dict[str, str], display_name: Optional[str] = None, subnet_id: Optional[str] = None, size_gb: int, security_group_id: str, instance_profile: Optional[str], nonce: str, delete_after: int, ) -> Instance: """Launch and configure an ec2 instance with the given properties.""" if display_name: tags["Name"] = display_name tags["scratch-delete-after"] = str(delete_after) tags["nonce"] = nonce tags["git_ref"] = git.describe() network_interface: InstanceNetworkInterfaceSpecificationTypeDef = { "AssociatePublicIpAddress": True, "DeviceIndex": 0, "Groups": [security_group_id], } if subnet_id: network_interface["SubnetId"] = subnet_id SPEAKER(f"launching instance {display_name or '(unnamed)'}") with open(ROOT + "/misc/load-tests/provision.bash") as f: provisioning_script = f.read() kwargs: RunInstancesRequestRequestTypeDef = { "MinCount": 1, "MaxCount": 1, "ImageId": ami, "InstanceType": instance_type, # type: ignore "UserData": provisioning_script, "TagSpecifications": [{ "ResourceType": "instance", "Tags": [{ "Key": k, "Value": v } for (k, v) in tags.items()], }], "NetworkInterfaces": [network_interface], "BlockDeviceMappings": [{ "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": size_gb, "VolumeType": "gp3", }, }], } if key_name: kwargs["KeyName"] = key_name if instance_profile: kwargs["IamInstanceProfile"] = {"Name": instance_profile} i = boto3.resource("ec2").create_instances(**kwargs)[0] print(i.tags) return i
def launch( *, key_name: Optional[str], instance_type: str, ami: str, ami_user: str, tags: Dict[str, str], display_name: Optional[str] = None, subnet_id: Optional[str] = None, size_gb: int, security_group_id: str, instance_profile: Optional[str], nonce: str, delete_after: datetime.datetime, ) -> Instance: """Launch and configure an ec2 instance with the given properties.""" if display_name: tags["Name"] = display_name tags["scratch-delete-after"] = str(delete_after.timestamp()) tags["nonce"] = nonce tags["git_ref"] = git.describe() tags["ami-user"] = ami_user network_interface: InstanceNetworkInterfaceSpecificationTypeDef = { "AssociatePublicIpAddress": True, "DeviceIndex": 0, "Groups": [security_group_id], } if subnet_id: network_interface["SubnetId"] = subnet_id say(f"launching instance {display_name or '(unnamed)'}") with open(ROOT / "misc" / "scratch" / "provision.bash") as f: provisioning_script = f.read() kwargs: RunInstancesRequestRequestTypeDef = { "MinCount": 1, "MaxCount": 1, "ImageId": ami, "InstanceType": cast(InstanceTypeType, instance_type), "UserData": provisioning_script, "TagSpecifications": [{ "ResourceType": "instance", "Tags": [{ "Key": k, "Value": v } for (k, v) in tags.items()], }], "NetworkInterfaces": [network_interface], "BlockDeviceMappings": [{ "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": size_gb, "VolumeType": "gp3", }, }], "MetadataOptions": { # Allow Docker containers to access IMDSv2. "HttpPutResponseHopLimit": 2, }, } if key_name: kwargs["KeyName"] = key_name if instance_profile: kwargs["IamInstanceProfile"] = {"Name": instance_profile} i = boto3.resource("ec2").create_instances(**kwargs)[0] return i
def launch( *, key_name: Optional[str], instance_type: str, ami: str, ami_user: str, tags: Dict[str, str], display_name: Optional[str] = None, size_gb: int, security_group_name: str, instance_profile: Optional[str], nonce: str, delete_after: datetime.datetime, ) -> Instance: """Launch and configure an ec2 instance with the given properties.""" if display_name: tags["Name"] = display_name tags["scratch-delete-after"] = str(delete_after.timestamp()) tags["nonce"] = nonce tags["git_ref"] = git.describe() tags["ami-user"] = ami_user ec2 = boto3.client("ec2") groups = ec2.describe_security_groups() security_group_id = None for group in groups["SecurityGroups"]: if group["GroupName"] == security_group_name: security_group_id = group["GroupId"] break if security_group_id is None: vpcs = ec2.describe_vpcs() vpc_id = None for vpc in vpcs["Vpcs"]: if vpc["IsDefault"] == True: vpc_id = vpc["VpcId"] break if vpc_id is None: default_vpc = ec2.create_default_vpc() vpc_id = default_vpc["Vpc"]["VpcId"] securitygroup = ec2.create_security_group( GroupName=security_group_name, Description="Allows all.", VpcId=vpc_id, ) security_group_id = securitygroup["GroupId"] ec2.authorize_security_group_ingress( GroupId=security_group_id, CidrIp="0.0.0.0/0", IpProtocol="tcp", FromPort=1, ToPort=28000, ) network_interface: InstanceNetworkInterfaceSpecificationTypeDef = { "AssociatePublicIpAddress": True, "DeviceIndex": 0, "Groups": [security_group_id], } say(f"launching instance {display_name or '(unnamed)'}") with open(ROOT / "misc" / "scratch" / "provision.bash") as f: provisioning_script = f.read() kwargs: RunInstancesRequestRequestTypeDef = { "MinCount": 1, "MaxCount": 1, "ImageId": ami, "InstanceType": cast(InstanceTypeType, instance_type), "UserData": provisioning_script, "TagSpecifications": [{ "ResourceType": "instance", "Tags": [{ "Key": k, "Value": v } for (k, v) in tags.items()], }], "NetworkInterfaces": [network_interface], "BlockDeviceMappings": [{ "DeviceName": "/dev/sda1", "Ebs": { "VolumeSize": size_gb, "VolumeType": "gp3", }, }], "MetadataOptions": { # Allow Docker containers to access IMDSv2. "HttpPutResponseHopLimit": 2, }, } if key_name: kwargs["KeyName"] = key_name if instance_profile: kwargs["IamInstanceProfile"] = {"Name": instance_profile} i = boto3.resource("ec2").create_instances(**kwargs)[0] return i