diff options
Diffstat (limited to 'syntax/terraform.vim')
-rw-r--r-- | syntax/terraform.vim | 675 |
1 files changed, 675 insertions, 0 deletions
diff --git a/syntax/terraform.vim b/syntax/terraform.vim new file mode 100644 index 00000000..0ae9e191 --- /dev/null +++ b/syntax/terraform.vim @@ -0,0 +1,675 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'terraform') == -1 + +" Forked from Larry Gilbert's syntax file +" github.com/L2G/vim-syntax-terraform + +if exists("b:current_syntax") + finish +endif + +syn case match + +syn keyword terraSection connection output provider variable data terraform +syn keyword terraValueBool true false on off yes no + +""" data +syn keyword terraDataTypeBI + \ archive_file + \ atlas_artifact + \ aws_acm_certificate + \ aws_alb + \ aws_alb_listener + \ aws_ami + \ aws_availability_zone + \ aws_availability_zones + \ aws_billing_service_account + \ aws_caller_identity + \ aws_cloudformation_stack + \ aws_ebs_snapshot + \ aws_ebs_volume + \ aws_ecs_container_definition + \ aws_eip + \ aws_elb_service_account + \ aws_iam_account_alias + \ aws_iam_policy_document + \ aws_iam_server_certificate + \ aws_ip_ranges + \ aws_prefix_list + \ aws_redshift_service_account + \ aws_region + \ aws_route53_zone + \ aws_route_table + \ aws_s3_bucket_object + \ aws_security_group + \ aws_subnet + \ aws_vpc + \ aws_vpc_endpoint_service + \ aws_vpc_peering_connection + \ azurerm_client_config + \ consul_keys + \ docker_registry_image + \ external + \ fastly_ip_ranges + \ google_iam_policy + \ newrelic_application + \ null_data_source + \ opsgenie_user + \ pagerduty_user + \ pagerduty_vendor + \ scaleway_bootscript + \ scaleway_image + \ template_cloudinit_config + \ template_file + \ terraform_remote_state +""" end data sources + +""" resource +syn keyword terraResourceTypeBI + \ arukas_container + \ atlas_artifact + \ aws_alb + \ aws_alb_listener + \ aws_alb_listener_rule + \ aws_alb_target_group + \ aws_alb_target_group_attachment + \ aws_ami + \ aws_ami_copy + \ aws_ami_from_instance + \ aws_ami_launch_permission + \ aws_api_gateway_account + \ aws_api_gateway_api_key + \ aws_api_gateway_authorizer + \ aws_api_gateway_base_path_mapping + \ aws_api_gateway_client_certificate + \ aws_api_gateway_deployment + \ aws_api_gateway_domain_name + \ aws_api_gateway_integration + \ aws_api_gateway_integration_response + \ aws_api_gateway_method + \ aws_api_gateway_method_response + \ aws_api_gateway_model + \ aws_api_gateway_resource + \ aws_api_gateway_rest_api + \ aws_app_cookie_stickiness_policy + \ aws_appautoscaling_policy + \ aws_appautoscaling_target + \ aws_autoscaling_attachment + \ aws_autoscaling_group + \ aws_autoscaling_lifecycle_hook + \ aws_autoscaling_notification + \ aws_autoscaling_policy + \ aws_autoscaling_schedule + \ aws_cloudformation_stack + \ aws_cloudfront_distribution + \ aws_cloudfront_origin_access_identity + \ aws_cloudtrail + \ aws_cloudwatch_event_rule + \ aws_cloudwatch_event_target + \ aws_cloudwatch_log_group + \ aws_cloudwatch_log_metric_filter + \ aws_cloudwatch_log_stream + \ aws_cloudwatch_log_subscription_filter + \ aws_cloudwatch_metric_alarm + \ aws_codecommit_repository + \ aws_codecommit_trigger + \ aws_codedeploy_app + \ aws_codedeploy_deployment_config + \ aws_codedeploy_deployment_group + \ aws_customer_gateway + \ aws_db_event_subscription + \ aws_db_instance + \ aws_db_option_group + \ aws_db_parameter_group + \ aws_db_security_group + \ aws_db_subnet_group + \ aws_default_network_acl + \ aws_default_route_table + \ aws_default_security_group + \ aws_directory_service_directory + \ aws_dynamodb_table + \ aws_ebs_snapshot + \ aws_ebs_volume + \ aws_ecr_repository + \ aws_ecr_repository_policy + \ aws_ecs_cluster + \ aws_ecs_service + \ aws_ecs_task_definition + \ aws_efs_file_system + \ aws_efs_mount_target + \ aws_eip + \ aws_eip_association + \ aws_elastic_beanstalk_application + \ aws_elastic_beanstalk_configuration_template + \ aws_elastic_beanstalk_environment + \ aws_elasticache_cluster + \ aws_elasticache_parameter_group + \ aws_elasticache_replication_group + \ aws_elasticache_security_group + \ aws_elasticache_subnet_group + \ aws_elasticsearch_domain + \ aws_elastictranscoder_pipeline + \ aws_elastictranscoder_preset + \ aws_elb + \ aws_elb_attachment + \ aws_emr_cluster + \ aws_emr_instance_group + \ aws_flow_log + \ aws_glacier_vault + \ aws_iam_access_key + \ aws_iam_account_password_policy + \ aws_iam_group + \ aws_iam_group_membership + \ aws_iam_group_policy + \ aws_iam_group_policy_attachment + \ aws_iam_instance_profile + \ aws_iam_policy + \ aws_iam_policy_attachment + \ aws_iam_role + \ aws_iam_role_policy + \ aws_iam_role_policy_attachment + \ aws_iam_saml_provider + \ aws_iam_server_certificate + \ aws_iam_user + \ aws_iam_user_login_profile + \ aws_iam_user_policy + \ aws_iam_user_policy_attachment + \ aws_iam_user_ssh_key + \ aws_instance + \ aws_internet_gateway + \ aws_key_pair + \ aws_kinesis_firehose_delivery_stream + \ aws_kinesis_stream + \ aws_kms_alias + \ aws_kms_key + \ aws_lambda_alias + \ aws_lambda_event_source_mapping + \ aws_lambda_function + \ aws_lambda_permission + \ aws_launch_configuration + \ aws_lb_cookie_stickiness_policy + \ aws_lb_ssl_negotiation_policy + \ aws_lightsail_domain + \ aws_lightsail_instance + \ aws_lightsail_key_pair + \ aws_load_balancer_backend_server_policy + \ aws_load_balancer_listener_policy + \ aws_load_balancer_policy + \ aws_main_route_table_association + \ aws_nat_gateway + \ aws_network_acl + \ aws_network_acl_rule + \ aws_network_interface + \ aws_opsworks_application + \ aws_opsworks_custom_layer + \ aws_opsworks_ganglia_layer + \ aws_opsworks_haproxy_layer + \ aws_opsworks_instance + \ aws_opsworks_java_app_layer + \ aws_opsworks_memcached_layer + \ aws_opsworks_mysql_layer + \ aws_opsworks_nodejs_app_layer + \ aws_opsworks_permission + \ aws_opsworks_php_app_layer + \ aws_opsworks_rails_app_layer + \ aws_opsworks_rds_db_instance + \ aws_opsworks_stack + \ aws_opsworks_static_web_layer + \ aws_opsworks_user_profile + \ aws_placement_group + \ aws_proxy_protocol_policy + \ aws_rds_cluster + \ aws_rds_cluster_instance + \ aws_rds_cluster_parameter_group + \ aws_redshift_cluster + \ aws_redshift_parameter_group + \ aws_redshift_security_group + \ aws_redshift_subnet_group + \ aws_route + \ aws_route53_delegation_set + \ aws_route53_health_check + \ aws_route53_record + \ aws_route53_zone + \ aws_route53_zone_association + \ aws_route_table + \ aws_route_table_association + \ aws_s3_bucket + \ aws_s3_bucket_notification + \ aws_s3_bucket_object + \ aws_s3_bucket_policy + \ aws_security_group + \ aws_security_group_rule + \ aws_ses_active_receipt_rule_set + \ aws_ses_configuration_set + \ aws_ses_event_destination + \ aws_ses_receipt_filter + \ aws_ses_receipt_rule + \ aws_ses_receipt_rule_set + \ aws_simpledb_domain + \ aws_snapshot_create_volume_permission + \ aws_sns_topic + \ aws_sns_topic_policy + \ aws_sns_topic_subscription + \ aws_spot_datafeed_subscription + \ aws_spot_fleet_request + \ aws_spot_instance_request + \ aws_sqs_queue + \ aws_sqs_queue_policy + \ aws_ssm_activation + \ aws_ssm_association + \ aws_ssm_document + \ aws_subnet + \ aws_volume_attachment + \ aws_vpc + \ aws_vpc_dhcp_options + \ aws_vpc_dhcp_options_association + \ aws_vpc_endpoint + \ aws_vpc_endpoint_route_table_association + \ aws_vpc_peering_connection + \ aws_vpn_connection + \ aws_vpn_connection_route + \ aws_vpn_gateway + \ aws_vpn_gateway_attachment + \ aws_waf_byte_match_set + \ aws_waf_ipset + \ aws_waf_rule + \ aws_waf_size_constraint_set + \ aws_waf_sql_injection_match_set + \ aws_waf_web_acl + \ aws_waf_xss_match_set + \ azure_affinity_group + \ azure_data_disk + \ azure_dns_server + \ azure_hosted_service + \ azure_instance + \ azure_local_network_connection + \ azure_security_group + \ azure_security_group_rule + \ azure_sql_database_server + \ azure_sql_database_server_firewall_rule + \ azure_sql_database_service + \ azure_storage_blob + \ azure_storage_container + \ azure_storage_queue + \ azure_storage_service + \ azure_virtual_network + \ azurerm_availability_set + \ azurerm_cdn_endpoint + \ azurerm_cdn_profile + \ azurerm_container_registry + \ azurerm_dns_a_record + \ azurerm_dns_aaaa_record + \ azurerm_dns_cname_record + \ azurerm_dns_mx_record + \ azurerm_dns_ns_record + \ azurerm_dns_srv_record + \ azurerm_dns_txt_record + \ azurerm_dns_zone + \ azurerm_eventhub + \ azurerm_eventhub_authorization_rule + \ azurerm_eventhub_consumer_group + \ azurerm_eventhub_namespace + \ azurerm_key_vault + \ azurerm_lb + \ azurerm_lb_backend_address_pool + \ azurerm_lb_nat_pool + \ azurerm_lb_nat_rule + \ azurerm_lb_probe + \ azurerm_lb_rule + \ azurerm_local_network_gateway + \ azurerm_network_interface + \ azurerm_network_security_group + \ azurerm_network_security_rule + \ azurerm_public_ip + \ azurerm_redis_cache + \ azurerm_resource_group + \ azurerm_route + \ azurerm_route_table + \ azurerm_search_service + \ azurerm_servicebus_namespace + \ azurerm_servicebus_subscription + \ azurerm_servicebus_topic + \ azurerm_sql_database + \ azurerm_sql_firewall_rule + \ azurerm_sql_server + \ azurerm_storage_account + \ azurerm_storage_blob + \ azurerm_storage_container + \ azurerm_storage_queue + \ azurerm_storage_share + \ azurerm_storage_table + \ azurerm_subnet + \ azurerm_template_deployment + \ azurerm_traffic_manager_endpoint + \ azurerm_traffic_manager_profile + \ azurerm_virtual_machine + \ azurerm_virtual_machine_extension + \ azurerm_virtual_machine_scale_set + \ azurerm_virtual_network + \ azurerm_virtual_network_peering + \ bitbucket_default_reviewers + \ bitbucket_hook + \ bitbucket_repository + \ chef_acl + \ chef_client + \ chef_cookbook + \ chef_data_bag + \ chef_data_bag_item + \ chef_environment + \ chef_node + \ chef_role + \ clc_group + \ clc_load_balancer + \ clc_load_balancer_pool + \ clc_public_ip + \ clc_server + \ cloudflare_record + \ cloudstack_affinity_group + \ cloudstack_disk + \ cloudstack_egress_firewall + \ cloudstack_firewall + \ cloudstack_instance + \ cloudstack_ipaddress + \ cloudstack_loadbalancer_rule + \ cloudstack_network + \ cloudstack_network_acl + \ cloudstack_network_acl_rule + \ cloudstack_nic + \ cloudstack_port_forward + \ cloudstack_private_gateway + \ cloudstack_secondary_ipaddress + \ cloudstack_security_group + \ cloudstack_security_group_rule + \ cloudstack_ssh_keypair + \ cloudstack_static_nat + \ cloudstack_static_route + \ cloudstack_template + \ cloudstack_vpc + \ cloudstack_vpn_connection + \ cloudstack_vpn_customer_gateway + \ cloudstack_vpn_gateway + \ cobbler_distro + \ cobbler_kickstart_file + \ cobbler_profile + \ cobbler_snippet + \ cobbler_system + \ consul_agent_service + \ consul_catalog_entry + \ consul_key_prefix + \ consul_keys + \ consul_node + \ consul_prepared_query + \ consul_service + \ datadog_monitor + \ datadog_timeboard + \ digitalocean_domain + \ digitalocean_droplet + \ digitalocean_floating_ip + \ digitalocean_record + \ digitalocean_ssh_key + \ digitalocean_tag + \ digitalocean_volume + \ dme_record + \ dnsimple_record + \ docker_container + \ docker_image + \ docker_network + \ docker_volume + \ dyn_record + \ fastly_service_v1 + \ github_issue_label + \ github_membership + \ github_repository + \ github_repository_collaborator + \ github_team + \ github_team_membership + \ github_team_repository + \ google_compute_address + \ google_compute_autoscaler + \ google_compute_backend_service + \ google_compute_disk + \ google_compute_firewall + \ google_compute_forwarding_rule + \ google_compute_global_address + \ google_compute_global_forwarding_rule + \ google_compute_health_check + \ google_compute_http_health_check + \ google_compute_https_health_check + \ google_compute_image + \ google_compute_instance + \ google_compute_instance_group + \ google_compute_instance_group_manager + \ google_compute_instance_template + \ google_compute_network + \ google_compute_project_metadata + \ google_compute_region_backend_service + \ google_compute_route + \ google_compute_ssl_certificate + \ google_compute_subnetwork + \ google_compute_target_http_proxy + \ google_compute_target_https_proxy + \ google_compute_target_pool + \ google_compute_url_map + \ google_compute_vpn_gateway + \ google_compute_vpn_tunnel + \ google_container_cluster + \ google_dns_managed_zone + \ google_dns_record_set + \ google_project + \ google_pubsub_subscription + \ google_pubsub_topic + \ google_service_account + \ google_sql_database + \ google_sql_database_instance + \ google_sql_user + \ google_storage_bucket + \ google_storage_bucket_acl + \ google_storage_bucket_object + \ google_storage_object_acl + \ heroku_addon + \ heroku_app + \ heroku_cert + \ heroku_domain + \ heroku_drain + \ icinga2_checkcommand + \ icinga2_host + \ icinga2_hostgroup + \ icinga2_service + \ ignition_config + \ ignition_disk + \ ignition_file + \ ignition_filesystem + \ ignition_group + \ ignition_networkd_unit + \ ignition_raid + \ ignition_systemd_unit + \ ignition_user + \ influxdb_continuous_query + \ influxdb_database + \ influxdb_user + \ librato_alert + \ librato_service + \ librato_space + \ librato_space_chart + \ logentries_log + \ logentries_logset + \ mailgun_domain + \ mysql_database + \ mysql_grant + \ mysql_user + \ newrelic_alert_channel + \ newrelic_alert_condition + \ newrelic_alert_policy + \ newrelic_alert_policy_channel + \ nomad_job + \ null_resource + \ openstack_blockstorage_volume_attach_v2 + \ openstack_blockstorage_volume_v1 + \ openstack_blockstorage_volume_v2 + \ openstack_compute_floatingip_v2 + \ openstack_compute_instance_v2 + \ openstack_compute_keypair_v2 + \ openstack_compute_secgroup_v2 + \ openstack_compute_servergroup_v2 + \ openstack_compute_volume_attach_v2 + \ openstack_fw_firewall_v1 + \ openstack_fw_policy_v1 + \ openstack_fw_rule_v1 + \ openstack_lb_listener_v2 + \ openstack_lb_loadbalancer_v2 + \ openstack_lb_member_v1 + \ openstack_lb_member_v2 + \ openstack_lb_monitor_v1 + \ openstack_lb_monitor_v2 + \ openstack_lb_pool_v1 + \ openstack_lb_pool_v2 + \ openstack_lb_vip_v1 + \ openstack_networking_floatingip_v2 + \ openstack_networking_network_v2 + \ openstack_networking_port_v2 + \ openstack_networking_router_interface_v2 + \ openstack_networking_router_route_v2 + \ openstack_networking_router_v2 + \ openstack_networking_secgroup_rule_v2 + \ openstack_networking_secgroup_v2 + \ openstack_networking_subnet_v2 + \ openstack_objectstorage_container_v1 + \ opsgenie_team + \ opsgenie_user + \ packet_device + \ packet_project + \ packet_ssh_key + \ packet_volume + \ pagerduty_escalation_policy + \ pagerduty_schedule + \ pagerduty_service + \ pagerduty_service_integration + \ pagerduty_team + \ pagerduty_user + \ postgresql_database + \ postgresql_extension + \ postgresql_role + \ postgresql_schema + \ powerdns_record + \ rabbitmq_binding + \ rabbitmq_exchange + \ rabbitmq_permissions + \ rabbitmq_policy + \ rabbitmq_queue + \ rabbitmq_user + \ rabbitmq_vhost + \ rancher_environment + \ rancher_registration_token + \ rancher_registry + \ rancher_registry_credential + \ rancher_stack + \ random_id + \ random_shuffle + \ rundeck_job + \ rundeck_private_key + \ rundeck_project + \ rundeck_public_key + \ scaleway_ip + \ scaleway_security_group + \ scaleway_security_group_rule + \ scaleway_server + \ scaleway_volume + \ scaleway_volume_attachment + \ softlayer_ssh_key + \ softlayer_virtual_guest + \ statuscake_test + \ tls_cert_request + \ tls_locally_signed_cert + \ tls_private_key + \ tls_self_signed_cert + \ triton_fabric + \ triton_firewall_rule + \ triton_key + \ triton_machine + \ triton_vlan + \ ultradns_dirpool + \ ultradns_probe_http + \ ultradns_probe_ping + \ ultradns_record + \ ultradns_tcpool + \ vcd_dnat + \ vcd_firewall_rules + \ vcd_network + \ vcd_snat + \ vcd_vapp + \ vsphere_file + \ vsphere_folder + \ vsphere_virtual_disk + \ vsphere_virtual_machine +""" end resources + +syn keyword terraTodo contained TODO FIXME XXX BUG +syn cluster terraCommentGroup contains=terraTodo +syn region terraComment start="/\*" end="\*/" contains=@terraCommentGroup,@Spell +syn region terraComment start="#" end="$" contains=@terraCommentGroup,@Spell +syn region terraComment start="//" end="$" contains=@terraCommentGroup,@Spell + +syn match terraResource /\<resource\>/ nextgroup=terraResourceTypeStr skipwhite +syn region terraResourceTypeStr start=/"/ end=/"/ contains=terraResourceTypeBI + \ nextgroup=terraResourceName skipwhite +syn region terraResourceName start=/"/ end=/"/ + \ nextgroup=terraResourceBlock skipwhite + +syn match terraData /\<data\>/ nextgroup=terraDataTypeStr skipwhite +syn region terraDataTypeStr start=/"/ end=/"/ contains=terraDataTypeBI + \ nextgroup=terraDataName skipwhite +syn region terraDataName start=/"/ end=/"/ + \ nextgroup=terraDataBlock skipwhite + +""" provider +syn match terraProvider /\<provider\>/ nextgroup=terraProviderName skipwhite +syn region terraProviderName start=/"/ end=/"/ nextgroup=terraProviderBlock skipwhite + +""" provisioner +syn match terraProvisioner /\<provisioner\>/ nextgroup=terraProvisionerName skipwhite +syn region terraProvisionerName start=/"/ end=/"/ nextgroup=terraProvisionerBlock skipwhite + +""" module +syn match terraModule /\<module\>/ nextgroup=terraModuleName skipwhite +syn region terraModuleName start=/"/ end=/"/ nextgroup=terraModuleBlock skipwhite + +""" misc. +syn match terraValueDec "\<[0-9]\+\([kKmMgG]b\?\)\?\>" +syn match terraValueHexaDec "\<0x[0-9a-f]\+\([kKmMgG]b\?\)\?\>" +syn match terraBraces "[{}\[\]]" + +""" skip \" in strings. +""" we may also want to pass \\" into a function to escape quotes. +syn region terraValueString start=/"/ skip=/\\\+"/ end=/"/ contains=terraStringInterp +syn region terraStringInterp matchgroup=terraBrackets start=/\${/ end=/}/ contains=terraValueFunction contained +"" TODO match keywords here, not a-z+ +syn region terraValueFunction matchgroup=terraBrackets start=/[a-z]\+(/ end=/)/ contains=terraValueString,terraValueFunction contained + +hi def link terraComment Comment +hi def link terraTodo Todo +hi def link terraBrackets Operator +hi def link terraProvider Structure +hi def link terraBraces Delimiter +hi def link terraProviderName String +hi def link terraResource Structure +hi def link terraResourceName String +hi def link terraResourceTypeBI Tag +hi def link terraResourceTypeStr String +hi def link terraData Structure +hi def link terraDataName String +hi def link terraDataTypeBI Tag +hi def link terraDataTypeStr String +hi def link terraSection Structure +hi def link terraStringInterp Identifier +hi def link terraValueBool Boolean +hi def link terraValueDec Number +hi def link terraValueHexaDec Number +hi def link terraValueString String +hi def link terraProvisioner Structure +hi def link terraProvisionerName String +hi def link terraModule Structure +hi def link terraModuleName String +hi def link terraValueFunction Identifier + +let b:current_syntax = "terraform" + +endif |