from sqlalchemy import Column
from sqlalchemy.types import JSON, Text, Boolean, TIMESTAMP, BigInteger
from sqlalchemy.dialects import postgresql as psql

from steampipe_alchemy import Base

class AwsEc2Instance(Base):
    __tablename__ = 'aws_ec2_instance'
    instance_id = Column(name='instance_id', type_=Text, nullable=True)
    instance_type = Column(name='instance_type', type_=Text, nullable=True)
    instance_state = Column(name='instance_state', type_=Text, nullable=True)
    monitoring_state = Column(name='monitoring_state', type_=Text, nullable=True)
    disable_api_termination = Column(name='disable_api_termination', type_=Boolean, nullable=True)
    cpu_options_core_count = Column(name='cpu_options_core_count', type_=BigInteger, nullable=True)
    cpu_options_threads_per_core = Column(name='cpu_options_threads_per_core', type_=BigInteger, nullable=True)
    ebs_optimized = Column(name='ebs_optimized', type_=Boolean, nullable=True)
    hypervisor = Column(name='hypervisor', type_=Text, nullable=True)
    iam_instance_profile_arn = Column(name='iam_instance_profile_arn', type_=Text, nullable=True)
    iam_instance_profile_id = Column(name='iam_instance_profile_id', type_=Text, nullable=True)
    image_id = Column(name='image_id', type_=Text, nullable=True)
    instance_initiated_shutdown_behavior = Column(name='instance_initiated_shutdown_behavior', type_=Text, nullable=True)
    kernel_id = Column(name='kernel_id', type_=Text, nullable=True)
    key_name = Column(name='key_name', type_=Text, nullable=True)
    launch_time = Column(name='launch_time', type_=TIMESTAMP, nullable=True)
    metadata_options = Column(name='metadata_options', type_=JSON, nullable=True)
    outpost_arn = Column(name='outpost_arn', type_=Text, nullable=True)
    placement_availability_zone = Column(name='placement_availability_zone', type_=Text, nullable=True)
    placement_group_name = Column(name='placement_group_name', type_=Text, nullable=True)
    placement_tenancy = Column(name='placement_tenancy', type_=Text, nullable=True)
    private_ip_address = Column(name='private_ip_address', type_=psql.INET, nullable=True)
    private_dns_name = Column(name='private_dns_name', type_=Text, nullable=True)
    public_dns_name = Column(name='public_dns_name', type_=Text, nullable=True)
    public_ip_address = Column(name='public_ip_address', type_=psql.INET, nullable=True)
    ram_disk_id = Column(name='ram_disk_id', type_=Text, nullable=True)
    root_device_name = Column(name='root_device_name', type_=Text, nullable=True)
    root_device_type = Column(name='root_device_type', type_=Text, nullable=True)
    source_dest_check = Column(name='source_dest_check', type_=Boolean, nullable=True)
    sriov_net_support = Column(name='sriov_net_support', type_=Text, nullable=True)
    state_code = Column(name='state_code', type_=BigInteger, nullable=True)
    subnet_id = Column(name='subnet_id', type_=Text, nullable=True)
    user_data = Column(name='user_data', type_=Text, nullable=True)
    virtualization_type = Column(name='virtualization_type', type_=Text, nullable=True)
    vpc_id = Column(name='vpc_id', type_=Text, nullable=True)
    elastic_gpu_associations = Column(name='elastic_gpu_associations', type_=JSON, nullable=True)
    elastic_inference_accelerator_associations = Column(name='elastic_inference_accelerator_associations', type_=JSON, nullable=True)
    block_device_mappings = Column(name='block_device_mappings', type_=JSON, nullable=True)
    network_interfaces = Column(name='network_interfaces', type_=JSON, nullable=True)
    product_codes = Column(name='product_codes', type_=JSON, nullable=True)
    security_groups = Column(name='security_groups', type_=JSON, nullable=True)
    instance_status = Column(name='instance_status', type_=JSON, nullable=True)
    tags_src = Column(name='tags_src', type_=JSON, nullable=True)
    tags = Column(name='tags', type_=JSON, nullable=True)
    title = Column(name='title', type_=Text, primary_key=True, nullable=True)
    akas = Column(name='akas', type_=JSON, nullable=True)
    partition = Column(name='partition', type_=Text, nullable=True)
    region = Column(name='region', type_=Text, nullable=True)
    account_id = Column(name='account_id', type_=Text, nullable=True)