DateTimeDyField.data_source('Creation time', 'data.created_time'), ]) lb_listener = TableDynamicLayout.set_fields( 'Listeners', 'data.listeners', fields=[ EnumDyField.data_source('Protocol', 'protocol', default_outline_badge=[ 'HTTP', 'HTTPS', 'TCP', 'TLS', 'UDP', 'TCP_UDP' ]), TextDyField.data_source('Port', 'port'), ListDyField.data_source('Default Actions Target', 'default_actions', default_badge={ 'type': 'outline', 'sub_key': 'target_group_arn' }), TextDyField.data_source('Security Policy', 'ssl_policy'), ListDyField.data_source('Certificates', 'certificates', default_badge={ 'type': 'outline', 'sub_key': 'certificate_arn' }) ]) lb_attr = ItemDynamicLayout.set_fields( 'Attributes',
'warning': ['PENDING'] }), ]) origin = TableDynamicLayout.set_fields( 'Origins', 'data.origins.items', fields=[ TextDyField.data_source('Id', 'id'), TextDyField.data_source('DomainName', 'domain_name'), TextDyField.data_source('OriginPath', 'origin_path'), TextDyField.data_source('Origin Shield Region', 'origin_shield.origin_shield_region'), TextDyField.data_source('Origin Protocol Policy', 'custom_origin_config.origin_protocol_policy'), TextDyField.data_source('HTTPS Port', 'custom_origin_config.https_port'), TextDyField.data_source('HTTP Port', 'custom_origin_config.http_port'), TextDyField.data_source('Origin Response Timeout', 'custom_origin_config.origin_read_timeout'), TextDyField.data_source( 'Origin Keep-alive Tiemout', 'custom_origin_config.origin_keepalive_timeout'), TextDyField.data_source('Origin Connection Attempts', 'connection_attempts'), TextDyField.data_source('Origin Connection Timeout', 'connection_timeout'), ]) origin_group = TableDynamicLayout.set_fields( 'Origin Groups', 'data.origin_groups.items',
}), ListDyField.data_source('Enabled Cloudwatch Logs Exports', 'data.enabled_cloudwatch_logs_exports', default_badge={'type': 'outline'}), ListDyField.data_source('Availability Zones', 'data.availability_zones', default_badge={'type': 'outline'}), DateTimeDyField.data_source('Creation Time', 'data.cluster_create_time'), ]) cluster_sg = TableDynamicLayout.set_fields( 'Security Groups', 'data.vpc_security_groups', fields=[ TextDyField.data_source('Security Group ID', 'vpc_security_group_id'), EnumDyField.data_source('Status', 'status', default_state={'safe': ['active']}), ]) instances = TableDynamicLayout.set_fields( 'Instances', 'data.instances', fields=[ TextDyField.data_source('Instance', 'db_instance_identifier'), EnumDyField.data_source('Status', 'db_instance_status', default_state={'safe': ['available']}), TextDyField.data_source('Instance Type', 'db_instance_class'), TextDyField.data_source('AZ', 'availability_zone'),
TextDyField.data_source('Registered Instances', 'data.registered_container_instances_count'), ]) services = TableDynamicLayout.set_fields( 'Services', 'data.services', fields=[ TextDyField.data_source('Name', 'service_name'), EnumDyField.data_source('Status', 'status', default_state={ 'safe': ['ACTIVE'], 'disable': ['INACTIVE'], 'warning': ['DRAINING'] }), EnumDyField.data_source('Service Type', 'scheduling_strategy', default_outline_badge=['REPLICA', 'DAEMON']), TextDyField.data_source('Task Definition', 'task_definition'), TextDyField.data_source('Desired tasks', 'desired_count'), TextDyField.data_source('Running tasks', 'running_count'), EnumDyField.data_source('Launch type', 'launch_type', default_outline_badge=['EC2', 'FARGATE']), TextDyField.data_source('Platform version', 'platform_version'), ]) tasks = TableDynamicLayout.set_fields( 'Tasks', 'data.tasks',
subnetgrp = ItemDynamicLayout.set_fields( 'Subnet Group', fields=[ TextDyField.data_source('Name', 'data.db_subnet_group_name'), TextDyField.data_source('VPC ID', 'data.vpc_id'), TextDyField.data_source('ARN', 'data.db_subnet_group_arn'), TextDyField.data_source('Description', 'data.db_subnet_group_description'), ]) subnets = TableDynamicLayout.set_fields( 'Subnets', 'data.subnets', fields=[ TextDyField.data_source('Availability Zone', 'subnet_availability_zone.name'), TextDyField.data_source('Subnet ID', 'subnet_identifier'), EnumDyField.data_source('Status', 'subnet_status', default_state={'safe': ['Active']}), ]) subnetgrp_tags = SimpleTableDynamicLayout.set_tags() subnetgrp_metadata = CloudServiceMeta.set_layouts( layouts=[subnetgrp, subnets, subnetgrp_tags]) paramgrp = ItemDynamicLayout.set_fields( 'Parameter Group', fields=[ TextDyField.data_source('Name', 'data.db_parameter_group_name'), TextDyField.data_source('ARN', 'data.db_parameter_group_arn'), BadgeDyField.data_source('Family', 'data.db_parameter_group_family'),
'data.alias_icp_recordals', fields=[ TextDyField.data_source('CNAME', 'cname'), EnumDyField.data_source('Status', 'icp_recordal_status', default_state={ 'safe': ['APPROVED'], 'alert': ['SUSPENDED'], 'warning': ['PENDING'] }), ]) origin = TableDynamicLayout.set_fields( 'Origins', 'data.distribution_config.origin_groups.items', fields=[ TextDyField.data_source('Id', 'id'), TextDyField.data_source('DomainName', 'domain_name'), TextDyField.data_source('OriginPath', 'origin_path'), ]) origin_group = TableDynamicLayout.set_fields( 'Origin Groups', 'data.distribution_config.origin_groups.items', fields=[ TextDyField.data_source('ID', 'id'), ListDyField.data_source('Members', 'members.items', default_badge={ 'type': 'outline', 'sub_key': 'cname', })
TextDyField.data_source("Source Name", "data.source.source_name"), TextDyField.data_source("Source Details", "data.source.source_details"), TextDyField.data_source("Server-side encryption for source records", "data.delivery_stream_encryption_configuration.status"), TextDyField.data_source("Encryption type", "data.delivery_stream_encryption_configuration.key_type"), ] ) # TAB - S3 Destination firehose_meta_s3_destination_details = TableDynamicLayout.set_fields( "S3 Destination Details", root_path="data.destinations.s3_destination_description", fields=[ TextDyField.data_source("S3 Bucket ARN", "bucket_arn"), TextDyField.data_source("Prefix", "prefix"), TextDyField.data_source("Error prefix", "error_output_prefix"), TextDyField.data_source("Buffer Size", "buffering_hints.size_in_mbs"), TextDyField.data_source("Buffer Interval", "buffering_hints.interval_in_seconds"), TextDyField.data_source("Compression", "compression_format"), TextDyField.data_source("Encryption", "encryption_configuration.kms_encryption_config.aws_kms_key_arn"), TextDyField.data_source("Cloud Watch Logging", "cloud_watch_logging_optinos.enabled"), ] ) firehose_meta_s3_destination_extend = TableDynamicLayout.set_fields( "Extend Details", root_path="data.destinations.extended_s3_destination_description", fields=[ TextDyField.data_source("S3 Backup Mode", "s3_backup_mode"), TextDyField.data_source("S3 Backup Bucket ARN", "s3_backup_description.bucket_arn"), TextDyField.data_source("Processing Configuration", "processing_configuration.enabled"), ListDyField.data_source("Processing Type", "processing_configuration.processors", options={
default_badge={ 'indigo.500': ['true'], 'coral.600': ['false'] }), ]) images = TableDynamicLayout.set_fields( 'Images', 'data.images', fields=[ ListDyField.data_source('Image Tag', 'image_tags', default_badge={'type': 'outline'}), TextDyField.data_source('Image URI', 'image_uri'), TextDyField.data_source('Size(MB)', 'image_size_in_megabytes'), TextDyField.data_source('Digest', 'image_digest'), EnumDyField.data_source('Scan status', 'image_scan_status.status', default_state={ 'safe': ['COMPLETE'], 'warning': ['IN_PROGRESS'], 'alert': ['FAILED'] }), DateTimeDyField.data_source('Pushed at', 'image_pushed_at'), ]) metadata = CloudServiceMeta.set_layouts(layouts=[base, images]) class ECRResource(CloudServiceResource): cloud_service_group = StringType(default='ECR')
"Enhanced (shard-level) metrics", "data.shard_level_metrics_display", default_badge={"delimiter": "<br>"}, ) ]) # TAB - Enhanced fan-out kds_meta_consumers_using_enhanced_fan_out = TableDynamicLayout.set_fields( "Consumers using enhanced fan-out", "data.consumers_vo.consumers", fields=[ TextDyField.data_source("Consumer name", "consumer_name"), EnumDyField.data_source( "Registration status", "consumer_status_display", default_state={ "safe": ["Active"], "warning": ["Creating", "Deleting"] }, ), DateTimeDyField.data_source("Registration date", "consumer_creation_timestamp"), ], ) kds_meta_enhanced_fan_out = ListDynamicLayout.set_layouts( "Enhanced fan-out", layouts=[kds_meta_consumers_using_enhanced_fan_out]) # TAB - Tags kds_meta_tags = TableDynamicLayout.set_fields( "Tags",
}), TextDyField.data_source('Version', 'data.version'), TextDyField.data_source('Endpoint', 'data.endpoint'), TextDyField.data_source('Role ARN', 'data.role_arn'), TextDyField.data_source('Certificate Authority', 'data.certificate_authority.data'), ]) cluster_node_groups = TableDynamicLayout.set_fields('Node Groups', 'data.node_groups', fields=[ TextDyField.data_source('Group Name', 'nodegroup_name'), EnumDyField.data_source('Status', 'status', default_state={ 'safe': ['ACTIVE'], 'warning': ['CREATING', 'UPDATING', 'DELETING'], 'alert': ['CREATE_FAILED', 'DELETE_FAILED', 'DEGRADED'], }), ListDyField.data_source('Instance Types', 'instance_types', options={ 'delimiter': '<br>' }), ListDyField.data_source('Subnets', 'subnets', options={ 'delimiter': '<br>' }), TextDyField.data_source('Disk Size', 'disk_size'), ListDyField.data_source('Health Issue', 'instance_types', options={ 'delimiter': '<br>' }), ]) cluster_logging = TableDynamicLayout.set_fields('Cluster Logging', 'data.logging.cluster_logging', fields=[ ListDyField.data_source('Types', 'types', options={ 'delimiter': '<br>' }), EnumDyField.data_source('Enabled', 'enabled', default_badge={ 'indigo.500': ['true'], 'coral.600': ['false']
'alert': ['Suspended'] }), ]) requester_pays = ItemDynamicLayout.set_fields('Requester Pays', fields=[ EnumDyField.data_source('Payers', 'data.request_payment.request_payment', default_badge={ 'indigo.500': ['BucketOwner'], 'coral.600': ['Requester'] }), ]) tags = SimpleTableDynamicLayout.set_tags() topic_conf = TableDynamicLayout.set_fields('Events', 'data.notification_configurations', fields=[ TextDyField.data_source('ID', 'id'), TextDyField.data_source('Type', 'notification_type'), TextDyField.data_source('ARN', 'arn'), ListDyField.data_source('Events', 'events'), ]) metadata = CloudServiceMeta.set_layouts(layouts=[bucket, object_info, versioning, website_hosting, server_access_log, encryption, object_lock, transfer_acc, requester_pays, topic_conf, tags]) class S3Resource(CloudServiceResource): cloud_service_group = StringType(default='S3') class BucketResource(S3Resource): cloud_service_type = StringType(default='Bucket') data = ModelType(Bucket)
'safe': ['ISSUED'], 'warning': [ 'PENDING_VALIDATION', 'INACTIVE', 'VALIDATION_TIMED_OUT', 'REVOKED' ], 'alert': ['EXPIRED', 'FAILED'] }), DateTimeDyField.data_source('Issue Date', 'data.issued_at'), ]) acm_meta_domain_validation_table = \ TableDynamicLayout.set_fields('Domain Validation Status','data.domain_validation_options', fields=[ TextDyField.data_source('Domain', 'domain_name'), EnumDyField.data_source('Validation status', 'validation_status', default_state={ 'safe': ['SUCCESS'], 'warning': ['PENDING_VALIDATION'], 'alert': ['FAILED']}), ]) certificate_status = ListDynamicLayout.set_layouts( 'Status', layouts=[acm_meta_status, acm_meta_domain_validation_table]) # TAB - Detail acm_meta_detail = ItemDynamicLayout.set_fields( 'Details', fields=[ TextDyField.data_source('Type', 'data.type'), TextDyField.data_source('In use?', 'data.in_use_display'), TextDyField.data_source('Domain Name', 'data.domain_name'),
'delimiter': '<br>', }) ]) function_env = SimpleTableDynamicLayout.set_fields( 'Environment Variables', 'data.environment.variables', fields=[ TextDyField.data_source('Key', 'key'), TextDyField.data_source('Value', 'value'), ]) function_layers = TableDynamicLayout.set_fields( 'Layers', 'data.layers', fields=[ TextDyField.data_source('ARN', 'arn'), TextDyField.data_source('Name', 'name'), TextDyField.data_source('Code Size', 'code_size'), ]) function_metadata = CloudServiceMeta.set_layouts( layouts=[function, function_vpc, function_env, function_layers]) layer = ItemDynamicLayout.set_fields( 'Layers', fields=[ TextDyField.data_source('Name', 'data.layer_name'), TextDyField.data_source('ARN', 'data.layer_arn'), ListDyField.data_source( 'Compatible Runtimes', 'data.latest_matching_version.compatible_runtimes',
DateTimeDyField.data_source('Creation time', 'data.created_time'), ]) lb_listener = TableDynamicLayout.set_fields( 'Listeners', 'data.listeners', fields=[ EnumDyField.data_source('Protocol', 'protocol', default_outline_badge=[ 'HTTP', 'HTTPS', 'TCP', 'TLS', 'UDP', 'TCP_UDP' ]), TextDyField.data_source('Port', 'port'), ListDyField.data_source('Default Actions Target Group ARN', 'default_actions', options={ 'delimiter': '<br>', 'sub_key': 'target_group_arn' }), TextDyField.data_source('Security Policy', 'ssl_policy'), ListDyField.data_source('Certificates', 'certificates', options={ 'delimiter': '<br>', 'sub_key': 'certificate_arn' }) ]) lb_tg = TableDynamicLayout.set_fields( 'Target Groups',
''' REST API ''' # TAB - BASE rest_api_meta_base = ItemDynamicLayout.set_fields('REST API', fields=[ TextDyField.data_source('Id', 'data.id'), TextDyField.data_source('Name', 'data.name'), TextDyField.data_source('Description', 'data.description'), ListDyField.data_source('Endpoint Type', 'data.endpoint_configuration.types', default_badge={'type': 'outline'}) ]) # TAB - RESOURCE rest_api_meta_resources = TableDynamicLayout.set_fields('Resources', 'data.resources', fields=[ TextDyField.data_source('ID', 'id'), TextDyField.data_source('Parent ID', 'parent_id'), TextDyField.data_source('Path', 'path'), ListDyField.data_source('HTTP Methods', 'display_methods', default_badge={'type': 'inline'}), ]) rest_api_meta = CloudServiceMeta.set_layouts([rest_api_meta_base, rest_api_meta_resources]) ''' WEBSOCKET & HTTP ''' # TAB - BASE websocket_meta_base = ItemDynamicLayout.set_fields('HTTP & Web Socket', fields=[ TextDyField.data_source('Id', 'data.api_id'), TextDyField.data_source('Name', 'data.name'), TextDyField.data_source('Endpoint', 'data.api_endpoint'),
TextDyField.data_source('Name', 'data.launch_template.launch_template_name'), TextDyField.data_source('Version', 'data.launch_template.version') ]) # TAB - Instance asg_meta_instance = TableDynamicLayout.set_fields('Instances', 'data.instances', fields=[ TextDyField.data_source('Instance ID', 'instance_id'), TextDyField.data_source('Life Cycle', 'lifecycle'), EnumDyField.data_source('Lifecycle Status', 'lifecycle_state', default_state={ 'safe': ['InService'], 'available': ['Standby'], 'warning': ['Pending', 'Pending:Wait', 'Pending:Proceed', 'Quarantined', 'Detaching', 'EnteringStandby', 'Terminating', 'Terminating:Wait', 'Terminating:Proceed'], 'disable': ['Detached'], 'alert': ['Terminated'] }), TextDyField.data_source('Instance Type', 'instance_type'), TextDyField.data_source('AZ', 'availability_zone'), EnumDyField.data_source('Health Status', 'health_status', default_state={ 'safe': ['Healthy'], 'alert': ['Unhealthy'] }), EnumDyField.data_source('Protected from Scale In', 'protected_from_scale_in', default_badge={ 'indigo.500': ['true'], 'coral.600': ['false'] }), TextDyField.data_source('Weighted Capacity', 'weighted_capacity'), ]) # TAB - ELB asg_meta_elb = TableDynamicLayout.set_fields('ELB', root_path='data.load_balancers', fields=[ TextDyField.data_source('Name', 'name', reference={ 'resource_type': 'inventory.CloudService',
'indigo.500': ['true'], 'coral.600': ['false'] }), TextDyField.data_source('Owner', 'data.owner_id'), ]) vpc_subnet = TableDynamicLayout.set_fields( 'Subnet', 'data.subnets', fields=[ TextDyField.data_source('Subnet ID', 'subnet_id'), EnumDyField.data_source('State', 'state', default_state={ 'safe': ['available'], 'warning': ['pending'] }), TextDyField.data_source('IPv4 CIDR', 'cidr_block'), TextDyField.data_source('Availability Zone', 'availability_zone'), EnumDyField.data_source('Auto-assign Public IP', 'map_public_ip_on_launch', default_badge={ 'indigo.500': ['true'], 'coral.600': ['false'] }), ]) vpc_route = TableDynamicLayout.set_fields( 'Route Tables', 'data.route_tables', fields=[ TextDyField.data_source('Route Table ID', 'route_table_id'),
record_set = TableDynamicLayout.set_fields( 'Record Sets', 'data.record_sets', fields=[ TextDyField.data_source('Name', 'name'), EnumDyField.data_source('Type', 'type', default_outline_badge=[ 'SOA', 'A', 'TXT', 'NS', 'CNAME', 'MX', 'NAPTR', 'PTR', 'SRV', 'SPF', 'AAAA', 'CAA' ]), ListDyField.data_source('Value', 'display_values', default_badge={ 'type': 'outline', 'delimiter': '<br>' }), EnumDyField.data_source('Evaluate Target Health', 'alias_target.evaluate_target_health', default_badge={ 'indigo.500': ['true'], 'coral.600': ['false'] }), TextDyField.data_source('Health Check ID', 'health_check_id'), TextDyField.data_source('TTL', 'ttl'), TextDyField.data_source('Region', 'region'), TextDyField.data_source('Weight', 'weight'), TextDyField.data_source('Geolocation', 'geo_location'), EnumDyField.data_source('Multivalue Answer', 'multi_value_answer', default_badge={ 'indigo.500': ['true'], 'coral.600': ['false'] }), TextDyField.data_source('Set ID', 'set_identifier'), ])
'delimiter': '<br>' }), DateTimeDyField.data_source('Creation date', 'data.creation_time') ]) mount_target = TableDynamicLayout.set_fields( 'Mount Targets', 'data.mount_targets', fields=[ TextDyField.data_source('Mount target ID', 'mount_target_id'), EnumDyField.data_source('State', 'life_cycle_state', default_state={ 'safe': ['available'], 'warning': ['creating', 'updating', 'deleting'], 'disable': ['deleted'] }), TextDyField.data_source('Availability Zone', 'availability_zone_name'), TextDyField.data_source('Subnet', 'subnet_id'), TextDyField.data_source('IP Address', 'ip_address'), TextDyField.data_source('Network Interface ID', 'network_interface_id'), ListDyField.data_source('Security Groups', 'security_groups', default_badge={'type': 'outline'}), ]) tags = SimpleTableDynamicLayout.set_tags() metadata = CloudServiceMeta.set_layouts(layouts=[base, mount_target, tags])
from spaceone.inventory.libs.schema.dynamic_field import TextDyField, DateTimeDyField, EnumDyField, ListDyField from spaceone.inventory.libs.schema.dynamic_layout import ItemDynamicLayout, SimpleTableDynamicLayout, \ TableDynamicLayout sg = ItemDynamicLayout.set_fields('Security Group', fields=[ TextDyField.data_source('ID', 'data.group_id'), TextDyField.data_source('Name', 'data.group_name'), TextDyField.data_source('Description', 'data.description'), TextDyField.data_source('VPC ID', 'data.vpc_id'), TextDyField.data_source('Account ID', 'data.owner_id'), ]) inbound_rules = TableDynamicLayout.set_fields('Inbound Rules', 'data.ip_permissions', fields=[ EnumDyField.data_source('Protocol', 'protocol_display', default_badge={ 'coral.600': ['ALL'], 'indigo.500': ['TCP'], 'peacock.500': ['UDP'], 'green.500': ['ICMP']}), TextDyField.data_source('Port range', 'port_display'), TextDyField.data_source('Source', 'source_display'), TextDyField.data_source('Description', 'description_display'), ]) outbound_rules = TableDynamicLayout.set_fields('Outbound Rules', 'data.ip_permissions_egress', fields=[ EnumDyField.data_source('Protocol', 'protocol_display', default_badge={ 'coral.600': ['ALL'], 'indigo.500': ['TCP'], 'peacock.500': ['UDP'], 'green.500': ['ICMP']}), TextDyField.data_source('Port range', 'port_display'), TextDyField.data_source('Source', 'source_display'), TextDyField.data_source('Description', 'description_display'), ]) sg_instance = TableDynamicLayout.set_fields('Instances', 'data.instances', fields=[ TextDyField.data_source('ID', 'instance_id'), TextDyField.data_source('Name', 'instance_name'),
SimpleTableDynamicLayout, ListDynamicLayout # GROUP group_base = ItemDynamicLayout.set_fields('Group', fields=[ TextDyField.data_source('Group ARN', 'data.arn'), TextDyField.data_source('Group Name', 'data.group_name'), TextDyField.data_source('Group ID', 'data.group_id'), TextDyField.data_source('Path', 'data.path'), TextDyField.data_source('User Count', 'data.user_count'), DateTimeDyField.data_source('Created At', 'data.create_date'), ]) group_user_table = TableDynamicLayout.set_fields('Users', root_path='data.users', fields=[ TextDyField.data_source('User Name', 'user_name'), TextDyField.data_source('Access Key Age', 'access_key_age_display'), TextDyField.data_source('Last Activity', 'last_activity'), EnumDyField.data_source('MFA', 'mfa_device', default_badge={ 'indigo.500': ['Virtual'], 'coral.600': ['Not enabled'], }), ]) group_policy_table = TableDynamicLayout.set_fields('Permissions', root_path='data.attached_permission', fields=[ TextDyField.data_source('Policy Name', 'policy_name'), TextDyField.data_source('Policy ID', 'policy_id'), EnumDyField.data_source('Policy Type', 'policy_type', default_badge={ 'indigo.500': ['AWS Managed'], 'coral.600': ['Local Managed'], }), TextDyField.data_source('Policy ARN', 'arn'), TextDyField.data_source('Permission Usage Count', 'attachment_count'), TextDyField.data_source('Description', 'description'), DateTimeDyField.data_source('Created At', 'create_date'), DateTimeDyField.data_source('Updated At', 'update_date'),
'data.snapshot_retention_limit'), TextDyField.data_source('Backup Window', 'data.snapshot_window'), DateTimeDyField.data_source('Creation Time', 'data.cache_cluster_create_time') ]) memcached_node = TableDynamicLayout.set_fields( 'Nodes', 'data.nodes', fields=[ TextDyField.data_source('Node Name', 'node_name'), EnumDyField.data_source('Status', 'status', default_state={ 'safe': ['available'], }), TextDyField.data_source('Port', 'port'), TextDyField.data_source('Endpoint', 'endpoint'), EnumDyField.data_source('Parameter Group Status', 'parameter_group_status', default_state={ 'safe': ['in-sync'], }), DateTimeDyField.data_source('Created On', 'created_on') ]) memcached_tags = SimpleTableDynamicLayout.set_tags() memcached_metadata = CloudServiceMeta.set_layouts( layouts=[memcached_base, memcached_node, memcached_tags]) ''' Redis
fields=[ TextDyField.data_source('ID', 'data.group_id'), TextDyField.data_source('Name', 'data.group_name'), TextDyField.data_source('Description', 'data.description'), TextDyField.data_source('VPC ID', 'data.vpc_id'), TextDyField.data_source('Account ID', 'data.owner_id'), ]) inbound_rules = TableDynamicLayout.set_fields( 'Inbound Rules', 'data.ip_permissions', fields=[ EnumDyField.data_source('Protocol', 'protocol_display', default_badge={ 'coral.600': ['ALL'], 'indigo.500': ['TCP'], 'peacock.500': ['UDP'], 'green.500': ['ICMP'] }), TextDyField.data_source('Port range', 'port_display'), TextDyField.data_source('Source', 'source_display'), TextDyField.data_source('Description', 'description_display'), ]) outbound_rules = TableDynamicLayout.set_fields( 'Outbound Rules', 'data.ip_permissions_egress', fields=[ EnumDyField.data_source('Protocol', 'protocol_display', default_badge={
'security_group', options={ 'delimiter': '<br>' }), TextDyField.data_source('EBS storage volume per broker', 'storage_info.ebs_storage_info.volume_size'), ]) # Broker Info cluster_broker_node_info = TableDynamicLayout.set_fields('Broker Node Info', root_path='data.node_info_list', fields=[ TextDyField.data_source('Broker ID', 'broker_node_info.broker_id'), TextDyField.data_source('Instance Type', 'instance_type'), TextDyField.data_source('Node Type', 'node_type'), TextDyField.data_source('Client Subnet', 'broker_node_info.client_subnet'), TextDyField.data_source('Client VPC IP', 'broker_node_info.client_vpc_ip_address'), ListDyField.data_source('Endpoints', 'broker_node_info.endpoints', options={ 'delimiter': '<br>' }), TextDyField.data_source('Node ARN', 'node_arn'), TextDyField.data_source('Added To Cluster Time', 'added_to_cluster_time'), ]) broker_info = ListDynamicLayout.set_layouts('Broker', layouts=[cluster_broker_node_summary, cluster_broker_node_info]) # Encryption Info cluster_encryption_info = ItemDynamicLayout.set_fields('Encryption Info', root_path='data.encryption_info', fields=[ EnumDyField.data_source('Within the cluster', 'encryption_in_transit.in_cluster', default_badge={'indigo.500': ['true'], 'coral.600': ['false'], }),
param_group = ItemDynamicLayout.set_fields( 'Parameter Groups', 'data.cluster_parameter_groups', fields=[ TextDyField.data_source('Parameter Group Name', 'parameter_group_name'), EnumDyField.data_source('Apply status', 'parameter_apply_status', default_state={'safe': ['available']}), ]) nodes = TableDynamicLayout.set_fields( 'Nodes', 'data.cluster_nodes', fields=[ TextDyField.data_source('Node Role', 'node_role'), TextDyField.data_source('Private IP', 'private_ip_address'), TextDyField.data_source('Public IP', 'public_ip_address'), ]) snapshots = TableDynamicLayout.set_fields( 'Snapshots', 'data.snapshots', fields=[ TextDyField.data_source('Snapshot Identifier', 'snapshot_identifier'), BadgeDyField.data_source('Snapshot Type', 'snapshot_type'), EnumDyField.data_source('Status', 'status', default_state={'safe': ['active']}), TextDyField.data_source('Size(MB)', 'total_backup_size_in_mega_bytes'), TextDyField.data_source(
default_badge={ 'indigo.500': ['true'], 'coral.600': ['false'] }), ]) images = TableDynamicLayout.set_fields( 'Images', 'data.images', fields=[ ListDyField.data_source('Image Tag', 'image_tags_display', options={'delimiter': ', '}), TextDyField.data_source('Image URI', 'image_uri'), SizeField.data_source('Image Size', 'image_size_in_bytes'), TextDyField.data_source('Digest', 'image_digest'), EnumDyField.data_source('Scan status', 'image_scan_status.status', default_state={ 'safe': ['COMPLETE'], 'warning': ['IN_PROGRESS'], 'alert': ['FAILED'] }), DateTimeDyField.data_source('Pushed at', 'image_pushed_at'), ]) metadata = CloudServiceMeta.set_layouts(layouts=[base, images]) class ECRResource(CloudServiceResource): cloud_service_group = StringType(default='ECR')
TextDyField.data_source("Backup S3 bucket", "s3_backup_info.bucket_name"), TextDyField.data_source("Backup S3 bucket error prefix", "s3_backup_info.bucket_error_prefix"), TextDyField.data_source("S3 buffer conditions", "s3_backup_info.buffer_conditions"), TextDyField.data_source("S3 compression", "s3_backup_info.compression"), TextDyField.data_source("S3 encryption", "s3_backup_info.encryption") ] ) # TAB - S3 Destination firehose_meta_s3_destination_details = TableDynamicLayout.set_fields( "S3 Destination Details", root_path="data.destinations_ref.extended_s3_destination_description", fields=[ TextDyField.data_source("S3 bucket", "bucket_name"), TextDyField.data_source("Prefix", "prefix"), TextDyField.data_source("Error prefix", "error_output_prefix"), TextDyField.data_source("Buffer conditions", "buffer_conditions"), TextDyField.data_source("Compression", "compression"), TextDyField.data_source("Encryption", "encryption_configuration.no_encryption") ] ) firehose_meta_s3_destination_glue = TableDynamicLayout.set_fields( "Convert record format", root_path="data.destinations_ref.extended_s3_destination_description", fields=[ TextDyField.data_source("Record format conversion", "data_format_conversion_configuration.record_format_conversion"), ListDyField.data_source("Input format", "data_format_conversion_configuration.input_format", options={"delimiter": ", "}), ListDyField.data_source("Output format", "data_format_conversion_configuration.output_format",
TextDyField.data_source('Private IP', 'data.private_ip_address'), TextDyField.data_source('Public IP', 'data.public_ip_address'), ListDyField.data_source('IPv6', 'data.ipv6_address', default_badge={'type': 'outline'}), TextDyField.data_source('State', 'data.state.name'), TextDyField.data_source('User Name', 'data.username'), TextDyField.data_source('SSH Key Name', 'data.ssh_key_name') ]) instance_addon = TableDynamicLayout.set_fields( 'Snapshot Time', root_path='data.add_ons', fields=[ TextDyField.data_source('Name', 'name'), TextDyField.data_source('Status', 'status'), TextDyField.data_source('Snapshot Time Of Day', 'snapshot_time_of_day'), TextDyField.data_source('Next Snapshot Time Of Day', 'next_snapshot_time_of_day') ]) instance_hardware = TableDynamicLayout.set_fields( 'Hardware', root_path='data.hardware', fields=[ TextDyField.data_source('CPU Count', 'cpu_count'), ListDyField.data_source('Disks', 'disks', default_badge={ 'type': 'outline',