Full Code of cloudfoundry/bosh-bootloader for AI

main 489cb2be8751 cached
3492 files
55.3 MB
14.7M tokens
177928 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (58,805K chars total). Download the full file to get everything.
Repository: cloudfoundry/bosh-bootloader
Branch: main
Commit: 489cb2be8751
Files: 3492
Total size: 55.3 MB

Directory structure:
gitextract_lkwd3cnd/

├── .adr-dir
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       └── go.yml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── acceptance-tests/
│   ├── actors/
│   │   ├── aws.go
│   │   ├── azure.go
│   │   ├── bbl.go
│   │   ├── boshcli.go
│   │   ├── cloudstack.go
│   │   ├── gcp.go
│   │   ├── iaas_helper.go
│   │   ├── openstack.go
│   │   └── vsphere.go
│   ├── bbl/
│   │   ├── init_test.go
│   │   ├── latest_error_test.go
│   │   ├── plan_test.go
│   │   ├── print_env_test.go
│   │   ├── ssh_linux_test.go
│   │   ├── up_and_down_test.go
│   │   └── upgrade_test.go
│   ├── config.go
│   ├── no-iaas/
│   │   ├── flags_error_test.go
│   │   ├── help_test.go
│   │   ├── init_test.go
│   │   ├── state_query_test.go
│   │   └── version_test.go
│   ├── state.go
│   └── vm_extensions.go
├── application/
│   ├── app.go
│   ├── app_test.go
│   ├── configuration.go
│   ├── configuration_test.go
│   ├── init_test.go
│   ├── logger.go
│   ├── logger_test.go
│   ├── state_validator.go
│   └── state_validator_test.go
├── aws/
│   ├── client.go
│   ├── client_test.go
│   ├── exports_test.go
│   └── init_test.go
├── azure/
│   ├── azure_suite_test.go
│   ├── client.go
│   ├── client_provider.go
│   ├── client_test.go
│   ├── client_wrappers.go
│   └── export_test.go
├── backends/
│   └── backend.go
├── bbl/
│   └── main.go
├── bosh/
│   ├── all_proxy_getter.go
│   ├── all_proxy_getter_test.go
│   ├── assets/
│   │   ├── bosh-deployment/
│   │   │   ├── LICENSE
│   │   │   └── vsphere/
│   │   │       └── cpi.yml
│   │   └── jumpbox-deployment/
│   │       ├── aws/
│   │       │   └── cpi.yml
│   │       ├── azure/
│   │       │   └── cpi.yml
│   │       └── no-external-ip.yml
│   ├── authenticated_cli.go
│   ├── cidr_block.go
│   ├── cidr_block_test.go
│   ├── cli.go
│   ├── cli_provider.go
│   ├── cli_provider_test.go
│   ├── config_updater.go
│   ├── config_updater_test.go
│   ├── credhub_getter.go
│   ├── credhub_getter_test.go
│   ├── deployment_vars_yaml.go
│   ├── deployments/
│   │   ├── .gitignore
│   │   └── README.md
│   ├── executor.go
│   ├── executor_test.go
│   ├── exports_test.go
│   ├── fixtures/
│   │   ├── some-cert.crt
│   │   ├── some-cert.key
│   │   └── some-fake-ca.crt
│   ├── init_test.go
│   ├── ip.go
│   ├── ip_test.go
│   ├── manager.go
│   ├── manager_create_error.go
│   ├── manager_delete_error.go
│   ├── manager_test.go
│   ├── ops.go
│   ├── ssh_key_deleter.go
│   ├── ssh_key_deleter_test.go
│   ├── ssh_key_getter.go
│   ├── ssh_key_getter_test.go
│   └── version_error.go
├── certs/
│   ├── fixtures/
│   │   ├── pkcs8.crt
│   │   └── pkcs8.key
│   ├── init_test.go
│   ├── validator.go
│   └── validator_test.go
├── ci/
│   ├── configure.sh
│   ├── dockerfiles/
│   │   └── deployment/
│   │       └── Dockerfile
│   ├── ops-files/
│   │   ├── concourse-gcp-spot.yml
│   │   └── replace-n1-machine-types.yml
│   ├── pipelines/
│   │   ├── README.md
│   │   └── bosh-bootloader.yml
│   └── tasks/
│       ├── acceptance/
│       │   ├── task
│       │   └── task.yml
│       ├── bbl-up-concourse/
│       │   ├── task
│       │   └── task.yml
│       ├── build-bbl-docs/
│       │   ├── task
│       │   └── task.yml
│       ├── build-release/
│       │   ├── task
│       │   └── task.yml
│       ├── bump-brew-tap/
│       │   ├── task
│       │   └── task.yml
│       ├── bump-deployments/
│       │   ├── task
│       │   └── task.yml
│       ├── create-bosh-deployment-source-file/
│       │   ├── source-template.yml
│       │   ├── task
│       │   └── task.yml
│       ├── download-terraform/
│       │   ├── task
│       │   └── task.yml
│       ├── generate-version-from-sha/
│       │   ├── task
│       │   └── task.yml
│       ├── get-concourse-test-vars/
│       │   ├── task
│       │   └── task.yml
│       ├── leftovers/
│       │   ├── task
│       │   └── task.yml
│       ├── merge-bump-deployments-change/
│       │   ├── task
│       │   └── task.yml
│       ├── prepare-docker-workspace/
│       │   └── task.yml
│       ├── setup-github-release/
│       │   ├── task
│       │   └── task.yml
│       ├── test-bosh-bootloader/
│       │   ├── task
│       │   └── task.yml
│       └── test-bosh-ssh/
│           ├── task
│           └── task.yml
├── cloudconfig/
│   ├── aws/
│   │   ├── base_ops_template.go
│   │   ├── exports_test.go
│   │   ├── fixtures/
│   │   │   ├── aws-concourse-lb-ops.yml
│   │   │   ├── aws-ops.yml
│   │   │   └── terraform-aws-cf-lb-ops.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── azure/
│   │   ├── base_ops_template.go
│   │   ├── exports_test.go
│   │   ├── fixtures/
│   │   │   └── azure-ops.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── cloud_config_templates.go
│   ├── cloudstack/
│   │   ├── base_ops_template.go
│   │   ├── fixtures/
│   │   │   ├── iso-segment.yml
│   │   │   └── ops-file.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── fixtures/
│   │   └── base-cloud-config.yml
│   ├── gcp/
│   │   ├── base_ops_template.go
│   │   ├── exports_test.go
│   │   ├── fixtures/
│   │   │   ├── gcp-cf-lb-ops.yml
│   │   │   ├── gcp-concourse-lb-ops.yml
│   │   │   └── gcp-ops.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── init_test.go
│   ├── manager.go
│   ├── manager_test.go
│   ├── openstack/
│   │   ├── base_ops_template.go
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   └── vsphere/
│       ├── base_ops_template.go
│       ├── init_test.go
│       ├── ops_generator.go
│       └── ops_generator_test.go
├── commands/
│   ├── aws_lbs.go
│   ├── aws_lbs_test.go
│   ├── azure_lbs.go
│   ├── azure_lbs_test.go
│   ├── cleanup_leftovers.go
│   ├── cleanup_leftovers_test.go
│   ├── command.go
│   ├── commands_usage.go
│   ├── commands_usage_test.go
│   ├── destroy.go
│   ├── destroy_test.go
│   ├── fail_fast_bosh_version.go
│   ├── fixtures/
│   │   └── terraform_template_no_lb.tf
│   ├── gcp_lbs.go
│   ├── gcp_lbs_test.go
│   ├── global_flags.go
│   ├── helpers.go
│   ├── init_test.go
│   ├── interfaces.go
│   ├── latest_error.go
│   ├── latest_error_test.go
│   ├── lb_args_handler.go
│   ├── lb_args_handler_test.go
│   ├── lbs.go
│   ├── lbs_test.go
│   ├── outputs.go
│   ├── outputs_test.go
│   ├── plan.go
│   ├── plan_test.go
│   ├── print_env.go
│   ├── print_env_test.go
│   ├── rotate.go
│   ├── rotate_test.go
│   ├── ssh.go
│   ├── ssh_key.go
│   ├── ssh_key_test.go
│   ├── ssh_test.go
│   ├── state_query.go
│   ├── state_query_test.go
│   ├── up.go
│   ├── up_test.go
│   ├── usage.go
│   ├── usage_test.go
│   ├── validate.go
│   ├── validate_test.go
│   ├── version.go
│   └── version_test.go
├── config/
│   ├── bosh_path.go
│   ├── bosh_path_test.go
│   ├── downloader.go
│   ├── fixtures/
│   │   └── bbl-state.tgz
│   ├── gcp_zoner_hack.go
│   ├── gcp_zoner_hack_test.go
│   ├── global_flags.go
│   ├── init_test.go
│   ├── load_state.go
│   ├── load_state_test.go
│   ├── merger.go
│   └── validate_iaas.go
├── deployment-versions.txt
├── dockerfiles/
│   └── cf-deployment-concourse-tasks-bbl-dev/
│       └── Dockerfile
├── docs/
│   ├── advanced-configuration.md
│   ├── architecture/
│   │   └── decisions/
│   │       ├── 0001-record-architecture-decisions.md
│   │       ├── 0002-replace-go-bindata-with-packr2.md
│   │       └── 0003-replace-packr2-with-go-embed.md
│   ├── cf-lbs.md
│   ├── cleaning-up.md
│   ├── cloudfoundry.md
│   ├── concourse.md
│   ├── credhub.md
│   ├── customization.md
│   ├── getting-started-aws.md
│   ├── getting-started-azure.md
│   ├── getting-started-cloudstack.md
│   ├── getting-started-gcp.md
│   ├── getting-started-openstack.md
│   ├── getting-started-vsphere.md
│   ├── howto-backup-restore.md
│   ├── howto-ssh.md
│   ├── howto-target-bosh-director.md
│   ├── index.md
│   ├── known-issues.md
│   └── upgrade.md
├── fakes/
│   ├── all_proxy_getter.go
│   ├── aws_client.go
│   ├── aws_client_provider.go
│   ├── aws_ec2_client.go
│   ├── aws_route53_client.go
│   ├── azure_groups_client.go
│   ├── azure_vms_client.go
│   ├── bosh_cli.go
│   ├── bosh_cli_provider.go
│   ├── bosh_config_updater.go
│   ├── bosh_executor.go
│   ├── bosh_manager.go
│   ├── certificate_deleter.go
│   ├── certificate_validator.go
│   ├── cloud_config_manager.go
│   ├── cloud_config_ops_generator.go
│   ├── command.go
│   ├── config_merger.go
│   ├── credhub_getter.go
│   ├── delete_lbs.go
│   ├── dialer.go
│   ├── dir_provider.go
│   ├── downloader.go
│   ├── env_getter.go
│   ├── env_id_generator.go
│   ├── env_id_manager.go
│   ├── environment_validator.go
│   ├── executable.go
│   ├── fancy_ssh_key_getter.go
│   ├── file_info.go
│   ├── file_io.go
│   ├── filtered_deleter.go
│   ├── garbage_collector.go
│   ├── gcp_client.go
│   ├── gcp_client_provider.go
│   ├── gcp_compute_client.go
│   ├── guid_generator.go
│   ├── host_key_getter.go
│   ├── input_generator.go
│   ├── lb_args_handler.go
│   ├── lbs.go
│   ├── logger.go
│   ├── network_client.go
│   ├── network_deletion_validator.go
│   ├── network_instances_checker.go
│   ├── patch_detector.go
│   ├── path_finder.go
│   ├── plan.go
│   ├── random_port.go
│   ├── reader.go
│   ├── runtime_config_manager.go
│   ├── socks5_proxy.go
│   ├── ssh_cli.go
│   ├── ssh_key_deleter.go
│   ├── ssh_key_getter.go
│   ├── state_bootstrap.go
│   ├── state_migrator.go
│   ├── state_store.go
│   ├── state_validator.go
│   ├── template_generator.go
│   ├── terraform_cli.go
│   ├── terraform_executor.go
│   ├── terraform_manager.go
│   ├── up.go
│   ├── up_cmd.go
│   ├── usage.go
│   ├── uuid_generator.go
│   ├── vpc_status_checker.go
│   └── zone_getter.go
├── fileio/
│   └── file_io.go
├── flags/
│   ├── flags.go
│   ├── flags_test.go
│   └── init_test.go
├── gcp/
│   ├── client.go
│   ├── client_provider.go
│   ├── client_provider_test.go
│   ├── client_test.go
│   ├── compute_client.go
│   ├── export_test.go
│   ├── fixtures/
│   │   └── service-account-key
│   └── init_test.go
├── go.mod
├── go.sum
├── helpers/
│   ├── env_getter.go
│   ├── env_id_generator.go
│   ├── env_id_generator_test.go
│   ├── env_id_manager.go
│   ├── env_id_manager_test.go
│   ├── errors.go
│   ├── errors_test.go
│   ├── exports_test.go
│   ├── init_test.go
│   ├── path_finder.go
│   └── path_finder_test.go
├── mkdocs.yml
├── plan-patches/
│   ├── 1-az-aws/
│   │   ├── PATCH.md
│   │   └── vars/
│   │       └── zone.tfvars
│   ├── README.md
│   ├── acm-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       ├── cert_override.tf
│   │       ├── dns_override.tf
│   │       └── lb_override.tf
│   ├── alb-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── lb-ops.yml
│   │   └── terraform/
│   │       └── cf-lb_override.tf
│   ├── bosh-lite-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── cloud-confg.yml
│   │   ├── create-director-override.sh
│   │   ├── delete-director-override.sh
│   │   └── terraform/
│   │       └── bosh-lite_override.tf
│   ├── bosh-lite-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── bosh-lite.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── external-ip-gcp.yml
│   │   ├── ip-forwarding.yml
│   │   └── terraform/
│   │       └── bosh-lite.tf
│   ├── byobastion-gcp/
│   │   ├── README.md
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── terraform/
│   │   │   └── bastion_override.tf
│   │   └── vars/
│   │       └── bastion.tfvars
│   ├── byoresource-group-azure/
│   │   ├── README.md
│   │   ├── terraform/
│   │   │   └── resource_group_override.tf
│   │   └── vars/
│   │       └── existing-resource-group.tfvars
│   ├── cf-azure/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   ├── better-compiler.yml
│   │   │   ├── cf-cloud-config-ops.yml
│   │   │   └── cf-subnet-ops.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── ops/
│   │   │   ├── jumpbox-use-managed-disk.yml
│   │   │   ├── rename-network-and-deployment.yml
│   │   │   ├── scale-to-one-az.yml
│   │   │   ├── small-vm.yml
│   │   │   ├── use-cf-resource-group.yml
│   │   │   └── use-cf-subnet.yml
│   │   └── terraform/
│   │       ├── cf_lb_override.tf
│   │       ├── cf_outputs_override.tf
│   │       ├── cf_resource_group_override.tf
│   │       ├── cf_sg_override.tf
│   │       ├── cf_storage_account.tf
│   │       └── cf_subnet.tf
│   ├── cf-lite-azure/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   ├── better-compiler.yml
│   │   │   ├── cf-cloud-config-ops.yml
│   │   │   └── cf-subnet-ops.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── ops/
│   │   │   ├── jumpbox-use-managed-disk.yml
│   │   │   ├── small-vm.yml
│   │   │   ├── use-cf-resource-group.yml
│   │   │   └── use-cf-subnet.yml
│   │   └── terraform/
│   │       ├── cf_lb_override.tf
│   │       ├── cf_outputs_override.tf
│   │       ├── cf_resource_group_override.tf
│   │       ├── cf_sg_override.tf
│   │       ├── cf_storage_account.tf
│   │       └── cf_subnet.tf
│   ├── cfcr-aws/
│   │   ├── README.md
│   │   ├── terraform/
│   │   │   ├── cfcr_dns_override.tf
│   │   │   ├── cfcr_iam_override.tf
│   │   │   ├── cfcr_lb_override.tf
│   │   │   └── cfcr_outputs_override.tf
│   │   └── vars/
│   │       └── cfcr.tfvars
│   ├── cfcr-azure/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   ├── better-compiler.yml
│   │   │   ├── cfcr-cloud-config-ops.yml
│   │   │   └── cfcr-subnet-ops.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── ops/
│   │   │   ├── cfcr-vm-extensions.yml
│   │   │   ├── cloud-provider.yml
│   │   │   ├── jumpbox-use-managed-disk.yml
│   │   │   ├── use-cfcr-subnet.yml
│   │   │   └── use-vm-extensions.yml
│   │   └── terraform/
│   │       ├── cfcr_lb_override.tf
│   │       ├── cfcr_outputs_override.tf
│   │       ├── cfcr_resource_group_override.tf
│   │       ├── cfcr_sg_override.tf
│   │       └── cfcr_subnet.tf
│   ├── cfcr-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── cfcr-cloud-config-ops.yml
│   │   └── terraform/
│   │       ├── cfcr_iam_override.tf
│   │       ├── cfcr_lb_override.tf
│   │       └── cfcr_outputs_override.tf
│   ├── cfcr-openstack/
│   │   ├── README.md
│   │   └── cloud-config/
│   │       └── cfcr-overrides.yml
│   ├── cfcr-vsphere/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── cfcr-overrides.yml
│   │   └── terraform/
│   │       └── outputs-override.tf
│   ├── colocate-gorouter-ssh-proxy-gcp/
│   │   ├── cloud-config/
│   │   │   └── colocated-gorouter-ssh-proxy.yml
│   │   └── terraform/
│   │       └── colocated-gorouter-ssh-proxy_override.tf
│   ├── credhub-lb-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── add_credhub_lb_target.yml
│   │   └── terraform/
│   │       └── credhub_lb.tf
│   ├── dns-delegation-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── aws_parent_ns.tf
│   ├── gcs-blobstore-gcp/
│   │   ├── README.md
│   │   └── terraform/
│   │       ├── gcs_blobstore_buckets_override.tf
│   │       ├── gcs_blobstore_iam_override.tf
│   │       └── gcs_blobstore_outputs_override.tf
│   ├── http2-lb-gcp/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── http2-cf-lb-gcp_override.tf
│   ├── iam-profile-aws/
│   │   ├── README.md
│   │   └── vars/
│   │       └── iam.tfvars
│   ├── iso-segs-aws/
│   │   ├── README.md
│   │   └── cloud-config/
│   │       └── iso-segs-ops.yml
│   ├── iso-segs-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── routing-iso-segs.yml
│   │   └── terraform/
│   │       └── routing-iso-segs.tf
│   ├── n-cf-gcp/
│   │   ├── README.md
│   │   ├── cf-lb-ops.yml
│   │   ├── cloud-config/
│   │   │   └── cf-lbs-ops-override.yml
│   │   ├── terraform/
│   │   │   ├── cf-dns_override.tf
│   │   │   └── cf-lb_override.tf
│   │   └── update-configs.sh
│   ├── nat-aws/
│   │   └── terraform/
│   │       └── nat_override.tf
│   ├── nat-per-az/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── nat-per-az_override.tf
│   ├── network-lb-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── http-and-ws-share-network-lb.yml
│   │   └── terraform/
│   │       └── network_lb_override.tf
│   ├── openvpn-aws/
│   │   ├── cloud-config/
│   │   │   └── openvpn_vip.yml
│   │   └── terraform/
│   │       └── openvpn_override.tf
│   ├── prometheus-lb-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── add_prometheus_lb_target.yml
│   │   └── terraform/
│   │       └── prometheus_lb.tf
│   ├── prometheus-lb-gcp/
│   │   ├── README.md
│   │   ├── add-nginx-network-properties.yml
│   │   ├── cloud-config/
│   │   │   └── add_prometheus_lb_target.yml
│   │   └── terraform/
│   │       └── prometheus-lb.tf
│   ├── restricted-instance-groups-gcp/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── restricted_instance_groups_override.tf
│   ├── s3-blobstore-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       ├── s3_blobstore_buckets.tf
│   │       ├── s3_blobstore_iam.tf
│   │       └── s3_blobstore_outputs.tf
│   ├── spot-gcp/
│   │   ├── README.md
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   └── ops/
│   │       └── spot.yml
│   ├── tf-backend-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── s3_backend_override.tf
│   └── tf-backend-gcp/
│       ├── README.md
│       └── terraform/
│           └── gcs_backend_override.tf
├── renderers/
│   ├── factory.go
│   ├── factory_test.go
│   ├── init_test.go
│   ├── posix.go
│   ├── posix_test.go
│   ├── powershell.go
│   ├── powershell_test.go
│   ├── renderer.go
│   ├── shell_types.go
│   ├── yaml.go
│   └── yaml_test.go
├── runtimeconfig/
│   ├── manager.go
│   ├── manager_test.go
│   └── runtimeconfig_suite_test.go
├── scripts/
│   ├── acceptance_tests
│   ├── build
│   ├── create_mod
│   ├── lint
│   ├── local_build
│   └── test
├── ssh/
│   ├── cli.go
│   └── random_port.go
├── storage/
│   ├── aws.go
│   ├── azure.go
│   ├── bootstrap.go
│   ├── bootstrap_test.go
│   ├── bosh.go
│   ├── cloudstack.go
│   ├── exports_test.go
│   ├── file_ownership.go
│   ├── fixtures/
│   │   ├── empty/
│   │   │   └── .gitkeep
│   │   ├── patched/
│   │   │   ├── UNRELATED_FILE.md
│   │   │   ├── bbl-ops-files/
│   │   │   │   └── gcp/
│   │   │   │       └── bosh-director-ephemeral-ip-ops.yml
│   │   │   ├── bosh-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── cloud-config/
│   │   │   │   ├── cloud-config.yml
│   │   │   │   ├── ops.yml
│   │   │   │   └── patch-cloud-config.yml
│   │   │   ├── create-director-override.sh
│   │   │   ├── create-director.sh
│   │   │   ├── create-jumpbox-override.sh
│   │   │   ├── create-jumpbox.sh
│   │   │   ├── delete-director-override.sh
│   │   │   ├── delete-director.sh
│   │   │   ├── delete-jumpbox-override.sh
│   │   │   ├── delete-jumpbox.sh
│   │   │   ├── jumpbox-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── terraform/
│   │   │   │   ├── bbl-template.tf
│   │   │   │   └── patched-terraform.tf
│   │   │   └── vars/
│   │   │       ├── bbl.tfvars
│   │   │       └── patched-vars.tfvars
│   │   ├── unpatched/
│   │   │   ├── bbl-ops-files/
│   │   │   │   └── gcp/
│   │   │   │       └── bosh-director-ephemeral-ip-ops.yml
│   │   │   ├── bosh-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── cloud-config/
│   │   │   │   ├── cloud-config.yml
│   │   │   │   └── ops.yml
│   │   │   ├── create-director.sh
│   │   │   ├── create-jumpbox.sh
│   │   │   ├── delete-director.sh
│   │   │   ├── delete-jumpbox.sh
│   │   │   ├── jumpbox-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── terraform/
│   │   │   │   └── bbl-template.tf
│   │   │   └── vars/
│   │   │       └── bbl.tfvars
│   │   └── upped/
│   │       ├── bbl-ops-files/
│   │       │   └── gcp/
│   │       │       └── bosh-director-ephemeral-ip-ops.yml
│   │       ├── bosh-deployment/
│   │       │   ├── .gitignore
│   │       │   ├── LICENSE
│   │       │   ├── NOTICE
│   │       │   ├── README.md
│   │       │   ├── aws/
│   │       │   │   ├── cli-iam-instance-profile.yml
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── encrypted-disk.yml
│   │       │   │   └── iam-instance-profile.yml
│   │       │   ├── azure/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── custom-environment.yml
│   │       │   │   └── use-managed-disks.yml
│   │       │   ├── bbr.yml
│   │       │   ├── bosh-lite-docker.yml
│   │       │   ├── bosh-lite-grootfs.yml
│   │       │   ├── bosh-lite-runc.yml
│   │       │   ├── bosh-lite.yml
│   │       │   ├── bosh.yml
│   │       │   ├── ci/
│   │       │   │   ├── bosh-alpha-compiled-releases/
│   │       │   │   │   ├── configure.sh
│   │       │   │   │   ├── pipeline.yml
│   │       │   │   │   └── tasks/
│   │       │   │   │       ├── build-release.sh
│   │       │   │   │       └── build-release.yml
│   │       │   │   └── compiled-releases/
│   │       │   │       ├── configure.sh
│   │       │   │       ├── pipeline-3363.yml
│   │       │   │       ├── pipeline-3421.yml
│   │       │   │       ├── pipeline-3445.yml
│   │       │   │       ├── pipeline-3468.yml
│   │       │   │       ├── pipeline-3541.yml
│   │       │   │       ├── pipeline-3586.yml
│   │       │   │       └── tasks/
│   │       │   │           ├── export-release.sh
│   │       │   │           └── export-release.yml
│   │       │   ├── credhub.yml
│   │       │   ├── docker/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── ipv6/
│   │       │   │   │   └── cpi.yml
│   │       │   │   └── unix-sock.yml
│   │       │   ├── docs/
│   │       │   │   ├── bosh-lite-on-vbox.md
│   │       │   │   └── jumpbox-user.md
│   │       │   ├── experimental/
│   │       │   │   ├── blobstore-https-bosh-lite.yml
│   │       │   │   ├── blobstore-https.yml
│   │       │   │   ├── bpm.yml
│   │       │   │   ├── db-enable-mutual-tls.yml
│   │       │   │   ├── db-enable-tls.yml
│   │       │   │   ├── db-gcp-postgres-connection-options.yml
│   │       │   │   ├── db-mysql-connection-options.yml
│   │       │   │   ├── db-postgres-connection-options.yml
│   │       │   │   ├── dns-addon-with-api-certificates.yml
│   │       │   │   ├── local-bosh-release-tarball.yml
│   │       │   │   └── ntp-agent-env.yml
│   │       │   ├── external-ip-not-recommended-uaa.yml
│   │       │   ├── external-ip-not-recommended.yml
│   │       │   ├── external-ip-with-registry-not-recommended.yml
│   │       │   ├── gcp/
│   │       │   │   ├── bosh-lite-vm-type.yml
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── gcs-blobstore.yml
│   │       │   │   └── service-account.yml
│   │       │   ├── hm/
│   │       │   │   ├── datadog.yml
│   │       │   │   └── disable.yml
│   │       │   ├── jumpbox-user.yml
│   │       │   ├── local-bosh-release-tarball.yml
│   │       │   ├── local-bosh-release.yml
│   │       │   ├── local-dns.yml
│   │       │   ├── misc/
│   │       │   │   ├── bosh-dev.yml
│   │       │   │   ├── config-server.yml
│   │       │   │   ├── cpi-secondary-registry.yml
│   │       │   │   ├── dns.yml
│   │       │   │   ├── external-db.yml
│   │       │   │   ├── external-ip-not-recommended/
│   │       │   │   │   └── mbus-only.yml
│   │       │   │   ├── ipv6/
│   │       │   │   │   ├── bosh.yml
│   │       │   │   │   ├── credhub.yml
│   │       │   │   │   └── uaa.yml
│   │       │   │   ├── nats-strict-tls.yml
│   │       │   │   ├── no-internet-access/
│   │       │   │   │   ├── credhub.yml
│   │       │   │   │   ├── stemcell.yml
│   │       │   │   │   ├── uaa.yml
│   │       │   │   │   └── vsphere-cpi.yml
│   │       │   │   ├── ntp.yml
│   │       │   │   ├── powerdns.yml
│   │       │   │   ├── proxy.yml
│   │       │   │   └── second-network.yml
│   │       │   ├── openstack/
│   │       │   │   ├── auto-anti-affinity.yml
│   │       │   │   ├── boot-from-volume.yml
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── custom-ca.yml
│   │       │   │   ├── disable-readable-vm-names.yml
│   │       │   │   ├── keystone-v2.yml
│   │       │   │   └── trusted-certs.yml
│   │       │   ├── runtime-configs/
│   │       │   │   ├── dns.yml
│   │       │   │   └── syslog.yml
│   │       │   ├── softlayer/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-dynamic.yml
│   │       │   │   └── cpi.yml
│   │       │   ├── syslog.yml
│   │       │   ├── tests/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── cred-test.yml
│   │       │   │   ├── run-checks.sh
│   │       │   │   └── run.sh
│   │       │   ├── turbulence.yml
│   │       │   ├── uaa.yml
│   │       │   ├── vcloud/
│   │       │   │   └── cpi.yml
│   │       │   ├── virtualbox/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── create-env.sh
│   │       │   │   ├── delete-env.sh
│   │       │   │   ├── internal-network.yml
│   │       │   │   ├── ipv6/
│   │       │   │   │   ├── cpi.yml
│   │       │   │   │   └── remote.yml
│   │       │   │   ├── outbound-network.yml
│   │       │   │   ├── remote.yml
│   │       │   │   └── remove-ntp.yml
│   │       │   ├── vsphere/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── resource-pool.yml
│   │       │   │   └── second-network.yml
│   │       │   └── warden/
│   │       │       ├── cloud-config.yml
│   │       │       ├── cpi-grootfs.yml
│   │       │       ├── cpi.yml
│   │       │       └── ignore-gateway.yml
│   │       ├── certs/
│   │       │   ├── fake.crt
│   │       │   ├── fake.csr
│   │       │   ├── fake.key
│   │       │   ├── fake_ca.crl
│   │       │   ├── fake_ca.crt
│   │       │   └── fake_ca.key
│   │       ├── cloud-config/
│   │       │   ├── cloud-config.yml
│   │       │   └── ops.yml
│   │       ├── create-director.sh
│   │       ├── create-jumpbox.sh
│   │       ├── delete-director.sh
│   │       ├── delete-jumpbox.sh
│   │       ├── jumpbox-deployment/
│   │       │   ├── .gitignore
│   │       │   ├── README.md
│   │       │   ├── aws/
│   │       │   │   └── cpi.yml
│   │       │   ├── azure/
│   │       │   │   └── cpi.yml
│   │       │   ├── gcp/
│   │       │   │   └── cpi.yml
│   │       │   ├── jumpbox.yml
│   │       │   ├── no-external-ip-registry.yml
│   │       │   ├── no-external-ip.yml
│   │       │   ├── openstack/
│   │       │   │   └── cpi.yml
│   │       │   ├── test.sh
│   │       │   └── vsphere/
│   │       │       ├── cpi.yml
│   │       │       └── resource-pool.yml
│   │       ├── terraform/
│   │       │   └── bbl-template.tf
│   │       └── vars/
│   │           ├── bbl.tfvars
│   │           ├── bosh-state.json
│   │           ├── cloud-config-vars.yml
│   │           ├── director-vars-file.yml
│   │           ├── director-vars-store.yml
│   │           ├── jumpbox-state.json
│   │           ├── jumpbox-vars-file.yml
│   │           ├── jumpbox-vars-store.yml
│   │           ├── terraform.tfstate
│   │           └── terraform.tfstate.backup
│   ├── garbage_collector.go
│   ├── garbage_collector_test.go
│   ├── gcp.go
│   ├── gcp_test.go
│   ├── init_test.go
│   ├── jumpbox.go
│   ├── jumpbox_test.go
│   ├── lb.go
│   ├── migrator.go
│   ├── migrator_test.go
│   ├── openstack.go
│   ├── patch_detector.go
│   ├── patch_detector_test.go
│   ├── permissions.go
│   ├── state.go
│   ├── store.go
│   ├── store_test.go
│   └── vsphere.go
├── terraform/
│   ├── aws/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── base.tf
│   │       ├── cf_dns.tf
│   │       ├── cf_lb.tf
│   │       ├── concourse_lb.tf
│   │       ├── iam.tf
│   │       ├── iso_segments.tf
│   │       ├── lb_subnet.tf
│   │       ├── ssl_certificate.tf
│   │       └── vpc.tf
│   ├── azure/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── cf_dns.tf
│   │       ├── cf_lb.tf
│   │       ├── concourse_lb.tf
│   │       ├── network.tf
│   │       ├── network_security_group.tf
│   │       ├── output.tf
│   │       ├── resource_group.tf
│   │       ├── storage.tf
│   │       ├── tls.tf
│   │       └── vars.tf
│   ├── binary_path.go
│   ├── binary_path_test.go
│   ├── cli.go
│   ├── cloudstack/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   └── templates/
│   │       ├── provider-vars.tf
│   │       ├── provider.tf
│   │       ├── resources-outputs.tf
│   │       ├── resources-vars.tf
│   │       └── resources.tf
│   ├── executor.go
│   ├── executor_test.go
│   ├── gcp/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── bosh_director.tf
│   │       ├── cf_dns.tf
│   │       ├── cf_lb.tf
│   │       ├── concourse_lb.tf
│   │       ├── jumpbox.tf
│   │       └── vars.tf
│   ├── init_test.go
│   ├── manager.go
│   ├── manager_test.go
│   ├── openstack/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── provider-vars.tf
│   │       ├── provider.tf
│   │       ├── resources-outputs.tf
│   │       ├── resources-vars.tf
│   │       └── resources.tf
│   ├── outputs.go
│   ├── outputs_test.go
│   ├── testassets/
│   │   ├── incorrect_mod_time/
│   │   │   ├── terraform
│   │   │   └── terraform-mod-time
│   │   ├── only_mod_time/
│   │   │   └── terraform-mod-time
│   │   ├── only_terraform/
│   │   │   └── terraform
│   │   └── success/
│   │       ├── terraform
│   │       └── terraform-mod-time
│   └── vsphere/
│       ├── init_test.go
│       ├── input_generator.go
│       ├── input_generator_test.go
│       └── template_generator.go
├── testhelpers/
│   ├── certificate_constants.go
│   └── temp_file_helpers.go
├── tools/
│   └── tools.go
└── vendor/
    ├── cloud.google.com/
    │   └── go/
    │       ├── AUTHORS
    │       ├── CONTRIBUTORS
    │       ├── LICENSE
    │       ├── compute/
    │       │   └── metadata/
    │       │       └── metadata.go
    │       ├── iam/
    │       │   └── iam.go
    │       ├── internal/
    │       │   ├── annotate.go
    │       │   ├── optional/
    │       │   │   └── optional.go
    │       │   ├── retry.go
    │       │   ├── trace/
    │       │   │   └── trace.go
    │       │   └── version/
    │       │       ├── update_version.sh
    │       │       └── version.go
    │       └── storage/
    │           ├── acl.go
    │           ├── bucket.go
    │           ├── copy.go
    │           ├── doc.go
    │           ├── go110.go
    │           ├── iam.go
    │           ├── invoke.go
    │           ├── not_go110.go
    │           ├── notifications.go
    │           ├── reader.go
    │           ├── storage.go
    │           ├── storage.replay
    │           └── writer.go
    ├── github.com/
    │   ├── Azure/
    │   │   ├── azure-sdk-for-go/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   ├── arm/
    │   │   │   │   └── resources/
    │   │   │   │       └── resources/
    │   │   │   │           ├── client.go
    │   │   │   │           ├── deploymentoperations.go
    │   │   │   │           ├── deployments.go
    │   │   │   │           ├── group.go
    │   │   │   │           ├── groups.go
    │   │   │   │           ├── models.go
    │   │   │   │           ├── providers.go
    │   │   │   │           ├── tags.go
    │   │   │   │           └── version.go
    │   │   │   └── sdk/
    │   │   │       ├── azcore/
    │   │   │       │   ├── CHANGELOG.md
    │   │   │       │   ├── LICENSE.txt
    │   │   │       │   ├── README.md
    │   │   │       │   ├── arm/
    │   │   │       │   │   ├── client.go
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   ├── internal/
    │   │   │       │   │   │   └── resource/
    │   │   │       │   │   │       ├── resource_identifier.go
    │   │   │       │   │   │       └── resource_type.go
    │   │   │       │   │   ├── policy/
    │   │   │       │   │   │   └── policy.go
    │   │   │       │   │   ├── resource_identifier.go
    │   │   │       │   │   ├── resource_type.go
    │   │   │       │   │   └── runtime/
    │   │   │       │   │       ├── pipeline.go
    │   │   │       │   │       ├── policy_bearer_token.go
    │   │   │       │   │       ├── policy_register_rp.go
    │   │   │       │   │       └── runtime.go
    │   │   │       │   ├── ci.yml
    │   │   │       │   ├── cloud/
    │   │   │       │   │   ├── cloud.go
    │   │   │       │   │   └── doc.go
    │   │   │       │   ├── core.go
    │   │   │       │   ├── doc.go
    │   │   │       │   ├── errors.go
    │   │   │       │   ├── etag.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   ├── exported/
    │   │   │       │   │   │   ├── exported.go
    │   │   │       │   │   │   ├── pipeline.go
    │   │   │       │   │   │   ├── request.go
    │   │   │       │   │   │   └── response_error.go
    │   │   │       │   │   ├── log/
    │   │   │       │   │   │   └── log.go
    │   │   │       │   │   ├── pollers/
    │   │   │       │   │   │   ├── async/
    │   │   │       │   │   │   │   └── async.go
    │   │   │       │   │   │   ├── body/
    │   │   │       │   │   │   │   └── body.go
    │   │   │       │   │   │   ├── loc/
    │   │   │       │   │   │   │   └── loc.go
    │   │   │       │   │   │   ├── op/
    │   │   │       │   │   │   │   └── op.go
    │   │   │       │   │   │   ├── poller.go
    │   │   │       │   │   │   └── util.go
    │   │   │       │   │   └── shared/
    │   │   │       │   │       ├── constants.go
    │   │   │       │   │       └── shared.go
    │   │   │       │   ├── log/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── log.go
    │   │   │       │   ├── policy/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── policy.go
    │   │   │       │   ├── runtime/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   ├── errors.go
    │   │   │       │   │   ├── pager.go
    │   │   │       │   │   ├── pipeline.go
    │   │   │       │   │   ├── policy_api_version.go
    │   │   │       │   │   ├── policy_bearer_token.go
    │   │   │       │   │   ├── policy_body_download.go
    │   │   │       │   │   ├── policy_http_header.go
    │   │   │       │   │   ├── policy_include_response.go
    │   │   │       │   │   ├── policy_logging.go
    │   │   │       │   │   ├── policy_request_id.go
    │   │   │       │   │   ├── policy_retry.go
    │   │   │       │   │   ├── policy_telemetry.go
    │   │   │       │   │   ├── poller.go
    │   │   │       │   │   ├── request.go
    │   │   │       │   │   ├── response.go
    │   │   │       │   │   └── transport_default_http_client.go
    │   │   │       │   ├── streaming/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── progress.go
    │   │   │       │   └── tracing/
    │   │   │       │       ├── constants.go
    │   │   │       │       └── tracing.go
    │   │   │       ├── azidentity/
    │   │   │       │   ├── CHANGELOG.md
    │   │   │       │   ├── LICENSE.txt
    │   │   │       │   ├── MIGRATION.md
    │   │   │       │   ├── README.md
    │   │   │       │   ├── TROUBLESHOOTING.md
    │   │   │       │   ├── assets.json
    │   │   │       │   ├── azidentity.go
    │   │   │       │   ├── azure_cli_credential.go
    │   │   │       │   ├── chained_token_credential.go
    │   │   │       │   ├── ci.yml
    │   │   │       │   ├── client_assertion_credential.go
    │   │   │       │   ├── client_certificate_credential.go
    │   │   │       │   ├── client_secret_credential.go
    │   │   │       │   ├── default_azure_credential.go
    │   │   │       │   ├── device_code_credential.go
    │   │   │       │   ├── environment_credential.go
    │   │   │       │   ├── errors.go
    │   │   │       │   ├── interactive_browser_credential.go
    │   │   │       │   ├── logging.go
    │   │   │       │   ├── managed_identity_client.go
    │   │   │       │   ├── managed_identity_credential.go
    │   │   │       │   ├── on_behalf_of_credential.go
    │   │   │       │   ├── syncer.go
    │   │   │       │   ├── username_password_credential.go
    │   │   │       │   ├── version.go
    │   │   │       │   └── workload_identity.go
    │   │   │       ├── internal/
    │   │   │       │   ├── LICENSE.txt
    │   │   │       │   ├── diag/
    │   │   │       │   │   ├── diag.go
    │   │   │       │   │   └── doc.go
    │   │   │       │   ├── errorinfo/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── errorinfo.go
    │   │   │       │   ├── exported/
    │   │   │       │   │   └── exported.go
    │   │   │       │   ├── log/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── log.go
    │   │   │       │   ├── poller/
    │   │   │       │   │   └── util.go
    │   │   │       │   ├── temporal/
    │   │   │       │   │   └── resource.go
    │   │   │       │   └── uuid/
    │   │   │       │       ├── doc.go
    │   │   │       │       └── uuid.go
    │   │   │       └── resourcemanager/
    │   │   │           ├── compute/
    │   │   │           │   └── armcompute/
    │   │   │           │       ├── CHANGELOG.md
    │   │   │           │       ├── LICENSE.txt
    │   │   │           │       ├── README.md
    │   │   │           │       ├── autorest.md
    │   │   │           │       ├── build.go
    │   │   │           │       ├── ci.yml
    │   │   │           │       ├── zz_generated_availabilitysets_client.go
    │   │   │           │       ├── zz_generated_capacityreservationgroups_client.go
    │   │   │           │       ├── zz_generated_capacityreservations_client.go
    │   │   │           │       ├── zz_generated_cloudserviceoperatingsystems_client.go
    │   │   │           │       ├── zz_generated_cloudserviceroleinstances_client.go
    │   │   │           │       ├── zz_generated_cloudserviceroles_client.go
    │   │   │           │       ├── zz_generated_cloudservices_client.go
    │   │   │           │       ├── zz_generated_cloudservicesupdatedomain_client.go
    │   │   │           │       ├── zz_generated_communitygalleries_client.go
    │   │   │           │       ├── zz_generated_communitygalleryimages_client.go
    │   │   │           │       ├── zz_generated_communitygalleryimageversions_client.go
    │   │   │           │       ├── zz_generated_constants.go
    │   │   │           │       ├── zz_generated_dedicatedhostgroups_client.go
    │   │   │           │       ├── zz_generated_dedicatedhosts_client.go
    │   │   │           │       ├── zz_generated_diskaccesses_client.go
    │   │   │           │       ├── zz_generated_diskencryptionsets_client.go
    │   │   │           │       ├── zz_generated_diskrestorepoint_client.go
    │   │   │           │       ├── zz_generated_disks_client.go
    │   │   │           │       ├── zz_generated_galleries_client.go
    │   │   │           │       ├── zz_generated_galleryapplications_client.go
    │   │   │           │       ├── zz_generated_galleryapplicationversions_client.go
    │   │   │           │       ├── zz_generated_galleryimages_client.go
    │   │   │           │       ├── zz_generated_galleryimageversions_client.go
    │   │   │           │       ├── zz_generated_gallerysharingprofile_client.go
    │   │   │           │       ├── zz_generated_images_client.go
    │   │   │           │       ├── zz_generated_loganalytics_client.go
    │   │   │           │       ├── zz_generated_models.go
    │   │   │           │       ├── zz_generated_models_serde.go
    │   │   │           │       ├── zz_generated_operations_client.go
    │   │   │           │       ├── zz_generated_proximityplacementgroups_client.go
    │   │   │           │       ├── zz_generated_resourceskus_client.go
    │   │   │           │       ├── zz_generated_response_types.go
    │   │   │           │       ├── zz_generated_restorepointcollections_client.go
    │   │   │           │       ├── zz_generated_restorepoints_client.go
    │   │   │           │       ├── zz_generated_sharedgalleries_client.go
    │   │   │           │       ├── zz_generated_sharedgalleryimages_client.go
    │   │   │           │       ├── zz_generated_sharedgalleryimageversions_client.go
    │   │   │           │       ├── zz_generated_snapshots_client.go
    │   │   │           │       ├── zz_generated_sshpublickeys_client.go
    │   │   │           │       ├── zz_generated_time_rfc3339.go
    │   │   │           │       ├── zz_generated_usage_client.go
    │   │   │           │       ├── zz_generated_virtualmachineextensionimages_client.go
    │   │   │           │       ├── zz_generated_virtualmachineextensions_client.go
    │   │   │           │       ├── zz_generated_virtualmachineimages_client.go
    │   │   │           │       ├── zz_generated_virtualmachineimagesedgezone_client.go
    │   │   │           │       ├── zz_generated_virtualmachineruncommands_client.go
    │   │   │           │       ├── zz_generated_virtualmachines_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetextensions_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetrollingupgrades_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesets_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetvmextensions_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetvmruncommands_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetvms_client.go
    │   │   │           │       └── zz_generated_virtualmachinesizes_client.go
    │   │   │           ├── network/
    │   │   │           │   └── armnetwork/
    │   │   │           │       ├── CHANGELOG.md
    │   │   │           │       ├── LICENSE.txt
    │   │   │           │       ├── README.md
    │   │   │           │       ├── adminrulecollections_client.go
    │   │   │           │       ├── adminrules_client.go
    │   │   │           │       ├── applicationgatewayprivateendpointconnections_client.go
    │   │   │           │       ├── applicationgatewayprivatelinkresources_client.go
    │   │   │           │       ├── applicationgateways_client.go
    │   │   │           │       ├── applicationsecuritygroups_client.go
    │   │   │           │       ├── autorest.md
    │   │   │           │       ├── availabledelegations_client.go
    │   │   │           │       ├── availableendpointservices_client.go
    │   │   │           │       ├── availableprivateendpointtypes_client.go
    │   │   │           │       ├── availableresourcegroupdelegations_client.go
    │   │   │           │       ├── availableservicealiases_client.go
    │   │   │           │       ├── azurefirewallfqdntags_client.go
    │   │   │           │       ├── azurefirewalls_client.go
    │   │   │           │       ├── bastionhosts_client.go
    │   │   │           │       ├── bgpservicecommunities_client.go
    │   │   │           │       ├── build.go
    │   │   │           │       ├── ci.yml
    │   │   │           │       ├── configurationpolicygroups_client.go
    │   │   │           │       ├── connectionmonitors_client.go
    │   │   │           │       ├── connectivityconfigurations_client.go
    │   │   │           │       ├── constants.go
    │   │   │           │       ├── customipprefixes_client.go
    │   │   │           │       ├── ddoscustompolicies_client.go
    │   │   │           │       ├── ddosprotectionplans_client.go
    │   │   │           │       ├── defaultsecurityrules_client.go
    │   │   │           │       ├── dscpconfiguration_client.go
    │   │   │           │       ├── expressroutecircuitauthorizations_client.go
    │   │   │           │       ├── expressroutecircuitconnections_client.go
    │   │   │           │       ├── expressroutecircuitpeerings_client.go
    │   │   │           │       ├── expressroutecircuits_client.go
    │   │   │           │       ├── expressrouteconnections_client.go
    │   │   │           │       ├── expressroutecrossconnectionpeerings_client.go
    │   │   │           │       ├── expressroutecrossconnections_client.go
    │   │   │           │       ├── expressroutegateways_client.go
    │   │   │           │       ├── expressroutelinks_client.go
    │   │   │           │       ├── expressrouteportauthorizations_client.go
    │   │   │           │       ├── expressrouteports_client.go
    │   │   │           │       ├── expressrouteportslocations_client.go
    │   │   │           │       ├── expressrouteproviderportslocation_client.go
    │   │   │           │       ├── expressrouteserviceproviders_client.go
    │   │   │           │       ├── firewallpolicies_client.go
    │   │   │           │       ├── firewallpolicyidpssignatures_client.go
    │   │   │           │       ├── firewallpolicyidpssignaturesfiltervalues_client.go
    │   │   │           │       ├── firewallpolicyidpssignaturesoverrides_client.go
    │   │   │           │       ├── firewallpolicyrulecollectiongroups_client.go
    │   │   │           │       ├── flowlogs_client.go
    │   │   │           │       ├── groups_client.go
    │   │   │           │       ├── hubroutetables_client.go
    │   │   │           │       ├── hubvirtualnetworkconnections_client.go
    │   │   │           │       ├── inboundnatrules_client.go
    │   │   │           │       ├── inboundsecurityrule_client.go
    │   │   │           │       ├── interfaceipconfigurations_client.go
    │   │   │           │       ├── interfaceloadbalancers_client.go
    │   │   │           │       ├── interfaces_client.go
    │   │   │           │       ├── interfacetapconfigurations_client.go
    │   │   │           │       ├── ipallocations_client.go
    │   │   │           │       ├── ipgroups_client.go
    │   │   │           │       ├── loadbalancerbackendaddresspools_client.go
    │   │   │           │       ├── loadbalancerfrontendipconfigurations_client.go
    │   │   │           │       ├── loadbalancerloadbalancingrules_client.go
    │   │   │           │       ├── loadbalancernetworkinterfaces_client.go
    │   │   │           │       ├── loadbalanceroutboundrules_client.go
    │   │   │           │       ├── loadbalancerprobes_client.go
    │   │   │           │       ├── loadbalancers_client.go
    │   │   │           │       ├── localnetworkgateways_client.go
    │   │   │           │       ├── management_client.go
    │   │   │           │       ├── managementgroupnetworkmanagerconnections_client.go
    │   │   │           │       ├── managercommits_client.go
    │   │   │           │       ├── managerdeploymentstatus_client.go
    │   │   │           │       ├── managers_client.go
    │   │   │           │       ├── models.go
    │   │   │           │       ├── models_serde.go
    │   │   │           │       ├── natgateways_client.go
    │   │   │           │       ├── natrules_client.go
    │   │   │           │       ├── operations_client.go
    │   │   │           │       ├── p2svpngateways_client.go
    │   │   │           │       ├── packetcaptures_client.go
    │   │   │           │       ├── peerexpressroutecircuitconnections_client.go
    │   │   │           │       ├── polymorphic_helpers.go
    │   │   │           │       ├── privatednszonegroups_client.go
    │   │   │           │       ├── privateendpoints_client.go
    │   │   │           │       ├── privatelinkservices_client.go
    │   │   │           │       ├── profiles_client.go
    │   │   │           │       ├── publicipaddresses_client.go
    │   │   │           │       ├── publicipprefixes_client.go
    │   │   │           │       ├── resourcenavigationlinks_client.go
    │   │   │           │       ├── response_types.go
    │   │   │           │       ├── routefilterrules_client.go
    │   │   │           │       ├── routefilters_client.go
    │   │   │           │       ├── routes_client.go
    │   │   │           │       ├── routetables_client.go
    │   │   │           │       ├── routingintent_client.go
    │   │   │           │       ├── scopeconnections_client.go
    │   │   │           │       ├── securityadminconfigurations_client.go
    │   │   │           │       ├── securitygroups_client.go
    │   │   │           │       ├── securitypartnerproviders_client.go
    │   │   │           │       ├── securityrules_client.go
    │   │   │           │       ├── serviceassociationlinks_client.go
    │   │   │           │       ├── serviceendpointpolicies_client.go
    │   │   │           │       ├── serviceendpointpolicydefinitions_client.go
    │   │   │           │       ├── servicetaginformation_client.go
    │   │   │           │       ├── servicetags_client.go
    │   │   │           │       ├── staticmembers_client.go
    │   │   │           │       ├── subnets_client.go
    │   │   │           │       ├── subscriptionnetworkmanagerconnections_client.go
    │   │   │           │       ├── time_rfc3339.go
    │   │   │           │       ├── usages_client.go
    │   │   │           │       ├── virtualappliances_client.go
    │   │   │           │       ├── virtualappliancesites_client.go
    │   │   │           │       ├── virtualapplianceskus_client.go
    │   │   │           │       ├── virtualhubbgpconnection_client.go
    │   │   │           │       ├── virtualhubbgpconnections_client.go
    │   │   │           │       ├── virtualhubipconfiguration_client.go
    │   │   │           │       ├── virtualhubroutetablev2s_client.go
    │   │   │           │       ├── virtualhubs_client.go
    │   │   │           │       ├── virtualnetworkgatewayconnections_client.go
    │   │   │           │       ├── virtualnetworkgatewaynatrules_client.go
    │   │   │           │       ├── virtualnetworkgateways_client.go
    │   │   │           │       ├── virtualnetworkpeerings_client.go
    │   │   │           │       ├── virtualnetworks_client.go
    │   │   │           │       ├── virtualnetworktaps_client.go
    │   │   │           │       ├── virtualrouterpeerings_client.go
    │   │   │           │       ├── virtualrouters_client.go
    │   │   │           │       ├── virtualwans_client.go
    │   │   │           │       ├── vpnconnections_client.go
    │   │   │           │       ├── vpngateways_client.go
    │   │   │           │       ├── vpnlinkconnections_client.go
    │   │   │           │       ├── vpnserverconfigurations_client.go
    │   │   │           │       ├── vpnserverconfigurationsassociatedwithvirtualwan_client.go
    │   │   │           │       ├── vpnsitelinkconnections_client.go
    │   │   │           │       ├── vpnsitelinks_client.go
    │   │   │           │       ├── vpnsites_client.go
    │   │   │           │       ├── vpnsitesconfiguration_client.go
    │   │   │           │       ├── watchers_client.go
    │   │   │           │       ├── webapplicationfirewallpolicies_client.go
    │   │   │           │       └── webcategories_client.go
    │   │   │           ├── resources/
    │   │   │           │   └── armresources/
    │   │   │           │       ├── CHANGELOG.md
    │   │   │           │       ├── LICENSE.txt
    │   │   │           │       ├── README.md
    │   │   │           │       ├── assets.json
    │   │   │           │       ├── autorest.md
    │   │   │           │       ├── build.go
    │   │   │           │       ├── ci.yml
    │   │   │           │       ├── client.go
    │   │   │           │       ├── client_factory.go
    │   │   │           │       ├── constants.go
    │   │   │           │       ├── deploymentoperations_client.go
    │   │   │           │       ├── deployments_client.go
    │   │   │           │       ├── models.go
    │   │   │           │       ├── models_serde.go
    │   │   │           │       ├── operations_client.go
    │   │   │           │       ├── providerresourcetypes_client.go
    │   │   │           │       ├── providers_client.go
    │   │   │           │       ├── resourcegroups_client.go
    │   │   │           │       ├── response_types.go
    │   │   │           │       ├── tags_client.go
    │   │   │           │       └── time_rfc3339.go
    │   │   │           └── storage/
    │   │   │               └── armstorage/
    │   │   │                   ├── CHANGELOG.md
    │   │   │                   ├── LICENSE.txt
    │   │   │                   ├── README.md
    │   │   │                   ├── accounts_client.go
    │   │   │                   ├── assets.json
    │   │   │                   ├── autorest.md
    │   │   │                   ├── blobcontainers_client.go
    │   │   │                   ├── blobinventorypolicies_client.go
    │   │   │                   ├── blobservices_client.go
    │   │   │                   ├── build.go
    │   │   │                   ├── ci.yml
    │   │   │                   ├── client_factory.go
    │   │   │                   ├── constants.go
    │   │   │                   ├── deletedaccounts_client.go
    │   │   │                   ├── encryptionscopes_client.go
    │   │   │                   ├── fileservices_client.go
    │   │   │                   ├── fileshares_client.go
    │   │   │                   ├── localusers_client.go
    │   │   │                   ├── managementpolicies_client.go
    │   │   │                   ├── models.go
    │   │   │                   ├── models_serde.go
    │   │   │                   ├── objectreplicationpolicies_client.go
    │   │   │                   ├── operations_client.go
    │   │   │                   ├── privateendpointconnections_client.go
    │   │   │                   ├── privatelinkresources_client.go
    │   │   │                   ├── queue_client.go
    │   │   │                   ├── queueservices_client.go
    │   │   │                   ├── response_types.go
    │   │   │                   ├── skus_client.go
    │   │   │                   ├── table_client.go
    │   │   │                   ├── tableservices_client.go
    │   │   │                   ├── time_rfc3339.go
    │   │   │                   └── usages_client.go
    │   │   └── go-autorest/
    │   │       ├── LICENSE
    │   │       └── autorest/
    │   │           ├── adal/
    │   │           │   ├── README.md
    │   │           │   ├── config.go
    │   │           │   ├── devicetoken.go
    │   │           │   ├── msi.go
    │   │           │   ├── msi_windows.go
    │   │           │   ├── persist.go
    │   │           │   ├── sender.go
    │   │           │   └── token.go
    │   │           ├── authorization.go
    │   │           ├── autorest.go
    │   │           ├── azure/
    │   │           │   ├── async.go
    │   │           │   ├── azure.go
    │   │           │   ├── environments.go
    │   │           │   └── rp.go
    │   │           ├── client.go
    │   │           ├── date/
    │   │           │   ├── date.go
    │   │           │   ├── time.go
    │   │           │   ├── timerfc1123.go
    │   │           │   ├── unixtime.go
    │   │           │   └── utility.go
    │   │           ├── error.go
    │   │           ├── preparer.go
    │   │           ├── responder.go
    │   │           ├── retriablerequest.go
    │   │           ├── retriablerequest_1.7.go
    │   │           ├── retriablerequest_1.8.go
    │   │           ├── sender.go
    │   │           ├── to/
    │   │           │   └── convert.go
    │   │           ├── utility.go
    │   │           ├── validation/
    │   │           │   └── validation.go
    │   │           └── version.go
    │   ├── AzureAD/
    │   │   └── microsoft-authentication-library-for-go/
    │   │       ├── LICENSE
    │   │       └── apps/
    │   │           ├── cache/
    │   │           │   └── cache.go
    │   │           ├── confidential/
    │   │           │   └── confidential.go
    │   │           ├── errors/
    │   │           │   ├── error_design.md
    │   │           │   └── errors.go
    │   │           ├── internal/
    │   │           │   ├── base/
    │   │           │   │   ├── base.go
    │   │           │   │   └── internal/
    │   │           │   │       └── storage/
    │   │           │   │           ├── items.go
    │   │           │   │           ├── partitioned_storage.go
    │   │           │   │           ├── storage.go
    │   │           │   │           └── test_serialized_cache.json
    │   │           │   ├── exported/
    │   │           │   │   └── exported.go
    │   │           │   ├── json/
    │   │           │   │   ├── design.md
    │   │           │   │   ├── json.go
    │   │           │   │   ├── mapslice.go
    │   │           │   │   ├── marshal.go
    │   │           │   │   ├── struct.go
    │   │           │   │   └── types/
    │   │           │   │       └── time/
    │   │           │   │           └── time.go
    │   │           │   ├── local/
    │   │           │   │   └── server.go
    │   │           │   ├── oauth/
    │   │           │   │   ├── oauth.go
    │   │           │   │   ├── ops/
    │   │           │   │   │   ├── accesstokens/
    │   │           │   │   │   │   ├── accesstokens.go
    │   │           │   │   │   │   ├── apptype_string.go
    │   │           │   │   │   │   └── tokens.go
    │   │           │   │   │   ├── authority/
    │   │           │   │   │   │   ├── authority.go
    │   │           │   │   │   │   └── authorizetype_string.go
    │   │           │   │   │   ├── internal/
    │   │           │   │   │   │   ├── comm/
    │   │           │   │   │   │   │   ├── comm.go
    │   │           │   │   │   │   │   └── compress.go
    │   │           │   │   │   │   └── grant/
    │   │           │   │   │   │       └── grant.go
    │   │           │   │   │   ├── ops.go
    │   │           │   │   │   └── wstrust/
    │   │           │   │   │       ├── defs/
    │   │           │   │   │       │   ├── endpointtype_string.go
    │   │           │   │   │       │   ├── mex_document_definitions.go
    │   │           │   │   │       │   ├── saml_assertion_definitions.go
    │   │           │   │   │       │   ├── version_string.go
    │   │           │   │   │       │   ├── wstrust_endpoint.go
    │   │           │   │   │       │   └── wstrust_mex_document.go
    │   │           │   │   │       └── wstrust.go
    │   │           │   │   └── resolvers.go
    │   │           │   ├── options/
    │   │           │   │   └── options.go
    │   │           │   ├── shared/
    │   │           │   │   └── shared.go
    │   │           │   └── version/
    │   │           │       └── version.go
    │   │           └── public/
    │   │               └── public.go
    │   ├── araddon/
    │   │   └── gou/
    │   │       ├── .gitignore
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── coerce.go
    │   │       ├── http.go
    │   │       ├── jsonhelper.go
    │   │       ├── log.go
    │   │       ├── log_unix.go
    │   │       ├── log_windows.go
    │   │       ├── testutil.go
    │   │       ├── throttle.go
    │   │       └── uid.go
    │   ├── aws/
    │   │   └── aws-sdk-go/
    │   │       ├── LICENSE.txt
    │   │       ├── NOTICE.txt
    │   │       ├── aws/
    │   │       │   ├── awserr/
    │   │       │   │   ├── error.go
    │   │       │   │   └── types.go
    │   │       │   ├── awsutil/
    │   │       │   │   ├── copy.go
    │   │       │   │   ├── equal.go
    │   │       │   │   ├── path_value.go
    │   │       │   │   ├── prettify.go
    │   │       │   │   └── string_value.go
    │   │       │   ├── client/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── default_retryer.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── metadata/
    │   │       │   │       └── client_info.go
    │   │       │   ├── config.go
    │   │       │   ├── context.go
    │   │       │   ├── context_1_6.go
    │   │       │   ├── context_1_7.go
    │   │       │   ├── convert_types.go
    │   │       │   ├── corehandlers/
    │   │       │   │   ├── handlers.go
    │   │       │   │   ├── param_validator.go
    │   │       │   │   └── user_agent.go
    │   │       │   ├── credentials/
    │   │       │   │   ├── chain_provider.go
    │   │       │   │   ├── credentials.go
    │   │       │   │   ├── ec2rolecreds/
    │   │       │   │   │   └── ec2_role_provider.go
    │   │       │   │   ├── endpointcreds/
    │   │       │   │   │   └── provider.go
    │   │       │   │   ├── env_provider.go
    │   │       │   │   ├── example.ini
    │   │       │   │   ├── shared_credentials_provider.go
    │   │       │   │   ├── static_provider.go
    │   │       │   │   └── stscreds/
    │   │       │   │       └── assume_role_provider.go
    │   │       │   ├── csm/
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── enable.go
    │   │       │   │   ├── metric.go
    │   │       │   │   ├── metric_chan.go
    │   │       │   │   └── reporter.go
    │   │       │   ├── defaults/
    │   │       │   │   ├── defaults.go
    │   │       │   │   └── shared_config.go
    │   │       │   ├── doc.go
    │   │       │   ├── ec2metadata/
    │   │       │   │   ├── api.go
    │   │       │   │   └── service.go
    │   │       │   ├── endpoints/
    │   │       │   │   ├── decode.go
    │   │       │   │   ├── defaults.go
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── endpoints.go
    │   │       │   │   ├── v3model.go
    │   │       │   │   └── v3model_codegen.go
    │   │       │   ├── errors.go
    │   │       │   ├── jsonvalue.go
    │   │       │   ├── logger.go
    │   │       │   ├── request/
    │   │       │   │   ├── connection_reset_error.go
    │   │       │   │   ├── connection_reset_error_other.go
    │   │       │   │   ├── handlers.go
    │   │       │   │   ├── http_request.go
    │   │       │   │   ├── offset_reader.go
    │   │       │   │   ├── request.go
    │   │       │   │   ├── request_1_7.go
    │   │       │   │   ├── request_1_8.go
    │   │       │   │   ├── request_context.go
    │   │       │   │   ├── request_context_1_6.go
    │   │       │   │   ├── request_pagination.go
    │   │       │   │   ├── retryer.go
    │   │       │   │   ├── timeout_read_closer.go
    │   │       │   │   ├── validation.go
    │   │       │   │   └── waiter.go
    │   │       │   ├── session/
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── env_config.go
    │   │       │   │   ├── session.go
    │   │       │   │   └── shared_config.go
    │   │       │   ├── signer/
    │   │       │   │   └── v4/
    │   │       │   │       ├── header_rules.go
    │   │       │   │       ├── options.go
    │   │       │   │       ├── uri_path.go
    │   │       │   │       └── v4.go
    │   │       │   ├── types.go
    │   │       │   ├── url.go
    │   │       │   ├── url_1_7.go
    │   │       │   └── version.go
    │   │       ├── internal/
    │   │       │   ├── sdkio/
    │   │       │   │   ├── io_go1.6.go
    │   │       │   │   └── io_go1.7.go
    │   │       │   ├── sdkrand/
    │   │       │   │   └── locked_source.go
    │   │       │   └── shareddefaults/
    │   │       │       └── shared_config.go
    │   │       ├── private/
    │   │       │   └── protocol/
    │   │       │       ├── ec2query/
    │   │       │       │   ├── build.go
    │   │       │       │   └── unmarshal.go
    │   │       │       ├── eventstream/
    │   │       │       │   ├── debug.go
    │   │       │       │   ├── decode.go
    │   │       │       │   ├── encode.go
    │   │       │       │   ├── error.go
    │   │       │       │   ├── eventstreamapi/
    │   │       │       │   │   ├── api.go
    │   │       │       │   │   └── error.go
    │   │       │       │   ├── header.go
    │   │       │       │   ├── header_value.go
    │   │       │       │   └── message.go
    │   │       │       ├── idempotency.go
    │   │       │       ├── json/
    │   │       │       │   └── jsonutil/
    │   │       │       │       ├── build.go
    │   │       │       │       └── unmarshal.go
    │   │       │       ├── jsonrpc/
    │   │       │       │   └── jsonrpc.go
    │   │       │       ├── jsonvalue.go
    │   │       │       ├── payload.go
    │   │       │       ├── query/
    │   │       │       │   ├── build.go
    │   │       │       │   ├── queryutil/
    │   │       │       │   │   └── queryutil.go
    │   │       │       │   ├── unmarshal.go
    │   │       │       │   └── unmarshal_error.go
    │   │       │       ├── rest/
    │   │       │       │   ├── build.go
    │   │       │       │   ├── payload.go
    │   │       │       │   └── unmarshal.go
    │   │       │       ├── restjson/
    │   │       │       │   └── restjson.go
    │   │       │       ├── restxml/
    │   │       │       │   └── restxml.go
    │   │       │       ├── unmarshal.go
    │   │       │       └── xml/
    │   │       │           └── xmlutil/
    │   │       │               ├── build.go
    │   │       │               ├── unmarshal.go
    │   │       │               └── xml_to_struct.go
    │   │       └── service/
    │   │           ├── ec2/
    │   │           │   ├── api.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── eks/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   └── service.go
    │   │           ├── elb/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── elbv2/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── iam/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── kms/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   └── service.go
    │   │           ├── rds/
    │   │           │   ├── api.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── doc_custom.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── route53/
    │   │           │   ├── api.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   ├── unmarshal_error.go
    │   │           │   └── waiters.go
    │   │           ├── s3/
    │   │           │   ├── api.go
    │   │           │   ├── body_hash.go
    │   │           │   ├── bucket_location.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── doc_custom.go
    │   │           │   ├── errors.go
    │   │           │   ├── host_style_bucket.go
    │   │           │   ├── platform_handlers.go
    │   │           │   ├── platform_handlers_go1.6.go
    │   │           │   ├── s3iface/
    │   │           │   │   └── interface.go
    │   │           │   ├── s3manager/
    │   │           │   │   ├── batch.go
    │   │           │   │   ├── bucket_region.go
    │   │           │   │   ├── doc.go
    │   │           │   │   ├── download.go
    │   │           │   │   └── upload.go
    │   │           │   ├── service.go
    │   │           │   ├── sse.go
    │   │           │   ├── statusok_error.go
    │   │           │   ├── unmarshal_error.go
    │   │           │   └── waiters.go
    │   │           └── sts/
    │   │               ├── api.go
    │   │               ├── customizations.go
    │   │               ├── doc.go
    │   │               ├── errors.go
    │   │               └── service.go
    │   ├── cloudfoundry/
    │   │   ├── bbl-state-resource/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   └── storage/
    │   │   │       ├── gcp.go
    │   │   │       ├── storage.go
    │   │   │       └── storage_client.go
    │   │   └── multierror/
    │   │       ├── LICENSE
    │   │       ├── NOTICE
    │   │       ├── README.md
    │   │       └── multierror.go
    │   ├── coreos/
    │   │   └── go-semver/
    │   │       ├── LICENSE
    │   │       └── semver/
    │   │           ├── semver.go
    │   │           └── sort.go
    │   ├── dgrijalva/
    │   │   └── jwt-go/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── MIGRATION_GUIDE.md
    │   │       ├── README.md
    │   │       ├── VERSION_HISTORY.md
    │   │       ├── claims.go
    │   │       ├── doc.go
    │   │       ├── ecdsa.go
    │   │       ├── ecdsa_utils.go
    │   │       ├── errors.go
    │   │       ├── hmac.go
    │   │       ├── map_claims.go
    │   │       ├── none.go
    │   │       ├── parser.go
    │   │       ├── rsa.go
    │   │       ├── rsa_pss.go
    │   │       ├── rsa_utils.go
    │   │       ├── signing_method.go
    │   │       └── token.go
    │   ├── dsnet/
    │   │   └── compress/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── api.go
    │   │       ├── bzip2/
    │   │       │   ├── bwt.go
    │   │       │   ├── common.go
    │   │       │   ├── fuzz_off.go
    │   │       │   ├── fuzz_on.go
    │   │       │   ├── internal/
    │   │       │   │   └── sais/
    │   │       │   │       ├── common.go
    │   │       │   │       ├── sais_byte.go
    │   │       │   │       └── sais_int.go
    │   │       │   ├── mtf_rle2.go
    │   │       │   ├── prefix.go
    │   │       │   ├── reader.go
    │   │       │   ├── rle1.go
    │   │       │   └── writer.go
    │   │       ├── internal/
    │   │       │   ├── common.go
    │   │       │   ├── debug.go
    │   │       │   ├── errors/
    │   │       │   │   └── errors.go
    │   │       │   ├── gofuzz.go
    │   │       │   ├── prefix/
    │   │       │   │   ├── debug.go
    │   │       │   │   ├── decoder.go
    │   │       │   │   ├── encoder.go
    │   │       │   │   ├── prefix.go
    │   │       │   │   ├── range.go
    │   │       │   │   ├── reader.go
    │   │       │   │   ├── wrap.go
    │   │       │   │   └── writer.go
    │   │       │   └── release.go
    │   │       ├── zbench.sh
    │   │       ├── zfuzz.sh
    │   │       ├── zprof.sh
    │   │       └── ztest.sh
    │   ├── fatih/
    │   │   └── color/
    │   │       ├── .travis.yml
    │   │       ├── Gopkg.toml
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── color.go
    │   │       └── doc.go
    │   ├── genevieve/
    │   │   └── leftovers/
    │   │       ├── LICENSE
    │   │       ├── app/
    │   │       │   ├── async_deleter.go
    │   │       │   └── logger.go
    │   │       ├── aws/
    │   │       │   ├── LOGIC.md
    │   │       │   ├── common/
    │   │       │   │   └── state.go
    │   │       │   ├── ec2/
    │   │       │   │   ├── address.go
    │   │       │   │   ├── addresses.go
    │   │       │   │   ├── image.go
    │   │       │   │   ├── images.go
    │   │       │   │   ├── instance.go
    │   │       │   │   ├── instances.go
    │   │       │   │   ├── internet_gateways.go
    │   │       │   │   ├── key_pair.go
    │   │       │   │   ├── key_pairs.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── nat_gateway.go
    │   │       │   │   ├── nat_gateways.go
    │   │       │   │   ├── network_interface.go
    │   │       │   │   ├── network_interfaces.go
    │   │       │   │   ├── resource_tags.go
    │   │       │   │   ├── route_tables.go
    │   │       │   │   ├── security_group.go
    │   │       │   │   ├── security_groups.go
    │   │       │   │   ├── snapshot.go
    │   │       │   │   ├── snapshots.go
    │   │       │   │   ├── subnets.go
    │   │       │   │   ├── tag.go
    │   │       │   │   ├── tags.go
    │   │       │   │   ├── volume.go
    │   │       │   │   ├── volumes.go
    │   │       │   │   ├── vpc.go
    │   │       │   │   └── vpcs.go
    │   │       │   ├── eks/
    │   │       │   │   ├── cluster.go
    │   │       │   │   └── clusters.go
    │   │       │   ├── elb/
    │   │       │   │   ├── load_balancer.go
    │   │       │   │   ├── load_balancers.go
    │   │       │   │   └── logger.go
    │   │       │   ├── elbv2/
    │   │       │   │   ├── load_balancer.go
    │   │       │   │   ├── load_balancers.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── target_group.go
    │   │       │   │   └── target_groups.go
    │   │       │   ├── iam/
    │   │       │   │   ├── access_keys.go
    │   │       │   │   ├── instance_profile.go
    │   │       │   │   ├── instance_profiles.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── policies.go
    │   │       │   │   ├── policy.go
    │   │       │   │   ├── role.go
    │   │       │   │   ├── role_policies.go
    │   │       │   │   ├── roles.go
    │   │       │   │   ├── server_certificate.go
    │   │       │   │   ├── server_certificates.go
    │   │       │   │   ├── user.go
    │   │       │   │   ├── user_policies.go
    │   │       │   │   └── users.go
    │   │       │   ├── kms/
    │   │       │   │   ├── alias.go
    │   │       │   │   ├── aliases.go
    │   │       │   │   ├── key.go
    │   │       │   │   ├── keys.go
    │   │       │   │   └── logger.go
    │   │       │   ├── leftovers.go
    │   │       │   ├── logger.go
    │   │       │   ├── rds/
    │   │       │   │   ├── db_cluster.go
    │   │       │   │   ├── db_clusters.go
    │   │       │   │   ├── db_instance.go
    │   │       │   │   ├── db_instances.go
    │   │       │   │   ├── db_subnet_group.go
    │   │       │   │   ├── db_subnet_groups.go
    │   │       │   │   └── logger.go
    │   │       │   ├── route53/
    │   │       │   │   ├── health_check.go
    │   │       │   │   ├── health_checks.go
    │   │       │   │   ├── hosted_zone.go
    │   │       │   │   ├── hosted_zones.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── record_sets.go
    │   │       │   └── s3/
    │   │       │       ├── bucket.go
    │   │       │       ├── bucket_manager.go
    │   │       │       ├── buckets.go
    │   │       │       └── logger.go
    │   │       ├── azure/
    │   │       │   ├── group.go
    │   │       │   ├── groups.go
    │   │       │   ├── leftovers.go
    │   │       │   └── logger.go
    │   │       ├── common/
    │   │       │   └── deletable.go
    │   │       ├── gcp/
    │   │       │   ├── common/
    │   │       │   │   ├── logger.go
    │   │       │   │   └── state.go
    │   │       │   ├── compute/
    │   │       │   │   ├── address.go
    │   │       │   │   ├── addresses.go
    │   │       │   │   ├── backend_service.go
    │   │       │   │   ├── backend_services.go
    │   │       │   │   ├── client.go
    │   │       │   │   ├── disk.go
    │   │       │   │   ├── disks.go
    │   │       │   │   ├── firewall.go
    │   │       │   │   ├── firewalls.go
    │   │       │   │   ├── forwarding_rule.go
    │   │       │   │   ├── forwarding_rules.go
    │   │       │   │   ├── global_address.go
    │   │       │   │   ├── global_addresses.go
    │   │       │   │   ├── global_forwarding_rule.go
    │   │       │   │   ├── global_forwarding_rules.go
    │   │       │   │   ├── global_health_check.go
    │   │       │   │   ├── global_health_checks.go
    │   │       │   │   ├── http_health_check.go
    │   │       │   │   ├── http_health_checks.go
    │   │       │   │   ├── https_health_check.go
    │   │       │   │   ├── https_health_checks.go
    │   │       │   │   ├── image.go
    │   │       │   │   ├── images.go
    │   │       │   │   ├── instance.go
    │   │       │   │   ├── instance_group.go
    │   │       │   │   ├── instance_group_manager.go
    │   │       │   │   ├── instance_group_managers.go
    │   │       │   │   ├── instance_groups.go
    │   │       │   │   ├── instance_template.go
    │   │       │   │   ├── instance_templates.go
    │   │       │   │   ├── instances.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── network.go
    │   │       │   │   ├── networks.go
    │   │       │   │   ├── operation_error.go
    │   │       │   │   ├── operation_waiter.go
    │   │       │   │   ├── route.go
    │   │       │   │   ├── router.go
    │   │       │   │   ├── routers.go
    │   │       │   │   ├── routes.go
    │   │       │   │   ├── ssl_certificate.go
    │   │       │   │   ├── ssl_certificates.go
    │   │       │   │   ├── subnetwork.go
    │   │       │   │   ├── subnetworks.go
    │   │       │   │   ├── target_http_proxies.go
    │   │       │   │   ├── target_http_proxy.go
    │   │       │   │   ├── target_https_proxies.go
    │   │       │   │   ├── target_https_proxy.go
    │   │       │   │   ├── target_pool.go
    │   │       │   │   ├── target_pools.go
    │   │       │   │   ├── target_vpn_gateway.go
    │   │       │   │   ├── target_vpn_gateways.go
    │   │       │   │   ├── url_map.go
    │   │       │   │   ├── url_maps.go
    │   │       │   │   ├── vpn_tunnel.go
    │   │       │   │   └── vpn_tunnels.go
    │   │       │   ├── container/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── cluster.go
    │   │       │   │   ├── clusters.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── operation_waiter.go
    │   │       │   ├── dns/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── managed_zone.go
    │   │       │   │   ├── managed_zones.go
    │   │       │   │   └── record_sets.go
    │   │       │   ├── iam/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── mutexkv.go
    │   │       │   │   ├── service_account.go
    │   │       │   │   └── service_accounts.go
    │   │       │   ├── leftovers.go
    │   │       │   ├── logger.go
    │   │       │   ├── sql/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── instance.go
    │   │       │   │   ├── instances.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── operation_waiter.go
    │   │       │   └── storage/
    │   │       │       ├── bucket.go
    │   │       │       ├── buckets.go
    │   │       │       ├── client.go
    │   │       │       └── logger.go
    │   │       └── vsphere/
    │   │           ├── client.go
    │   │           ├── folder.go
    │   │           ├── folders.go
    │   │           ├── helpers.go
    │   │           ├── leftovers.go
    │   │           ├── logger.go
    │   │           └── virtual_machine.go
    │   ├── go-ini/
    │   │   └── ini/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── error.go
    │   │       ├── file.go
    │   │       ├── ini.go
    │   │       ├── key.go
    │   │       ├── parser.go
    │   │       ├── section.go
    │   │       └── struct.go
    │   ├── go-logr/
    │   │   └── logr/
    │   │       ├── .golangci.yaml
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── discard.go
    │   │       ├── funcr/
    │   │       │   └── funcr.go
    │   │       └── logr.go
    │   ├── golang/
    │   │   ├── protobuf/
    │   │   │   ├── AUTHORS
    │   │   │   ├── CONTRIBUTORS
    │   │   │   ├── LICENSE
    │   │   │   ├── proto/
    │   │   │   │   ├── buffer.go
    │   │   │   │   ├── defaults.go
    │   │   │   │   ├── deprecated.go
    │   │   │   │   ├── discard.go
    │   │   │   │   ├── extensions.go
    │   │   │   │   ├── properties.go
    │   │   │   │   ├── proto.go
    │   │   │   │   ├── registry.go
    │   │   │   │   ├── text_decode.go
    │   │   │   │   ├── text_encode.go
    │   │   │   │   ├── wire.go
    │   │   │   │   └── wrappers.go
    │   │   │   ├── protoc-gen-go/
    │   │   │   │   └── descriptor/
    │   │   │   │       └── descriptor.pb.go
    │   │   │   └── ptypes/
    │   │   │       ├── any/
    │   │   │       │   └── any.pb.go
    │   │   │       ├── any.go
    │   │   │       ├── doc.go
    │   │   │       ├── duration/
    │   │   │       │   └── duration.pb.go
    │   │   │       ├── duration.go
    │   │   │       ├── timestamp/
    │   │   │       │   └── timestamp.pb.go
    │   │   │       └── timestamp.go
    │   │   └── snappy/
    │   │       ├── .gitignore
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README
    │   │       ├── decode.go
    │   │       ├── decode_amd64.go
    │   │       ├── decode_amd64.s
    │   │       ├── decode_other.go
    │   │       ├── encode.go
    │   │       ├── encode_amd64.go
    │   │       ├── encode_amd64.s
    │   │       ├── encode_other.go
    │   │       └── snappy.go
    │   ├── golang-jwt/
    │   │   └── jwt/
    │   │       └── v4/
    │   │           ├── .gitignore
    │   │           ├── LICENSE
    │   │           ├── MIGRATION_GUIDE.md
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── VERSION_HISTORY.md
    │   │           ├── claims.go
    │   │           ├── doc.go
    │   │           ├── ecdsa.go
    │   │           ├── ecdsa_utils.go
    │   │           ├── ed25519.go
    │   │           ├── ed25519_utils.go
    │   │           ├── errors.go
    │   │           ├── hmac.go
    │   │           ├── map_claims.go
    │   │           ├── none.go
    │   │           ├── parser.go
    │   │           ├── parser_option.go
    │   │           ├── rsa.go
    │   │           ├── rsa_pss.go
    │   │           ├── rsa_utils.go
    │   │           ├── signing_method.go
    │   │           ├── staticcheck.conf
    │   │           ├── token.go
    │   │           └── types.go
    │   ├── google/
    │   │   ├── go-cmp/
    │   │   │   ├── LICENSE
    │   │   │   └── cmp/
    │   │   │       ├── compare.go
    │   │   │       ├── export.go
    │   │   │       ├── internal/
    │   │   │       │   ├── diff/
    │   │   │       │   │   ├── debug_disable.go
    │   │   │       │   │   ├── debug_enable.go
    │   │   │       │   │   └── diff.go
    │   │   │       │   ├── flags/
    │   │   │       │   │   └── flags.go
    │   │   │       │   ├── function/
    │   │   │       │   │   └── func.go
    │   │   │       │   └── value/
    │   │   │       │       ├── name.go
    │   │   │       │       ├── pointer.go
    │   │   │       │       └── sort.go
    │   │   │       ├── options.go
    │   │   │       ├── path.go
    │   │   │       ├── report.go
    │   │   │       ├── report_compare.go
    │   │   │       ├── report_references.go
    │   │   │       ├── report_reflect.go
    │   │   │       ├── report_slices.go
    │   │   │       ├── report_text.go
    │   │   │       └── report_value.go
    │   │   ├── pprof/
    │   │   │   ├── AUTHORS
    │   │   │   ├── CONTRIBUTORS
    │   │   │   ├── LICENSE
    │   │   │   └── profile/
    │   │   │       ├── encode.go
    │   │   │       ├── filter.go
    │   │   │       ├── index.go
    │   │   │       ├── legacy_java_profile.go
    │   │   │       ├── legacy_profile.go
    │   │   │       ├── merge.go
    │   │   │       ├── profile.go
    │   │   │       ├── proto.go
    │   │   │       └── prune.go
    │   │   └── uuid/
    │   │       ├── .travis.yml
    │   │       ├── CONTRIBUTING.md
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── dce.go
    │   │       ├── doc.go
    │   │       ├── hash.go
    │   │       ├── marshal.go
    │   │       ├── node.go
    │   │       ├── node_js.go
    │   │       ├── node_net.go
    │   │       ├── null.go
    │   │       ├── sql.go
    │   │       ├── time.go
    │   │       ├── util.go
    │   │       ├── uuid.go
    │   │       ├── version1.go
    │   │       └── version4.go
    │   ├── googleapis/
    │   │   └── gax-go/
    │   │       └── v2/
    │   │           ├── LICENSE
    │   │           ├── call_option.go
    │   │           ├── gax.go
    │   │           ├── header.go
    │   │           └── invoke.go
    │   ├── hashicorp/
    │   │   ├── errwrap/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   └── errwrap.go
    │   │   └── go-multierror/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── append.go
    │   │       ├── flatten.go
    │   │       ├── format.go
    │   │       ├── multierror.go
    │   │       ├── prefix.go
    │   │       └── sort.go
    │   ├── jessevdk/
    │   │   └── go-flags/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── arg.go
    │   │       ├── check_crosscompile.sh
    │   │       ├── closest.go
    │   │       ├── command.go
    │   │       ├── completion.go
    │   │       ├── convert.go
    │   │       ├── error.go
    │   │       ├── flags.go
    │   │       ├── group.go
    │   │       ├── help.go
    │   │       ├── ini.go
    │   │       ├── man.go
    │   │       ├── multitag.go
    │   │       ├── option.go
    │   │       ├── optstyle_other.go
    │   │       ├── optstyle_windows.go
    │   │       ├── parser.go
    │   │       ├── termsize.go
    │   │       ├── termsize_nosysioctl.go
    │   │       ├── tiocgwinsz_bsdish.go
    │   │       ├── tiocgwinsz_linux.go
    │   │       └── tiocgwinsz_other.go
    │   ├── jmespath/
    │   │   └── go-jmespath/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── api.go
    │   │       ├── astnodetype_string.go
    │   │       ├── functions.go
    │   │       ├── interpreter.go
    │   │       ├── lexer.go
    │   │       ├── parser.go
    │   │       ├── toktype_string.go
    │   │       └── util.go
    │   ├── kr/
    │   │   └── pty/
    │   │       ├── .gitignore
    │   │       ├── License
    │   │       ├── README.md
    │   │       ├── doc.go
    │   │       ├── ioctl.go
    │   │       ├── ioctl_bsd.go
    │   │       ├── mktypes.bash
    │   │       ├── pty_darwin.go
    │   │       ├── pty_dragonfly.go
    │   │       ├── pty_freebsd.go
    │   │       ├── pty_linux.go
    │   │       ├── pty_openbsd.go
    │   │       ├── pty_unsupported.go
    │   │       ├── run.go
    │   │       ├── util.go
    │   │       ├── ztypes_386.go
    │   │       ├── ztypes_amd64.go
    │   │       ├── ztypes_arm.go
    │   │       ├── ztypes_arm64.go
    │   │       ├── ztypes_dragonfly_amd64.go
    │   │       ├── ztypes_freebsd_386.go
    │   │       ├── ztypes_freebsd_amd64.go
    │   │       ├── ztypes_freebsd_arm.go
    │   │       ├── ztypes_mipsx.go
    │   │       ├── ztypes_openbsd_386.go
    │   │       ├── ztypes_openbsd_amd64.go
    │   │       ├── ztypes_ppc64.go
    │   │       ├── ztypes_ppc64le.go
    │   │       └── ztypes_s390x.go
    │   ├── kylelemons/
    │   │   └── godebug/
    │   │       ├── LICENSE
    │   │       ├── diff/
    │   │       │   └── diff.go
    │   │       └── pretty/
    │   │           ├── .gitignore
    │   │           ├── doc.go
    │   │           ├── public.go
    │   │           ├── reflect.go
    │   │           └── structure.go
    │   ├── lytics/
    │   │   └── cloudstorage/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── TODO.md
    │   │       ├── awss3/
    │   │       │   └── store.go
    │   │       ├── cachecleaner.go
    │   │       ├── codecov.yml
    │   │       ├── csbufio/
    │   │       │   ├── reader.go
    │   │       │   └── writer.go
    │   │       ├── doc.go
    │   │       ├── file_helper.go
    │   │       ├── go.test.sh
    │   │       ├── iterator.go
    │   │       ├── query.go
    │   │       ├── registry.go
    │   │       ├── store.go
    │   │       ├── test.sh
    │   │       └── updatepkgs.sh
    │   ├── mattn/
    │   │   ├── go-colorable/
    │   │   │   ├── .travis.yml
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── colorable_appengine.go
    │   │   │   ├── colorable_others.go
    │   │   │   ├── colorable_windows.go
    │   │   │   └── noncolorable.go
    │   │   └── go-isatty/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── doc.go
    │   │       ├── isatty_appengine.go
    │   │       ├── isatty_bsd.go
    │   │       ├── isatty_linux.go
    │   │       ├── isatty_linux_ppc64x.go
    │   │       ├── isatty_others.go
    │   │       ├── isatty_solaris.go
    │   │       └── isatty_windows.go
    │   ├── mholt/
    │   │   └── archiver/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── appveyor.yml
    │   │       ├── archiver.go
    │   │       ├── build.bash
    │   │       ├── rar.go
    │   │       ├── tar.go
    │   │       ├── tarbz2.go
    │   │       ├── targz.go
    │   │       ├── tarlz4.go
    │   │       ├── tarsz.go
    │   │       ├── tarxz.go
    │   │       └── zip.go
    │   ├── mitchellh/
    │   │   └── go-homedir/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       └── homedir.go
    │   ├── nu7hatch/
    │   │   └── gouuid/
    │   │       ├── .gitignore
    │   │       ├── COPYING
    │   │       ├── README.md
    │   │       └── uuid.go
    │   ├── nwaples/
    │   │   └── rardecode/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── archive.go
    │   │       ├── archive15.go
    │   │       ├── archive50.go
    │   │       ├── bit_reader.go
    │   │       ├── decode29.go
    │   │       ├── decode29_lz.go
    │   │       ├── decode29_ppm.go
    │   │       ├── decode50.go
    │   │       ├── decode_reader.go
    │   │       ├── decrypt_reader.go
    │   │       ├── filters.go
    │   │       ├── huffman.go
    │   │       ├── ppm_model.go
    │   │       ├── reader.go
    │   │       └── vm.go
    │   ├── onsi/
    │   │   ├── ginkgo/
    │   │   │   └── v2/
    │   │   │       ├── .gitignore
    │   │   │       ├── CHANGELOG.md
    │   │   │       ├── CONTRIBUTING.md
    │   │   │       ├── LICENSE
    │   │   │       ├── README.md
    │   │   │       ├── RELEASING.md
    │   │   │       ├── config/
    │   │   │       │   └── deprecated.go
    │   │   │       ├── core_dsl.go
    │   │   │       ├── decorator_dsl.go
    │   │   │       ├── deprecated_dsl.go
    │   │   │       ├── formatter/
    │   │   │       │   ├── colorable_others.go
    │   │   │       │   ├── colorable_windows.go
    │   │   │       │   └── formatter.go
    │   │   │       ├── ginkgo/
    │   │   │       │   ├── build/
    │   │   │       │   │   └── build_command.go
    │   │   │       │   ├── command/
    │   │   │       │   │   ├── abort.go
    │   │   │       │   │   ├── command.go
    │   │   │       │   │   └── program.go
    │   │   │       │   ├── generators/
    │   │   │       │   │   ├── boostrap_templates.go
    │   │   │       │   │   ├── bootstrap_command.go
    │   │   │       │   │   ├── generate_command.go
    │   │   │       │   │   ├── generate_templates.go
    │   │   │       │   │   └── generators_common.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   ├── compile.go
    │   │   │       │   │   ├── profiles_and_reports.go
    │   │   │       │   │   ├── run.go
    │   │   │       │   │   ├── test_suite.go
    │   │   │       │   │   ├── utils.go
    │   │   │       │   │   └── verify_version.go
    │   │   │       │   ├── labels/
    │   │   │       │   │   └── labels_command.go
    │   │   │       │   ├── main.go
    │   │   │       │   ├── outline/
    │   │   │       │   │   ├── ginkgo.go
    │   │   │       │   │   ├── import.go
    │   │   │       │   │   ├── outline.go
    │   │   │       │   │   └── outline_command.go
    │   │   │       │   ├── run/
    │   │   │       │   │   └── run_command.go
    │   │   │       │   ├── unfocus/
    │   │   │       │   │   └── unfocus_command.go
    │   │   │       │   └── watch/
    │   │   │       │       ├── delta.go
    │   │   │       │       ├── delta_tracker.go
    │   │   │       │       ├── dependencies.go
    │   │   │       │       ├── package_hash.go
    │   │   │       │       ├── package_hashes.go
    │   │   │       │       ├── suite.go
    │   │   │       │       └── watch_command.go
    │   │   │       ├── ginkgo_cli_dependencies.go
    │   │   │       ├── ginkgo_t_dsl.go
    │   │   │       ├── internal/
    │   │   │       │   ├── counter.go
    │   │   │       │   ├── failer.go
    │   │   │       │   ├── focus.go
    │   │   │       │   ├── global/
    │   │   │       │   │   └── init.go
    │   │   │       │   ├── group.go
    │   │   │       │   ├── interrupt_handler/
    │   │   │       │   │   ├── interrupt_handler.go
    │   │   │       │   │   ├── sigquit_swallower_unix.go
    │   │   │       │   │   └── sigquit_swallower_windows.go
    │   │   │       │   ├── node.go
    │   │   │       │   ├── ordering.go
    │   │   │       │   ├── output_interceptor.go
    │   │   │       │   ├── output_interceptor_unix.go
    │   │   │       │   ├── output_interceptor_win.go
    │   │   │       │   ├── parallel_support/
    │   │   │       │   │   ├── client_server.go
    │   │   │       │   │   ├── http_client.go
    │   │   │       │   │   ├── http_server.go
    │   │   │       │   │   ├── rpc_client.go
    │   │   │       │   │   ├── rpc_server.go
    │   │   │       │   │   └── server_handler.go
    │   │   │       │   ├── progress_report.go
    │   │   │       │   ├── progress_report_bsd.go
    │   │   │       │   ├── progress_report_unix.go
    │   │   │       │   ├── progress_report_win.go
    │   │   │       │   ├── progress_reporter_manager.go
    │   │   │       │   ├── report_entry.go
    │   │   │       │   ├── spec.go
    │   │   │       │   ├── spec_context.go
    │   │   │       │   ├── suite.go
    │   │   │       │   ├── testingtproxy/
    │   │   │       │   │   └── testing_t_proxy.go
    │   │   │       │   ├── tree.go
    │   │   │       │   └── writer.go
    │   │   │       ├── reporters/
    │   │   │       │   ├── default_reporter.go
    │   │   │       │   ├── deprecated_reporter.go
    │   │   │       │   ├── json_report.go
    │   │   │       │   ├── junit_report.go
    │   │   │       │   ├── reporter.go
    │   │   │       │   └── teamcity_report.go
    │   │   │       ├── reporting_dsl.go
    │   │   │       ├── table_dsl.go
    │   │   │       └── types/
    │   │   │           ├── code_location.go
    │   │   │           ├── config.go
    │   │   │           ├── deprecated_types.go
    │   │   │           ├── deprecation_support.go
    │   │   │           ├── enum_support.go
    │   │   │           ├── errors.go
    │   │   │           ├── file_filter.go
    │   │   │           ├── flags.go
    │   │   │           ├── label_filter.go
    │   │   │           ├── report_entry.go
    │   │   │           ├── types.go
    │   │   │           └── version.go
    │   │   └── gomega/
    │   │       ├── .gitignore
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── RELEASING.md
    │   │       ├── format/
    │   │       │   └── format.go
    │   │       ├── gbytes/
    │   │       │   ├── buffer.go
    │   │       │   ├── io_wrappers.go
    │   │       │   └── say_matcher.go
    │   │       ├── gexec/
    │   │       │   ├── build.go
    │   │       │   ├── exit_matcher.go
    │   │       │   ├── prefixed_writer.go
    │   │       │   └── session.go
    │   │       ├── gomega_dsl.go
    │   │       ├── internal/
    │   │       │   ├── assertion.go
    │   │       │   ├── async_assertion.go
    │   │       │   ├── duration_bundle.go
    │   │       │   ├── gomega.go
    │   │       │   ├── gutil/
    │   │       │   │   ├── post_ioutil.go
    │   │       │   │   └── using_ioutil.go
    │   │       │   ├── polling_signal_error.go
    │   │       │   └── vetoptdesc.go
    │   │       ├── matchers/
    │   │       │   ├── and.go
    │   │       │   ├── assignable_to_type_of_matcher.go
    │   │       │   ├── attributes_slice.go
    │   │       │   ├── be_a_directory.go
    │   │       │   ├── be_a_regular_file.go
    │   │       │   ├── be_an_existing_file.go
    │   │       │   ├── be_closed_matcher.go
    │   │       │   ├── be_comparable_to_matcher.go
    │   │       │   ├── be_element_of_matcher.go
    │   │       │   ├── be_empty_matcher.go
    │   │       │   ├── be_equivalent_to_matcher.go
    │   │       │   ├── be_false_matcher.go
    │   │       │   ├── be_identical_to.go
    │   │       │   ├── be_key_of_matcher.go
    │   │       │   ├── be_nil_matcher.go
    │   │       │   ├── be_numerically_matcher.go
    │   │       │   ├── be_sent_matcher.go
    │   │       │   ├── be_temporally_matcher.go
    │   │       │   ├── be_true_matcher.go
    │   │       │   ├── be_zero_matcher.go
    │   │       │   ├── consist_of.go
    │   │       │   ├── contain_element_matcher.go
    │   │       │   ├── contain_elements_matcher.go
    │   │       │   ├── contain_substring_matcher.go
    │   │       │   ├── equal_matcher.go
    │   │       │   ├── have_cap_matcher.go
    │   │       │   ├── have_each_matcher.go
    │   │       │   ├── have_exact_elements.go
    │   │       │   ├── have_existing_field_matcher.go
    │   │       │   ├── have_field.go
    │   │       │   ├── have_http_body_matcher.go
    │   │       │   ├── have_http_header_with_value_matcher.go
    │   │       │   ├── have_http_status_matcher.go
    │   │       │   ├── have_key_matcher.go
    │   │       │   ├── have_key_with_value_matcher.go
    │   │       │   ├── have_len_matcher.go
    │   │       │   ├── have_occurred_matcher.go
    │   │       │   ├── have_prefix_matcher.go
    │   │       │   ├── have_suffix_matcher.go
    │   │       │   ├── have_value.go
    │   │       │   ├── match_error_matcher.go
    │   │       │   ├── match_json_matcher.go
    │   │       │   ├── match_regexp_matcher.go
    │   │       │   ├── match_xml_matcher.go
    │   │       │   ├── match_yaml_matcher.go
    │   │       │   ├── not.go
    │   │       │   ├── or.go
    │   │       │   ├── panic_matcher.go
    │   │       │   ├── receive_matcher.go
    │   │       │   ├── satisfy_matcher.go
    │   │       │   ├── semi_structured_data_support.go
    │   │       │   ├── succeed_matcher.go
    │   │       │   ├── support/
    │   │       │   │   └── goraph/
    │   │       │   │       ├── bipartitegraph/
    │   │       │   │       │   ├── bipartitegraph.go
    │   │       │   │       │   └── bipartitegraphmatching.go
    │   │       │   │       ├── edge/
    │   │       │   │       │   └── edge.go
    │   │       │   │       ├── node/
    │   │       │   │       │   └── node.go
    │   │       │   │       └── util/
    │   │       │   │           └── util.go
    │   │       │   ├── type_support.go
    │   │       │   └── with_transform.go
    │   │       ├── matchers.go
    │   │       └── types/
    │   │           └── types.go
    │   ├── pborman/
    │   │   └── uuid/
    │   │       ├── .travis.yml
    │   │       ├── CONTRIBUTING.md
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── dce.go
    │   │       ├── doc.go
    │   │       ├── hash.go
    │   │       ├── marshal.go
    │   │       ├── node.go
    │   │       ├── sql.go
    │   │       ├── time.go
    │   │       ├── util.go
    │   │       ├── uuid.go
    │   │       ├── version1.go
    │   │       └── version4.go
    │   ├── pierrec/
    │   │   └── lz4/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── block.go
    │   │       ├── debug.go
    │   │       ├── debug_stub.go
    │   │       ├── internal/
    │   │       │   └── xxh32/
    │   │       │       └── xxh32zero.go
    │   │       ├── lz4.go
    │   │       ├── lz4_go1.10.go
    │   │       ├── lz4_notgo1.10.go
    │   │       ├── reader.go
    │   │       └── writer.go
    │   ├── pkg/
    │   │   └── browser/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── browser.go
    │   │       ├── browser_darwin.go
    │   │       ├── browser_freebsd.go
    │   │       ├── browser_linux.go
    │   │       ├── browser_netbsd.go
    │   │       ├── browser_openbsd.go
    │   │       ├── browser_unsupported.go
    │   │       └── browser_windows.go
    │   ├── pmezard/
    │   │   └── go-difflib/
    │   │       ├── LICENSE
    │   │       └── difflib/
    │   │           └── difflib.go
    │   ├── spf13/
    │   │   └── afero/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE.txt
    │   │       ├── README.md
    │   │       ├── afero.go
    │   │       ├── appveyor.yml
    │   │       ├── basepath.go
    │   │       ├── cacheOnReadFs.go
    │   │       ├── const_bsds.go
    │   │       ├── const_win_unix.go
    │   │       ├── copyOnWriteFs.go
    │   │       ├── httpFs.go
    │   │       ├── ioutil.go
    │   │       ├── lstater.go
    │   │       ├── match.go
    │   │       ├── mem/
    │   │       │   ├── dir.go
    │   │       │   ├── dirmap.go
    │   │       │   └── file.go
    │   │       ├── memmap.go
    │   │       ├── os.go
    │   │       ├── path.go
    │   │       ├── readonlyfs.go
    │   │       ├── regexpfs.go
    │   │       ├── unionFile.go
    │   │       └── util.go
    │   ├── ulikunitz/
    │   │   └── xz/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── TODO.md
    │   │       ├── bits.go
    │   │       ├── crc.go
    │   │       ├── format.go
    │   │       ├── fox-check-none.xz
    │   │       ├── fox.xz
    │   │       ├── internal/
    │   │       │   ├── hash/
    │   │       │   │   ├── cyclic_poly.go
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── rabin_karp.go
    │   │       │   │   └── roller.go
    │   │       │   └── xlog/
    │   │       │       └── xlog.go
    │   │       ├── lzma/
    │   │       │   ├── bintree.go
    │   │       │   ├── bitops.go
    │   │       │   ├── breader.go
    │   │       │   ├── buffer.go
    │   │       │   ├── bytewriter.go
    │   │       │   ├── decoder.go
    │   │       │   ├── decoderdict.go
    │   │       │   ├── directcodec.go
    │   │       │   ├── distcodec.go
    │   │       │   ├── encoder.go
    │   │       │   ├── encoderdict.go
    │   │       │   ├── fox.lzma
    │   │       │   ├── hashtable.go
    │   │       │   ├── header.go
    │   │       │   ├── header2.go
    │   │       │   ├── lengthcodec.go
    │   │       │   ├── literalcodec.go
    │   │       │   ├── matchalgorithm.go
    │   │       │   ├── operation.go
    │   │       │   ├── prob.go
    │   │       │   ├── properties.go
    │   │       │   ├── rangecodec.go
    │   │       │   ├── reader.go
    │   │       │   ├── reader2.go
    │   │       │   ├── state.go
    │   │       │   ├── treecodecs.go
    │   │       │   ├── writer.go
    │   │       │   └── writer2.go
    │   │       ├── lzmafilter.go
    │   │       ├── make-docs
    │   │       ├── none-check.go
    │   │       ├── reader.go
    │   │       └── writer.go
    │   └── vmware/
    │       └── govmomi/
    │           ├── .gitignore
    │           ├── .goreleaser.yml
    │           ├── .mailmap
    │           ├── .travis.yml
    │           ├── CHANGELOG.md
    │           ├── CONTRIBUTING.md
    │           ├── CONTRIBUTORS
    │           ├── Dockerfile
    │           ├── Gopkg.toml
    │           ├── LICENSE.txt
    │           ├── Makefile
    │           ├── README.md
    │           ├── client.go
    │           ├── find/
    │           │   ├── doc.go
    │           │   ├── error.go
    │           │   ├── finder.go
    │           │   └── recurser.go
    │           ├── list/
    │           │   ├── lister.go
    │           │   └── path.go
    │           ├── nfc/
    │           │   ├── lease.go
    │           │   └── lease_updater.go
    │           ├── object/
    │           │   ├── authorization_manager.go
    │           │   ├── authorization_manager_internal.go
    │           │   ├── cluster_compute_resource.go
    │           │   ├── common.go
    │           │   ├── compute_resource.go
    │           │   ├── custom_fields_manager.go
    │           │   ├── customization_spec_manager.go
    │           │   ├── datacenter.go
    │           │   ├── datastore.go
    │           │   ├── datastore_file.go
    │           │   ├── datastore_file_manager.go
    │           │   ├── datastore_path.go
    │           │   ├── diagnostic_log.go
    │           │   ├── diagnostic_manager.go
    │           │   ├── distributed_virtual_portgroup.go
    │           │   ├── distributed_virtual_switch.go
    │           │   ├── extension_manager.go
    │           │   ├── file_manager.go
    │           │   ├── folder.go
    │           │   ├── history_collector.go
    │           │   ├── host_account_manager.go
    │           │   ├── host_certificate_info.go
    │           │   ├── host_certificate_manager.go
    │           │   ├── host_config_manager.go
    │           │   ├── host_datastore_browser.go
    │           │   ├── host_datastore_system.go
    │           │   ├── host_date_time_system.go
    │           │   ├── host_firewall_system.go
    │           │   ├── host_network_system.go
    │           │   ├── host_service_system.go
    │           │   ├── host_storage_system.go
    │           │   ├── host_system.go
    │           │   ├── host_virtual_nic_manager.go
    │           │   ├── host_vsan_internal_system.go
    │           │   ├── host_vsan_system.go
    │           │   ├── namespace_manager.go
    │           │   ├── network.go
    │           │   ├── network_reference.go
    │           │   ├── opaque_network.go
    │           │   ├── option_manager.go
    │           │   ├── resource_pool.go
    │           │   ├── search_index.go
    │           │   ├── storage_pod.go
    │           │   ├── storage_resource_manager.go
    │           │   ├── task.go
    │           │   ├── types.go
    │           │   ├── virtual_app.go
    │           │   ├── virtual_device_list.go
    │           │   ├── virtual_disk_manager.go
    │           │   ├── virtual_disk_manager_internal.go
    │           │   ├── virtual_machine.go
    │           │   └── vmware_distributed_virtual_switch.go
    │           ├── property/
    │           │   ├── collector.go
    │           │   ├── filter.go
    │           │   └── wait.go
    │           ├── session/
    │           │   ├── keep_alive.go
    │           │   └── manager.go
    │           ├── task/
    │           │   ├── error.go
    │           │   └── wait.go
    │           └── vim25/
    │               ├── client.go
    │               ├── debug/
    │               │   └── debug.go
    │               ├── doc.go
    │               ├── methods/
    │               │   ├── methods.go
    │               │   └── service_content.go
    │               ├── mo/
    │               │   ├── ancestors.go
    │               │   ├── entity.go
    │               │   ├── extra.go
    │               │   ├── mo.go
    │               │   ├── reference.go
    │               │   ├── registry.go
    │               │   ├── retrieve.go
    │               │   └── type_info.go
    │               ├── progress/
    │               │   ├── aggregator.go
    │               │   ├── doc.go
    │               │   ├── prefix.go
    │               │   ├── reader.go
    │               │   ├── report.go
    │               │   ├── scale.go
    │               │   ├── sinker.go
    │               │   └── tee.go
    │               ├── retry.go
    │               ├── soap/
    │               │   ├── client.go
    │               │   ├── debug.go
    │               │   ├── error.go
    │               │   └── soap.go
    │               ├── types/
    │               │   ├── base.go
    │               │   ├── enum.go
    │               │   ├── fault.go
    │               │   ├── helpers.go
    │               │   ├── if.go
    │               │   ├── registry.go
    │               │   └── types.go
    │               └── xml/
    │                   ├── LICENSE
    │                   ├── extras.go
    │                   ├── marshal.go
    │                   ├── read.go
    │                   ├── typeinfo.go
    │                   └── xml.go
    ├── go.opencensus.io/
    │   ├── .gitignore
    │   ├── .travis.yml
    │   ├── AUTHORS
    │   ├── CONTRIBUTING.md
    │   ├── Gopkg.toml
    │   ├── LICENSE
    │   ├── README.md
    │   ├── appveyor.yml
    │   ├── exemplar/
    │   │   └── exemplar.go
    │   ├── internal/
    │   │   ├── internal.go
    │   │   ├── sanitize.go
    │   │   ├── tagencoding/
    │   │   │   └── tagencoding.go
    │   │   └── traceinternals.go
    │   ├── opencensus.go
    │   ├── plugin/
    │   │   └── ochttp/
    │   │       ├── client.go
    │   │       ├── client_stats.go
    │   │       ├── doc.go
    │   │       ├── propagation/
    │   │       │   └── b3/
    │   │       │       └── b3.go
    │   │       ├── route.go
    │   │       ├── server.go
    │   │       ├── span_annotating_client_trace.go
    │   │       ├── stats.go
    │   │       └── trace.go
    │   ├── stats/
    │   │   ├── doc.go
    │   │   ├── internal/
    │   │   │   ├── record.go
    │   │   │   └── validation.go
    │   │   ├── measure.go
    │   │   ├── measure_float64.go
    │   │   ├── measure_int64.go
    │   │   ├── record.go
    │   │   ├── units.go
    │   │   └── view/
    │   │       ├── aggregation.go
    │   │       ├── aggregation_data.go
    │   │       ├── collector.go
    │   │       ├── doc.go
    │   │       ├── export.go
    │   │       ├── view.go
    │   │       ├── worker.go
    │   │       └── worker_commands.go
    │   ├── tag/
    │   │   ├── context.go
    │   │   ├── doc.go
    │   │   ├── key.go
    │   │   ├── map.go
    │   │   ├── map_codec.go
    │   │   ├── profile_19.go
    │   │   ├── profile_not19.go
    │   │   └── validate.go
    │   └── trace/
    │       ├── basetypes.go
    │       ├── config.go
    │       ├── doc.go
    │       ├── exemplar.go
    │       ├── export.go
    │       ├── internal/
    │       │   └── internal.go
    │       ├── propagation/
    │       │   └── propagation.go
    │       ├── sampling.go
    │       ├── spanbucket.go
    │       ├── spanstore.go
    │       ├── status_codes.go
    │       ├── trace.go
    │       ├── trace_go11.go
    │       ├── trace_nongo11.go
    │       └── tracestate/
    │           └── tracestate.go
    ├── golang.org/
    │   └── x/
    │       ├── crypto/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── blowfish/
    │       │   │   ├── block.go
    │       │   │   ├── cipher.go
    │       │   │   └── const.go
    │       │   ├── chacha20/
    │       │   │   ├── chacha_arm64.go
    │       │   │   ├── chacha_arm64.s
    │       │   │   ├── chacha_generic.go
    │       │   │   ├── chacha_noasm.go
    │       │   │   ├── chacha_ppc64x.go
    │       │   │   ├── chacha_ppc64x.s
    │       │   │   ├── chacha_s390x.go
    │       │   │   ├── chacha_s390x.s
    │       │   │   └── xor.go
    │       │   ├── curve25519/
    │       │   │   └── curve25519.go
    │       │   ├── internal/
    │       │   │   ├── alias/
    │       │   │   │   ├── alias.go
    │       │   │   │   └── alias_purego.go
    │       │   │   └── poly1305/
    │       │   │       ├── mac_noasm.go
    │       │   │       ├── poly1305.go
    │       │   │       ├── sum_amd64.go
    │       │   │       ├── sum_amd64.s
    │       │   │       ├── sum_generic.go
    │       │   │       ├── sum_ppc64x.go
    │       │   │       ├── sum_ppc64x.s
    │       │   │       ├── sum_s390x.go
    │       │   │       └── sum_s390x.s
    │       │   ├── pkcs12/
    │       │   │   ├── bmp-string.go
    │       │   │   ├── crypto.go
    │       │   │   ├── errors.go
    │       │   │   ├── internal/
    │       │   │   │   └── rc2/
    │       │   │   │       └── rc2.go
    │       │   │   ├── mac.go
    │       │   │   ├── pbkdf.go
    │       │   │   ├── pkcs12.go
    │       │   │   └── safebags.go
    │       │   └── ssh/
    │       │       ├── buffer.go
    │       │       ├── certs.go
    │       │       ├── channel.go
    │       │       ├── cipher.go
    │       │       ├── client.go
    │       │       ├── client_auth.go
    │       │       ├── common.go
    │       │       ├── connection.go
    │       │       ├── doc.go
    │       │       ├── handshake.go
    │       │       ├── internal/
    │       │       │   └── bcrypt_pbkdf/
    │       │       │       └── bcrypt_pbkdf.go
    │       │       ├── kex.go
    │       │       ├── keys.go
    │       │       ├── mac.go
    │       │       ├── messages.go
    │       │       ├── mux.go
    │       │       ├── server.go
    │       │       ├── session.go
    │       │       ├── ssh_gss.go
    │       │       ├── streamlocal.go
    │       │       ├── tcpip.go
    │       │       └── transport.go
    │       ├── net/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── context/
    │       │   │   └── context.go
    │       │   ├── html/
    │       │   │   ├── atom/
    │       │   │   │   ├── atom.go
    │       │   │   │   └── table.go
    │       │   │   ├── charset/
    │       │   │   │   └── charset.go
    │       │   │   ├── const.go
    │       │   │   ├── doc.go
    │       │   │   ├── doctype.go
    │       │   │   ├── entity.go
    │       │   │   ├── escape.go
    │       │   │   ├── foreign.go
    │       │   │   ├── iter.go
    │       │   │   ├── node.go
    │       │   │   ├── parse.go
    │       │   │   ├── render.go
    │       │   │   └── token.go
    │       │   ├── http/
    │       │   │   └── httpguts/
    │       │   │       ├── guts.go
    │       │   │       └── httplex.go
    │       │   ├── http2/
    │       │   │   ├── .gitignore
    │       │   │   ├── ascii.go
    │       │   │   ├── ciphers.go
    │       │   │   ├── client_conn_pool.go
    │       │   │   ├── config.go
    │       │   │   ├── config_go124.go
    │       │   │   ├── config_pre_go124.go
    │       │   │   ├── databuffer.go
    │       │   │   ├── errors.go
    │       │   │   ├── flow.go
    │       │   │   ├── frame.go
    │       │   │   ├── gotrack.go
    │       │   │   ├── hpack/
    │       │   │   │   ├── encode.go
    │       │   │   │   ├── hpack.go
    │       │   │   │   ├── huffman.go
    │       │   │   │   ├── static_table.go
    │       │   │   │   └── tables.go
    │       │   │   ├── http2.go
    │       │   │   ├── pipe.go
    │       │   │   ├── server.go
    │       │   │   ├── timer.go
    │       │   │   ├── transport.go
    │       │   │   ├── unencrypted.go
    │       │   │   ├── write.go
    │       │   │   ├── writesched.go
    │       │   │   ├── writesched_priority.go
    │       │   │   ├── writesched_random.go
    │       │   │   └── writesched_roundrobin.go
    │       │   ├── idna/
    │       │   │   ├── go118.go
    │       │   │   ├── idna10.0.0.go
    │       │   │   ├── idna9.0.0.go
    │       │   │   ├── pre_go118.go
    │       │   │   ├── punycode.go
    │       │   │   ├── tables10.0.0.go
    │       │   │   ├── tables11.0.0.go
    │       │   │   ├── tables12.0.0.go
    │       │   │   ├── tables13.0.0.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables9.0.0.go
    │       │   │   ├── trie.go
    │       │   │   ├── trie12.0.0.go
    │       │   │   ├── trie13.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── internal/
    │       │   │   ├── httpcommon/
    │       │   │   │   ├── ascii.go
    │       │   │   │   ├── headermap.go
    │       │   │   │   └── request.go
    │       │   │   └── timeseries/
    │       │   │       └── timeseries.go
    │       │   └── trace/
    │       │       ├── events.go
    │       │       ├── histogram.go
    │       │       └── trace.go
    │       ├── oauth2/
    │       │   ├── .travis.yml
    │       │   ├── CONTRIBUTING.md
    │       │   ├── LICENSE
    │       │   ├── README.md
    │       │   ├── authhandler/
    │       │   │   └── authhandler.go
    │       │   ├── deviceauth.go
    │       │   ├── google/
    │       │   │   ├── appengine.go
    │       │   │   ├── default.go
    │       │   │   ├── doc.go
    │       │   │   ├── error.go
    │       │   │   ├── externalaccount/
    │       │   │   │   ├── aws.go
    │       │   │   │   ├── basecredentials.go
    │       │   │   │   ├── executablecredsource.go
    │       │   │   │   ├── filecredsource.go
    │       │   │   │   ├── header.go
    │       │   │   │   ├── programmaticrefreshcredsource.go
    │       │   │   │   └── urlcredsource.go
    │       │   │   ├── google.go
    │       │   │   ├── internal/
    │       │   │   │   ├── externalaccountauthorizeduser/
    │       │   │   │   │   └── externalaccountauthorizeduser.go
    │       │   │   │   ├── impersonate/
    │       │   │   │   │   └── impersonate.go
    │       │   │   │   └── stsexchange/
    │       │   │   │       ├── clientauth.go
    │       │   │   │       └── sts_exchange.go
    │       │   │   ├── jwt.go
    │       │   │   └── sdk.go
    │       │   ├── internal/
    │       │   │   ├── doc.go
    │       │   │   ├── oauth2.go
    │       │   │   ├── token.go
    │       │   │   └── transport.go
    │       │   ├── jws/
    │       │   │   └── jws.go
    │       │   ├── jwt/
    │       │   │   └── jwt.go
    │       │   ├── oauth2.go
    │       │   ├── pkce.go
    │       │   ├── token.go
    │       │   └── transport.go
    │       ├── sys/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── cpu/
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_darwin_x86_gc.s
    │       │   │   ├── byteorder.go
    │       │   │   ├── cpu.go
    │       │   │   ├── cpu_aix.go
    │       │   │   ├── cpu_arm.go
    │       │   │   ├── cpu_arm64.go
    │       │   │   ├── cpu_arm64.s
    │       │   │   ├── cpu_darwin_x86.go
    │       │   │   ├── cpu_gc_arm64.go
    │       │   │   ├── cpu_gc_s390x.go
    │       │   │   ├── cpu_gc_x86.go
    │       │   │   ├── cpu_gc_x86.s
    │       │   │   ├── cpu_gccgo_arm64.go
    │       │   │   ├── cpu_gccgo_s390x.go
    │       │   │   ├── cpu_gccgo_x86.c
    │       │   │   ├── cpu_gccgo_x86.go
    │       │   │   ├── cpu_linux.go
    │       │   │   ├── cpu_linux_arm.go
    │       │   │   ├── cpu_linux_arm64.go
    │       │   │   ├── cpu_linux_mips64x.go
    │       │   │   ├── cpu_linux_noinit.go
    │       │   │   ├── cpu_linux_ppc64x.go
    │       │   │   ├── cpu_linux_riscv64.go
    │       │   │   ├── cpu_linux_s390x.go
    │       │   │   ├── cpu_loong64.go
    │       │   │   ├── cpu_mips64x.go
    │       │   │   ├── cpu_mipsx.go
    │       │   │   ├── cpu_netbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.s
    │       │   │   ├── cpu_other_arm.go
    │       │   │   ├── cpu_other_arm64.go
    │       │   │   ├── cpu_other_mips64x.go
    │       │   │   ├── cpu_other_ppc64x.go
    │       │   │   ├── cpu_other_riscv64.go
    │       │   │   ├── cpu_other_x86.go
    │       │   │   ├── cpu_ppc64x.go
    │       │   │   ├── cpu_riscv64.go
    │       │   │   ├── cpu_s390x.go
    │       │   │   ├── cpu_s390x.s
    │       │   │   ├── cpu_wasm.go
    │       │   │   ├── cpu_x86.go
    │       │   │   ├── cpu_zos.go
    │       │   │   ├── cpu_zos_s390x.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── hwcap_linux.go
    │       │   │   ├── parse.go
    │       │   │   ├── proc_cpuinfo_linux.go
    │       │   │   ├── runtime_auxv.go
    │       │   │   ├── runtime_auxv_go121.go
    │       │   │   ├── syscall_aix_gccgo.go
    │       │   │   ├── syscall_aix_ppc64_gc.go
    │       │   │   └── syscall_darwin_x86_gc.go
    │       │   ├── unix/
    │       │   │   ├── .gitignore
    │       │   │   ├── README.md
    │       │   │   ├── affinity_linux.go
    │       │   │   ├── aliases.go
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_bsd_386.s
    │       │   │   ├── asm_bsd_amd64.s
    │       │   │   ├── asm_bsd_arm.s
    │       │   │   ├── asm_bsd_arm64.s
    │       │   │   ├── asm_bsd_ppc64.s
    │       │   │   ├── asm_bsd_riscv64.s
    │       │   │   ├── asm_linux_386.s
    │       │   │   ├── asm_linux_amd64.s
    │       │   │   ├── asm_linux_arm.s
    │       │   │   ├── asm_linux_arm64.s
    │       │   │   ├── asm_linux_loong64.s
    │       │   │   ├── asm_linux_mips64x.s
    │       │   │   ├── asm_linux_mipsx.s
    │       │   │   ├── asm_linux_ppc64x.s
    │       │   │   ├── asm_linux_riscv64.s
    │       │   │   ├── asm_linux_s390x.s
    │       │   │   ├── asm_openbsd_mips64.s
    │       │   │   ├── asm_solaris_amd64.s
    │       │   │   ├── asm_zos_s390x.s
    │       │   │   ├── auxv.go
    │       │   │   ├── auxv_unsupported.go
    │       │   │   ├── bluetooth_linux.go
    │       │   │   ├── bpxsvc_zos.go
    │       │   │   ├── bpxsvc_zos.s
    │       │   │   ├── cap_freebsd.go
    │       │   │   ├── constants.go
    │       │   │   ├── dev_aix_ppc.go
    │       │   │   ├── dev_aix_ppc64.go
    │       │   │   ├── dev_darwin.go
    │       │   │   ├── dev_dragonfly.go
    │       │   │   ├── dev_freebsd.go
    │       │   │   ├── dev_linux.go
    │       │   │   ├── dev_netbsd.go
    │       │   │   ├── dev_openbsd.go
    │       │   │   ├── dev_zos.go
    │       │   │   ├── dirent.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── env_unix.go
    │       │   │   ├── fcntl.go
    │       │   │   ├── fcntl_darwin.go
    │       │   │   ├── fcntl_linux_32bit.go
    │       │   │   ├── fdset.go
    │       │   │   ├── gccgo.go
    │       │   │   ├── gccgo_c.c
    │       │   │   ├── gccgo_linux_amd64.go
    │       │   │   ├── ifreq_linux.go
    │       │   │   ├── ioctl_linux.go
    │       │   │   ├── ioctl_signed.go
    │       │   │   ├── ioctl_unsigned.go
    │       │   │   ├── ioctl_zos.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mmap_nomremap.go
    │       │   │   ├── mremap.go
    │       │   │   ├── pagesize_unix.go
    │       │   │   ├── pledge_openbsd.go
    │       │   │   ├── ptrace_darwin.go
    │       │   │   ├── ptrace_ios.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── readdirent_getdents.go
    │       │   │   ├── readdirent_getdirentries.go
    │       │   │   ├── sockcmsg_dragonfly.go
    │       │   │   ├── sockcmsg_linux.go
    │       │   │   ├── sockcmsg_unix.go
    │       │   │   ├── sockcmsg_unix_other.go
    │       │   │   ├── sockcmsg_zos.go
    │       │   │   ├── symaddr_zos_s390x.s
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_aix.go
    │       │   │   ├── syscall_aix_ppc.go
    │       │   │   ├── syscall_aix_ppc64.go
    │       │   │   ├── syscall_bsd.go
    │       │   │   ├── syscall_darwin.go
    │       │   │   ├── syscall_darwin_amd64.go
    │       │   │   ├── syscall_darwin_arm64.go
    │       │   │   ├── syscall_darwin_libSystem.go
    │       │   │   ├── syscall_dragonfly.go
    │       │   │   ├── syscall_dragonfly_amd64.go
    │       │   │   ├── syscall_freebsd.go
    │       │   │   ├── syscall_freebsd_386.go
    │       │   │   ├── syscall_freebsd_amd64.go
    │       │   │   ├── syscall_freebsd_arm.go
    │       │   │   ├── syscall_freebsd_arm64.go
    │       │   │   ├── syscall_freebsd_riscv64.go
    │       │   │   ├── syscall_hurd.go
    │       │   │   ├── syscall_hurd_386.go
    │       │   │   ├── syscall_illumos.go
    │       │   │   ├── syscall_linux.go
    │       │   │   ├── syscall_linux_386.go
    │       │   │   ├── syscall_linux_alarm.go
    │       │   │   ├── syscall_linux_amd64.go
    │       │   │   ├── syscall_linux_amd64_gc.go
    │       │   │   ├── syscall_linux_arm.go
    │       │   │   ├── syscall_linux_arm64.go
    │       │   │   ├── syscall_linux_gc.go
    │       │   │   ├── syscall_linux_gc_386.go
    │       │   │   ├── syscall_linux_gc_arm.go
    │       │   │   ├── syscall_linux_gccgo_386.go
    │       │   │   ├── syscall_linux_gccgo_arm.go
    │       │   │   ├── syscall_linux_loong64.go
    │       │   │   ├── syscall_linux_mips64x.go
    │       │   │   ├── syscall_linux_mipsx.go
    │       │   │   ├── syscall_linux_ppc.go
    │       │   │   ├── syscall_linux_ppc64x.go
    │       │   │   ├── syscall_linux_riscv64.go
    │       │   │   ├── syscall_linux_s390x.go
    │       │   │   ├── syscall_linux_sparc64.go
    │       │   │   ├── syscall_netbsd.go
    │       │   │   ├── syscall_netbsd_386.go
    │       │   │   ├── syscall_netbsd_amd64.go
    │       │   │   ├── syscall_netbsd_arm.go
    │       │   │   ├── syscall_netbsd_arm64.go
    │       │   │   ├── syscall_openbsd.go
    │       │   │   ├── syscall_openbsd_386.go
    │       │   │   ├── syscall_openbsd_amd64.go
    │       │   │   ├── syscall_openbsd_arm.go
    │       │   │   ├── syscall_openbsd_arm64.go
    │       │   │   ├── syscall_openbsd_libc.go
    │       │   │   ├── syscall_openbsd_mips64.go
    │       │   │   ├── syscall_openbsd_ppc64.go
    │       │   │   ├── syscall_openbsd_riscv64.go
    │       │   │   ├── syscall_solaris.go
    │       │   │   ├── syscall_solaris_amd64.go
    │       │   │   ├── syscall_unix.go
    │       │   │   ├── syscall_unix_gc.go
    │       │   │   ├── syscall_unix_gc_ppc64x.go
    │       │   │   ├── syscall_zos_s390x.go
    │       │   │   ├── sysvshm_linux.go
    │       │   │   ├── sysvshm_unix.go
    │       │   │   ├── sysvshm_unix_other.go
    │       │   │   ├── timestruct.go
    │       │   │   ├── unveil_openbsd.go
    │       │   │   ├── vgetrandom_linux.go
    │       │   │   ├── vgetrandom_unsupported.go
    │       │   │   ├── xattr_bsd.go
    │       │   │   ├── zerrors_aix_ppc.go
    │       │   │   ├── zerrors_aix_ppc64.go
    │       │   │   ├── zerrors_darwin_amd64.go
    │       │   │   ├── zerrors_darwin_arm64.go
    │       │   │   ├── zerrors_dragonfly_amd64.go
    │       │   │   ├── zerrors_freebsd_386.go
    │       │   │   ├── zerrors_freebsd_amd64.go
    │       │   │   ├── zerrors_freebsd_arm.go
    │       │   │   ├── zerrors_freebsd_arm64.go
    │       │   │   ├── zerrors_freebsd_riscv64.go
    │       │   │   ├── zerrors_linux.go
    │       │   │   ├── zerrors_linux_386.go
    │       │   │   ├── zerrors_linux_amd64.go
    │       │   │   ├── zerrors_linux_arm.go
    │       │   │   ├── zerrors_linux_arm64.go
    │       │   │   ├── zerrors_linux_loong64.go
    │       │   │   ├── zerrors_linux_mips.go
    │       │   │   ├── zerrors_linux_mips64.go
    │       │   │   ├── zerrors_linux_mips64le.go
    │       │   │   ├── zerrors_linux_mipsle.go
    │       │   │   ├── zerrors_linux_ppc.go
    │       │   │   ├── zerrors_linux_ppc64.go
    │       │   │   ├── zerrors_linux_ppc64le.go
    │       │   │   ├── zerrors_linux_riscv64.go
    │       │   │   ├── zerrors_linux_s390x.go
    │       │   │   ├── zerrors_linux_sparc64.go
    │       │   │   ├── zerrors_netbsd_386.go
    │       │   │   ├── zerrors_netbsd_amd64.go
    │       │   │   ├── zerrors_netbsd_arm.go
    │       │   │   ├── zerrors_netbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_386.go
    │       │   │   ├── zerrors_openbsd_amd64.go
    │       │   │   ├── zerrors_openbsd_arm.go
    │       │   │   ├── zerrors_openbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_mips64.go
    │       │   │   ├── zerrors_openbsd_ppc64.go
    │       │   │   ├── zerrors_openbsd_riscv64.go
    │       │   │   ├── zerrors_solaris_amd64.go
    │       │   │   ├── zerrors_zos_s390x.go
    │       │   │   ├── zptrace_armnn_linux.go
    │       │   │   ├── zptrace_linux_arm64.go
    │       │   │   ├── zptrace_mipsnn_linux.go
    │       │   │   ├── zptrace_mipsnnle_linux.go
    │       │   │   ├── zptrace_x86_linux.go
    │       │   │   ├── zsymaddr_zos_s390x.s
    │       │   │   ├── zsyscall_aix_ppc.go
    │       │   │   ├── zsyscall_aix_ppc64.go
    │       │   │   ├── zsyscall_aix_ppc64_gc.go
    │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
    │       │   │   ├── zsyscall_darwin_amd64.go
    │       │   │   ├── zsyscall_darwin_amd64.s
    │       │   │   ├── zsyscall_darwin_arm64.go
    │       │   │   ├── zsyscall_darwin_arm64.s
    │       │   │   ├── zsyscall_dragonfly_amd64.go
    │       │   │   ├── zsyscall_freebsd_386.go
    │       │   │   ├── zsyscall_freebsd_amd64.go
    │       │   │   ├── zsyscall_freebsd_arm.go
    │       │   │   ├── zsyscall_freebsd_arm64.go
    │       │   │   ├── zsyscall_freebsd_riscv64.go
    │       │   │   ├── zsyscall_illumos_amd64.go
    │       │   │   ├── zsyscall_linux.go
    │       │   │   ├── zsyscall_linux_386.go
    │       │   │   ├── zsyscall_linux_amd64.go
    │       │   │   ├── zsyscall_linux_arm.go
    │       │   │   ├── zsyscall_linux_arm64.go
    │       │   │   ├── zsyscall_linux_loong64.go
    │       │   │   ├── zsyscall_linux_mips.go
    │       │   │   ├── zsyscall_linux_mips64.go
    │       │   │   ├── zsyscall_linux_mips64le.go
    │       │   │   ├── zsyscall_linux_mipsle.go
    │       │   │   ├── zsyscall_linux_ppc.go
    │       │   │   ├── zsyscall_linux_ppc64.go
    │       │   │   ├── zsyscall_linux_ppc64le.go
    │       │   │   ├── zsyscall_linux_riscv64.go
    │       │   │   ├── zsyscall_linux_s390x.go
    │       │   │   ├── zsyscall_linux_sparc64.go
    │       │   │   ├── zsyscall_netbsd_386.go
    │       │   │   ├── zsyscall_netbsd_amd64.go
    │       │   │   ├── zsyscall_netbsd_arm.go
    │       │   │   ├── zsyscall_netbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_386.go
    │       │   │   ├── zsyscall_openbsd_386.s
    │       │   │   ├── zsyscall_openbsd_amd64.go
    │       │   │   ├── zsyscall_openbsd_amd64.s
    │       │   │   ├── zsyscall_openbsd_arm.go
    │       │   │   ├── zsyscall_openbsd_arm.s
    │       │   │   ├── zsyscall_openbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_arm64.s
    │       │   │   ├── zsyscall_openbsd_mips64.go
    │       │   │   ├── zsyscall_openbsd_mips64.s
    │       │   │   ├── zsyscall_openbsd_ppc64.go
    │       │   │   ├── zsyscall_openbsd_ppc64.s
    │       │   │   ├── zsyscall_openbsd_riscv64.go
    │       │   │   ├── zsyscall_openbsd_riscv64.s
    │       │   │   ├── zsyscall_solaris_amd64.go
    │       │   │   ├── zsyscall_zos_s390x.go
    │       │   │   ├── zsysctl_openbsd_386.go
    │       │   │   ├── zsysctl_openbsd_amd64.go
    │       │   │   ├── zsysctl_openbsd_arm.go
    │       │   │   ├── zsysctl_openbsd_arm64.go
    │       │   │   ├── zsysctl_openbsd_mips64.go
    │       │   │   ├── zsysctl_openbsd_ppc64.go
    │       │   │   ├── zsysctl_openbsd_riscv64.go
    │       │   │   ├── zsysnum_darwin_amd64.go
    │       │   │   ├── zsysnum_darwin_arm64.go
    │       │   │   ├── zsysnum_dragonfly_amd64.go
    │       │   │   ├── zsysnum_freebsd_386.go
    │       │   │   ├── zsysnum_freebsd_amd64.go
    │       │   │   ├── zsysnum_freebsd_arm.go
    │       │   │   ├── zsysnum_freebsd_arm64.go
    │       │   │   ├── zsysnum_freebsd_riscv64.go
    │       │   │   ├── zsysnum_linux_386.go
    │       │   │   ├── zsysnum_linux_amd64.go
    │       │   │   ├── zsysnum_linux_arm.go
    │       │   │   ├── zsysnum_linux_arm64.go
    │       │   │   ├── zsysnum_linux_loong64.go
    │       │   │   ├── zsysnum_linux_mips.go
    │       │   │   ├── zsysnum_linux_mips64.go
    │       │   │   ├── zsysnum_linux_mips64le.go
    │       │   │   ├── zsysnum_linux_mipsle.go
    │       │   │   ├── zsysnum_linux_ppc.go
    │       │   │   ├── zsysnum_linux_ppc64.go
    │       │   │   ├── zsysnum_linux_ppc64le.go
    │       │   │   ├── zsysnum_linux_riscv64.go
    │       │   │   ├── zsysnum_linux_s390x.go
    │       │   │   ├── zsysnum_linux_sparc64.go
    │       │   │   ├── zsysnum_netbsd_386.go
    │       │   │   ├── zsysnum_netbsd_amd64.go
    │       │   │   ├── zsysnum_netbsd_arm.go
    │       │   │   ├── zsysnum_netbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_386.go
    │       │   │   ├── zsysnum_openbsd_amd64.go
    │       │   │   ├── zsysnum_openbsd_arm.go
    │       │   │   ├── zsysnum_openbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_mips64.go
    │       │   │   ├── zsysnum_openbsd_ppc64.go
    │       │   │   ├── zsysnum_openbsd_riscv64.go
    │       │   │   ├── zsysnum_zos_s390x.go
    │       │   │   ├── ztypes_aix_ppc.go
    │       │   │   ├── ztypes_aix_ppc64.go
    │       │   │   ├── ztypes_darwin_amd64.go
    │       │   │   ├── ztypes_darwin_arm64.go
    │       │   │   ├── ztypes_dragonfly_amd64.go
    │       │   │   ├── ztypes_freebsd_386.go
    │       │   │   ├── ztypes_freebsd_amd64.go
    │       │   │   ├── ztypes_freebsd_arm.go
    │       │   │   ├── ztypes_freebsd_arm64.go
    │       │   │   ├── ztypes_freebsd_riscv64.go
    │       │   │   ├── ztypes_linux.go
    │       │   │   ├── ztypes_linux_386.go
    │       │   │   ├── ztypes_linux_amd64.go
    │       │   │   ├── ztypes_linux_arm.go
    │       │   │   ├── ztypes_linux_arm64.go
    │       │   │   ├── ztypes_linux_loong64.go
    │       │   │   ├── ztypes_linux_mips.go
    │       │   │   ├── ztypes_linux_mips64.go
    │       │   │   ├── ztypes_linux_mips64le.go
    │       │   │   ├── ztypes_linux_mipsle.go
    │       │   │   ├── ztypes_linux_ppc.go
    │       │   │   ├── ztypes_linux_ppc64.go
    │       │   │   ├── ztypes_linux_ppc64le.go
    │       │   │   ├── ztypes_linux_riscv64.go
    │       │   │   ├── ztypes_linux_s390x.go
    │       │   │   ├── ztypes_linux_sparc64.go
    │       │   │   ├── ztypes_netbsd_386.go
    │       │   │   ├── ztypes_netbsd_amd64.go
    │       │   │   ├── ztypes_netbsd_arm.go
    │       │   │   ├── ztypes_netbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_386.go
    │       │   │   ├── ztypes_openbsd_amd64.go
    │       │   │   ├── ztypes_openbsd_arm.go
    │       │   │   ├── ztypes_openbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_mips64.go
    │       │   │   ├── ztypes_openbsd_ppc64.go
    │       │   │   ├── ztypes_openbsd_riscv64.go
    │       │   │   ├── ztypes_solaris_amd64.go
    │       │   │   └── ztypes_zos_s390x.go
    │       │   └── windows/
    │       │       ├── aliases.go
    │       │       ├── dll_windows.go
    │       │       ├── env_windows.go
    │       │       ├── eventlog.go
    │       │       ├── exec_windows.go
    │       │       ├── memory_windows.go
    │       │       ├── mkerrors.bash
    │       │       ├── mkknownfolderids.bash
    │       │       ├── mksyscall.go
    │       │       ├── race.go
    │       │       ├── race0.go
    │       │       ├── security_windows.go
    │       │       ├── service.go
    │       │       ├── setupapi_windows.go
    │       │       ├── str.go
    │       │       ├── syscall.go
    │       │       ├── syscall_windows.go
    │       │       ├── types_windows.go
    │       │       ├── types_windows_386.go
    │       │       ├── types_windows_amd64.go
    │       │       ├── types_windows_arm.go
    │       │       ├── types_windows_arm64.go
    │       │       ├── zerrors_windows.go
    │       │       ├── zknownfolderids_windows.go
    │       │       └── zsyscall_windows.go
    │       ├── text/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── encoding/
    │       │   │   ├── charmap/
    │       │   │   │   ├── charmap.go
    │       │   │   │   └── tables.go
    │       │   │   ├── encoding.go
    │       │   │   ├── htmlindex/
    │       │   │   │   ├── htmlindex.go
    │       │   │   │   ├── map.go
    │       │   │   │   └── tables.go
    │       │   │   ├── internal/
    │       │   │   │   ├── identifier/
    │       │   │   │   │   ├── identifier.go
    │       │   │   │   │   └── mib.go
    │       │   │   │   └── internal.go
    │       │   │   ├── japanese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── eucjp.go
    │       │   │   │   ├── iso2022jp.go
    │       │   │   │   ├── shiftjis.go
    │       │   │   │   └── tables.go
    │       │   │   ├── korean/
    │       │   │   │   ├── euckr.go
    │       │   │   │   └── tables.go
    │       │   │   ├── simplifiedchinese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── gbk.go
    │       │   │   │   ├── hzgb2312.go
    │       │   │   │   └── tables.go
    │       │   │   ├── traditionalchinese/
    │       │   │   │   ├── big5.go
    │       │   │   │   └── tables.go
    │       │   │   └── unicode/
    │       │   │       ├── override.go
    │       │   │       └── unicode.go
    │       │   ├── internal/
    │       │   │   ├── language/
    │       │   │   │   ├── common.go
    │       │   │   │   ├── compact/
    │       │   │   │   │   ├── compact.go
    │       │   │   │   │   ├── language.go
    │       │   │   │   │   ├── parents.go
    │       │   │   │   │   ├── tables.go
    │       │   │   │   │   └── tags.go
    │       │   │   │   ├── compact.go
    │       │   │   │   ├── compose.go
    │       │   │   │   ├── coverage.go
    │       │   │   │   ├── language.go
    │       │   │   │   ├── lookup.go
    │       │   │   │   ├── match.go
    │       │   │   │   ├── parse.go
    │       │   │   │   ├── tables.go
    │       │   │   │   └── tags.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── utf8internal/
    │       │   │       └── utf8internal.go
    │       │   ├── language/
    │       │   │   ├── coverage.go
    │       │   │   ├── doc.go
    │       │   │   ├── language.go
    │       │   │   ├── match.go
    │       │   │   ├── parse.go
    │       │   │   ├── tables.go
    │       │   │   └── tags.go
    │       │   ├── runes/
    │       │   │   ├── cond.go
    │       │   │   └── runes.go
    │       │   ├── secure/
    │       │   │   └── bidirule/
    │       │   │       ├── bidirule.go
    │       │   │       ├── bidirule10.0.0.go
    │       │   │       └── bidirule9.0.0.go
    │       │   ├── transform/
    │       │   │   └── transform.go
    │       │   └── unicode/
    │       │       ├── bidi/
    │       │       │   ├── bidi.go
    │       │       │   ├── bracket.go
    │       │       │   ├── core.go
    │       │       │   ├── prop.go
    │       │       │   ├── tables10.0.0.go
    │       │       │   ├── tables11.0.0.go
    │       │       │   ├── tables12.0.0.go
    │       │       │   ├── tables13.0.0.go
    │       │       │   ├── tables15.0.0.go
    │       │       │   ├── tables9.0.0.go
    │       │       │   └── trieval.go
    │       │       └── norm/
    │       │           ├── composition.go
    │       │           ├── forminfo.go
    │       │           ├── input.go
    │       │           ├── iter.go
    │       │           ├── normalize.go
    │       │           ├── readwriter.go
    │       │           ├── tables10.0.0.go
    │       │           ├── tables11.0.0.go
    │       │           ├── tables12.0.0.go
    │       │           ├── tables13.0.0.go
    │       │           ├── tables15.0.0.go
    │       │           ├── tables9.0.0.go
    │       │           ├── transform.go
    │       │           └── trie.go
    │       └── tools/
    │           ├── LICENSE
    │           ├── PATENTS
    │           └── go/
    │               └── ast/
    │                   └── inspector/
    │                       ├── inspector.go
    │                       └── typeof.go
    ├── google.golang.org/
    │   ├── api/
    │   │   ├── AUTHORS
    │   │   ├── CONTRIBUTORS
    │   │   ├── LICENSE
    │   │   ├── cloudresourcemanager/
    │   │   │   └── v1/
    │   │   │       ├── cloudresourcemanager-api.json
    │   │   │       └── cloudresourcemanager-gen.go
    │   │   ├── compute/
    │   │   │   └── v1/
    │   │   │       ├── compute-api.json
    │   │   │       └── compute-gen.go
    │   │   ├── container/
    │   │   │   └── v1/
    │   │   │       ├── container-api.json
    │   │   │       └── container-gen.go
    │   │   ├── dns/
    │   │   │   └── v1/
    │   │   │       ├── dns-api.json
    │   │   │       └── dns-gen.go
    │   │   ├── gensupport/
    │   │   │   ├── backoff.go
    │   │   │   ├── buffer.go
    │   │   │   ├── doc.go
    │   │   │   ├── header.go
    │   │   │   ├── json.go
    │   │   │   ├── jsonfloat.go
    │   │   │   ├── media.go
    │   │   │   ├── params.go
    │   │   │   ├── resumable.go
    │   │   │   ├── retry.go
    │   │   │   └── send.go
    │   │   ├── googleapi/
    │   │   │   ├── googleapi.go
    │   │   │   ├── internal/
    │   │   │   │   └── uritemplates/
    │   │   │   │       ├── LICENSE
    │   │   │   │       ├── uritemplates.go
    │   │   │   │       └── utils.go
    │   │   │   ├── transport/
    │   │   │   │   └── apikey.go
    │   │   │   └── types.go
    │   │   ├── iam/
    │   │   │   └── v1/
    │   │   │       ├── iam-api.json
    │   │   │       └── iam-gen.go
    │   │   ├── internal/
    │   │   │   ├── creds.go
    │   │   │   ├── pool.go
    │   │   │   ├── service-account.json
    │   │   │   └── settings.go
    │   │   ├── iterator/
    │   │   │   └── iterator.go
    │   │   ├── option/
    │   │   │   ├── credentials_go19.go
    │   │   │   ├── credentials_notgo19.go
    │   │   │   └── option.go
    │   │   ├── sqladmin/
    │   │   │   └── v1beta4/
    │   │   │       ├── sqladmin-api.json
    │   │   │       └── sqladmin-gen.go
    │   │   ├── storage/
    │   │   │   └── v1/
    │   │   │       ├── storage-api.json
    │   │   │       └── storage-gen.go
    │   │   └── transport/
    │   │       └── http/
    │   │           ├── dial.go
    │   │           ├── dial_appengine.go
    │   │           └── internal/
    │   │               └── propagation/
    │   │                   └── http.go
    │   ├── appengine/
    │   │   ├── LICENSE
    │   │   ├── internal/
    │   │   │   ├── api.go
    │   │   │   ├── api_classic.go
    │   │   │   ├── api_common.go
    │   │   │   ├── app_id.go
    │   │   │   ├── base/
    │   │   │   │   ├── api_base.pb.go
    │   │   │   │   └── api_base.proto
    │   │   │   ├── datastore/
    │   │   │   │   ├── datastore_v3.pb.go
    │   │   │   │   └── datastore_v3.proto
    │   │   │   ├── identity.go
    │   │   │   ├── identity_classic.go
    │   │   │   ├── identity_flex.go
    │   │   │   ├── identity_vm.go
    │   │   │   ├── internal.go
    │   │   │   ├── log/
    │   │   │   │   ├── log_service.pb.go
    │   │   │   │   └── log_service.proto
    │   │   │   ├── main.go
    │   │   │   ├── main_common.go
    │   │   │   ├── main_vm.go
    │   │   │   ├── metadata.go
    │   │   │   ├── net.go
    │   │   │   ├── regen.sh
    │   │   │   ├── remote_api/
    │   │   │   │   ├── remote_api.pb.go
    │   │   │   │   └── remote_api.proto
    │   │   │   ├── transaction.go
    │   │   │   └── urlfetch/
    │   │   │       ├── urlfetch_service.pb.go
    │   │   │       └── urlfetch_service.proto
    │   │   └── urlfetch/
    │   │       └── urlfetch.go
    │   ├── genproto/
    │   │   ├── LICENSE
    │   │   └── googleapis/
    │   │       ├── api/
    │   │       │   └── annotations/
    │   │       │       ├── annotations.pb.go
    │   │       │       └── http.pb.go
    │   │       ├── iam/
    │   │       │   └── v1/
    │   │       │       ├── iam_policy.pb.go
    │   │       │       └── policy.pb.go
    │   │       └── rpc/
    │   │           ├── code/
    │   │           │   └── code.pb.go
    │   │           └── status/
    │   │               └── status.pb.go
    │   ├── grpc/
    │   │   ├── .travis.yml
    │   │   ├── AUTHORS
    │   │   ├── CONTRIBUTING.md
    │   │   ├── LICENSE
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   ├── backoff.go
    │   │   ├── balancer/
    │   │   │   ├── balancer.go
    │   │   │   ├── base/
    │   │   │   │   ├── balancer.go
    │   │   │   │   └── base.go
    │   │   │   └── roundrobin/
    │   │   │       └── roundrobin.go
    │   │   ├── balancer.go
    │   │   ├── balancer_conn_wrappers.go
    │   │   ├── balancer_v1_wrapper.go
    │   │   ├── binarylog/
    │   │   │   └── grpc_binarylog_v1/
    │   │   │       └── binarylog.pb.go
    │   │   ├── call.go
    │   │   ├── clientconn.go
    │   │   ├── codec.go
    │   │   ├── codegen.sh
    │   │   ├── codes/
    │   │   │   ├── code_string.go
    │   │   │   └── codes.go
    │   │   ├── connectivity/
    │   │   │   └── connectivity.go
    │   │   ├── credentials/
    │   │   │   ├── credentials.go
    │   │   │   └── internal/
    │   │   │       ├── syscallconn.go
    │   │   │       └── syscallconn_appengine.go
    │   │   ├── dialoptions.go
    │   │   ├── doc.go
    │   │   ├── encoding/
    │   │   │   ├── encoding.go
    │   │   │   └── proto/
    │   │   │       └── proto.go
    │   │   ├── grpclog/
    │   │   │   ├── grpclog.go
    │   │   │   ├── logger.go
    │   │   │   └── loggerv2.go
    │   │   ├── install_gae.sh
    │   │   ├── interceptor.go
    │   │   ├── internal/
    │   │   │   ├── backoff/
    │   │   │   │   └── backoff.go
    │   │   │   ├── binarylog/
    │   │   │   │   ├── binarylog.go
    │   │   │   │   ├── binarylog_testutil.go
    │   │   │   │   ├── env_config.go
    │   │   │   │   ├── method_logger.go
    │   │   │   │   ├── regenerate.sh
    │   │   │   │   ├── sink.go
    │   │   │   │   └── util.go
    │   │   │   ├── channelz/
    │   │   │   │   ├── funcs.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_linux.go
    │   │   │   │   ├── types_nonlinux.go
    │   │   │   │   ├── util_linux.go
    │   │   │   │   └── util_nonlinux.go
    │   │   │   ├── envconfig/
    │   │   │   │   └── envconfig.go
    │   │   │   ├── grpcrand/
    │   │   │   │   └── grpcrand.go
    │   │   │   ├── grpcsync/
    │   │   │   │   └── event.go
    │   │   │   ├── internal.go
    │   │   │   ├── syscall/
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   └── syscall_nonlinux.go
    │   │   │   └── transport/
    │   │   │       ├── bdp_estimator.go
    │   │   │       ├── controlbuf.go
    │   │   │       ├── defaults.go
    │   │   │       ├── flowcontrol.go
    │   │   │       ├── handler_server.go
    │   │   │       ├── http2_client.go
    │   │   │       ├── http2_server.go
    │   │   │       ├── http_util.go
    │   │   │       ├── log.go
    │   │   │       └── transport.go
    │   │   ├── keepalive/
    │   │   │   └── keepalive.go
    │   │   ├── metadata/
    │   │   │   └── metadata.go
    │   │   ├── naming/
    │   │   │   ├── dns_resolver.go
    │   │   │   └── naming.go
    │   │   ├── peer/
    │   │   │   └── peer.go
    │   │   ├── picker_wrapper.go
    │   │   ├── pickfirst.go
    │   │   ├── proxy.go
    │   │   ├── resolver/
    │   │   │   ├── dns/
    │   │   │   │   └── dns_resolver.go
    │   │   │   ├── passthrough/
    │   │   │   │   └── passthrough.go
    │   │   │   └── resolver.go
    │   │   ├── resolver_conn_wrapper.go
    │   │   ├── rpc_util.go
    │   │   ├── server.go
    │   │   ├── service_config.go
    │   │   ├── stats/
    │   │   │   ├── handlers.go
    │   │   │   └── stats.go
    │   │   ├── status/
    │   │   │   └── status.go
    │   │   ├── stream.go
    │   │   ├── tap/
    │   │   │   └── tap.go
    │   │   ├── trace.go
    │   │   ├── version.go
    │   │   └── vet.sh
    │   └── protobuf/
    │       ├── AUTHORS
    │       ├── CONTRIBUTORS
    │       ├── LICENSE
    │       ├── PATENTS
    │       ├── encoding/
    │       │   ├── prototext/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   └── encode.go
    │       │   └── protowire/
    │       │       └── wire.go
    │       ├── internal/
    │       │   ├── descfmt/
    │       │   │   └── stringer.go
    │       │   ├── descopts/
    │       │   │   └── options.go
    │       │   ├── detrand/
    │       │   │   └── rand.go
    │       │   ├── encoding/
    │       │   │   ├── defval/
    │       │   │   │   └── default.go
    │       │   │   ├── messageset/
    │       │   │   │   └── messageset.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── text/
    │       │   │       ├── decode.go
    │       │   │       ├── decode_number.go
    │       │   │       ├── decode_string.go
    │       │   │       ├── decode_token.go
    │       │   │       ├── doc.go
    │       │   │       └── encode.go
    │       │   ├── errors/
    │       │   │   ├── errors.go
    │       │   │   ├── is_go112.go
    │       │   │   └── is_go113.go
    │       │   ├── filedesc/
    │       │   │   ├── build.go
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_lazy.go
    │       │   │   ├── desc_list.go
    │       │   │   ├── desc_list_gen.go
    │       │   │   └── placeholder.go
    │       │   ├── filetype/
    │       │   │   └── build.go
    │       │   ├── flags/
    │       │   │   ├── flags.go
    │       │   │   ├── proto_legacy_disable.go
    │       │   │   └── proto_legacy_enable.go
    │       │   ├── genid/
    │       │   │   ├── any_gen.go
    │       │   │   ├── api_gen.go
    │       │   │   ├── descriptor_gen.go
    │       │   │   ├── doc.go
    │       │   │   ├── duration_gen.go
    │       │   │   ├── empty_gen.go
    │       │   │   ├── field_mask_gen.go
    │       │   │   ├── goname.go
    │       │   │   ├── map_entry.go
    │       │   │   ├── source_context_gen.go
    │       │   │   ├── struct_gen.go
    │       │   │   ├── timestamp_gen.go
    │       │   │   ├── type_gen.go
    │       │   │   ├── wrappers.go
    │       │   │   └── wrappers_gen.go
    │       │   ├── impl/
    │       │   │   ├── api_export.go
    │       │   │   ├── checkinit.go
    │       │   │   ├── codec_extension.go
    │       │   │   ├── codec_field.go
    │       │   │   ├── codec_gen.go
    │       │   │   ├── codec_map.go
    │       │   │   ├── codec_map_go111.go
    │       │   │   ├── codec_map_go112.go
    │       │   │   ├── codec_message.go
    │       │   │   ├── codec_messageset.go
    │       │   │   ├── codec_reflect.go
    │       │   │   ├── codec_tables.go
    │       │   │   ├── codec_unsafe.go
    │       │   │   ├── convert.go
    │       │   │   ├── convert_list.go
    │       │   │   ├── convert_map.go
    │       │   │   ├── decode.go
    │       │   │   ├── encode.go
    │       │   │   ├── enum.go
    │       │   │   ├── extension.go
    │       │   │   ├── legacy_enum.go
    │       │   │   ├── legacy_export.go
    │       │   │   ├── legacy_extension.go
    │       │   │   ├── legacy_file.go
    │       │   │   ├── legacy_message.go
    │       │   │   ├── merge.go
    │       │   │   ├── merge_gen.go
    │       │   │   ├── message.go
    │       │   │   ├── message_reflect.go
    │       │   │   ├── message_reflect_field.go
    │       │   │   ├── message_reflect_gen.go
    │       │   │   ├── pointer_reflect.go
    │       │   │   ├── pointer_unsafe.go
    │       │   │   ├── validate.go
    │       │   │   └── weak.go
    │       │   ├── order/
    │       │   │   ├── order.go
    │       │   │   └── range.go
    │       │   ├── pragma/
    │       │   │   └── pragma.go
    │       │   ├── set/
    │       │   │   └── ints.go
    │       │   ├── strs/
    │       │   │   ├── strings.go
    │       │   │   ├── strings_pure.go
    │       │   │   └── strings_unsafe.go
    │       │   └── version/
    │       │       └── version.go
    │       ├── proto/
    │       │   ├── checkinit.go
    │       │   ├── decode.go
    │       │   ├── decode_gen.go
    │       │   ├── doc.go
    │       │   ├── encode.go
    │       │   ├── encode_gen.go
    │       │   ├── equal.go
    │       │   ├── extension.go
    │       │   ├── merge.go
    │       │   ├── messageset.go
    │       │   ├── proto.go
    │       │   ├── proto_methods.go
    │       │   ├── proto_reflect.go
    │       │   ├── reset.go
    │       │   ├── size.go
    │       │   ├── size_gen.go
    │       │   └── wrappers.go
    │       ├── reflect/
    │       │   ├── protodesc/
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_resolve.go
    │       │   │   ├── desc_validate.go
    │       │   │   └── proto.go
    │       │   ├── protoreflect/
    │       │   │   ├── methods.go
    │       │   │   ├── proto.go
    │       │   │   ├── source.go
    │       │   │   ├── source_gen.go
    │       │   │   ├── type.go
    │       │   │   ├── value.go
    │       │   │   ├── value_pure.go
    │       │   │   ├── value_union.go
    │       │   │   └── value_unsafe.go
    │       │   └── protoregistry/
    │       │       └── registry.go
    │       ├── runtime/
    │       │   ├── protoiface/
    │       │   │   ├── legacy.go
    │       │   │   └── methods.go
    │       │   └── protoimpl/
    │       │       ├── impl.go
    │       │       └── version.go
    │       └── types/
    │           ├── descriptorpb/
    │           │   └── descriptor.pb.go
    │           └── known/
    │               ├── anypb/
    │               │   └── any.pb.go
    │               ├── durationpb/
    │               │   └── duration.pb.go
    │               └── timestamppb/
    │                   └── timestamp.pb.go
    ├── gopkg.in/
    │   ├── yaml.v2/
    │   │   ├── .travis.yml
    │   │   ├── LICENSE
    │   │   ├── LICENSE.libyaml
    │   │   ├── NOTICE
    │   │   ├── README.md
    │   │   ├── apic.go
    │   │   ├── decode.go
    │   │   ├── emitterc.go
    │   │   ├── encode.go
    │   │   ├── parserc.go
    │   │   ├── readerc.go
    │   │   ├── resolve.go
    │   │   ├── scannerc.go
    │   │   ├── sorter.go
    │   │   ├── writerc.go
    │   │   ├── yaml.go
    │   │   ├── yamlh.go
    │   │   └── yamlprivateh.go
    │   └── yaml.v3/
    │       ├── LICENSE
    │       ├── NOTICE
    │       ├── README.md
    │       ├── apic.go
    │       ├── decode.go
    │       ├── emitterc.go
    │       ├── encode.go
    │       ├── parserc.go
    │       ├── readerc.go
    │       ├── resolve.go
    │       ├── scannerc.go
    │       ├── sorter.go
    │       ├── writerc.go
    │       ├── yaml.go
    │       ├── yamlh.go
    │       └── yamlprivateh.go
    └── modules.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .adr-dir
================================================
docs/architecture/decisions


================================================
FILE: .github/dependabot.yml
================================================
---
version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "daily"


================================================
FILE: .github/workflows/go.yml
================================================
---
name: go
on:
  push:
  pull_request:
jobs:
  lint:
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest]
    name: lint
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v6
        with:
          submodules: true
      - uses: actions/setup-go@v6
        with:
          go-version-file: go.mod
      - uses: golangci/golangci-lint-action@v9

  test-unit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6
      with:
        submodules: true
    - uses: actions/setup-go@v6
      with:
        go-version-file: go.mod
    - run: scripts/test


================================================
FILE: .gitignore
================================================
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so

# Folders
_obj
_test
.idea
ignored
.direnv
terraform-binaries

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe
*.test
*.prof

bbl-state.json
state.json*
integration_config.json
/*.json

# Debug symbols
bbl/debug

# Environment
.env*

# packrd
**/*-packr.go
bbl/packrd


================================================
FILE: .gitmodules
================================================
[submodule "bosh/deployments/bosh-deployment"]
	path = bosh/deployments/bosh-deployment
	url = https://github.com/cloudfoundry/bosh-deployment.git
[submodule "bosh/deployments/jumpbox-deployment"]
	path = bosh/deployments/jumpbox-deployment
	url = https://github.com/cloudfoundry/jumpbox-deployment.git


================================================
FILE: .golangci.yml
================================================
version: "2"

linters:
  default: standard

  settings:
    errcheck:
      check-blank: true # assignment to blank identifier: `_ := someFunc()`.

formatters:
  enable:
  - goimports


================================================
FILE: CHANGELOG.md
================================================
## v7.0.0 (Unreleased)

**BACKWARD INCOMPATIBILITIES / NOTES:**

**FEATURES / IMPROVEMENTS:**

**BUG FIXES:**

## v6.7.0

**FEATURES / IMPROVEMENTS:**
* Terraform is no longer required because terraform is included in the BBL binary.

**BUG FIXES:**
* In previous versions `bbl ssh --director` only succeeded if `bbl ssh --jumpbox` had been run in the past.

## v6.6.0
**FEATURES / IMPROVEMENTS:**
* We have added bbl ssh --director and bbl ssh --jumpbox to assist you in this tedious and common step taken during debugging your environment.

**BUG FIXES:**
* We now promise to consistently not to remove any custom files from the state directory after you bbl down.

## v6.0.0 (January 26, 2018)

**BACKWARD INCOMPATIBILITIES / NOTES:**
* Deprecated commands were removed: `create-lbs`, `update-lbs`, `delete-lbs`, `cloud-config`, `bosh-deployment-vars`, `jumpbox-deployment-vars`
* Deprecated flags were removed: `--no-director`, `--ops-file`, `--gcp-project-id`, `--gcp-zone`
* Requies `bosh-cli v2.0.48`

**FEATURES / IMPROVEMENTS:**
* Support to read cloud-config ops-files alphabetically when those files are included in the cloud-config directory of your bbl state directory.
* Support to apply overrides and additional terraform templates when those files are included in the terraform directory of your bbl state directory.
* Support for Azure concourse load balancers.
* IAAS credentials no longer written to bbl state directory.
* Variables written to `vars/terraform.tfvars` with a `jumpbox__` prefix will
be passed through to the deployment vars file for the jumpbox.
* Variables written to `vars/terraform.tfvars` with a `director__` prefix will
be passed through to the deployment vars file for the director.
* Provide your own `.tfvars` file in `vars/`
* In order to avoid having your changes overwritten during upgrades, bbl will
now use `create-director-override.sh` and `create-jumpbox-override.sh` if provided instead of the defaults.
* Bring your own VPC
* Added `BBL_STATE_DIRECTORY` environment variable.

**BUG FIXES:**
* vSphere cloud-config reserves the IPs for the jumpbox and director.


## v5.1.0 (October 18, 2017)
v5.0.0 was a pre-release for the major breaking changes.

**BACKWARD INCOMPATIBILITIES / NOTES:**
* bbl no longer remembers your IaaS keys for you. This is another **breaking**
change that affects all IaaSes. Please set IaaS credentials for any command
that will modify Infrastructure (up, down, create-lbs, etc.)
* If you want to **migrate from bbl 3.0 to 5.0 on AWS** environments, you must hit a
`4.0.0` release first. `4.0.0` migrates you from a CloudFormation backend, which is the
IaaS specific past, to a Terraform backend, which is the nearly-IaaS-agnostic future.
* If you **ssh to your job vms** in your pipeline using bbl director-address, please
adjust to use bbl jumpbox-address. This is available in version `4.10.0` and `4.10.1`
in a forward compatible manner: it always returns the `BOSH_GW_HOST`, whether the
director is the gateway or the jumpbox is the gateway.
* If you **ssh to your BOSH director** in your pipeline, well, you can't very easily
now. With SOCKS5 proxies we set up the gateway for you, and all BOSH commands
respect `BOSH_ALL_PROXY` (like bosh ssh).
We've [documented](https://github.com/cloudfoundry/bosh-bootloader/blob/master/docs/howto-ssh.md)
how you can SSH to the director if you really need to.

**FEATURES / IMPROVEMENTS:**
* BOSH gets deployed with credhub now. This should be a nonbreaking change,
as long as you specify a var store when you deploy it will continue to work as you expect.
* The BOSH director API is now only accessible via a jumpbox. This is the most
painful and most **breaking** part of this release. bbl will set up a SOCKS5 proxy
for you if you run `eval "$(bbl print-env)"`. This comes for free if you use
cf-deployment-concourse-tasks or bosh-deployment-resource.
* Adds a credhub Loadbalancer and DNS for the Secure Service Instance Credential effort.
* Adds a checksum to the release notes
* Opens the BOSH credhub to traffic from the jumpbox

**BUG FIXES:**
* Fixes jumpbox related commands on Azure that were broken in `5.0.0`.


## v4.0.0 (July 28, 2017)

**BACKWARD INCOMPATIBILITIES / NOTES:**
* BBL 4.0 is a breaking change, but only for AWS environments. While I emphasize
the POTENTIALLY BREAKING part we have gone to great lengths to automatically
migrate users and test this migration progress to make it as smooth as possible
while we migrate you from cloudformation to Terraform. This migration will happen
the next time you attempt to modify your infrastructure using 4.0 or above.
* AWS users will however experience downtime on load-balanced services (gorouter
or atc). If you have a non-ephemeral environment with uptime concerns, open an
issue and we can help suggest a zero downtime migration.

To migrate and restore load balancing teams must:
1. Install terraform if you haven't already
1. run bbl create-lbs again (or just bbl up if you don't use load balancers).
1. `bosh recreate router`, `atc`, and other vms that use the load balancer VM extensions (or ignore this step if you don't use load balancers)

**FEATURES / IMPROVEMENTS:**
* IAM instance profiles. Fewer IaaS credentials on fewer disks.
* The full suite of loadbalancers that GCP already supports
* Error messages without opening up AWS console to look at CloudFormation
* A DNS zone with the names of these loadbalancers if they use bbl create-lbs --domain.
* A lot of stealth-mode changes to the --jumpbox feature flag

**BUG FIXES:**


## v3.0.0 (March 15, 2017)

**BACKWARD INCOMPATIBILITIES / NOTES:**
* This is a breaking change which was necessary to roll out new directors built
using bosh-deployment. If you attempt to use an existing state directory created
with bbl v2 then bbl will refuse to proceed. For ephemeral environments this
shouldn’t pose a problem, just make sure you have finished teardown before upgrading.
For long-lived environments you may want to stand up a new environment before
tearing down the old with bbl v2.4.1.
* We’ve added a requirement that the bosh 2.0+ CLI be installed on your path and
be named “bosh”. bosh-init is no longer required.

**FEATURES / IMPROVEMENTS:**
* GCP support is added.
* For trivial preference changes, such as the number of workers or ARP cache
flush, you can supply an ops file with bbl up -o ops-file.yml.
* For more intense changes such as boshlite-on-gcp or credhub you may find it
easier to run bbl up --no-director and then deploy your director with
bosh-deployment. You can read more about this workflow in our docs.

**BUG FIXES:**


## v2.0.0 (November 1, 2016)

**FEATURES / IMPROVEMENTS:**
* bbl lbs commands fast-fails when bbl-state.json does not exist


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to BOSH-Bootloader

The Infrastructure team accepts contributions via pull request against master.

To verify your changes before submitting a pull request:

1. Run unit tests

  ```
    ~/bosh-bootloader/scripts/test
  ```

1. Run acceptance tests

  ```
    ~/bosh-bootloader/scripts/acceptance-tests IAAS
  ```

1. Add tests

Add unit tests for your feature.

## Need help?

The Infrastructure team is available in the #bbl-users channel in [CF slack](https://cloudfoundry.slack.com).


================================================
FILE: LICENSE
================================================
                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "{}"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright {yyyy} {name of copyright owner}

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.


================================================
FILE: NOTICE
================================================
bosh-bootloader

Copyright (c) CloudFoundry.org Foundation, Inc. 2016. All Rights Reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: README.md
================================================
[![Build](https://bosh.ci.cloudfoundry.org/api/v1/teams/main/pipelines/bosh-bootloader/badge)](https://bosh.ci.cloudfoundry.org/teams/main/pipelines/bosh-bootloader)

# bosh-bootloader
Also known as `bbl` *(pronounced: "bubble")*, bosh-bootloader is a command line utility for standing up BOSH
on an IaaS. `bbl` currently supports AWS, GCP, Microsoft Azure, Openstack and vSphere.

* [CI](https://infra.ci.cf-app.com/teams/main/pipelines/bosh-bootloader/)
* [Tracker](https://www.pivotaltracker.com/n/projects/1488988)

## Docs

- [Getting Started: GCP](docs/getting-started-gcp.md)
- [Deploying Concourse](docs/concourse.md)
- [Upgrade](docs/upgrade.md)
- [Advanced Configuration](docs/advanced-configuration.md)

## Prerequisites

### Install Dependencies

The following should be installed on your local machine
- [bosh-cli](https://bosh.io/docs/cli-v2.html)
- [bosh create-env dependencies](https://bosh.io/docs/cli-env-deps.html)
- [terraform](https://www.terraform.io/downloads.html) >= 0.11.0
- ruby (necessary for bosh create-env)

### Install bosh-bootloader using a package manager

**Mac OS X**

```sh
$ brew tap cloudfoundry/tap
$ brew install bosh-cli
$ brew install bbl
```

**Ubuntu/Debian**

```sh
# Install prerequisites
$ sudo apt-get update
$ sudo apt install -y gnupg wget

# Import the CloudFoundry APT repo GPG key
$ wget -q -O - https://raw.githubusercontent.com/cloudfoundry/bosh-apt-resources/master/public.key | sudo apt-key add -

# Add the CloudFoundry APT repo
$ echo "deb http://apt.ci.cloudfoundry.org stable main" | sudo tee /etc/apt/sources.list.d/bosh-cloudfoundry.list

# Refresh metadata and install packages
$ sudo apt-get update
$ sudo apt install -y bosh-cli
$ sudo apt install -y bosh-bootloader
```

**Fedora/RedHat**

```sh
# Install prerequisites
$ sudo dnf install -y gnupg wget

# Add the CloudFoundry YUM repo
$ cat <<EOF | sudo tee /etc/yum.repos.d/bosh-cloudfoundry.repo
[cloudfoundry]
name=CloudFoundry CLI RPMs
baseurl=http://rpm.ci.cloudfoundry.org/
enabled=1
gpgcheck=1
gpgkey=https://raw.githubusercontent.com/cloudfoundry/bosh-apt-resources/master/rpm-public.key
EOF

# Refresh metadata and install packages
$ sudo dnf makecache
$ sudo dnf install -y bosh-cli
$ sudo dnf install -y bosh-bootloader
```

## Usage

### IaaS-Specific Getting Started Guides
- [Getting Started: Azure](docs/getting-started-azure.md)
- [Getting Started: GCP](docs/getting-started-gcp.md)
- [Getting Started: AWS](docs/getting-started-aws.md)
- [Getting Started: vSphere](docs/getting-started-vsphere.md)
- [Getting Started: OpenStack](docs/getting-started-openstack.md)
- [Getting Started: CloudStack](docs/getting-started-cloudstack.md)

### Managing state

The bbl state directory contains all of the files that were used to create your
bosh director. You will need the entire bbl state in order to update, delete, or
run bosh commands against the environment, so you should keep it someone anyone
on your team can access it. However, it is important to note that the bbl state
directory contains very senstive IAAS credentials, so you should keep it
somewhere you feel comfortable storing these credentials, such as an encrypted
bucket.

 filename |  contents
------------ | -------------
``bbl-state.json`` | Environment name, and bbl version metadata
``terraform/`` | The terraform templates bbl used to pave your IaaS. See [docs/advanced-configuration](docs/advanced-configuration.md#terraform) for information on modifying this. 
``vars/`` | This is where bbl will store environment specific variables. Consider storing this outside of version control.
``jumpbox-deployment/`` | The latest [jumpbox-deployment](http://github.com/cloudfoundry/jumpbox-deployment) that has been tested with your version of bbl.
``create-jumpbox.sh`` | The BOSH cli command bbl will use to create your jumpbox.
``bosh-deployment/`` | The latest [bosh-deployment](http://github.com/cloudfoundry/bosh-deployment) that has been tested with your version of bbl
``create-director.sh`` | The BOSH cli command bbl will use to create your director when you run `bbl up`. See [docs/advanced-configuration](docs/advanced-configuration.md#opsfile) for help with modifying this.
``cloud-config/``| The cloud-config yaml that bbl will upload to the director to map IAAS resources to BOSH resources.
``delete-director.sh`` | The BOSH cli command bbl will use to delete your director.
``delete-jumpbox.sh`` | The BOSH cli command bbl will use to delete your jumpbox.

### Troubleshooting

To turn on debugging traces:
- **BBL**: use `bbl --debug` flag.
- [**BOSH**](https://bosh.io/docs/build-cpi/#debugging): export the `BOSH_LOG_LEVEL=debug` and the `BOSH_LOG_PATH=bosh.log` environment variables in the related bbl shell script, such as `create-jumpbox.sh`.
- [**TERRAFORM**](https://developer.hashicorp.com/terraform/internals/debugging): export the `TF_LOG=TRACE` and the `TF_LOG_PATH=terraform.log` environment variables in the related bbl shell script, such as `create-jumpbox.sh`.
- [**CPI**](https://bosh.io/docs/build-cpi/#debugging): override or set cpi configuration, e.g. for vsphere cpi within `jumpbox-deployment/vsphere/cpi.yml` set `http_logging: true` according to [vsphere cpi documentation](https://bosh.io/docs/vsphere-cpi/#global)  

### Tearing down an environment

Once you are done kicking the tires on CF and BOSH, clean up your environment to save IaaS costs:

1. You must first delete any deployments on BOSH. e.g. `bosh -d cf delete-deployment`

1. `bbl destroy` with your IaaS user/account information.

### Automating the automation tool

In order to use `bbl` in your concourse pipelines, the current supported way
for `cf-deployment` is to use the
[cf-deployment-concourse-tasks](https://github.com/cloudfoundry/cf-deployment-concourse-tasks).

There is a work-in-progress concourse resource for bbl:
[bbl-state-resource](https://github.com/cloudfoundry/bbl-state-resource).


================================================
FILE: acceptance-tests/actors/aws.go
================================================
package actors

import (
	"fmt"
	"os"

	awslib "github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/elb"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	. "github.com/onsi/gomega" //nolint:staticcheck

	"github.com/cloudfoundry/bosh-bootloader/application"
	"github.com/cloudfoundry/bosh-bootloader/aws"
	"github.com/cloudfoundry/bosh-bootloader/storage"
	"github.com/cloudfoundry/bosh-bootloader/testhelpers"
)

func NewAWSLBHelper(c acceptance.Config) awsLBHelper {
	creds := storage.AWS{
		AccessKeyID:     c.AWSAccessKeyID,
		SecretAccessKey: c.AWSSecretAccessKey,
		Region:          c.AWSRegion,
	}

	logger := application.NewLogger(os.Stdout, os.Stdin)

	client := aws.NewClient(creds, logger)

	elbConfig := &awslib.Config{
		Credentials: credentials.NewStaticCredentials(creds.AccessKeyID, creds.SecretAccessKey, ""),
		Region:      awslib.String(creds.Region),
	}
	return awsLBHelper{
		client:    client,
		elbClient: elb.New(session.Must(session.NewSession(elbConfig))),
	}
}

func (a awsLBHelper) loadBalancers(vpcName string) []string {
	var loadBalancerNames []string

	vpcID, err := a.client.GetVPC(vpcName)
	Expect(err).NotTo(HaveOccurred())

	loadBalancerOutput, err := a.elbClient.DescribeLoadBalancers(&elb.DescribeLoadBalancersInput{})
	Expect(err).NotTo(HaveOccurred())

	for _, lbDescription := range loadBalancerOutput.LoadBalancerDescriptions {
		if *lbDescription.VPCId == *vpcID {
			loadBalancerNames = append(loadBalancerNames, *lbDescription.LoadBalancerName)
		}
	}

	return loadBalancerNames
}

type awsLBHelper struct {
	client    aws.Client
	elbClient *elb.ELB
}

func (a awsLBHelper) GetLBArgs() []string {
	certPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_CERT)
	Expect(err).NotTo(HaveOccurred())
	chainPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_CHAIN)
	Expect(err).NotTo(HaveOccurred())
	keyPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_KEY)
	Expect(err).NotTo(HaveOccurred())

	return []string{
		"--lb-type", "cf",
		"--lb-cert", certPath,
		"--lb-key", keyPath,
		"--lb-chain", chainPath,
	}
}

func (a awsLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
	Expect(vmExtensions).To(ContainElement("cf-router-network-properties"))
	Expect(vmExtensions).To(ContainElement("diego-ssh-proxy-network-properties"))
	Expect(vmExtensions).To(ContainElement("cf-tcp-router-network-properties"))
}

func (a awsLBHelper) ConfirmLBsExist(envID string) {
	vpcName := fmt.Sprintf("%s-vpc", envID)
	Expect(a.loadBalancers(vpcName)).To(HaveLen(3))
	Expect(a.loadBalancers(vpcName)).To(ConsistOf(
		MatchRegexp(".*-cf-router-lb"),
		MatchRegexp(".*-cf-ssh-lb"),
		MatchRegexp(".*-cf-tcp-lb"),
	))
}

func (a awsLBHelper) ConfirmNoLBsExist(envID string) {
	vpcName := fmt.Sprintf("%s-vpc", envID)
	Expect(a.loadBalancers(vpcName)).To(BeEmpty())
}

func (a awsLBHelper) VerifyBblLBOutput(stdout string) {
	Expect(stdout).To(MatchRegexp("CF Router LB:.*"))
	Expect(stdout).To(MatchRegexp("CF SSH Proxy LB:.*"))
	Expect(stdout).To(MatchRegexp("CF TCP Router LB:.*"))
}

func (a awsLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}


================================================
FILE: acceptance-tests/actors/azure.go
================================================
package actors

import (
	"context"
	"fmt"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"

	. "github.com/onsi/gomega" //nolint:staticcheck
)

type azureLBHelper struct {
	applicationGatewaysClient *armnetwork.ApplicationGatewaysClient
	loadBalancersClient       *armnetwork.LoadBalancersClient
}

func NewAzureLBHelper(config acceptance.Config) azureLBHelper {
	credential, err := azidentity.NewClientSecretCredential(config.AzureTenantID, config.AzureClientID, config.AzureClientSecret, nil)
	Expect(err).NotTo(HaveOccurred())

	agc, err := armnetwork.NewApplicationGatewaysClient(config.AzureTenantID, credential, nil)
	Expect(err).NotTo(HaveOccurred())

	lbc, err := armnetwork.NewLoadBalancersClient(config.AzureTenantID, credential, nil)
	Expect(err).NotTo(HaveOccurred())

	return azureLBHelper{
		loadBalancersClient:       lbc,
		applicationGatewaysClient: agc,
	}
}

func (z azureLBHelper) getLoadBalancer(resourceGroupName, loadBalancerName string) (bool, error) {
	_, err := z.loadBalancersClient.Get(context.TODO(), fmt.Sprintf("%s-bosh", resourceGroupName), loadBalancerName, nil)
	if err != nil {
		return false, err
	}

	return true, nil
}

// GetLBArgs Unused: required by interface for acceptance-tests/actors/iaas_helper.go:23
func (z azureLBHelper) GetLBArgs() []string { //nolint:unused
	return []string{"--lb-type", "concourse"}
}

func (z azureLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
	Expect(vmExtensions).To(ContainElement("lb"))
}

func (z azureLBHelper) ConfirmLBsExist(envID string) {
	exists, err := z.getLoadBalancer(envID, fmt.Sprintf("%s-concourse-lb", envID))
	Expect(err).NotTo(HaveOccurred())
	Expect(exists).To(BeTrue())
}

func (z azureLBHelper) ConfirmNoLBsExist(envID string) {
	exists, err := z.getLoadBalancer(envID, fmt.Sprintf("%s-concourse-lb", envID))
	Expect(err).NotTo(HaveOccurred())
	Expect(exists).To(BeFalse())
}

func (z azureLBHelper) VerifyBblLBOutput(stdout string) {
	Expect(stdout).To(MatchRegexp("Concourse LB:.*"))
}

func (z azureLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}


================================================
FILE: acceptance-tests/actors/bbl.go
================================================
package actors

import (
	"bytes"
	"fmt"
	"io"
	"os"
	"os/exec"
	"strings"
	"syscall"
	"time"

	"github.com/kr/pty"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"

	"github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega" //nolint:staticcheck
	"github.com/onsi/gomega/gbytes"
	"github.com/onsi/gomega/gexec"
)

type BBL struct {
	stateDirectory    string
	pathToBBL         string
	configuration     acceptance.Config
	envID             string
	useBBLStateBucket bool
}

func NewBBL(stateDirectory string, pathToBBL string, configuration acceptance.Config, envIDSuffix string, useBBLStateBucket bool) BBL {
	envIDPrefix := os.Getenv("BBL_TEST_ENV_ID_PREFIX")
	if envIDPrefix == "" {
		envIDPrefix = "bbl-test"
	}

	return BBL{
		stateDirectory:    stateDirectory,
		pathToBBL:         pathToBBL,
		configuration:     configuration,
		envID:             fmt.Sprintf("%s-%s", envIDPrefix, envIDSuffix),
		useBBLStateBucket: useBBLStateBucket,
	}
}

func (b BBL) PredefinedEnvID() string {
	return b.envID
}

func (b BBL) Up(additionalArgs ...string) *gexec.Session {
	args := []string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"up",
	}

	args = append(args, additionalArgs...)

	return b.execute(args, os.Stdout, os.Stderr)
}

func (b BBL) Plan(additionalArgs ...string) *gexec.Session {
	args := []string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"plan",
	}

	args = append(args, additionalArgs...)

	return b.execute(args, os.Stdout, os.Stderr)
}

func (b BBL) Rotate() *gexec.Session {
	return b.execute([]string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"rotate",
	}, os.Stdout, os.Stderr)
}

func (b BBL) VerifySSH(session *gexec.Session, ptmx *os.File) {
	time.Sleep(5 * time.Second)
	fmt.Fprintln(ptmx, "whoami | rev")                        //nolint:errcheck
	Eventually(session.Out, 10).Should(gbytes.Say("xobpmuj")) // jumpbox in reverse
	fmt.Fprintln(ptmx, "exit 0")                              //nolint:errcheck
	Eventually(session, 5).Should(gexec.Exit(0))
}

func (b BBL) JumpboxSSH(output io.Writer) *exec.Cmd {
	return b.interactiveExecute([]string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"ssh",
		"--jumpbox",
	}, output, output, b.VerifySSH)
}

func (b BBL) DirectorSSH(output io.Writer) *exec.Cmd {
	return b.interactiveExecute([]string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"ssh",
		"--director",
	}, output, output, b.VerifySSH)
}

func (b BBL) Destroy() *gexec.Session {
	return b.execute([]string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"destroy",
		"--no-confirm",
	}, os.Stdout, os.Stderr)
}

func (b BBL) Down() *gexec.Session {
	return b.execute([]string{
		"--state-dir", b.stateDirectory,
		"--debug",
		"down",
		"--no-confirm",
	}, os.Stdout, os.Stderr)
}

func (b BBL) CleanupLeftovers(filter string) *gexec.Session {
	return b.execute([]string{
		"--state-dir", b.stateDirectory,
		"cleanup-leftovers",
		"--filter", filter,
		"--no-confirm",
	}, os.Stdout, os.Stderr)
}

func (b BBL) Lbs() string {
	return b.fetchValue("lbs")
}

func (b BBL) DirectorUsername() string {
	return b.fetchValue("director-username")
}

func (b BBL) DirectorPassword() string {
	return b.fetchValue("director-password")
}

func (b BBL) DirectorAddress() string {
	return b.fetchValue("director-address")
}

func (b BBL) DirectorCACert() string {
	return b.fetchValue("director-ca-cert")
}

func (b BBL) JumpboxAddress() string {
	return b.fetchValue("jumpbox-address")
}

func (b BBL) SSHKey() string {
	return b.fetchValue("ssh-key")
}

func (b BBL) DirectorSSHKey() string {
	return b.fetchValue("director-ssh-key")
}

func (b BBL) EnvID() string {
	return b.fetchValue("env-id")
}

func (b BBL) PrintEnv() string {
	return b.fetchValue("print-env")
}

func (b BBL) LatestError() string {
	return b.fetchValue("latest-error")
}

func (b BBL) SaveDirectorCA() string {
	stdout := bytes.NewBuffer([]byte{})
	session := b.execute([]string{
		"--state-dir", b.stateDirectory,
		"director-ca-cert",
	}, stdout, os.Stderr)
	Eventually(session, 10*time.Minute).Should(gexec.Exit(0))

	file, err := os.CreateTemp("", "")
	Expect(err).NotTo(HaveOccurred())
	defer file.Close() //nolint:errcheck

	file.Write(stdout.Bytes()) //nolint:errcheck

	return file.Name()
}

func (b BBL) ExportBoshAllProxy() string {
	lines := strings.Split(b.PrintEnv(), "\n")
	value := getExport("BOSH_ALL_PROXY", lines)
	os.Setenv("BOSH_ALL_PROXY", value) //nolint:errcheck
	return value
}

func (b BBL) StartSSHTunnel() *gexec.Session {
	printEnvLines := strings.Split(b.PrintEnv(), "\n")
	os.Setenv("BOSH_ALL_PROXY", getExport("BOSH_ALL_PROXY", printEnvLines)) //nolint:errcheck

	var sshArgs []string
	for i := 0; i < len(printEnvLines); i++ {
		if strings.HasPrefix(printEnvLines[i], "ssh ") {
			sshCmd := strings.TrimPrefix(printEnvLines[i], "ssh ")
			sshCmd = strings.Replace(sshCmd, "$JUMPBOX_PRIVATE_KEY", getExport("JUMPBOX_PRIVATE_KEY", printEnvLines), -1) //nolint:staticcheck
			sshCmd = strings.Replace(sshCmd, "-f ", "", -1)                                                               //nolint:staticcheck
			sshArgs = strings.Split(sshCmd, " ")
		}
	}

	cmd := exec.Command("ssh", sshArgs...)
	sshSession, err := gexec.Start(cmd, ginkgo.GinkgoWriter, ginkgo.GinkgoWriter)
	Expect(err).NotTo(HaveOccurred())

	return sshSession
}

func getExport(keyName string, lines []string) string {
	for _, line := range lines {
		if strings.HasPrefix(line, fmt.Sprintf("export %s", keyName)) {
			parts := strings.Split(line, " ")
			keyValue := parts[1]
			keyValueParts := strings.Split(keyValue, "=")
			return strings.Join(keyValueParts[1:], "=")
		}
	}
	return ""
}

func (b BBL) fetchValue(value string) string {
	if b.useBBLStateBucket {
		return b.fetchValueFromRemoteBBLState(value)
	}
	return b.fetchValueFromLocalBBLState(value)
}

func (b BBL) fetchValueFromRemoteBBLState(value string) string {
	args := []string{
		"--name", b.envID,
		"--state-bucket", b.configuration.BBLStateBucket,
		value,
	}

	stdout := bytes.NewBuffer([]byte{})
	stderr := bytes.NewBuffer([]byte{})
	b.execute(args, stdout, stderr).Wait(30 * time.Second)
	fmt.Println(stderr)

	return strings.TrimSpace(stdout.String())
}
func (b BBL) fetchValueFromLocalBBLState(value string) string {
	args := []string{
		"--state-dir", b.stateDirectory,
		value,
	}

	stdout := bytes.NewBuffer([]byte{})
	stderr := bytes.NewBuffer([]byte{})
	b.execute(args, stdout, stderr).Wait(30 * time.Second)

	return strings.TrimSpace(stdout.String())
}

func (b BBL) execute(args []string, stdout io.Writer, stderr io.Writer) *gexec.Session {
	cmd := exec.Command(b.pathToBBL, args...)
	session, err := gexec.Start(cmd, stdout, stderr)
	Expect(err).NotTo(HaveOccurred())

	return session
}

// partially cribbed from https://github.com/cloudfoundry/vizzini/blob/master/ssh_test.go#L473
func (b BBL) interactiveExecute(args []string, stdout io.Writer, stderr io.Writer, actions func(*gexec.Session, *os.File)) *exec.Cmd {
	cmd := exec.Command(b.pathToBBL, args...)

	ptmx, pts, err := pty.Open()
	Expect(err).NotTo(HaveOccurred())
	defer ptmx.Close() //nolint:errcheck

	cmd.Stdin = pts
	cmd.Stdout = pts
	cmd.Stderr = pts

	cmd.SysProcAttr = &syscall.SysProcAttr{
		Setctty: true,
		Setsid:  true,
	}

	session, err := gexec.Start(cmd, stdout, stderr)
	Expect(err).NotTo(HaveOccurred())

	// Close our open reference to pts so that ptmx recieves EOF
	pts.Close() //nolint:errcheck

	actions(session, ptmx)

	return cmd
}


================================================
FILE: acceptance-tests/actors/boshcli.go
================================================
package actors

import (
	"encoding/json"
	"errors"
	"os"
	"os/exec"
)

type BOSHCLI struct{}

func NewBOSHCLI() BOSHCLI {
	return BOSHCLI{}
}

func (BOSHCLI) DirectorExists(address, username, password, caCertPath string) (bool, error) {
	cmd := exec.Command("bosh",
		"--ca-cert", caCertPath,
		"-e", address,
		"--client", username,
		"--client-secret", password,
		"env",
	)
	cmd.Env = os.Environ()
	_, err := cmd.Output()

	return err == nil, err
}

func (BOSHCLI) Env(address, caCertPath string) (string, error) {
	cmd := exec.Command("bosh",
		"--ca-cert", caCertPath,
		"-e", address,
		"env",
	)
	cmd.Env = os.Environ()
	env, err := cmd.Output()

	return string(env), err
}

func (b BOSHCLI) CloudConfig(address, caCertPath, username, password string) (string, error) {
	cmd := exec.Command("bosh",
		"--ca-cert", caCertPath,
		"--client", username,
		"--client-secret", password,
		"-e", address,
		"cloud-config",
	)
	cmd.Env = os.Environ()
	cloudConfig, err := cmd.Output()

	return string(cloudConfig), err
}

func (b BOSHCLI) RuntimeConfig(address, caCertPath, username, password, configName string) (string, error) {
	cmd := exec.Command("bosh",
		"--ca-cert", caCertPath,
		"--client", username,
		"--client-secret", password,
		"-e", address,
		"config",
		"--type", "runtime",
		"--name", configName,
	)
	cmd.Env = os.Environ()
	runtimeConfig, err := cmd.Output()

	return string(runtimeConfig), err
}

func (b BOSHCLI) UploadStemcell(address, caCertPath, username, password, stemcellURL string) error {
	cmd := exec.Command("bosh",
		"--ca-cert", caCertPath,
		"--client", username,
		"--client-secret", password,
		"-e", address,
		"upload-stemcell", stemcellURL,
	)

	cmd.Env = os.Environ()
	_, err := cmd.Output()

	return err
}

// Stemcells returns a list of cid's for the uploaded stemcells
func (b BOSHCLI) Stemcells(address, caCertPath, username, password string) ([]string, error) {
	var cids []string

	cmd := exec.Command("bosh",
		"--ca-cert", caCertPath,
		"--client", username,
		"--client-secret", password,
		"-e", address,
		"stemcells", "--json",
	)

	cmd.Env = os.Environ()
	data, err := cmd.Output()
	if err != nil {
		return cids, errors.New("could not unmarshal response: " + err.Error())
	}

	body := struct {
		Tables []struct {
			Rows []struct {
				CID string `json:"cid"`
			}
		}
	}{}

	if err := json.Unmarshal(data, &body); err != nil {
		return cids, errors.New("could not unmarshal response: " + err.Error())
	}

	if len(body.Tables) > 0 {
		for _, row := range body.Tables[0].Rows {
			cids = append(cids, row.CID)
		}
	}

	return cids, nil
}


================================================
FILE: acceptance-tests/actors/cloudstack.go
================================================
package actors

func NewCloudStackLBHelper() vSphereLBHelper {
	return vSphereLBHelper{}
}


================================================
FILE: acceptance-tests/actors/gcp.go
================================================
package actors

import (
	"context"
	"encoding/json"
	"os"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/testhelpers"
	. "github.com/onsi/gomega" //nolint:staticcheck
	"golang.org/x/oauth2/google"
	"google.golang.org/api/compute/v1"
)

type gcpLBHelper struct {
	service   *compute.Service
	projectID string
	region    string
}

func NewGCPLBHelper(config acceptance.Config) gcpLBHelper {
	rawServiceAccountKey, err := os.ReadFile(config.GCPServiceAccountKey)
	if err != nil {
		rawServiceAccountKey = []byte(config.GCPServiceAccountKey)
	}

	googleConfig, err := google.JWTConfigFromJSON(rawServiceAccountKey, "https://www.googleapis.com/auth/compute")
	Expect(err).NotTo(HaveOccurred())

	p := struct {
		ProjectID string `json:"project_id"`
	}{}
	err = json.Unmarshal(rawServiceAccountKey, &p)
	Expect(err).NotTo(HaveOccurred())

	service, err := compute.New(googleConfig.Client(context.Background()))
	Expect(err).NotTo(HaveOccurred())

	return gcpLBHelper{
		service:   service,
		projectID: p.ProjectID,
		region:    config.GCPRegion,
	}
}

func (g gcpLBHelper) GetLBArgs() []string {
	certPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_CERT)
	Expect(err).NotTo(HaveOccurred())
	keyPath, err := testhelpers.WriteContentsToTempFile(testhelpers.BBL_KEY)
	Expect(err).NotTo(HaveOccurred())

	return []string{
		"--lb-type", "cf",
		"--lb-cert", certPath,
		"--lb-key", keyPath,
	}
}

func (g gcpLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
	Expect(vmExtensions).To(ContainElement("cf-router-network-properties"))
	Expect(vmExtensions).To(ContainElement("diego-ssh-proxy-network-properties"))
	Expect(vmExtensions).To(ContainElement("cf-tcp-router-network-properties"))
}

func (g gcpLBHelper) ConfirmLBsExist(envID string) {
	targetPools := []string{envID + "-cf-ssh-proxy", envID + "-cf-tcp-router"}
	for _, p := range targetPools {
		targetPool, err := g.service.TargetPools.Get(g.projectID, g.region, p).Do()
		Expect(err).NotTo(HaveOccurred())
		Expect(targetPool.Name).NotTo(BeNil())
		Expect(targetPool.Name).To(Equal(p))
	}

	targetHTTPSProxy, err := g.service.TargetHttpsProxies.Get(g.projectID, envID+"-https-proxy").Do()
	Expect(err).NotTo(HaveOccurred())
	Expect(targetHTTPSProxy.SslCertificates).To(HaveLen(1))
}

func (g gcpLBHelper) ConfirmNoLBsExist(envID string) {
	targetPools := []string{envID + "-cf-ssh-proxy", envID + "-cf-tcp-router"}
	for _, p := range targetPools {
		_, err := g.service.TargetPools.Get(g.projectID, g.region, p).Do()
		Expect(err).To(MatchError(MatchRegexp(`The resource 'projects\/.+` + p + `' was not found`)))
	}
}

func (g gcpLBHelper) VerifyBblLBOutput(stdout string) {
	Expect(stdout).To(MatchRegexp("CF Router LB:.*"))
	Expect(stdout).To(MatchRegexp("CF SSH Proxy LB:.*"))
	Expect(stdout).To(MatchRegexp("CF TCP Router LB:.*"))
	Expect(stdout).To(MatchRegexp("CF WebSocket LB:.*"))
}

func (g gcpLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {
	for _, stemcellID := range stemcellIDs {
		_, err := g.service.Images.Get(g.projectID, stemcellID).Do()
		Expect(err).To(MatchError(MatchRegexp("googleapi: Error 404.*")))
	}
}


================================================
FILE: acceptance-tests/actors/iaas_helper.go
================================================
package actors

import (
	"fmt"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
)

type IAASLBHelper interface {
	GetLBArgs() []string
	ConfirmLBsExist(string)
	ConfirmNoLBsExist(string)
	VerifyBblLBOutput(string)
	VerifyCloudConfigExtensions([]string)
	ConfirmNoStemcellsExist([]string)
}

func NewIAASLBHelper(iaas string, configuration acceptance.Config) IAASLBHelper {
	switch iaas {
	case "aws":
		return NewAWSLBHelper(configuration)
	case "azure":
		return NewAzureLBHelper(configuration)
	case "gcp":
		return NewGCPLBHelper(configuration)
	case "vsphere":
		return NewVSphereLBHelper()
	case "openstack":
		return NewOpenStackLBHelper()
	case "cloudstack":
		return NewCloudStackLBHelper()
	default:
		panic(fmt.Sprintf("%s is not a supported iaas", iaas))
	}
}


================================================
FILE: acceptance-tests/actors/openstack.go
================================================
package actors

func NewOpenStackLBHelper() openStackLBHelper {
	return openStackLBHelper{}
}

type openStackLBHelper struct {
}

func (o openStackLBHelper) GetLBArgs() []string {
	return []string{}
}

func (o openStackLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
}

func (o openStackLBHelper) ConfirmLBsExist(envID string) {
}

func (o openStackLBHelper) ConfirmNoLBsExist(envID string) {
}

func (o openStackLBHelper) VerifyBblLBOutput(stdout string) {
}

func (o openStackLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}


================================================
FILE: acceptance-tests/actors/vsphere.go
================================================
package actors

func NewVSphereLBHelper() vSphereLBHelper {
	return vSphereLBHelper{}
}

type vSphereLBHelper struct {
}

func (v vSphereLBHelper) GetLBArgs() []string {
	return []string{}
}

func (v vSphereLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
}

func (v vSphereLBHelper) ConfirmLBsExist(envID string) {
}

func (v vSphereLBHelper) ConfirmNoLBsExist(envID string) {
}

func (v vSphereLBHelper) VerifyBblLBOutput(stdout string) {
}

func (v vSphereLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}


================================================
FILE: acceptance-tests/bbl/init_test.go
================================================
package acceptance_test

import (
	"os"
	"testing"
	"time"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

func TestAcceptance(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "bbl")
}

var (
	pathToBBL             string
	bblPlanTimeout        time.Duration
	bblDownTimeout        time.Duration
	bblUpTimeout          time.Duration
	bblRotateTimeout      time.Duration
	bblLatestErrorTimeout time.Duration
	bblLeftoversTimeout   time.Duration
)

var _ = BeforeSuite(func() {
	var err error

	pathToBBL, err = gexec.Build("github.com/cloudfoundry/bosh-bootloader/bbl")
	Expect(err).NotTo(HaveOccurred())

	bblPlanTimeout = getTimeout("BBL_PLAN_TIMEOUT", 5*time.Minute)
	bblDownTimeout = getTimeout("BBL_DOWN_TIMEOUT", 10*time.Minute)
	bblUpTimeout = getTimeout("BBL_UP_TIMEOUT", 40*time.Minute)
	bblRotateTimeout = getTimeout("BBL_ROTATE_TIMEOUT", 40*time.Minute)
	bblLatestErrorTimeout = getTimeout("BBL_LATEST_ERROR_TIMEOUT", 10*time.Second)
	bblLeftoversTimeout = getTimeout("BBL_LEFTOVERS_TIMEOUT", 20*time.Minute)
})

var _ = AfterSuite(func() {
	gexec.CleanupBuildArtifacts()
})

func getTimeout(envVar string, defaultTimeout time.Duration) time.Duration {
	envVal := os.Getenv(envVar)
	if envVal == "" {
		return defaultTimeout
	}
	timeout, err := time.ParseDuration(envVal)
	Expect(err).NotTo(HaveOccurred())
	return timeout
}


================================================
FILE: acceptance-tests/bbl/latest_error_test.go
================================================
package acceptance_test

import (
	"os"
	"os/exec"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/storage"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

var _ = Describe("bbl latest-error", func() {
	var (
		tempDirectory string
	)

	BeforeEach(func() {
		acceptance.SkipUnless("latest-error")

		var err error
		tempDirectory, err = os.MkdirTemp("", "")
		Expect(err).NotTo(HaveOccurred())

		state := []byte(`{
			"version": 8,
			"noDirector": true,
			"tfState": "some-tf-state",
			"latestTFOutput": "some terraform output"
		}`)
		err = os.WriteFile(filepath.Join(tempDirectory, storage.STATE_FILE), state, storage.StateMode)
		Expect(err).NotTo(HaveOccurred())
	})

	It("prints the terraform output from the last command", func() {
		args := []string{
			"--state-dir", tempDirectory,
			"latest-error",
		}

		cmd := exec.Command(pathToBBL, args...)
		session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
		Expect(err).NotTo(HaveOccurred())
		Eventually(session, bblLatestErrorTimeout).Should(gexec.Exit(0))

		Expect(string(session.Out.Contents())).To(ContainSubstring("some terraform output"))
	})
})


================================================
FILE: acceptance-tests/bbl/plan_test.go
================================================
package acceptance_test

import (
	"os"
	"path/filepath"
	"strings"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gbytes"
	"github.com/onsi/gomega/gexec"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests/actors"
	"github.com/cloudfoundry/bosh-bootloader/storage"
)

var _ = Describe("plan", func() {
	var (
		bbl      actors.BBL
		stateDir string
		iaas     string
	)

	BeforeEach(func() {
		acceptance.SkipUnless("plan")

		configuration, err := acceptance.LoadConfig()
		Expect(err).NotTo(HaveOccurred())

		iaas = configuration.IAAS
		stateDir = configuration.StateFileDir

		bbl = actors.NewBBL(stateDir, pathToBBL, configuration, "plan-env", false)
	})

	It("sets up the bbl state directory", func() {
		session := bbl.Plan("--name", bbl.PredefinedEnvID())
		Eventually(session, bblPlanTimeout).Should(gexec.Exit(0))

		expectedArtifacts := []string{
			filepath.Join(stateDir, "create-jumpbox.sh"),
			filepath.Join(stateDir, "create-director.sh"),
			filepath.Join(stateDir, "delete-jumpbox.sh"),
			filepath.Join(stateDir, "delete-director.sh"),
			filepath.Join(stateDir, "cloud-config", "cloud-config.yml"),
			filepath.Join(stateDir, "cloud-config", "ops.yml"),
			filepath.Join(stateDir, "bosh-deployment", "bosh.yml"),
			filepath.Join(stateDir, "bosh-deployment", iaas, "cpi.yml"),
			filepath.Join(stateDir, "bosh-deployment", "credhub.yml"),
			filepath.Join(stateDir, "bosh-deployment", "jumpbox-user.yml"),
			filepath.Join(stateDir, "bosh-deployment", "uaa.yml"),
			filepath.Join(stateDir, "jumpbox-deployment", "jumpbox.yml"),
			filepath.Join(stateDir, "jumpbox-deployment", iaas, "cpi.yml"),
			filepath.Join(stateDir, "terraform", "bbl-template.tf"),
		}

		By("verifying that artifacts are created in state dir", func() {
			for _, f := range expectedArtifacts {
				fileinfo, err := os.Stat(f)
				Expect(err).NotTo(HaveOccurred())
				if strings.HasSuffix(f, ".sh") {
					Expect(fileinfo.Mode().String()).To(Equal("-rwxr-x---"))
				} else {
					Expect(fileinfo.Mode().String()).To(Equal("-rwxr-----"))
				}
			}
		})

		By("modifying artifacts", func() {
			for _, f := range expectedArtifacts {
				err := os.WriteFile(f, []byte("modified after plan"), storage.StateMode)
				Expect(err).NotTo(HaveOccurred())
			}
		})

		var patchFileHandle *os.File
		patchFile := filepath.Join(stateDir, "terraform", "patch.tf")
		By("adding a patch file", func() {
			var err error
			patchFileHandle, err = os.Create(patchFile)
			Expect(err).NotTo(HaveOccurred())
		})
		defer patchFileHandle.Close() //nolint:errcheck

		By("rerunning bbl plan", func() {
			session = bbl.Plan("--name", bbl.PredefinedEnvID())
			Eventually(session, bblPlanTimeout).Should(gexec.Exit(0))
		})

		By("verifying that modified artifacts were overwritten", func() {
			for _, f := range expectedArtifacts {
				contents, err := os.ReadFile(f)
				Expect(err).NotTo(HaveOccurred())
				Expect(string(contents)).NotTo(ContainSubstring("modified after plan"))
			}
		})

		By("verifying that we warn users about patch files", func() {
			Expect(session.Out).To(gbytes.Say("\nyou've supplied the following files to bbl:\n"))
			Expect(session.Out).To(gbytes.Say("\tterraform/patch.tf\n"))
			Expect(session.Out).To(gbytes.Say("\nthey will be used by \"bbl up\".\n"))
		})

		By("running bbl down", func() {
			session = bbl.Down()
			Eventually(session, bblDownTimeout).Should(gexec.Exit(0))
		})

		By("verifying that artifacts were deleted", func() {
			for _, f := range expectedArtifacts {
				_, err := os.Stat(f)
				Expect(err).To(HaveOccurred())
			}
		})

		By("verifying that patch files were not deleted", func() {
			_, err := os.Stat(patchFile)
			Expect(err).NotTo(HaveOccurred())
		})
	})
})


================================================
FILE: acceptance-tests/bbl/print_env_test.go
================================================
package acceptance_test

import (
	"fmt"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests/actors"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("plan", func() {
	var (
		bbl      actors.BBL
		stateDir string
		iaas     string
	)

	BeforeEach(func() {
		acceptance.SkipUnless("plan")

		configuration, err := acceptance.LoadConfig()
		Expect(err).NotTo(HaveOccurred())

		iaas = configuration.IAAS
		if iaas != "aws" && iaas != "gcp" {
			Skip(fmt.Sprintf("won't run remote bbl state tests on IAAS %q ", iaas))
		}

		stateDir = configuration.StateFileDir

		configuration.BBLStateBucket = "bbl-acceptance-test-states-cff"

		stateFileName := fmt.Sprintf("fixture-state-%s", iaas)
		bbl = actors.NewBBL(stateDir, pathToBBL, configuration, stateFileName, true)

		// TODO: always upload the same bbl state so we don't have fixture rot
	})

	It("can print a bbl environment stored in the THE CLOUD", func() {
		stdout := bbl.PrintEnv()
		Expect(stdout).To(ContainSubstring("export BOSH_CLIENT=admin"))
		Expect(stdout).To(ContainSubstring("export BOSH_CLIENT_SECRET=some-password"))
		Expect(stdout).To(ContainSubstring("export BOSH_ENVIRONMENT=https://10.0.0.6:25555"))
		Expect(stdout).To(ContainSubstring("export BOSH_CA_CERT='-----BEGIN CERTIFICATE-----\ndirector-ca-cert\n-----END CERTIFICATE-----"))
		Expect(stdout).To(ContainSubstring("export JUMPBOX_PRIVATE_KEY="))
		Expect(stdout).To(ContainSubstring("export BOSH_ALL_PROXY=ssh+socks5://jumpbox@10.0.1.5:22?private-key="))
		Expect(stdout).To(ContainSubstring("bosh_jumpbox_private.key"))
	})
})


================================================
FILE: acceptance-tests/bbl/ssh_linux_test.go
================================================
package acceptance_test

import (
	"fmt"
	"os/exec"

	acceptance "github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests/actors"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

var _ = Describe("ssh", func() {
	var (
		bbl actors.BBL

		stateDir   string
		iaas       string
		iaasHelper actors.IAASLBHelper
	)

	addKnownHost := func() {
		script := `mkdir -p ~/.ssh/; \
			ssh-keyscan -H -trsa %s >> ~/.ssh/known_hosts`
		_, err := exec.Command("sh", "-c",
			fmt.Sprintf(script, bbl.JumpboxAddress()),
		).Output()
		Expect(err).NotTo(HaveOccurred())
	}

	removeKnownHost := func() {
		exec.Command("ssh-keygen", "-R", bbl.JumpboxAddress()).Output() //nolint:errcheck
	}

	BeforeEach(func() {
		acceptance.SkipUnless("ssh")

		configuration, err := acceptance.LoadConfig()
		Expect(err).NotTo(HaveOccurred())

		iaas = configuration.IAAS
		iaasHelper = actors.NewIAASLBHelper(iaas, configuration)
		stateDir = configuration.StateFileDir

		bbl = actors.NewBBL(stateDir, pathToBBL, configuration, "ssh-env", false)
	})

	AfterEach(func() {
		By("destroying the director and the jumpbox", func() {
			session := bbl.Down()
			Eventually(session, bblDownTimeout).Should(gexec.Exit(0))
		})

		removeKnownHost()
	})

	It("bbl's up a new bosh director and jumpbox", func() {
		By("cleaning up any leftovers", func() {
			session := bbl.CleanupLeftovers(bbl.PredefinedEnvID())
			Eventually(session, bblLeftoversTimeout).Should(gexec.Exit())
		})

		args := []string{
			"--name", bbl.PredefinedEnvID(),
		}
		args = append(args, iaasHelper.GetLBArgs()...)
		session := bbl.Up(args...)
		Eventually(session, bblUpTimeout).Should(gexec.Exit(0))

		By("noninteractively preverifying the jumpbox's public key", func() {
			addKnownHost()
		})

		By("checking to see if we can ssh to the jumpbox", func() {
			bbl.JumpboxSSH(GinkgoWriter)
		})

		By("verifying we can ssh to the director", func() {
			bbl.DirectorSSH(GinkgoWriter)
		})

		By("rotating the jumpbox's ssh key", func() {
			sshKey := bbl.SSHKey()
			Expect(sshKey).NotTo(BeEmpty())

			session := bbl.Rotate()
			Eventually(session, bblRotateTimeout).Should(gexec.Exit(0))

			rotatedKey := bbl.SSHKey()
			Expect(rotatedKey).NotTo(BeEmpty())
			Expect(rotatedKey).NotTo(Equal(sshKey))

			removeKnownHost()
			addKnownHost()
		})

		By("checking to see if we can still ssh to the jumpbox", func() {
			bbl.JumpboxSSH(GinkgoWriter)
		})

		By("checking to see if we can still ssh to the director", func() {
			bbl.DirectorSSH(GinkgoWriter)
		})
	})
})


================================================
FILE: acceptance-tests/bbl/up_and_down_test.go
================================================
package acceptance_test

import (
	"fmt"
	"os/exec"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests/actors"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

var _ = Describe("up_and_down", func() {
	var (
		bbl     actors.BBL
		boshcli actors.BOSHCLI

		directorAddress  string
		directorUsername string
		directorPassword string
		caCertPath       string

		stateDir    string
		iaas        string
		stemcellURL string
		iaasHelper  actors.IAASLBHelper
	)

	BeforeEach(func() {
		acceptance.SkipUnless("bbl-up")

		configuration, err := acceptance.LoadConfig()
		Expect(err).NotTo(HaveOccurred())

		iaas = configuration.IAAS
		stemcellURL = configuration.StemcellURL
		iaasHelper = actors.NewIAASLBHelper(iaas, configuration)
		stateDir = configuration.StateFileDir

		bbl = actors.NewBBL(stateDir, pathToBBL, configuration, "up-env", false)
		boshcli = actors.NewBOSHCLI()
	})

	AfterEach(func() {
		By("ensure the director and the jumpbox are destroyed", func() {
			session := bbl.Down()
			Eventually(session, bblDownTimeout).Should(gexec.Exit(0))
		})
	})

	It("bbl's up a new bosh director and jumpbox", func() {
		By("cleaning up any leftovers", func() {
			session := bbl.CleanupLeftovers(bbl.PredefinedEnvID())
			Eventually(session, bblLeftoversTimeout).Should(gexec.Exit())
		})

		args := []string{
			"--name", bbl.PredefinedEnvID(),
		}
		args = append(args, iaasHelper.GetLBArgs()...)
		session := bbl.Up(args...)
		Eventually(session, bblUpTimeout).Should(gexec.Exit(0))

		By("exporting bosh environment variables", func() {
			bbl.ExportBoshAllProxy()
		})

		By("checking if the bosh director exists via the bosh cli", func() {
			directorAddress = bbl.DirectorAddress()
			directorUsername = bbl.DirectorUsername()
			directorPassword = bbl.DirectorPassword()
			caCertPath = bbl.SaveDirectorCA()

			directorExists := func() bool {
				exists, err := boshcli.DirectorExists(directorAddress, directorUsername, directorPassword, caCertPath)
				if err != nil {
					fmt.Println(string(err.(*exec.ExitError).Stderr))
				}
				return exists
			}
			Eventually(directorExists, "1m", "10s").Should(BeTrue())
		})

		By("verifying that vm extensions were added to the cloud config", func() {
			cloudConfig, err := boshcli.CloudConfig(directorAddress, caCertPath, directorUsername, directorPassword)
			Expect(err).NotTo(HaveOccurred())

			vmExtensions := acceptance.VmExtensionNames(cloudConfig)
			iaasHelper.VerifyCloudConfigExtensions(vmExtensions)
		})

		By("verifying that the bosh dns runtime config was set", func() {
			_, err := boshcli.RuntimeConfig(directorAddress, caCertPath, directorUsername, directorPassword, "dns")
			Expect(err).NotTo(HaveOccurred())
		})

		By("checking if bbl print-env prints the bosh environment variables", func() {
			stdout := bbl.PrintEnv()

			Expect(stdout).To(ContainSubstring("export BOSH_ENVIRONMENT="))
			Expect(stdout).To(ContainSubstring("export BOSH_CLIENT="))
			Expect(stdout).To(ContainSubstring("export BOSH_CLIENT_SECRET="))
			Expect(stdout).To(ContainSubstring("export BOSH_CA_CERT="))
		})

		By("rotating the jumpbox's ssh key", func() {
			sshKey := bbl.SSHKey()
			Expect(sshKey).NotTo(BeEmpty())

			session := bbl.Rotate()
			Eventually(session, bblRotateTimeout).Should(gexec.Exit(0))

			rotatedKey := bbl.SSHKey()
			Expect(rotatedKey).NotTo(BeEmpty())
			Expect(rotatedKey).NotTo(Equal(sshKey))
		})

		By("resetting the correct creds", func() {
			bbl.ExportBoshAllProxy()
			directorAddress = bbl.DirectorAddress()
			directorUsername = bbl.DirectorUsername()
			directorPassword = bbl.DirectorPassword()
			caCertPath = bbl.SaveDirectorCA()
		})

		By("checking bbl up is idempotent", func() {
			session := bbl.Up()
			Eventually(session, bblUpTimeout).Should(gexec.Exit(0))
		})

		By("confirming that the load balancers exist", func() {
			iaasHelper.ConfirmLBsExist(bbl.PredefinedEnvID())
		})

		By("verifying the bbl lbs output", func() {
			stdout := bbl.Lbs()
			iaasHelper.VerifyBblLBOutput(stdout)
		})

		By("deleting lbs", func() {
			session := bbl.Plan("--name", bbl.PredefinedEnvID())
			Eventually(session, bblPlanTimeout).Should(gexec.Exit(0))

			session = bbl.Up()
			Eventually(session, bblUpTimeout).Should(gexec.Exit(0))
		})

		By("confirming that the load balancers no longer exist", func() {
			iaasHelper.ConfirmNoLBsExist(bbl.PredefinedEnvID())
		})

		if stemcellURL != "" {
			When("stemcells are uploaded and bbl down is called", func() {
				err := boshcli.UploadStemcell(directorAddress, caCertPath, directorUsername, directorPassword, stemcellURL)
				Expect(err).NotTo(HaveOccurred())

				stemcellIDs, err := boshcli.Stemcells(directorAddress, caCertPath, directorUsername, directorPassword)
				Expect(err).NotTo(HaveOccurred())

				By("destroy director and the jumpbox", func() {
					session := bbl.Down()
					Eventually(session, bblDownTimeout).Should(gexec.Exit(0))
				})

				By("removes created stemcells from iaas", func() {
					iaasHelper.ConfirmNoStemcellsExist(stemcellIDs)
				})
			})
		} else {
			By("destroy director and the jumpbox", func() {
				session := bbl.Down()
				Eventually(session, bblDownTimeout).Should(gexec.Exit(0))
			})
		}

	})
})


================================================
FILE: acceptance-tests/bbl/upgrade_test.go
================================================
package acceptance_test

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"os"
	"os/user"
	"path/filepath"
	"runtime"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests/actors"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

const (
	BBLReleaseURL = "https://github.com/cloudfoundry/bosh-bootloader/releases/download/%s/%s"
)

var _ = Describe("Upgrade", func() {
	var (
		oldBBL  actors.BBL
		newBBL  actors.BBL
		boshcli actors.BOSHCLI

		sshSession    *gexec.Session
		f             *os.File
		configuration acceptance.Config
	)

	BeforeEach(func() {
		acceptance.SkipUnless("upgrade")
		Skip("")

		var err error
		configuration, err = acceptance.LoadConfig()
		Expect(err).NotTo(HaveOccurred())
		var bblBinaryLocation string
		if runtime.GOOS == "darwin" {
			bblBinaryLocation = fmt.Sprintf(BBLReleaseURL, "v8.4.111", "bbl-v8.4.111_osx")
		} else {
			bblBinaryLocation = fmt.Sprintf(BBLReleaseURL, "v8.4.111", "bbl-v8.4.111_linux_x86-64")
		}

		resp, err := http.Get(bblBinaryLocation)
		Expect(err).NotTo(HaveOccurred())

		f, err = os.CreateTemp("", "")
		Expect(err).NotTo(HaveOccurred())

		_, err = io.Copy(f, resp.Body)
		Expect(err).NotTo(HaveOccurred())

		err = os.Chmod(f.Name(), 0700)
		Expect(err).NotTo(HaveOccurred())

		err = f.Close()
		Expect(err).NotTo(HaveOccurred())

		envName := "upgrade-env"
		testName := os.Getenv("RUN_TEST")
		if testName != "" {
			envName = testName
		}
		oldBBL = actors.NewBBL(configuration.StateFileDir, f.Name(), configuration, envName, false)
		newBBL = actors.NewBBL(configuration.StateFileDir, pathToBBL, configuration, envName, false)
		boshcli = actors.NewBOSHCLI()
	})

	AfterEach(func() {
		acceptance.SkipUnless("upgrade")
		Skip("")

		if sshSession != nil {
			sshSession.Interrupt()
			Eventually(sshSession, "5s").Should(gexec.Exit())
		}

		By("trying to destroy with the old bbl", func() {
			session := oldBBL.Destroy()
			Eventually(session, bblDownTimeout).Should(gexec.Exit())
		})

		By("trying to destroy with the latest bbl", func() {
			session := newBBL.Destroy()
			Eventually(session, bblDownTimeout).Should(gexec.Exit())
		})

		err := os.Remove(f.Name())
		Expect(err).NotTo(HaveOccurred())
	})

	It("is able to upgrade from an environment bbl'd up with an older version of bbl", func() {
		Skip("Upgrading is currently broken due to mayor bump in terraform version")
		By("cleaning up any leftovers", func() {
			session := newBBL.CleanupLeftovers(newBBL.PredefinedEnvID())
			Eventually(session, bblLeftoversTimeout).Should(gexec.Exit())
		})

		By("bbl'ing up with old bbl", func() {
			session := oldBBL.Up("--name", oldBBL.PredefinedEnvID())
			Eventually(session, bblUpTimeout).Should(gexec.Exit(0))
		})

		By("verifying the director has a private ip", func() {
			Expect(oldBBL.DirectorAddress()).To(Equal("https://10.0.0.6:25555"))
		})

		By("starting an ssh tunnel to talk to the director", func() {
			sshSession = oldBBL.StartSSHTunnel()
		})

		By("verifying the director exists", func() {
			exists, err := boshcli.DirectorExists(oldBBL.DirectorAddress(), oldBBL.DirectorUsername(), oldBBL.DirectorPassword(), oldBBL.SaveDirectorCA())
			Expect(err).NotTo(HaveOccurred())
			Expect(exists).To(BeTrue())
		})

		By("cleaning out an installation directory holding onto old golang", func() {
			removeInstallation := func(stateFileName string) {
				stateJSON, err := os.ReadFile(filepath.Join(configuration.StateFileDir, "vars", stateFileName))
				Expect(err).NotTo(HaveOccurred())

				var state struct {
					InstallationID string `json:"installation_id"`
				}

				err = json.Unmarshal(stateJSON, &state)
				Expect(err).NotTo(HaveOccurred())

				u, err := user.Current()
				Expect(err).NotTo(HaveOccurred())

				packageDir := filepath.Join(u.HomeDir, ".bosh", "installations", state.InstallationID, "packages")

				err = os.RemoveAll(packageDir)
				Expect(err).NotTo(HaveOccurred())

				err = os.Mkdir(packageDir, 0777)
				Expect(err).NotTo(HaveOccurred())
			}

			removeInstallation("bosh-state.json")
			removeInstallation("jumpbox-state.json")
		})

		By("upgrading to the latest bbl", func() {
			session := newBBL.Plan()
			Eventually(session, bblPlanTimeout).Should(gexec.Exit(0))

			session = newBBL.Up()
			Eventually(session, bblUpTimeout).Should(gexec.Exit(0))
		})

		By("exporting BOSH_ALL_PROXY to talk to the director", func() {
			newBBL.ExportBoshAllProxy()
		})

		By("verifying the director still exists", func() {
			exists, err := boshcli.DirectorExists(newBBL.DirectorAddress(), newBBL.DirectorUsername(), newBBL.DirectorPassword(), newBBL.SaveDirectorCA())
			Expect(err).NotTo(HaveOccurred())
			Expect(exists).To(BeTrue())
		})
	})
})


================================================
FILE: acceptance-tests/config.go
================================================
package acceptance

import (
	"errors"
	"fmt"
	"os"

	. "github.com/onsi/ginkgo/v2" //nolint:staticcheck
)

type Config struct {
	IAAS        string
	StemcellURL string

	AWSAccessKeyID     string
	AWSSecretAccessKey string
	AWSRegion          string

	AzureClientID       string
	AzureClientSecret   string
	AzureRegion         string
	AzureSubscriptionID string
	AzureTenantID       string

	GCPServiceAccountKey string
	GCPRegion            string

	VSphereNetwork            string
	VSphereSubnetCIDR         string
	VSphereInternalGW         string
	VSphereJumpboxIP          string
	VSphereDirectorInternalIP string
	VSphereVCenterIP          string
	VSphereVCenterUser        string
	VSphereVCenterPassword    string
	VSphereVCenterDC          string
	VSphereVCenterCluster     string
	VSphereVCenterRP          string
	VSphereVCenterDS          string
	VSphereVCenterDisks       string
	VSphereVCenterVMs         string
	VSphereVCenterTemplates   string

	OpenStackAuthURL     string
	OpenStackAZ          string
	OpenStackNetworkID   string
	OpenStackNetworkName string
	OpenStackPassword    string
	OpenStackUsername    string
	OpenStackProject     string
	OpenStackDomain      string
	OpenStackRegion      string

	// if bucket is set, statefiledir should be ignored
	StateFileDir   string
	BBLStateBucket string
}

// Loads all of the credentials from environment variables
// to be used in the acceptance test. Validates the presence
// of required credentials before starting up tests.
func LoadConfig() (Config, error) {
	config := loadConfigFromEnvVars()

	err := validateIAAS(config)
	if err != nil {
		return Config{}, fmt.Errorf("Error found: %s\n", err) //nolint:staticcheck
	}

	switch config.IAAS {
	case "aws":
		err = validateAWSCreds(config)
	case "azure":
		err = validateAzureCreds(config)
	case "gcp":
		err = validateGCPCreds(config)
	case "vsphere":
		err = validateVSphereCreds(config)
	case "openstack":
		err = validateOpenStackCreds(config)
	}
	if err != nil {
		return Config{}, fmt.Errorf("Error Found: %s\nProvide a full set of credentials for a single IAAS.", err) //nolint:staticcheck
	}

	if config.StateFileDir == "" {
		dir, err := os.MkdirTemp("", "")
		if err != nil {
			return Config{}, err
		}
		config.StateFileDir = dir
	}

	fmt.Printf("Using state-dir: %s\n", config.StateFileDir)

	return config, nil
}

func validateIAAS(config Config) error {
	if config.IAAS == "" {
		return errors.New("iaas is missing")
	}

	return nil
}

func validateAWSCreds(config Config) error {
	if config.AWSAccessKeyID == "" {
		return errors.New("aws access key id is missing")
	}

	if config.AWSSecretAccessKey == "" {
		return errors.New("aws secret access key is missing")
	}

	if config.AWSRegion == "" {
		return errors.New("aws region is missing")
	}

	return nil
}

func validateAzureCreds(config Config) error {
	if config.AzureClientID == "" {
		return errors.New("azure client id is missing")
	}

	if config.AzureClientSecret == "" {
		return errors.New("azure client secret is missing")
	}

	if config.AzureRegion == "" {
		return errors.New("azure region is missing")
	}

	if config.AzureSubscriptionID == "" {
		return errors.New("azure subscription id is missing")
	}

	if config.AzureTenantID == "" {
		return errors.New("azure tenant id is missing")
	}

	return nil
}

func validateGCPCreds(config Config) error {
	if config.GCPServiceAccountKey == "" {
		return errors.New("gcp service account key is missing")
	}

	if config.GCPRegion == "" {
		return errors.New("gcp region is missing")
	}

	return nil
}

func validateVSphereCreds(config Config) error {
	if config.VSphereVCenterUser == "" {
		return errors.New("vsphere vcenter user is missing")
	}
	if config.VSphereVCenterPassword == "" {
		return errors.New("vsphere vcenter password is missing")
	}
	if config.VSphereVCenterDC == "" {
		return errors.New("vsphere vcenter datacenter is missing")
	}
	if config.VSphereVCenterDS == "" {
		return errors.New("vsphere vcenter datastore is missing")
	}
	if config.VSphereVCenterCluster == "" {
		return errors.New("vsphere vcenter cluster is missing")
	}
	if config.VSphereVCenterRP == "" {
		return errors.New("vsphere vcenter resource pool is missing")
	}
	if config.VSphereVCenterVMs == "" {
		return errors.New("vsphere vcenter vms is missing")
	}
	if config.VSphereVCenterDisks == "" {
		return errors.New("vsphere vcenter disks is missing")
	}
	if config.VSphereVCenterTemplates == "" {
		return errors.New("vsphere vcenter templates is missing")
	}
	if config.VSphereNetwork == "" {
		return errors.New("vsphere network name is missing")
	}
	return nil
}

func validateOpenStackCreds(config Config) error {
	if config.OpenStackUsername == "" {
		return errors.New("OpenStack user name is missing")
	}
	if config.OpenStackPassword == "" {
		return errors.New("OpenStack password is missing")
	}
	if config.OpenStackAuthURL == "" {
		return errors.New("OpenStack auth URL is missing")
	}
	if config.OpenStackAZ == "" {
		return errors.New("OpenStack AZ is missing")
	}
	if config.OpenStackNetworkID == "" {
		return errors.New("OpenStack network ID is missing")
	}
	if config.OpenStackNetworkName == "" {
		return errors.New("OpenStack network name is missing")
	}
	if config.OpenStackProject == "" {
		return errors.New("OpenStack project is missing")
	}
	if config.OpenStackDomain == "" {
		return errors.New("OpenStack domain is missing")
	}
	if config.OpenStackRegion == "" {
		return errors.New("OpenStack region is missing")
	}
	return nil
}

func loadConfigFromEnvVars() Config {
	return Config{
		IAAS: os.Getenv("BBL_IAAS"),

		StemcellURL: os.Getenv("STEMCELL_URL"),

		AWSAccessKeyID:     os.Getenv("BBL_AWS_ACCESS_KEY_ID"),
		AWSSecretAccessKey: os.Getenv("BBL_AWS_SECRET_ACCESS_KEY"),
		AWSRegion:          os.Getenv("BBL_AWS_REGION"),

		AzureClientID:       os.Getenv("BBL_AZURE_CLIENT_ID"),
		AzureClientSecret:   os.Getenv("BBL_AZURE_CLIENT_SECRET"),
		AzureRegion:         os.Getenv("BBL_AZURE_REGION"),
		AzureSubscriptionID: os.Getenv("BBL_AZURE_SUBSCRIPTION_ID"),
		AzureTenantID:       os.Getenv("BBL_AZURE_TENANT_ID"),

		GCPServiceAccountKey: os.Getenv("BBL_GCP_SERVICE_ACCOUNT_KEY"),
		GCPRegion:            os.Getenv("BBL_GCP_REGION"),

		VSphereNetwork:            os.Getenv("BBL_VSPHERE_NETWORK"),
		VSphereSubnetCIDR:         os.Getenv("BBL_VSPHERE_SUBNET_CIDR"),
		VSphereInternalGW:         os.Getenv("BBL_VSPHERE_INTERNAL_GW"),
		VSphereJumpboxIP:          os.Getenv("BBL_VSPHERE_JUMPBOX_IP"),
		VSphereDirectorInternalIP: os.Getenv("BBL_VSPHERE_DIRECTOR_INTERNAL_IP"),
		VSphereVCenterIP:          os.Getenv("BBL_VSPHERE_VCENTER_IP"),
		VSphereVCenterUser:        os.Getenv("BBL_VSPHERE_VCENTER_USER"),
		VSphereVCenterPassword:    os.Getenv("BBL_VSPHERE_VCENTER_PASSWORD"),
		VSphereVCenterDC:          os.Getenv("BBL_VSPHERE_VCENTER_DC"),
		VSphereVCenterCluster:     os.Getenv("BBL_VSPHERE_VCENTER_CLUSTER"),
		VSphereVCenterRP:          os.Getenv("BBL_VSPHERE_VCENTER_RP"),
		VSphereVCenterDS:          os.Getenv("BBL_VSPHERE_VCENTER_DS"),
		VSphereVCenterDisks:       os.Getenv("BBL_VSPHERE_VCENTER_DISKS"),
		VSphereVCenterVMs:         os.Getenv("BBL_VSPHERE_VCENTER_VMS"),
		VSphereVCenterTemplates:   os.Getenv("BBL_VSPHERE_VCENTER_TEMPLATES"),

		OpenStackAuthURL:     os.Getenv("BBL_OPENSTACK_AUTH_URL"),
		OpenStackAZ:          os.Getenv("BBL_OPENSTACK_AZ"),
		OpenStackNetworkName: os.Getenv("BBL_OPENSTACK_NETWORK_NAME"),
		OpenStackNetworkID:   os.Getenv("BBL_OPENSTACK_NETWORK_ID"),
		OpenStackPassword:    os.Getenv("BBL_OPENSTACK_PASSWORD"),
		OpenStackUsername:    os.Getenv("BBL_OPENSTACK_USERNAME"),
		OpenStackProject:     os.Getenv("BBL_OPENSTACK_PROJECT"),
		OpenStackDomain:      os.Getenv("BBL_OPENSTACK_DOMAIN"),
		OpenStackRegion:      os.Getenv("BBL_OPENSTACK_REGION"),

		StateFileDir:   os.Getenv("BBL_STATE_DIR"),
		BBLStateBucket: os.Getenv("BBL_STATE_BUCKET"),
	}
}

func SkipUnless(match string) {
	test := os.Getenv("RUN_TEST")
	if test != "" && test != match {
		Skip(fmt.Sprintf("RUN_TEST: %s", test))
	}
}


================================================
FILE: acceptance-tests/no-iaas/flags_error_test.go
================================================
package acceptance_test

import (
	"os/exec"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

var _ = Describe("bbl", func() {
	Context("when passed an unsupported --iaas flag", func() {
		It("prints out an error", func() {
			cmd := exec.Command(pathToBBL, "up", "--iaas", "banana")
			session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
			Expect(err).NotTo(HaveOccurred())
			Eventually(session).Should(gexec.Exit(1))

			Expect(string(session.Err.Contents())).To(ContainSubstring("--iaas [gcp, aws, azure, vsphere, openstack, cloudstack] must be provided or BBL_IAAS must be set"))
			Expect(string(session.Err.Contents())).NotTo(ContainSubstring("panic"))
		})
	})

	Context("when passed invalid GCP credentials", func() {
		It("prints out an error", func() {
			cmd := exec.Command(
				pathToBBL, "up",
				"--iaas", "gcp",
				"--gcp-service-account-key", `{"project_id": "idk"}`,
				"--gcp-region", "us-central1",
			)
			session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
			Expect(err).NotTo(HaveOccurred())
			Eventually(session).Should(gexec.Exit(1))
			Expect(string(session.Err.Contents())).NotTo(BeEmpty())
			Expect(string(session.Err.Contents())).To(ContainSubstring("google:"))
			Expect(string(session.Err.Contents())).NotTo(ContainSubstring("panic"))
		})
	})
})


================================================
FILE: acceptance-tests/no-iaas/help_test.go
================================================
package acceptance_test

import (
	"fmt"
	"os/exec"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"

	"github.com/onsi/gomega/gexec"
)

var _ = Describe("bbl", func() {
	Describe("help", func() {
		Describe("bbl -h", func() {
			It("prints out the usage", func() {
				session, err := gexec.Start(exec.Command(pathToBBL, "-h"), GinkgoWriter, GinkgoWriter)
				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Expect(session.Out.Contents()).To(ContainSubstring("usage"))
			})
		})

		Describe("bbl --help", func() {
			It("prints out the usage", func() {
				session, err := gexec.Start(exec.Command(pathToBBL, "--help"), GinkgoWriter, GinkgoWriter)

				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Expect(session.Out.Contents()).To(ContainSubstring("usage"))
			})
		})

		Describe("bbl help", func() {
			It("prints out the usage", func() {
				session, err := gexec.Start(exec.Command(pathToBBL, "help"), GinkgoWriter, GinkgoWriter)

				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Expect(session.Out.Contents()).To(ContainSubstring("usage"))
			})

			It("prints out the help and errors on any unknown commands passed to it", func() {
				args := []string{
					"--help",
					"some-invalid-command",
				}

				cmd := exec.Command(pathToBBL, args...)
				session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(1))
				Eventually(session.Out.Contents()).Should(ContainSubstring("bbl [GLOBAL OPTIONS] COMMAND [OPTIONS]"))
				Eventually(session.Err.Contents()).Should(ContainSubstring("some-invalid-command"))
			})

			It("prints out the help and ignores other args passed to it", func() {
				args := []string{
					"--help",
					"up",
					"--aws-gibberish",
				}

				cmd := exec.Command(pathToBBL, args...)
				session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Eventually(session.Out.Contents()).Should(ContainSubstring("bbl [GLOBAL OPTIONS] up [OPTIONS]"))
				Expect(session.Out.Contents()).NotTo(ContainSubstring("aws-gibberish"))
			})
		})

		Describe("bbl", func() {
			It("prints out the usage", func() {
				session, err := gexec.Start(exec.Command(pathToBBL), GinkgoWriter, GinkgoWriter)

				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Expect(session.Out.Contents()).To(ContainSubstring("usage"))
			})
		})
	})

	Context("command specific help", func() {
		DescribeTable("when passing --help flag or help command", func(command, expectedDescription string, args []string) {
			cmd := exec.Command(pathToBBL, args...)
			session, err := gexec.Start(cmd, GinkgoWriter, GinkgoWriter)
			Expect(err).NotTo(HaveOccurred())
			Eventually(session).Should(gexec.Exit(0))
			Eventually(string(session.Out.Contents())).Should(ContainSubstring(fmt.Sprintf("bbl [GLOBAL OPTIONS] %s [OPTIONS]", command)))
			Eventually(string(session.Out.Contents())).Should(ContainSubstring(expectedDescription))
		},
			Entry("Plan", "plan", "--aws-access-key-id", []string{"help", "plan"}),
			Entry("Plan", "plan", "--aws-access-key-id", []string{"plan", "--help"}),
			Entry("Up", "up", "--aws-access-key-id", []string{"help", "up"}),
			Entry("Up", "up", "--aws-access-key-id", []string{"up", "--help"}),
			Entry("Destroy", "destroy", "--no-confirm", []string{"help", "destroy"}),
			Entry("Destroy", "destroy", "--no-confirm", []string{"destroy", "--help"}),
			Entry("Rotate", "rotate", "Rotates SSH key", []string{"help", "rotate"}),
			Entry("Rotate", "rotate", "Rotates SSH key", []string{"rotate", "--help"}),
			Entry("Version", "version", "Prints version", []string{"help", "version"}),
			Entry("Version", "version", "Prints version", []string{"version", "--help"}),
			Entry("Jumpbox Address", "jumpbox-address", "Prints BOSH jumpbox address", []string{"help", "jumpbox-address"}),
			Entry("Jumpbox Address", "jumpbox-address", "Prints BOSH jumpbox address", []string{"jumpbox-address", "--help"}),
			Entry("Director Address", "director-address", "Prints BOSH director address", []string{"help", "director-address"}),
			Entry("Director Address", "director-address", "Prints BOSH director address", []string{"director-address", "--help"}),
			Entry("Director Username", "director-username", "Prints BOSH director username", []string{"help", "director-username"}),
			Entry("Director Username", "director-username", "Prints BOSH director username", []string{"director-username", "--help"}),
			Entry("Director Password", "director-password", "Prints BOSH director password", []string{"help", "director-password"}),
			Entry("Director Password", "director-password", "Prints BOSH director password", []string{"director-password", "--help"}),
			Entry("Director CA Cert", "director-ca-cert", "Prints BOSH director CA certificate", []string{"help", "director-ca-cert"}),
			Entry("Director CA Cert", "director-ca-cert", "Prints BOSH director CA certificate", []string{"director-ca-cert", "--help"}),
			Entry("ENV ID", "env-id", "environment ID", []string{"help", "env-id"}),
			Entry("ENV ID", "env-id", "environment ID", []string{"env-id", "--help"}),
			Entry("Help", "help", "Prints helpful message for the given command", []string{"help", "help"}),
			Entry("Latest Error", "latest-error", "Prints the output from the latest call to terraform", []string{"help", "latest-error"}),
			Entry("Latest Error", "latest-error", "Prints the output from the latest call to terraform", []string{"latest-error", "--help"}),
			Entry("LBs", "lbs", "Prints attached load balancer(s)", []string{"help", "lbs"}),
			Entry("LBs", "lbs", "Prints attached load balancer(s)", []string{"lbs", "--help"}),
			Entry("SSH Key", "ssh-key", "Prints SSH private key", []string{"help", "ssh-key"}),
			Entry("SSH Key", "ssh-key", "Prints SSH private key", []string{"ssh-key", "--help"}),
		)
	})
})


================================================
FILE: acceptance-tests/no-iaas/init_test.go
================================================
package acceptance_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

func TestAcceptance(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "no-iaas")
}

var pathToBBL string

var _ = BeforeSuite(func() {
	var err error

	pathToBBL, err = gexec.Build("github.com/cloudfoundry/bosh-bootloader/bbl")
	Expect(err).NotTo(HaveOccurred())
})

var _ = AfterSuite(func() {
	gexec.CleanupBuildArtifacts()
})


================================================
FILE: acceptance-tests/no-iaas/state_query_test.go
================================================
package acceptance_test

import (
	"os"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests"
	"github.com/cloudfoundry/bosh-bootloader/acceptance-tests/actors"
	"github.com/cloudfoundry/bosh-bootloader/storage"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("state query against a bbl 6.10.46 state file", func() {
	var bbl actors.BBL

	BeforeEach(func() {
		stateDir, err := os.MkdirTemp("", "")
		os.WriteFile(filepath.Join(stateDir, "bbl-state.json"), []byte(BBL_STATE_6_10_46), storage.StateMode) //nolint:errcheck
		Expect(err).NotTo(HaveOccurred())
		bbl = actors.NewBBL(stateDir, pathToBBL, acceptance.Config{}, "no-env", false)
	})

	It("bbl lbs", func() {
		stdout := bbl.Lbs()
		Expect(stdout).To(Equal(`CF Router LB: 35.201.97.214
CF SSH Proxy LB: 104.196.181.208
CF TCP Router LB: 35.185.98.78
CF WebSocket LB: 104.196.197.242`))
	})

	It("bbl jumpbox-address", func() {
		stdout := bbl.JumpboxAddress()
		Expect(stdout).To(Equal("35.185.60.196"))
	})

	It("bbl director-address", func() {
		stdout := bbl.DirectorAddress()
		Expect(stdout).To(Equal("https://10.0.0.6:25555"))
	})

	It("bbl director-username", func() {
		stdout := bbl.DirectorUsername()
		Expect(stdout).To(Equal("admin"))
	})

	It("bbl director-password", func() {
		stdout := bbl.DirectorPassword()
		Expect(stdout).To(Equal("some-password"))
	})

	It("bbl director-ca-cert", func() {
		stdout := bbl.DirectorCACert()
		Expect(stdout).To(Equal("-----BEGIN CERTIFICATE-----\ndirector-ca-cert\n-----END CERTIFICATE-----"))
	})

	It("bbl env-id", func() {
		stdout := bbl.EnvID()
		Expect(stdout).To(Equal("some-env-bbl6"))
	})

	It("bbl latest-error", func() {
		stdout := bbl.LatestError()
		Expect(stdout).To(Equal("latest terraform error"))
	})

	It("bbl print-env", func() {
		stdout := bbl.PrintEnv()
		Expect(stdout).To(ContainSubstring("export BOSH_CLIENT=admin"))
		Expect(stdout).To(ContainSubstring("export BOSH_CLIENT_SECRET=some-password"))
		Expect(stdout).To(ContainSubstring("export BOSH_ENVIRONMENT=https://10.0.0.6:25555"))
		Expect(stdout).To(ContainSubstring("export BOSH_CA_CERT='-----BEGIN CERTIFICATE-----\ndirector-ca-cert\n-----END CERTIFICATE-----"))
		Expect(stdout).To(ContainSubstring("export JUMPBOX_PRIVATE_KEY="))
		Expect(stdout).To(ContainSubstring("export BOSH_ALL_PROXY=ssh+socks5://jumpbox@35.185.60.196:22?private-key="))
		Expect(stdout).To(ContainSubstring("bosh_jumpbox_private.key"))
	})

	It("bbl ssh-key", func() {
		stdout := bbl.SSHKey()
		Expect(stdout).To(Equal("-----BEGIN RSA PRIVATE KEY-----\nssh-key\n-----END RSA PRIVATE KEY-----"))
	})

	It("bbl director-ssh-key", func() {
		stdout := bbl.DirectorSSHKey()
		Expect(stdout).To(Equal("-----BEGIN RSA PRIVATE KEY-----\ndirector-ssh-key\n-----END RSA PRIVATE KEY-----"))
	})
})

const BBL_STATE_6_10_46 = `
{
	"version": 14,
	"iaas": "gcp",
	"id": "e02be31f-0a0a-402e-4d73-de1f955be098",
	"aws": {
		"region": ""
	},
	"azure": {
		"clientId": "",
		"clientSecret": "",
		"location": "",
		"subscriptionId": "",
		"tenantId": ""
	},
	"gcp": {
		"zone": "us-east1-b",
		"region": "us-east1",
		"zones": [
			"us-east1-b",
			"us-east1-c",
			"us-east1-d"
		]
	},
	"jumpbox": {
		"url": "35.185.60.196:22",
		"variables": "jumpbox_ssh:\n  private_key: |\n    -----BEGIN RSA PRIVATE KEY-----\n    ssh-key\n    -----END RSA PRIVATE KEY-----",
		"manifest": "some-jumpbox-manifest",
		"state": {}
	},
	"bosh": {
		"directorName": "bosh-some-env-bbl6",
		"directorUsername": "admin",
		"directorPassword": "some-password",
		"directorAddress": "https://10.0.0.6:25555",
		"directorSSLCA": "-----BEGIN CERTIFICATE-----\ndirector-ca-cert\n-----END CERTIFICATE-----\n",
		"directorSSLCertificate": "-----BEGIN CERTIFICATE-----\n-----END CERTIFICATE-----\n",
		"directorSSLPrivateKey": "-----BEGIN RSA PRIVATE KEY-----\n-----END RSA PRIVATE KEY-----\n",
		"variables": "jumpbox_ssh:\n  private_key: |\n    -----BEGIN RSA PRIVATE KEY-----\n    director-ssh-key\n    -----END RSA PRIVATE KEY-----",
		"state": {},
		"manifest": "some-manifest",
		"userOpsFile": ""
	},
	"envID": "some-env-bbl6",
	"tfState": "{\n    \"version\": 3,\n    \"terraform_version\": \"0.10.7\",\n    \"serial\": 2,\n    \"lineage\": \"\",\n    \"modules\": [\n        {\n            \"path\": [\n                \"root\"\n            ],\n            \"outputs\": {\n                \"bosh_director_tag_name\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-bosh-director\"\n                },\n                \"bosh_open_tag_name\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-bosh-open\"\n                },\n                \"credhub_lb_ip\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"35.196.150.246\"\n                },\n                \"credhub_target_pool\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-credhub\"\n                },\n                \"credhub_target_tags\": {\n                    \"sensitive\": false,\n                    \"type\": \"list\",\n                    \"value\": [\n                        \"some-env-bbl6-credhub\"\n                    ]\n                },\n                \"director_address\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"https://35.185.125.178:25555\"\n                },\n                \"external_ip\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"35.185.60.196\"\n                },\n                \"internal_tag_name\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-internal\"\n                },\n                \"jumpbox_tag_name\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-jumpbox\"\n                },\n                \"jumpbox_url\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"35.185.60.196:22\"\n                },\n                \"network_name\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-network\"\n                },\n                \"router_backend_service\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-router-lb\"\n                },\n                \"router_lb_ip\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"35.201.97.214\"\n                },\n                \"ssh_proxy_lb_ip\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"104.196.181.208\"\n                },\n                \"ssh_proxy_target_pool\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-cf-ssh-proxy\"\n                },\n                \"subnetwork_name\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-subnet\"\n                },\n                \"tcp_router_lb_ip\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"35.185.98.78\"\n                },\n                \"tcp_router_target_pool\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-cf-tcp-router\"\n                },\n                \"ws_lb_ip\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"104.196.197.242\"\n                },\n                \"ws_target_pool\": {\n                    \"sensitive\": false,\n                    \"type\": \"string\",\n                    \"value\": \"some-env-bbl6-cf-ws\"\n                }\n            },\n            \"resources\": {},\n            \"depends_on\": []\n        }\n    ]\n}\n",
	"lb": {
		"type": "cf",
		"cert": "-----BEGIN CERTIFICATE-----\nsome-lb-cert\n-----END CERTIFICATE-----\n",
		"key": "-----BEGIN RSA PRIVATE KEY-----\nsome-lb-key\n-----END RSA PRIVATE KEY-----\n",
		"chain": ""
	},
	"latestTFOutput": "latest terraform error"
}
`


================================================
FILE: acceptance-tests/no-iaas/version_test.go
================================================
package acceptance_test

import (
	"fmt"
	"os/exec"
	"runtime"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
	"github.com/onsi/gomega/gexec"
)

var _ = Describe("bbl", func() {
	Describe("version", func() {
		Describe("bbl version", func() {
			It("prints out the version 'dev' if not built with an ldflag", func() {
				session, err := gexec.Start(exec.Command(pathToBBL, "version"), GinkgoWriter, GinkgoWriter)

				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Expect(string(session.Out.Contents())).To(ContainSubstring("bbl dev"))
			})

			Context("bbl provided version", func() {
				var (
					pathToBBL string
				)

				BeforeEach(func() {
					var err error
					pathToBBL, err = gexec.Build("github.com/cloudfoundry/bosh-bootloader/bbl",
						"--ldflags", "-X main.Version=1.2.3")
					Expect(err).NotTo(HaveOccurred())
				})

				It("prints out the version passed into the build process via LDFlags", func() {
					session, err := gexec.Start(exec.Command(pathToBBL, "version"), GinkgoWriter, GinkgoWriter)

					Expect(err).NotTo(HaveOccurred())
					Eventually(session).Should(gexec.Exit(0))
					Expect(string(session.Out.Contents())).To(ContainSubstring("bbl 1.2.3"))
					Expect(string(session.Out.Contents())).To(ContainSubstring(fmt.Sprintf("(%s/%s)", runtime.GOOS, runtime.GOARCH)))
				})
			})
		})

		Describe("bbl --version", func() {
			It("prints out the version 'dev' if not built with an ldflag", func() {
				session, err := gexec.Start(exec.Command(pathToBBL, "--version"), GinkgoWriter, GinkgoWriter)

				Expect(err).NotTo(HaveOccurred())
				Eventually(session).Should(gexec.Exit(0))
				Expect(string(session.Out.Contents())).To(ContainSubstring("bbl dev"))
			})

			Context("bbl provided version", func() {
				var (
					pathToBBL string
				)

				BeforeEach(func() {
					var err error
					pathToBBL, err = gexec.Build("github.com/cloudfoundry/bosh-bootloader/bbl",
						"--ldflags", "-X main.Version=1.2.3")
					Expect(err).NotTo(HaveOccurred())
				})

				It("prints out the version passed into the build process via LDFlags", func() {
					session, err := gexec.Start(exec.Command(pathToBBL, "--version"), GinkgoWriter, GinkgoWriter)

					Expect(err).NotTo(HaveOccurred())
					Eventually(session).Should(gexec.Exit(0))
					Expect(string(session.Out.Contents())).To(ContainSubstring("bbl 1.2.3"))
					Expect(string(session.Out.Contents())).To(ContainSubstring(fmt.Sprintf("(%s/%s)", runtime.GOOS, runtime.GOARCH)))
				})
			})
		})
	})
})


================================================
FILE: acceptance-tests/state.go
================================================
package acceptance

import (
	"crypto/md5"
	"encoding/json"
	"fmt"
	"os"

	. "github.com/onsi/gomega" //nolint:staticcheck
)

type State struct {
	stateFilePath string
}

type state struct {
	EnvID   string `json:"envID"`
	TFState string `json:"tfState"`
	BOSH    struct {
		State    map[string]interface{} `json:"state"`
		Manifest string                 `json:"manifest"`
	} `json:"bosh"`
}

func (s State) Checksum() string {
	buf, err := os.ReadFile(s.stateFilePath)
	Expect(err).NotTo(HaveOccurred())
	return fmt.Sprintf("%x", md5.Sum(buf))
}

func (s State) EnvID() string {
	state := s.readStateFile()
	return state.EnvID
}

func (s State) TFState() string {
	state := s.readStateFile()
	return state.TFState
}

func (s State) BOSHState() string {
	state := s.readStateFile()
	boshState, err := json.Marshal(state.BOSH.State)
	if err != nil {
		panic(err)
	}
	return string(boshState)
}

func (s State) BOSHManifest() string {
	state := s.readStateFile()

	return state.BOSH.Manifest
}

func (s State) readStateFile() state {
	stateFile, err := os.Open(s.stateFilePath)
	Expect(err).NotTo(HaveOccurred())
	defer stateFile.Close() //nolint:errcheck

	var state state
	err = json.NewDecoder(stateFile).Decode(&state)
	Expect(err).NotTo(HaveOccurred())

	return state
}


================================================
FILE: acceptance-tests/vm_extensions.go
================================================
package acceptance

import (
	"gopkg.in/yaml.v2"

	. "github.com/onsi/gomega" //nolint:staticcheck
)

func VmExtensionNames(cloudConfigOutput string) []string {
	var cloudConfig struct {
		VMExtensions []struct {
			Name            string                 `yaml:"name"`
			CloudProperties map[string]interface{} `yaml:"cloud_properties"`
		} `yaml:"vm_extensions"`
	}
	err := yaml.Unmarshal([]byte(cloudConfigOutput), &cloudConfig)
	Expect(err).NotTo(HaveOccurred())

	var names []string
	for _, extension := range cloudConfig.VMExtensions {
		names = append(names, extension.Name)
	}
	return names
}


================================================
FILE: application/app.go
================================================
package application

import (
	"fmt"

	"github.com/cloudfoundry/bosh-bootloader/commands"
	"github.com/cloudfoundry/bosh-bootloader/storage"
)

type CommandSet map[string]commands.Command

type usage interface {
	Print()
	PrintCommandUsage(command, message string)
}

type App struct {
	commands      CommandSet
	configuration Configuration
	usage         usage
}

func New(commands CommandSet, configuration Configuration, usage usage) App {
	return App{
		commands:      commands,
		configuration: configuration,
		usage:         usage,
	}
}

func (a App) Run() error {
	err := a.execute()
	if _, ok := err.(commands.ExitSuccessfully); !ok {
		return err
	}
	return nil
}

func (a App) getCommand(commandString string) (commands.Command, error) {
	command, ok := a.commands[commandString]
	if !ok {
		a.usage.Print()
		return nil, fmt.Errorf("unknown command: %s", commandString)
	}
	return command, nil
}

func (a App) execute() error {
	command, err := a.getCommand(a.configuration.Command)
	if err != nil {
		return err
	}

	if a.configuration.ShowCommandHelp {
		a.usage.PrintCommandUsage(a.configuration.Command, command.Usage())
		return nil
	}

	if a.configuration.Command == "help" && len(a.configuration.SubcommandFlags) != 0 {
		commandString := a.configuration.SubcommandFlags[0]
		command, err = a.getCommand(commandString)
		if err != nil {
			return err
		}
		a.usage.PrintCommandUsage(commandString, command.Usage())
		return nil
	}

	if a.configuration.Command == "--version" || a.configuration.Command == "-v" || a.configuration.SubcommandFlags.ContainsAny("--version", "-v") {
		versionCommand, err := a.getCommand("version")
		if err != nil {
			return err
		}

		return versionCommand.Execute([]string{}, storage.State{})
	}

	if (a.configuration.Command == "plan" || a.configuration.Command == "up") && a.configuration.Global.Name != "" {
		a.configuration.SubcommandFlags = append(a.configuration.SubcommandFlags, "--name", a.configuration.Global.Name)
	}

	err = command.CheckFastFails(a.configuration.SubcommandFlags, a.configuration.State)
	if err != nil {
		return err
	}

	return command.Execute(a.configuration.SubcommandFlags, a.configuration.State)
}


================================================
FILE: application/app_test.go
================================================
package application_test

import (
	"errors"

	"github.com/cloudfoundry/bosh-bootloader/application"
	"github.com/cloudfoundry/bosh-bootloader/commands"
	"github.com/cloudfoundry/bosh-bootloader/fakes"
	"github.com/cloudfoundry/bosh-bootloader/storage"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("App", func() {
	var (
		app        application.App
		helpCmd    *fakes.Command
		versionCmd *fakes.Command
		someCmd    *fakes.Command
		errorCmd   *fakes.Command
		usage      *fakes.Usage
	)

	var NewAppWithConfiguration = func(configuration application.Configuration) application.App {
		return application.New(application.CommandSet{
			"help":      helpCmd,
			"version":   versionCmd,
			"--version": versionCmd,
			"some":      someCmd,
			"error":     errorCmd,
		},
			configuration,
			usage,
		)
	}

	BeforeEach(func() {
		helpCmd = &fakes.Command{}
		versionCmd = &fakes.Command{}
		errorCmd = &fakes.Command{}

		someCmd = &fakes.Command{}
		someCmd.ExecuteCall.PassState = true

		usage = &fakes.Usage{}

		app = NewAppWithConfiguration(application.Configuration{})
	})

	Describe("Run", func() {
		Context("executing commands", func() {
			It("executes the command with flags", func() {
				app = NewAppWithConfiguration(application.Configuration{
					Command: "some",
					SubcommandFlags: []string{
						"--first-subcommand-flag", "first-value",
						"--second-subcommand-flag", "second-value",
					},
					Global: application.GlobalConfiguration{
						StateDir: "some/state/dir",
					},
					State: storage.State{},
				})

				Expect(app.Run()).To(Succeed())

				Expect(someCmd.ExecuteCall.CallCount).To(Equal(1))
				Expect(someCmd.ExecuteCall.Receives.SubcommandFlags).To(Equal([]string{
					"--first-subcommand-flag", "first-value",
					"--second-subcommand-flag", "second-value",
				}))
			})
		})

		Context("when name is passed as a global flag", func() {
			DescribeTable("propagates name to subcommand flags", func(command string) {
				commandFake := &fakes.Command{}

				app = application.New(
					application.CommandSet{
						command: commandFake,
					},
					application.Configuration{
						Command: command,
						SubcommandFlags: []string{
							"--first-subcommand-flag", "first-value",
							"--second-subcommand-flag", "second-value",
						},
						Global: application.GlobalConfiguration{
							StateDir: "some/state/dir",
							Name:     "some-env-name",
						},
						State: storage.State{},
					},
					usage)

				Expect(app.Run()).To(Succeed())

				Expect(commandFake.ExecuteCall.CallCount).To(Equal(1))
				Expect(commandFake.ExecuteCall.Receives.SubcommandFlags).To(Equal([]string{
					"--first-subcommand-flag", "first-value",
					"--second-subcommand-flag", "second-value",
					"--name", "some-env-name",
				}))
			},
				Entry("when command is plan", "plan"),
				Entry("when command is up", "up"),
			)
		})

		Context("when subcommand flags contains help", func() {
			DescribeTable("prints command specific usage when help subcommand flag is provided", func(helpFlag string) {
				someCmd.UsageCall.Returns.Usage = "some usage message"

				app = NewAppWithConfiguration(application.Configuration{
					Command:         "some",
					SubcommandFlags: []string{helpFlag},
					ShowCommandHelp: true,
				})

				Expect(app.Run()).To(Succeed())
				Expect(someCmd.UsageCall.CallCount).To(Equal(1))
				Expect(usage.PrintCommandUsageCall.CallCount).To(Equal(1))
				Expect(usage.PrintCommandUsageCall.Receives.Message).To(Equal("some usage message"))
				Expect(usage.PrintCommandUsageCall.Receives.Command).To(Equal("some"))
				Expect(someCmd.ExecuteCall.CallCount).To(Equal(0))
			},
				Entry("when --help is provided", "--help"),
				Entry("when -h is provided", "-h"),
			)
		})

		Context("when help is called with a command", func() {
			It("prints the command specific help", func() {
				someCmd.UsageCall.Returns.Usage = "some usage message"

				app = NewAppWithConfiguration(application.Configuration{
					Command:         "help",
					SubcommandFlags: []string{"some"},
				})

				Expect(app.Run()).To(Succeed())
				Expect(someCmd.UsageCall.CallCount).To(Equal(1))
				Expect(usage.PrintCommandUsageCall.CallCount).To(Equal(1))
				Expect(usage.PrintCommandUsageCall.Receives.Message).To(Equal("some usage message"))
				Expect(usage.PrintCommandUsageCall.Receives.Command).To(Equal("some"))
				Expect(someCmd.ExecuteCall.CallCount).To(Equal(0))
			})

			Context("failure cases", func() {
				Context("when a invalid subcommand is passed", func() {
					BeforeEach(func() {
						app = NewAppWithConfiguration(application.Configuration{
							Command:         "help",
							SubcommandFlags: []string{"invalid-command"},
						})
					})

					It("prints the usage", func() {
						err := app.Run()
						Expect(err).To(MatchError("unknown command: invalid-command"))
						Expect(someCmd.ExecuteCall.CallCount).To(Equal(0))
						Expect(usage.PrintCall.CallCount).To(Equal(1))
					})
				})
			})
		})

		Context("when --version is the command", func() {
			It("executes the command", func() {
				app = NewAppWithConfiguration(application.Configuration{
					Command: "--version",
					SubcommandFlags: []string{
						"--first-subcommand-flag", "first-value",
						"--second-subcommand-flag", "second-value",
					},
				})

				Expect(app.Run()).To(Succeed())

				Expect(versionCmd.ExecuteCall.CallCount).To(Equal(1))
				Expect(versionCmd.ExecuteCall.Receives.SubcommandFlags).To(Equal([]string{}))
			})
		})

		Context("when subcommand flags contains version", func() {
			DescribeTable("prints version when version subcommand flag is provided", func(versionFlag string) {
				app = NewAppWithConfiguration(application.Configuration{
					Command:         "some",
					SubcommandFlags: []string{versionFlag},
				})

				Expect(app.Run()).To(Succeed())
				Expect(someCmd.ExecuteCall.CallCount).To(Equal(0))
				Expect(versionCmd.ExecuteCall.CallCount).To(Equal(1))
				Expect(versionCmd.ExecuteCall.Receives.SubcommandFlags).To(Equal([]string{}))
				Expect(versionCmd.ExecuteCall.Receives.State).To(Equal(storage.State{}))
			},
				Entry("when --version is provided", "--version"),
				Entry("when -v is provided", "-v"),
			)

			Context("error cases", func() {
				Context("when version command is not part of the command set", func() {
					BeforeEach(func() {
						app = application.New(application.CommandSet{
							"some": someCmd,
						}, application.Configuration{
							Command:         "some",
							SubcommandFlags: []string{"-v"},
						}, usage)
					})

					It("returns an error", func() {
						Expect(app.Run()).To(MatchError("unknown command: version"))
					})
				})
			})
		})

		Context("error cases", func() {
			Context("when a fast fail occurs", func() {
				BeforeEach(func() {
					someCmd.CheckFastFailsCall.Returns.Error = errors.New("fast failed command")
				})

				It("returns an error and does not execute the command", func() {
					app = NewAppWithConfiguration(application.Configuration{
						Command: "some",
					})
					err := app.Run()
					Expect(someCmd.CheckFastFailsCall.CallCount).To(Equal(1))
					Expect(err).To(MatchError("fast failed command"))
					Expect(someCmd.ExecuteCall.CallCount).To(Equal(0))
				})
			})

			Context("when a fast fail occurs, but indicates that its a success", func() {
				BeforeEach(func() {
					someCmd.CheckFastFailsCall.Returns.Error = commands.ExitSuccessfully{}
				})

				It("returns nil and doesn't execute the command", func() {
					app = NewAppWithConfiguration(application.Configuration{
						Command: "some",
					})
					err := app.Run()
					Expect(someCmd.CheckFastFailsCall.CallCount).To(Equal(1))
					Expect(err).NotTo(HaveOccurred())
					Expect(someCmd.ExecuteCall.CallCount).To(Equal(0))
				})
			})

			Context("when an unknown command is provided", func() {
				It("prints usage and returns an error", func() {
					app = NewAppWithConfiguration(application.Configuration{
						Command: "some-unknown-command",
					})
					err := app.Run()
					Expect(err).To(MatchError("unknown command: some-unknown-command"))
					Expect(usage.PrintCall.CallCount).To(Equal(1))
				})
			})

			Context("when the command fails to execute", func() {
				It("returns an error", func() {
					errorCmd.ExecuteCall.Returns.Error = errors.New("error executing command")
					app = NewAppWithConfiguration(application.Configuration{
						Command: "error",
						Global: application.GlobalConfiguration{
							Debug: true,
						},
					})
					Expect(app.Run()).To(MatchError("error executing command"))
				})
			})
		})
	})
})


================================================
FILE: application/configuration.go
================================================
package application

import "github.com/cloudfoundry/bosh-bootloader/storage"

type GlobalConfiguration struct {
	StateDir             string
	Debug                bool
	Name                 string
	TerraformBinary      bool
	DisableTfAutoApprove bool
}

type StringSlice []string

func (s StringSlice) ContainsAny(targets ...string) bool {
	for _, target := range targets {
		for _, element := range s {
			if element == target {
				return true
			}
		}
	}
	return false
}

type Configuration struct {
	Global               GlobalConfiguration
	Command              string
	SubcommandFlags      StringSlice
	State                storage.State
	ShowCommandHelp      bool
	CommandModifiesState bool
}


================================================
FILE: application/configuration_test.go
================================================
package application_test

import (
	"github.com/cloudfoundry/bosh-bootloader/application"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("StringSlice", func() {
	Describe("ContainsAll", func() {
		It("returns true if the slice contains all the targets", func() {
			stringSlice := application.StringSlice{"apple", "banana", "cat", "dog", "elephant"}
			Expect(stringSlice.ContainsAny("apple", "zebra")).To(BeTrue())
		})

		It("return false if the slice does not contain any the target", func() {
			stringSlice := application.StringSlice{"apple", "banana", "cat", "dog", "elephant"}
			Expect(stringSlice.ContainsAny("zebra", "kangaroo")).To(BeFalse())
		})
	})
})


================================================
FILE: application/init_test.go
================================================
package application_test

import (
	"testing"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

func TestApplication(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "application")
}


================================================
FILE: application/logger.go
================================================
package application

import (
	"fmt"
	"io"
	"strings"
)

type Logger struct {
	newline   bool
	writer    io.Writer
	reader    io.Reader
	noConfirm bool
}

func NewLogger(writer io.Writer, reader io.Reader) *Logger {
	return &Logger{
		newline:   true,
		writer:    writer,
		reader:    reader,
		noConfirm: false,
	}
}

func (l *Logger) clear() {
	if l.newline {
		return
	}

	l.writer.Write([]byte("\n")) //nolint:errcheck
	l.newline = true
}

func (l *Logger) Step(message string, a ...interface{}) {
	l.clear()
	fmt.Fprintf(l.writer, "step: %s\n", fmt.Sprintf(message, a...)) //nolint:errcheck
	l.newline = true
}

func (l *Logger) Dot() {
	l.writer.Write([]byte("\u2022")) //nolint:errcheck
	l.newline = false
}

func (l *Logger) Printf(message string, a ...interface{}) {
	l.clear()
	fmt.Fprintf(l.writer, "%s", fmt.Sprintf(message, a...)) //nolint:errcheck
}

func (l *Logger) Println(message string) {
	l.clear()
	fmt.Fprintf(l.writer, "%s\n", message) //nolint:errcheck
}

func (l *Logger) Debugf(message string, a ...interface{}) {
	l.clear()
	fmt.Fprintf(l.writer, "%s\n", message) //nolint:errcheck
}

func (l *Logger) Debugln(message string) {
	l.clear()
	fmt.Fprintf(l.writer, "%s\n", message) //nolint:errcheck
}

func (l *Logger) NoConfirm() {
	l.noConfirm = true
}

func (l *Logger) Prompt(message string) bool {
	if l.noConfirm {
		return true
	}

	l.clear()
	fmt.Fprintf(l.writer, "%s (y/N): ", message) //nolint:errcheck
	l.newline = true

	var proceed string
	_, err := fmt.Fscanln(l.reader, &proceed)
	if err != nil {
		return false
	}

	proceed = strings.ToLower(proceed)
	if proceed == "yes" || proceed == "y" {
		return true
	}
	return false
}

func (l *Logger) PromptWithDetails(resourceType, resourceName string) bool {
	return l.Prompt(fmt.Sprintf("[%s: %s] Delete?", resourceType, resourceName))
}


================================================
FILE: application/logger_test.go
================================================
package application_test

import (
	"bytes"
	"fmt"
	"math/rand"

	"github.com/cloudfoundry/bosh-bootloader/application"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("Logger", func() {
	var (
		writer *bytes.Buffer
		reader *bytes.Buffer

		logger *application.Logger
	)

	BeforeEach(func() {
		writer = bytes.NewBuffer([]byte{})
		reader = bytes.NewBuffer([]byte{})

		logger = application.NewLogger(writer, reader)
	})

	Describe("Step", func() {
		It("prints the step message", func() {
			logger.Step("creating key")

			Expect(writer.String()).To(Equal("step: creating key\n"))
		})

		It("prints the step message with dynamic values", func() {
			randomInt := rand.Int()
			logger.Step("Random variable is: %d", randomInt)
			Expect(writer.String()).To(Equal(fmt.Sprintf("step: Random variable is: %d\n", randomInt)))
		})
	})

	Describe("Dot", func() {
		It("prints a dot", func() {
			logger.Dot()
			logger.Dot()
			logger.Dot()

			Expect(writer.String()).To(Equal("\u2022\u2022\u2022"))
		})
	})

	Describe("Println", func() {
		It("prints out the message", func() {
			logger.Println("hello world")

			Expect(writer.String()).To(Equal("hello world\n"))
		})
	})

	Describe("Prompt", func() {
		Context("when NoConfirm has been called", func() {
			BeforeEach(func() {
				logger.NoConfirm()
			})

			It("doesn't prompt", func() {
				proceed := logger.Prompt("do you like cheese?")
				Expect(proceed).To(BeTrue())

				Expect(writer.String()).To(Equal(""))
			})
		})

		It("prompts for the given messge", func() {
			logger.Prompt("do you like cheese?")

			Expect(writer.String()).To(Equal("do you like cheese? (y/N): "))
		})

		DescribeTable("prompting the user for confirmation",
			func(response string, proceed bool) {
				fmt.Fprintf(reader, "%s\n", response)

				p := logger.Prompt("Do you like bananas?")
				Expect(p).To(Equal(proceed))
			},
			Entry("responding with 'yes'", "yes", true),
			Entry("responding with 'y'", "y", true),
			Entry("responding with 'Yes'", "Yes", true),
			Entry("responding with 'Y'", "Y", true),
			Entry("responding with 'no'", "no", false),
			Entry("responding with 'n'", "n", false),
			Entry("responding with 'No'", "No", false),
			Entry("responding with 'N'", "N", false),
		)
	})

	Describe("mixing steps, dots and printlns", func() {
		It("prints out a coherent set of lines", func() {
			logger.Step("creating key")
			logger.Step("generating template")
			logger.Step("applying template")
			logger.Dot()
			logger.Dot()
			logger.Step("completed applying template")
			logger.Dot()
			logger.Dot()
			logger.Prompt("do you like turtles?")
			logger.Println("**bosh manifest**")
			logger.Step("doing more stuff")
			logger.Dot()
			logger.Dot()
			logger.Println("SUCCESS!")

			Expect(writer.String()).To(Equal(`step: creating key
step: generating template
step: applying template
••
step: completed applying template
••
do you like turtles? (y/N): **bosh manifest**
step: doing more stuff
••
SUCCESS!
`))
		})
	})
})


================================================
FILE: application/state_validator.go
================================================
package application

import (
	"os"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/commands"
)

type StateValidator struct {
	stateDir string
}

func NewStateValidator(stateDir string) StateValidator {
	return StateValidator{stateDir: stateDir}
}

func (s StateValidator) Validate() error {
	_, err := os.Stat(filepath.Join(s.stateDir, "bbl-state.json"))
	if os.IsNotExist(err) {
		return commands.NewNoBBLStateError(s.stateDir)
	}
	if err != nil {
		return err
	}
	return nil
}


================================================
FILE: application/state_validator_test.go
================================================
package application_test

import (
	"fmt"
	"os"
	"path/filepath"
	"runtime"

	"github.com/cloudfoundry/bosh-bootloader/application"
	"github.com/cloudfoundry/bosh-bootloader/storage"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("StateValidator", func() {
	var (
		tempDirectory  string
		stateValidator application.StateValidator
	)

	BeforeEach(func() {
		var err error
		tempDirectory, err = os.MkdirTemp("", "")
		Expect(err).NotTo(HaveOccurred())

		stateValidator = application.NewStateValidator(tempDirectory)
	})

	Context("when state file exists", func() {
		BeforeEach(func() {
			err := os.WriteFile(filepath.Join(tempDirectory, "bbl-state.json"), []byte(""), storage.StateMode)
			Expect(err).NotTo(HaveOccurred())
		})

		It("returns no error ", func() {
			Expect(stateValidator.Validate()).To(Succeed())
		})
	})

	Context("when state file cannot be found", func() {
		It("returns an error", func() {
			Expect(stateValidator.Validate()).To(MatchError(fmt.Sprintf("bbl-state.json not found in %q, ensure you're running this command in the proper state directory or create a new environment with bbl up", tempDirectory)))
		})
	})

	Context("failure cases", func() {
		Context("when permission denied", func() {
			It("returns an error", func() {
				if runtime.GOOS == "windows" {
					Skip("Chmod is not supported on Windows")
				}
				Expect(os.Chmod(tempDirectory, os.FileMode(0))).To(Succeed())

				Expect(stateValidator.Validate()).To(MatchError(ContainSubstring("permission denied")))
			})
		})
	})
})


================================================
FILE: aws/client.go
================================================
package aws

import (
	"errors"
	"fmt"
	"sort"
	"strings"

	awslib "github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
	"github.com/aws/aws-sdk-go/aws/session"
	awsec2 "github.com/aws/aws-sdk-go/service/ec2"
	awsroute53 "github.com/aws/aws-sdk-go/service/route53"

	"github.com/cloudfoundry/bosh-bootloader/storage"
)

type EC2Client interface {
	DescribeAvailabilityZones(*awsec2.DescribeAvailabilityZonesInput) (*awsec2.DescribeAvailabilityZonesOutput, error)
	DescribeInstances(*awsec2.DescribeInstancesInput) (*awsec2.DescribeInstancesOutput, error)
	DescribeVpcs(*awsec2.DescribeVpcsInput) (*awsec2.DescribeVpcsOutput, error)
}

type Route53Client interface {
	ListHostedZonesByName(*awsroute53.ListHostedZonesByNameInput) (*awsroute53.ListHostedZonesByNameOutput, error)
}

type logger interface {
	Step(string, ...interface{})
}

type AvailabilityZones interface {
	RetrieveAZs(region string) ([]string, error)
}

type DNSZones interface {
	RetrieveDNS(domain string) string
}

type Client struct {
	ec2Client     EC2Client
	route53Client Route53Client
	logger        logger
}

func NewClient(creds storage.AWS, logger logger) Client {
	config := awslib.NewConfig().
		WithCredentials(credentials.NewStaticCredentials(creds.AccessKeyID, creds.SecretAccessKey, "")).
		WithRegion(creds.Region)
	awsSession := session.Must(session.NewSession(config))

	if creds.AssumeRoleArn != "" {
		stsCredentials := stscreds.NewCredentials(awsSession, creds.AssumeRoleArn)
		awsSession = session.Must(session.NewSession(awslib.NewConfig().WithCredentials(stsCredentials).WithRegion(creds.Region)))
	}

	return Client{
		ec2Client:     awsec2.New(awsSession),
		route53Client: awsroute53.New(awsSession),
		logger:        logger,
	}
}

// If the parent domain for the provided url exists
// in AWS Route53, return that zone's name.
func (c Client) RetrieveDNS(url string) string {
	parentDomain := fmt.Sprintf("%s.", strings.Join(strings.Split(url, ".")[1:], "."))

	list, err := c.route53Client.ListHostedZonesByName(&awsroute53.ListHostedZonesByNameInput{
		DNSName: awslib.String(parentDomain),
	})
	if err != nil || len(list.HostedZones) == 0 {
		return ""
	}

	var found awsroute53.HostedZone
	for _, zone := range list.HostedZones {
		if *zone.Name == parentDomain {
			found = *zone
		}
	}

	if found.Id == nil {
		return ""
	}

	return parentDomain
}

// Return the AWS Availability Zones for a given region.
func (c Client) RetrieveAZs(region string) ([]string, error) {
	output, err := c.ec2Client.DescribeAvailabilityZones(&awsec2.DescribeAvailabilityZonesInput{
		Filters: []*awsec2.Filter{{
			Name:   awslib.String("region-name"),
			Values: []*string{awslib.String(region)},
		}},
	})
	if err != nil {
		return []string{}, err
	}

	azList := []string{}
	for _, az := range output.AvailabilityZones {
		if az == nil {
			return []string{}, errors.New("aws returned nil availability zone")
		}
		if az.ZoneName == nil {
			return []string{}, errors.New("aws returned availability zone with nil zone name")
		}

		azList = append(azList, *az.ZoneName)
	}

	sort.Strings(azList)

	return azList, nil
}

// Return true if the network with the provided name exists.
func (c Client) CheckExists(networkName string) (bool, error) {
	vpcs, err := c.ec2Client.DescribeVpcs(&awsec2.DescribeVpcsInput{
		Filters: []*awsec2.Filter{{
			Name: awslib.String("tag:Name"),
			Values: []*string{
				awslib.String(networkName),
			}},
		},
	})
	if err != nil {
		return false, fmt.Errorf("Failed to check vpc existence: %s", err) //nolint:staticcheck
	}

	if len(vpcs.Vpcs) > 0 {
		return true, nil
	}

	return false, nil
}

func (c Client) ValidateSafeToDelete(vpcID, envID string) error {
	output, err := c.ec2Client.DescribeInstances(&awsec2.DescribeInstancesInput{
		Filters: []*awsec2.Filter{{
			Name:   awslib.String("vpc-id"),
			Values: []*string{awslib.String(vpcID)},
		}},
	})
	if err != nil {
		return err
	}

	vms := c.flattenVMs(output.Reservations)
	vms = c.removeAll(vms, fmt.Sprintf("%s-nat", envID))
	vms = c.removeOneVM(vms, "NAT")
	vms = c.removeOneVM(vms, "bosh/0")
	vms = c.removeOneVM(vms, "jumpbox/0")

	if len(vms) > 0 {
		return fmt.Errorf("vpc %s is not safe to delete; vms still exist: [%s]", vpcID, strings.Join(vms, ", "))
	}

	return nil
}

func (c Client) flattenVMs(reservations []*awsec2.Reservation) []string {
	vms := []string{}
	for _, reservation := range reservations {
		for _, instance := range reservation.Instances {
			vms = append(vms, c.vmName(instance))
		}
	}
	return vms
}

func (c Client) vmName(instance *awsec2.Instance) string {
	name := "unnamed"

	for _, tag := range instance.Tags {
		if awslib.StringValue(tag.Key) == "Name" && awslib.StringValue(tag.Value) != "" {
			name = awslib.StringValue(tag.Value)
		}
	}

	return name
}

func (c Client) removeOneVM(vms []string, vmToRemove string) []string {
	for index, vm := range vms {
		if vm == vmToRemove {
			return append(vms[:index], vms[index+1:]...)
		}
	}

	return vms
}

func (c Client) removeAll(vms []string, vmToRemove string) []string {
	result := []string{}

	for _, vm := range vms {
		if vm != vmToRemove {
			result = append(result, vm)
		}
	}

	return result
}

func (c Client) GetVPC(vpcName string) (*string, error) {
	vpcs, err := c.ec2Client.DescribeVpcs(&awsec2.DescribeVpcsInput{
		Filters: []*awsec2.Filter{{
			Name:   awslib.String("tag:Name"),
			Values: []*string{awslib.String(vpcName)},
		}},
	})

	if err != nil {
		return nil, err
	}

	if len(vpcs.Vpcs) != 1 {
		return nil, fmt.Errorf("expected to receive exactly one VPC with name %s", vpcName)
	}

	return vpcs.Vpcs[0].VpcId, nil
}


================================================
FILE: aws/client_test.go
================================================
package aws_test

import (
	"errors"

	"github.com/aws/aws-sdk-go/aws/credentials"
	"github.com/cloudfoundry/bosh-bootloader/aws"
	"github.com/cloudfoundry/bosh-bootloader/fakes"
	"github.com/cloudfoundry/bosh-bootloader/storage"

	awslib "github.com/aws/aws-sdk-go/aws"
	awsec2 "github.com/aws/aws-sdk-go/service/ec2"
	awsroute53 "github.com/aws/aws-sdk-go/service/route53"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("Client", func() {
	Describe("NewClient", func() {
		It("returns a Client with the provided configuration", func() {
			client := aws.NewClient(
				storage.AWS{
					AccessKeyID:     "some-access-key-id",
					SecretAccessKey: "some-secret-access-key",
					Region:          "some-region",
				},
				&fakes.Logger{},
			)

			ec2Client, ok := client.GetEC2Client().(*awsec2.EC2)
			Expect(ok).To(BeTrue())

			_, ok = client.GetRoute53Client().(*awsroute53.Route53)
			Expect(ok).To(BeTrue())

			Expect(ec2Client.Config.Credentials).To(Equal(credentials.NewStaticCredentials("some-access-key-id", "some-secret-access-key", "")))
			Expect(ec2Client.Config.Region).To(Equal(awslib.String("some-region")))
		})
	})

	Describe("RetrieveDNS", func() {
		var (
			client        aws.Client
			route53Client *fakes.AWSRoute53Client
		)

		BeforeEach(func() {
			route53Client = &fakes.AWSRoute53Client{}
			client = aws.NewClientWithInjectedRoute53Client(route53Client, &fakes.Logger{})

			route53Client.ListHostedZonesByNameCall.Returns.Output = &awsroute53.ListHostedZonesByNameOutput{
				HostedZones: []*awsroute53.HostedZone{{
					Name: awslib.String("domain.com."),
					Id:   awslib.String("the-id"),
				}},
			}
		})

		It("fetches dns zone with a given domain", func() {
			parent := client.RetrieveDNS("some.domain.com")

			Expect(parent).To(Equal("domain.com."))

			Expect(route53Client.ListHostedZonesByNameCall.Receives.Input).To(Equal(&awsroute53.ListHostedZonesByNameInput{
				DNSName: awslib.String("domain.com."),
			}))
		})

		Context("when no dns zone at that domain exists", func() {
			BeforeEach(func() {
				route53Client.ListHostedZonesByNameCall.Returns.Output = &awsroute53.ListHostedZonesByNameOutput{
					HostedZones: []*awsroute53.HostedZone{},
				}
			})

			It("returns an empty string", func() {
				parent := client.RetrieveDNS("some.domain.com")
				Expect(parent).To(Equal(""))
			})
		})

		Context("when there are multiple dns zones that have the parent domain in the name", func() {
			BeforeEach(func() {
				route53Client.ListHostedZonesByNameCall.Returns.Output = &awsroute53.ListHostedZonesByNameOutput{
					HostedZones: []*awsroute53.HostedZone{{
						Name: awslib.String("other.domain.com."),
						Id:   awslib.String("other-id"),
					}, {
						Name: awslib.String("domain.com."),
						Id:   awslib.String("the-id"),
					}},
				}
			})

			It("returns the parent domain", func() {
				parent := client.RetrieveDNS("some.domain.com")
				Expect(parent).To(Equal("domain.com."))
			})
		})

		Context("when there are dns zones that have the parent domain in the name", func() {
			BeforeEach(func() {
				route53Client.ListHostedZonesByNameCall.Returns.Output = &awsroute53.ListHostedZonesByNameOutput{
					HostedZones: []*awsroute53.HostedZone{{
						Name: awslib.String("other.domain.com"),
						Id:   awslib.String("the-id"),
					}},
				}
			})

			It("returns an empty struct if the dns name is not an exact match", func() {
				parent := client.RetrieveDNS("some.domain.com")
				Expect(parent).To(Equal(""))
			})
		})

		Context("when hosted zones cannot be listed", func() {
			BeforeEach(func() {
				route53Client.ListHostedZonesByNameCall.Returns.Error = errors.New("feijoa")
			})

			It("returns empty string", func() {
				domain := client.RetrieveDNS("some.domain.com")
				Expect(domain).To(Equal(""))
			})
		})
	})

	Describe("RetrieveAZs", func() {
		var (
			client    aws.Client
			ec2Client *fakes.AWSEC2Client
		)

		BeforeEach(func() {
			ec2Client = &fakes.AWSEC2Client{}
			client = aws.NewClientWithInjectedEC2Client(ec2Client, &fakes.Logger{})
		})

		It("fetches availability zones for a given region", func() {
			ec2Client.DescribeAvailabilityZonesCall.Returns.Output = &awsec2.DescribeAvailabilityZonesOutput{
				AvailabilityZones: []*awsec2.AvailabilityZone{
					{ZoneName: awslib.String("us-east-1a")},
					{ZoneName: awslib.String("us-east-1b")},
					{ZoneName: awslib.String("us-east-1e")},
					{ZoneName: awslib.String("us-east-1c")},
				},
			}

			azs, err := client.RetrieveAZs("us-east-1")

			Expect(err).NotTo(HaveOccurred())
			Expect(azs).To(Equal([]string{"us-east-1a", "us-east-1b", "us-east-1c", "us-east-1e"}))
			Expect(ec2Client.DescribeAvailabilityZonesCall.Receives.Input).To(Equal(&awsec2.DescribeAvailabilityZonesInput{
				Filters: []*awsec2.Filter{{
					Name:   awslib.String("region-name"),
					Values: []*string{awslib.String("us-east-1")},
				}},
			}))
		})

		Describe("failure cases", func() {
			Context("when AWS returns a nil availability zone", func() {
				BeforeEach(func() {
					ec2Client.DescribeAvailabilityZonesCall.Returns.Output = &awsec2.DescribeAvailabilityZonesOutput{
						AvailabilityZones: []*awsec2.AvailabilityZone{nil},
					}
				})

				It("returns an error", func() {
					_, err := client.RetrieveAZs("us-east-1")
					Expect(err).To(MatchError("aws returned nil availability zone"))
				})
			})

			Context("when an availability zone with a nil ZoneName", func() {
				BeforeEach(func() {
					ec2Client.DescribeAvailabilityZonesCall.Returns.Output = &awsec2.DescribeAvailabilityZonesOutput{
						AvailabilityZones: []*awsec2.AvailabilityZone{{ZoneName: nil}},
					}
				})

				It("returns an error", func() {
					_, err := client.RetrieveAZs("us-east-1")
					Expect(err).To(MatchError("aws returned availability zone with nil zone name"))
				})
			})

			Context("when describe availability zones fails", func() {
				BeforeEach(func() {
					ec2Client.DescribeAvailabilityZonesCall.Returns.Error = errors.New("describe availability zones failed")
				})

				It("returns an error", func() {
					_, err := client.RetrieveAZs("us-east-1")
					Expect(err).To(MatchError("describe availability zones failed"))
				})
			})
		})
	})

	Describe("ValidateSafeToDelete", func() {
		var (
			client    aws.Client
			ec2Client *fakes.AWSEC2Client
		)

		BeforeEach(func() {
			ec2Client = &fakes.AWSEC2Client{}
			client = aws.NewClientWithInjectedEC2Client(ec2Client, &fakes.Logger{})
		})

		Context("when the only EC2 instances are bosh and nat", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
					Reservations: []*awsec2.Reservation{
						reservationContainingInstance("NAT"),
						reservationContainingInstance("bosh/0"),
					},
				}
			})

			It("returns nil", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "")
				Expect(err).NotTo(HaveOccurred())

				Expect(ec2Client.DescribeInstancesCall.Receives.Input).To(Equal(&awsec2.DescribeInstancesInput{
					Filters: []*awsec2.Filter{{
						Name:   awslib.String("vpc-id"),
						Values: []*string{awslib.String("some-vpc-id")},
					}},
				}))
			})
		})

		Context("when passed an environment ID", func() {
			Context("when the only EC2 instances are bosh, jumpbox and envID-nat", func() {
				BeforeEach(func() {
					ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
						Reservations: []*awsec2.Reservation{
							reservationContainingInstance("example-env-id-nat"),
							reservationContainingInstance("bosh/0"),
							reservationContainingInstance("jumpbox/0"),
						},
					}
				})

				It("returns nil", func() {
					err := client.ValidateSafeToDelete("some-vpc-id", "example-env-id")
					Expect(err).NotTo(HaveOccurred())

					Expect(ec2Client.DescribeInstancesCall.Receives.Input).To(Equal(&awsec2.DescribeInstancesInput{
						Filters: []*awsec2.Filter{{
							Name:   awslib.String("vpc-id"),
							Values: []*string{awslib.String("some-vpc-id")},
						}},
					}))
				})
			})
		})

		Context("when there are no instances at all", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{Reservations: []*awsec2.Reservation{}}
			})

			It("returns nil", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "")
				Expect(err).NotTo(HaveOccurred())
			})
		})

		Context("when there are bosh-deployed VMs in the VPC", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
					Reservations: []*awsec2.Reservation{
						reservationContainingInstance("NAT"),
						reservationContainingInstance("bosh/0"),
						reservationContainingInstance("first-bosh-deployed-vm"),
						reservationContainingInstance("second-bosh-deployed-vm"),
					},
				}
			})

			It("returns an error", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "")
				Expect(err).To(MatchError("vpc some-vpc-id is not safe to delete; vms still exist: [first-bosh-deployed-vm, second-bosh-deployed-vm]"))
			})
		})

		Context("even when there are two VMs in the VPC, but they are not NAT and BOSH", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
					Reservations: []*awsec2.Reservation{
						reservationContainingInstance("not-bosh"),
						reservationContainingInstance("not-nat"),
					},
				}
			})

			It("returns an error", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "")
				Expect(err).To(MatchError("vpc some-vpc-id is not safe to delete; vms still exist: [not-bosh, not-nat]"))
			})
		})

		Context("even if the vpc contains other instances tagged NAT and bosh/0", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
					Reservations: []*awsec2.Reservation{
						reservationContainingInstance("NAT"),
						reservationContainingInstance("NAT"),
						reservationContainingInstance("bosh/0"),
						reservationContainingInstance("bosh/0"),
						reservationContainingInstance("bosh/0"),
					},
				}
			})

			It("returns an error", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "")
				Expect(err).To(MatchError("vpc some-vpc-id is not safe to delete; vms still exist: [NAT, bosh/0, bosh/0]"))
			})
		})

		Context("even if the vpc contains untagged vms", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
					Reservations: []*awsec2.Reservation{
						{
							Instances: []*awsec2.Instance{{
								Tags: []*awsec2.Tag{{
									Key:   awslib.String("Name"),
									Value: awslib.String(""),
								}},
							}, {}, {}},
						},
					},
				}
			})

			It("returns an error", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "")
				Expect(err).To(MatchError("vpc some-vpc-id is not safe to delete; vms still exist: [unnamed, unnamed, unnamed]"))
			})
		})

		Context("when there are multiple nat instances", func() {
			BeforeEach(func() {
				ec2Client.DescribeInstancesCall.Returns.Output = &awsec2.DescribeInstancesOutput{
					Reservations: []*awsec2.Reservation{
						reservationContainingInstance("test-env-nat"),
						reservationContainingInstance("test-env-nat"),
						reservationContainingInstance("NAT"),
						reservationContainingInstance("bosh/0"),
					},
				}
			})

			It("returns nil", func() {
				err := client.ValidateSafeToDelete("some-vpc-id", "test-env")
				Expect(err).NotTo(HaveOccurred())

				Expect(ec2Client.DescribeInstancesCall.Receives.Input).To(Equal(&awsec2.DescribeInstancesInput{
					Filters: []*awsec2.Filter{{
						Name:   awslib.String("vpc-id"),
						Values: []*string{awslib.String("some-vpc-id")},
					}},
				}))
			})
		})

		Describe("failure cases", func() {
			Context("when the describe instances call fails", func() {
				BeforeEach(func() {
					ec2Client.DescribeInstancesCall.Returns.Error = errors.New("failed to describe instances")
				})

				It("returns an error", func() {
					err := client.ValidateSafeToDelete("some-vpc-id", "")
					Expect(err).To(MatchError("failed to describe instances"))
				})
			})
		})
	})
})

func reservationContainingInstance(tag string) *awsec2.Reservation {
	return &awsec2.Reservation{
		Instances: []*awsec2.Instance{{
			Tags: []*awsec2.Tag{{
				Key:   awslib.String("Name"),
				Value: awslib.String(tag),
			}},
		}},
	}
}


================================================
FILE: aws/exports_test.go
================================================
package aws

func NewClientWithInjectedEC2Client(ec2Client EC2Client, logger logger) Client {
	return Client{
		ec2Client: ec2Client,
		logger:    logger,
	}
}

func NewClientWithInjectedRoute53Client(route53Client Route53Client, logger logger) Client {
	return Client{
		route53Client: route53Client,
		logger:        logger,
	}
}

func (c Client) GetEC2Client() EC2Client {
	return c.ec2Client
}

func (c Client) GetRoute53Client() Route53Client {
	return c.route53Client
}


================================================
FILE: aws/init_test.go
================================================
package aws_test

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"

	"testing"
)

func TestAWS(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "aws")
}


================================================
FILE: azure/azure_suite_test.go
================================================
package azure_test

import (
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"

	"testing"
)

func TestAzure(t *testing.T) {
	RegisterFailHandler(Fail)
	RunSpecs(t, "azure")
}


================================================
FILE: azure/client.go
================================================
package azure

import (
	"fmt"

	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"     //nolint:staticcheck
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" //nolint:staticcheck
	"golang.org/x/net/context"
)

type Client struct {
	azureVMsClient    AzureVMsClient
	azureGroupsClient AzureGroupsClient
}

type AzureVMsClient interface {
	List(ctx context.Context, resourceGroup string) (armcompute.VirtualMachineListResult, error)
}

type AzureGroupsClient interface {
	CheckExistence(ctx context.Context, resourceGroupName string, options *armresources.ResourceGroupsClientCheckExistenceOptions) (armresources.ResourceGroupsClientCheckExistenceResponse, error)
}

func (c Client) CheckExists(envID string) (bool, error) {
	resourceGroupName := fmt.Sprintf("%s-bosh", envID)

	response, err := c.azureGroupsClient.CheckExistence(context.TODO(), resourceGroupName, nil)
	if err != nil {
		return false, fmt.Errorf("Check existence for resource group %s: %s", resourceGroupName, err) //nolint:staticcheck
	}

	if response.Success {
		return true, nil
	}

	return false, nil
}

func (c Client) ValidateSafeToDelete(networkName string, envID string) error {
	resourceGroup := fmt.Sprintf("%s-bosh", envID)

	instances, err := c.azureVMsClient.List(context.TODO(), resourceGroup)
	if err != nil {
		return fmt.Errorf("List instances: %s", err) //nolint:staticcheck
	}

	for _, instance := range instances.Value {
		var vm string
		if instance.Name != nil {
			vm = *instance.Name
		}

		if instance.Tags == nil {
			return fmt.Errorf("bbl environment is not safe to delete; vms still exist in resource group: %s: %s", resourceGroup, vm)
		}

		tags := instance.Tags

		var deployment string
		if tags["deployment"] != nil {
			deployment = fmt.Sprintf(" (deployment: %s)", *tags["deployment"])
		}

		var job string
		if tags["job"] != nil {
			job = *tags["job"]
		}

		if job != "bosh" && job != "jumpbox" {
			return fmt.Errorf("bbl environment is not safe to delete; vms still exist in resource group: %s%s: %s", resourceGroup, deployment, vm)
		}
	}

	return nil
}


================================================
FILE: azure/client_provider.go
================================================
package azure

import (
	"context"
	"log"

	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"                             //nolint:staticcheck
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"     //nolint:staticcheck
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" //nolint:staticcheck
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage"     //nolint:staticcheck
	"github.com/cloudfoundry/bosh-bootloader/storage"
)

func NewClient(azureConfig storage.Azure) (Client, error) {

	credential, err := azidentity.NewClientSecretCredential(azureConfig.TenantID, azureConfig.ClientID, azureConfig.ClientSecret, nil)
	if err != nil {
		log.Fatal(err)
	}

	ac, err := armstorage.NewAccountsClient(azureConfig.SubscriptionID, credential, nil)
	if err != nil {
		log.Fatal(err)
	}
	acWrapper := AzureStorageClientWrapper{Client: ac}

	vmsClient, err := armcompute.NewVirtualMachinesClient(azureConfig.SubscriptionID, credential, nil)
	if err != nil {
		log.Fatal(err)
	}
	vmsClientWrapper := AzureVMsClientWrapper{Client: vmsClient}

	groupsClient, err := armresources.NewResourceGroupsClient(azureConfig.SubscriptionID, credential, nil)
	if err != nil {
		log.Fatal(err)
	}

	client := Client{
		azureVMsClient:    vmsClientWrapper,
		azureGroupsClient: groupsClient,
	}

	_, err = acWrapper.List(context.Background())
	if err != nil {
		return Client{}, err
	}

	return client, nil
}


================================================
FILE: azure/client_test.go
================================================
package azure_test

import (
	"errors"

	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute"     //nolint:staticcheck
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources" //nolint:staticcheck
	"github.com/cloudfoundry/bosh-bootloader/azure"
	"github.com/cloudfoundry/bosh-bootloader/fakes"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("Client", func() {
	Describe("CheckExists", func() {
		var (
			azureClient *fakes.AzureGroupsClient
			client      azure.Client
		)

		BeforeEach(func() {
			azureClient = &fakes.AzureGroupsClient{}
			client = azure.NewClientWithInjectedGroupsClient(azureClient)

			azureClient.CheckExistenceCall.Returns.Response = armresources.ResourceGroupsClientCheckExistenceResponse{
				Success: false,
			}
		})

		Context("when the resource group does not exist", func() {
			It("returns false", func() {
				exists, err := client.CheckExists("some-environment")
				Expect(err).NotTo(HaveOccurred())

				Expect(exists).To(BeFalse())
			})
		})

		Context("when the resource group already exists", func() {
			BeforeEach(func() {
				azureClient.CheckExistenceCall.Returns.Response = armresources.ResourceGroupsClientCheckExistenceResponse{
					Success: true,
				}
			})
			It("returns true", func() {
				exists, err := client.CheckExists("exact-same")
				Expect(err).NotTo(HaveOccurred())

				Expect(exists).To(BeTrue())
			})
		})

		Context("when the azure client returns an error", func() {
			BeforeEach(func() {
				azureClient.CheckExistenceCall.Returns.Error = errors.New("grape")
			})
			It("returns the error", func() {
				_, err := client.CheckExists("exact-same")
				Expect(err).To(MatchError("Check existence for resource group exact-same-bosh: grape"))
			})
		})
	})

	Describe("ValidateSafeToDelete", func() {
		var (
			azureClient *fakes.AzureVMsClient
			client      azure.Client
		)

		BeforeEach(func() {
			azureClient = &fakes.AzureVMsClient{}
			client = azure.NewClientWithInjectedVMsClient(azureClient)
		})

		Context("when the bosh director and jumpbox are the only vms in the network", func() {
			BeforeEach(func() {
				boshString := "bosh"
				jumpboxString := "jumpbox"

				azureClient.ListCall.Returns.Result = armcompute.VirtualMachineListResult{
					Value: []*armcompute.VirtualMachine{
						{
							Tags: map[string]*string{
								"job": &boshString,
							},
						},
						{
							Tags: map[string]*string{
								"job": &jumpboxString,
							},
						},
					},
				}
			})

			It("does not return an error ", func() {
				err := client.ValidateSafeToDelete("", "some-env-id")
				Expect(err).NotTo(HaveOccurred())

				Expect(azureClient.ListCall.Receives.ResourceGroup).To(Equal("some-env-id-bosh"))
			})
		})

		Context("when some other bosh deployed vm exists in the network", func() {
			BeforeEach(func() {
				boshString := "bosh"
				jobString := "some-job"
				deploymentString := "some-deployment"
				vmNameString := "some-other-vm"

				azureClient.ListCall.Returns.Result = armcompute.VirtualMachineListResult{
					Value: []*armcompute.VirtualMachine{
						{
							Tags: map[string]*string{
								"job": &boshString,
							},
						},
						{
							Name: &vmNameString,
							Tags: map[string]*string{
								"job":        &jobString,
								"deployment": &deploymentString,
							},
						},
					},
				}
			})

			It("returns a helpful error message", func() {
				err := client.ValidateSafeToDelete("", "some-env-id")
				Expect(err).To(MatchError(`bbl environment is not safe to delete; vms still exist in resource group: some-env-id-bosh (deployment: some-deployment): some-other-vm`))
			})
		})

		Context("when some other non-bosh deployed vm exists in the network", func() {
			BeforeEach(func() {
				vmNameString := "some-other-vm"
				azureClient.ListCall.Returns.Result = armcompute.VirtualMachineListResult{
					Value: []*armcompute.VirtualMachine{
						{
							Name: &vmNameString,
							Tags: map[string]*string{},
						},
					},
				}
			})

			It("returns a helpful error message", func() {
				err := client.ValidateSafeToDelete("", "some-env-id")
				Expect(err).To(MatchError(`bbl environment is not safe to delete; vms still exist in resource group: some-env-id-bosh: some-other-vm`))
			})
		})

		Context("failure cases", func() {
			Context("when azure client list instances fails", func() {
				BeforeEach(func() {
					azureClient.ListCall.Returns.Error = errors.New("passionfruit")
				})

				It("returns an error", func() {
					err := client.ValidateSafeToDelete("some-network", "some-env-id")
					Expect(err).To(MatchError("List instances: passionfruit"))
				})
			})
		})
	})
})


================================================
FILE: azure/client_wrappers.go
================================================
package azure

import (
	"log"

	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute" //nolint:staticcheck
	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage" //nolint:staticcheck
	"golang.org/x/net/context"
)

type AzureVMsClientWrapper struct {
	Client *armcompute.VirtualMachinesClient
}

func (c AzureVMsClientWrapper) List(ctx context.Context, resourceGroup string) (armcompute.VirtualMachineListResult, error) {
	pager := c.Client.NewListAllPager(nil)
	result := make([]*armcompute.VirtualMachine, 0)
	for pager.More() {
		nextResult, err := pager.NextPage(ctx)
		if err != nil {
			log.Fatalf("failed to advance page: %v", err)
		}
		result = append(result, nextResult.Value...)
	}

	return armcompute.VirtualMachineListResult{Value: result}, nil
}

type AzureStorageClientWrapper struct {
	Client *armstorage.AccountsClient
}

func (c AzureStorageClientWrapper) List(ctx context.Context) (armstorage.AccountListResult, error) {
	pager := c.Client.NewListPager(nil)
	result := make([]*armstorage.Account, 0)
	for pager.More() {
		nextResult, err := pager.NextPage(ctx)
		if err != nil {
			log.Fatalf("failed to advance page: %v", err)
		}
		result = append(result, nextResult.Value...)
	}

	return armstorage.AccountListResult{Value: result}, nil
}


================================================
FILE: azure/export_test.go
================================================
package azure

func NewClientWithInjectedVMsClient(azureVMsClient AzureVMsClient) Client {
	return Client{
		azureVMsClient: azureVMsClient,
	}
}

func NewClientWithInjectedGroupsClient(azureGroupsClient AzureGroupsClient) Client {
	return Client{
		azureGroupsClient: azureGroupsClient,
	}
}


================================================
FILE: backends/backend.go
================================================
package backends

import (
	"context"
	"fmt"
	"os"

	"github.com/araddon/gou"
	"github.com/cloudfoundry/bbl-state-resource/storage"
	"github.com/lytics/cloudstorage"
	"github.com/lytics/cloudstorage/awss3"
	"github.com/mholt/archiver"
)

type Config struct {
	AWSAccessKeyID       string
	AWSSecretAccessKey   string
	GCPServiceAccountKey string
	Bucket               string
	Region               string
	Dest                 string
}

type Provider interface {
	Client(string) (Backend, error)
}

func NewProvider() Provider {
	return provider{}
}

type provider struct{}

func (p provider) Client(iaas string) (Backend, error) {
	switch iaas {
	case "aws":
		return cloudStorageBackend{}, nil
	case "gcp":
		return gcsStateBackend{}, nil
	default:
		return nil, fmt.Errorf("remote state storage is unsupported for %s environments", iaas)
	}
}

type Backend interface {
	GetState(Config, string) error
}

type cloudStorageBackend struct{}

func (c cloudStorageBackend) GetState(config Config, name string) error {
	awsAuthSettings := make(gou.JsonHelper)
	awsAuthSettings[awss3.ConfKeyAccessKey] = config.AWSAccessKeyID
	awsAuthSettings[awss3.ConfKeyAccessSecret] = config.AWSSecretAccessKey

	csConfig := cloudstorage.Config{
		Type:       awss3.StoreType,
		AuthMethod: awss3.AuthAccessKey,
		Bucket:     config.Bucket,
		Settings:   awsAuthSettings,
		Region:     config.Region,
	}

	store, err := cloudstorage.NewStore(&csConfig)
	if err != nil {
		return err
	}

	tarball, err := store.Get(context.Background(), name)
	if err != nil {
		return err
	}

	stateTar, err := tarball.Open(cloudstorage.ReadOnly)
	if err != nil {
		return err
	}

	err = archiver.TarGz.Read(stateTar, config.Dest)
	if err != nil {
		return fmt.Errorf("unable to untar state dir: %s", err)
	}

	return nil
}

type gcsStateBackend struct{}

func (g gcsStateBackend) GetState(config Config, name string) error {
	key, err := g.getGCPServiceAccountKey(config.GCPServiceAccountKey)
	if err != nil {
		return fmt.Errorf("could not read GCP service account key: %s", err)
	}

	gcsClient, err := storage.NewStorageClient(key, name, config.Bucket)
	if err != nil {
		return fmt.Errorf("could not create GCS client: %s", err)
	}

	_, err = gcsClient.Download(config.Dest)
	if err != nil {
		return fmt.Errorf("downloading remote state from GCS: %s", err)
	}

	return nil
}

func (g gcsStateBackend) getGCPServiceAccountKey(key string) (string, error) {
	if _, err := os.Stat(key); err != nil {
		return key, nil
	}

	keyBytes, err := os.ReadFile(key)
	if err != nil {
		return "", fmt.Errorf("Reading key: %v", err) //nolint:staticcheck
	}

	return string(keyBytes), nil
}


================================================
FILE: bbl/main.go
================================================
package main

import (
	"bytes"
	"crypto/rand"
	"io"
	"log"
	"os"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/application"
	"github.com/cloudfoundry/bosh-bootloader/aws"
	"github.com/cloudfoundry/bosh-bootloader/azure"
	"github.com/cloudfoundry/bosh-bootloader/backends"
	"github.com/cloudfoundry/bosh-bootloader/bosh"
	"github.com/cloudfoundry/bosh-bootloader/certs"
	"github.com/cloudfoundry/bosh-bootloader/cloudconfig"
	"github.com/cloudfoundry/bosh-bootloader/commands"
	"github.com/cloudfoundry/bosh-bootloader/config"
	"github.com/cloudfoundry/bosh-bootloader/gcp"
	"github.com/cloudfoundry/bosh-bootloader/helpers"
	"github.com/cloudfoundry/bosh-bootloader/renderers"
	"github.com/cloudfoundry/bosh-bootloader/runtimeconfig"
	"github.com/cloudfoundry/bosh-bootloader/ssh"
	"github.com/cloudfoundry/bosh-bootloader/storage"
	"github.com/cloudfoundry/bosh-bootloader/terraform"
	"github.com/spf13/afero"

	awscloudconfig "github.com/cloudfoundry/bosh-bootloader/cloudconfig/aws"
	azurecloudconfig "github.com/cloudfoundry/bosh-bootloader/cloudconfig/azure"
	cloudstackcloudconfig "github.com/cloudfoundry/bosh-bootloader/cloudconfig/cloudstack"
	gcpcloudconfig "github.com/cloudfoundry/bosh-bootloader/cloudconfig/gcp"
	openstackcloudconfig "github.com/cloudfoundry/bosh-bootloader/cloudconfig/openstack"
	vspherecloudconfig "github.com/cloudfoundry/bosh-bootloader/cloudconfig/vsphere"

	awsterraform "github.com/cloudfoundry/bosh-bootloader/terraform/aws"
	azureterraform "github.com/cloudfoundry/bosh-bootloader/terraform/azure"
	cloudstackterraform "github.com/cloudfoundry/bosh-bootloader/terraform/cloudstack"
	gcpterraform "github.com/cloudfoundry/bosh-bootloader/terraform/gcp"
	openstackterraform "github.com/cloudfoundry/bosh-bootloader/terraform/openstack"
	vsphereterraform "github.com/cloudfoundry/bosh-bootloader/terraform/vsphere"

	awsleftovers "github.com/genevieve/leftovers/aws"
	azureleftovers "github.com/genevieve/leftovers/azure"
	gcpleftovers "github.com/genevieve/leftovers/gcp"
	vsphereleftovers "github.com/genevieve/leftovers/vsphere"
)

var Version = "dev"

func main() {
	log.SetFlags(0)

	logger := application.NewLogger(os.Stdout, os.Stdin)
	stderrLogger := application.NewLogger(os.Stderr, os.Stdin)
	stateBootstrap := storage.NewStateBootstrap(stderrLogger, Version)
	envRendererFactory := renderers.NewFactory(helpers.NewEnvGetter())

	globals, remainingArgs, err := config.ParseArgs(os.Args)
	if err != nil {
		log.Fatalf("\n\n%s\n", err)
	}
	if globals.NoConfirm {
		logger.NoConfirm()
	}

	// File IO
	fs := afero.NewOsFs()
	afs := &afero.Afero{Fs: fs}

	// bbl Configuration
	garbageCollector := storage.NewGarbageCollector(afs)
	stateStore := storage.NewStore(globals.StateDir, afs, garbageCollector)
	patchDetector := storage.NewPatchDetector(globals.StateDir, logger)
	stateMigrator := storage.NewMigrator(stateStore, afs)
	stateMerger := config.NewMerger(afs)
	storageProvider := backends.NewProvider()
	stateDownloader := config.NewDownloader(storageProvider)
	newConfig := config.NewConfig(stateBootstrap, stateMigrator, stateMerger, stateDownloader, stderrLogger, afs)

	appConfig, err := newConfig.Bootstrap(globals, remainingArgs, len(os.Args))
	if err != nil {
		log.Fatalf("\n\n%s\n", err)
	}

	// Utilities
	envIDGenerator := helpers.NewEnvIDGenerator(rand.Reader)
	stateValidator := application.NewStateValidator(appConfig.Global.StateDir)
	certificateValidator := certs.NewValidator()
	lbArgsHandler := commands.NewLBArgsHandler(certificateValidator)
	sshCLI := ssh.NewCLI(os.Stdin, os.Stdout, os.Stderr)
	pathFinder := helpers.NewPathFinder()

	// Terraform
	terraformOutputBuffer := bytes.NewBuffer([]byte{})
	dotTerraformDir := filepath.Join(appConfig.Global.StateDir, "terraform", ".terraform")
	bufferingCLI := terraform.NewCLI(terraformOutputBuffer, terraformOutputBuffer, dotTerraformDir, globals.TerraformBinary, globals.DisableTfAutoApprove)

	var (
		terraformCLI terraform.CLI
		out          io.Writer
	)
	if appConfig.Global.Debug {
		errBuffer := io.MultiWriter(os.Stderr, terraformOutputBuffer)
		terraformCLI = terraform.NewCLI(errBuffer, terraformOutputBuffer, dotTerraformDir, globals.TerraformBinary, globals.DisableTfAutoApprove)
		out = os.Stdout
	} else {
		terraformCLI = bufferingCLI
		out = io.Discard
	}
	terraformExecutor := terraform.NewExecutor(terraformCLI, bufferingCLI, stateStore, afs, appConfig.Global.Debug, out)

	// BOSH
	boshPath, err := config.GetBOSHPath()
	if err != nil {
		log.Fatal(err)
	}
	boshCommand := bosh.NewCLI(os.Stderr, boshPath)
	boshExecutor := bosh.NewExecutor(boshCommand, afs)
	sshKeyGetter := bosh.NewSSHKeyGetter(stateStore, afs)
	allProxyGetter := bosh.NewAllProxyGetter(sshKeyGetter, afs)
	credhubGetter := bosh.NewCredhubGetter(stateStore, afs)
	boshCLIProvider := bosh.NewCLIProvider(allProxyGetter, boshPath)
	boshManager := bosh.NewManager(boshExecutor, logger, stateStore, sshKeyGetter, afs, boshCLIProvider)

	configUpdater := bosh.NewConfigUpdater(boshCLIProvider)

	// Clients that require IAAS credentials.
	var (
		// function extract InitializeNetworkClients
		networkClient            helpers.NetworkClient
		networkDeletionValidator commands.NetworkDeletionValidator

		// function extract InitializeLeftovers
		leftovers commands.FilteredDeleter

		awsClient aws.Client
	)
	// IF we could push this whole block down out of main somehow
	if appConfig.CommandModifiesState {
		switch appConfig.State.IAAS {
		case "aws":
			awsClient = aws.NewClient(appConfig.State.AWS, logger)

			networkDeletionValidator = awsClient
			networkClient = awsClient

			sessionToken := ""
			leftovers, err = awsleftovers.NewLeftovers(logger, appConfig.State.AWS.AccessKeyID, appConfig.State.AWS.SecretAccessKey, sessionToken, appConfig.State.AWS.Region)
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}

		case "gcp":
			gcpClient, err := gcp.NewClient(appConfig.State.GCP, "")
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}

			networkDeletionValidator = gcpClient
			networkClient = gcpClient

			gcpZonerHack := config.NewGCPZonerHack(gcpClient)
			stateWithZones, err := gcpZonerHack.SetZones(appConfig.State)
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}
			appConfig.State = stateWithZones

			leftovers, err = gcpleftovers.NewLeftovers(logger, appConfig.State.GCP.ServiceAccountKeyPath)
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}

		case "azure":
			azureClient, err := azure.NewClient(appConfig.State.Azure)
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}

			networkDeletionValidator = azureClient
			networkClient = azureClient

			leftovers, err = azureleftovers.NewLeftovers(logger, appConfig.State.Azure.ClientID, appConfig.State.Azure.ClientSecret, appConfig.State.Azure.SubscriptionID, appConfig.State.Azure.TenantID)
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}
		case "vsphere":
			vSphereLogger := application.NewLogger(os.Stdout, os.Stdin)
			leftovers, err = vsphereleftovers.NewLeftovers(vSphereLogger, appConfig.State.VSphere.VCenterIP, appConfig.State.VSphere.VCenterUser, appConfig.State.VSphere.VCenterPassword, appConfig.State.VSphere.VCenterDC)
			if err != nil {
				log.Fatalf("\n\n%s\n", err)
			}
		}
	}

	// Objects that do not require IAAS credentials.
	var (
		inputGenerator    terraform.InputGenerator
		templateGenerator terraform.TemplateGenerator

		terraformManager        terraform.Manager
		cloudConfigOpsGenerator cloudconfig.OpsGenerator

		lbsCmd commands.LBsCmd
	)
	switch appConfig.State.IAAS {
	case "aws":
		templateGenerator = awsterraform.NewTemplateGenerator()
		inputGenerator = awsterraform.NewInputGenerator(awsClient)

		terraformManager = terraform.NewManager(terraformExecutor, templateGenerator, inputGenerator, terraformOutputBuffer, logger)

		cloudConfigOpsGenerator = awscloudconfig.NewOpsGenerator(terraformManager, awsClient)

		lbsCmd = commands.NewAWSLBs(terraformManager, logger)
	case "azure":
		templateGenerator = azureterraform.NewTemplateGenerator()
		inputGenerator = azureterraform.NewInputGenerator()

		terraformManager = terraform.NewManager(terraformExecutor, templateGenerator, inputGenerator, terraformOutputBuffer, logger)

		cloudConfigOpsGenerator = azurecloudconfig.NewOpsGenerator(terraformManager)

		lbsCmd = commands.NewAzureLBs(terraformManager, logger)
	case "gcp":
		templateGenerator = gcpterraform.NewTemplateGenerator()
		inputGenerator = gcpterraform.NewInputGenerator()

		terraformManager = terraform.NewManager(terraformExecutor, templateGenerator, inputGenerator, terraformOutputBuffer, logger)

		cloudConfigOpsGenerator = gcpcloudconfig.NewOpsGenerator(terraformManager)

		lbsCmd = commands.NewGCPLBs(terraformManager, logger)
	case "vsphere":
		templateGenerator = vsphereterraform.NewTemplateGenerator()
		inputGenerator = vsphereterraform.NewInputGenerator()

		terraformManager = terraform.NewManager(terraformExecutor, templateGenerator, inputGenerator, terraformOutputBuffer, logger)

		cloudConfigOpsGenerator = vspherecloudconfig.NewOpsGenerator(terraformManager)

	case "openstack":
		templateGenerator = openstackterraform.NewTemplateGenerator()
		inputGenerator = openstackterraform.NewInputGenerator()

		terraformManager = terraform.NewManager(terraformExecutor, templateGenerator, inputGenerator, terraformOutputBuffer, logger)

		cloudConfigOpsGenerator = openstackcloudconfig.NewOpsGenerator(terraformManager)
	case "cloudstack":
		templateGenerator = cloudstackterraform.NewTemplateGenerator()
		inputGenerator = cloudstackterraform.NewInputGenerator()

		terraformManager = terraform.NewManager(terraformExecutor, templateGenerator, inputGenerator, terraformOutputBuffer, logger)

		cloudConfigOpsGenerator = cloudstackcloudconfig.NewOpsGenerator(terraformManager)
	}

	cloudConfigManager := cloudconfig.NewManager(logger, configUpdater, stateStore, cloudConfigOpsGenerator, terraformManager, afs)
	runtimeConfigManager := runtimeconfig.NewManager(logger, stateStore, configUpdater, afs)

	// Commands
	var envIDManager helpers.EnvIDManager
	if appConfig.State.IAAS != "" {
		envIDManager = helpers.NewEnvIDManager(envIDGenerator, networkClient)
	}
	plan := commands.NewPlan(boshManager, cloudConfigManager, runtimeConfigManager, stateStore, patchDetector, envIDManager, terraformManager, lbArgsHandler, stderrLogger, Version)
	up := commands.NewUp(plan, boshManager, cloudConfigManager, runtimeConfigManager, stateStore, terraformManager)
	usage := commands.NewUsage(logger)

	commandSet := application.CommandSet{}
	commandSet["help"] = usage
	commandSet["version"] = commands.NewVersion(Version, logger)
	commandSet["outputs"] = commands.NewOutputs(logger, terraformManager, stateValidator)
	commandSet["up"] = up
	commandSet["plan"] = plan
	sshKeyDeleter := bosh.NewSSHKeyDeleter(stateStore, afs)
	commandSet["rotate"] = commands.NewRotate(stateValidator, sshKeyDeleter, up)
	commandSet["destroy"] = commands.NewDestroy(plan, logger, boshManager, stateStore, stateValidator, terraformManager, networkDeletionValidator)
	commandSet["down"] = commandSet["destroy"]
	commandSet["cleanup-leftovers"] = commands.NewCleanupLeftovers(leftovers)
	commandSet["leftovers"] = commandSet["cleanup-leftovers"]
	commandSet["lbs"] = commands.NewLBs(lbsCmd, stateValidator)
	commandSet["jumpbox-address"] = commands.NewStateQuery(logger, stateValidator, terraformManager, commands.JumpboxAddressPropertyName)
	commandSet["director-address"] = commands.NewStateQuery(logger, stateValidator, terraformManager, commands.DirectorAddressPropertyName)
	commandSet["director-username"] = commands.NewStateQuery(logger, stateValidator, terraformManager, commands.DirectorUsernamePropertyName)
	commandSet["director-password"] = commands.NewStateQuery(logger, stateValidator, terraformManager, commands.DirectorPasswordPropertyName)
	commandSet["director-ca-cert"] = commands.NewStateQuery(logger, stateValidator, terraformManager, commands.DirectorCACertPropertyName)
	commandSet["ssh-key"] = commands.NewSSHKey(logger, stateValidator, sshKeyGetter)
	commandSet["validate"] = commands.NewValidate(plan, stateStore, terraformManager)
	commandSet["director-ssh-key"] = commands.NewDirectorSSHKey(logger, stateValidator, sshKeyGetter)
	commandSet["env-id"] = commands.NewStateQuery(logger, stateValidator, terraformManager, commands.EnvIDPropertyName)
	commandSet["latest-error"] = commands.NewLatestError(logger, stateValidator)
	commandSet["print-env"] = commands.NewPrintEnv(logger, stderrLogger, stateValidator, allProxyGetter, credhubGetter, terraformManager, afs, envRendererFactory)
	commandSet["ssh"] = commands.NewSSH(logger, sshCLI, sshKeyGetter, pathFinder, afs, ssh.RandomPort{})

	app := application.New(commandSet, appConfig, usage)

	err = app.Run()
	if err != nil {
		log.Fatalf("\n\n%s\n", err)
	}
}


================================================
FILE: bosh/all_proxy_getter.go
================================================
package bosh

import (
	"fmt"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/fileio"
)

type AllProxyGetter struct {
	sshKeyGetter sshKeyGetter
	fs           allProxyFs
}

type allProxyFs interface {
	fileio.TempDirer
	fileio.FileWriter
}

func NewAllProxyGetter(sshKeyGetter sshKeyGetter, fs allProxyFs) AllProxyGetter {
	return AllProxyGetter{
		sshKeyGetter: sshKeyGetter,
		fs:           fs,
	}
}

func (a AllProxyGetter) GeneratePrivateKey() (string, error) {
	dir, err := a.fs.TempDir("", "bosh-jumpbox")
	if err != nil {
		return "", err
	}

	privateKeyPath := filepath.Join(dir, "bosh_jumpbox_private.key")

	privateKeyContents, err := a.sshKeyGetter.Get("jumpbox")
	if err != nil {
		return "", err
	}

	err = a.fs.WriteFile(privateKeyPath, []byte(privateKeyContents), 0600)
	if err != nil {
		return "", err
	}

	return privateKeyPath, err
}

func (a AllProxyGetter) BoshAllProxy(jumpboxURL, privateKeyPath string) string {
	return fmt.Sprintf("ssh+socks5://%s?private-key=%s", jumpboxURL, privateKeyPath)
}


================================================
FILE: bosh/all_proxy_getter_test.go
================================================
package bosh_test

import (
	"errors"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/bosh"
	"github.com/cloudfoundry/bosh-bootloader/fakes"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("AllProxyGetter", func() {
	var (
		allProxyGetter bosh.AllProxyGetter
		sshKeyGetter   *fakes.SSHKeyGetter
		fs             *fakes.FileIO
	)

	BeforeEach(func() {
		fs = &fakes.FileIO{}
		fs.TempDirCall.Returns.Name = "some-temp-dir"

		sshKeyGetter = &fakes.SSHKeyGetter{}
		sshKeyGetter.GetCall.Returns.PrivateKey = "some-private-key"

		allProxyGetter = bosh.NewAllProxyGetter(sshKeyGetter, fs)
	})

	Describe("GeneratePrivateKey", func() {
		It("writes private key to file in temp dir", func() {
			key, err := allProxyGetter.GeneratePrivateKey()
			Expect(err).NotTo(HaveOccurred())

			Expect(key).To(Equal(filepath.Join("some-temp-dir", "bosh_jumpbox_private.key")))

			Expect(fs.WriteFileCall.Receives[0].Filename).To(Equal(key))
			Expect(fs.WriteFileCall.Receives[0].Contents).To(Equal([]byte("some-private-key")))
		})

		Context("if the ssh key getter fails to get a private key", func() {
			BeforeEach(func() {
				sshKeyGetter.GetCall.Returns.Error = errors.New("fruit")
			})

			It("returns the error", func() {
				_, err := allProxyGetter.GeneratePrivateKey()
				Expect(err).To(MatchError("fruit"))
			})
		})

		Context("when the private key can't be written", func() {
			BeforeEach(func() {
				fs.WriteFileCall.Returns = []fakes.WriteFileReturn{
					{
						Error: errors.New("mango"),
					},
				}
			})

			It("returns an error", func() {
				_, err := allProxyGetter.GeneratePrivateKey()
				Expect(err).To(MatchError("mango"))
			})
		})

	})

	Describe("BoshAllProxy", func() {
		It("interpolates a string!", func() {
			result := allProxyGetter.BoshAllProxy("jumpbox-url", "private-key-file")
			Expect(result).To(ContainSubstring("jumpbox-url"))
			Expect(result).To(ContainSubstring("private-key-file"))
		})
	})
})


================================================
FILE: bosh/assets/bosh-deployment/LICENSE
================================================
my-license

================================================
FILE: bosh/assets/bosh-deployment/vsphere/cpi.yml
================================================
vsphere-cpi

================================================
FILE: bosh/assets/jumpbox-deployment/aws/cpi.yml
================================================
aws-cpi

================================================
FILE: bosh/assets/jumpbox-deployment/azure/cpi.yml
================================================
azure-cpi

================================================
FILE: bosh/assets/jumpbox-deployment/no-external-ip.yml
================================================
no-ip

================================================
FILE: bosh/authenticated_cli.go
================================================
package bosh

import (
	"io"
	"os"
	"os/exec"
)

type AuthenticatedCLI struct {
	GlobalArgs         []string
	BOSHAllProxy       string
	Stderr             io.Writer
	BOSHExecutablePath string
}

func NewAuthenticatedCLI(stderr io.Writer, boshPath, directorAddress, username, password, caCert, boshAllProxy string) AuthenticatedCLI {
	return AuthenticatedCLI{
		GlobalArgs: []string{
			"--environment", directorAddress,
			"--client", username,
			"--client-secret", password,
			"--ca-cert", caCert,
			"--non-interactive",
		},
		BOSHAllProxy:       boshAllProxy,
		Stderr:             stderr,
		BOSHExecutablePath: boshPath,
	}
}

func (c AuthenticatedCLI) Run(stdout io.Writer, workingDirectory string, args []string) error {
	command := exec.Command(c.BOSHExecutablePath, append(c.GlobalArgs, args...)...)
	command.Env = append(os.Environ(), "BOSH_ALL_PROXY="+c.BOSHAllProxy)
	command.Stdout = stdout
	command.Stderr = c.Stderr

	return command.Run()
}


================================================
FILE: bosh/cidr_block.go
================================================
package bosh

import (
	"encoding/binary"
	"math"
	"net/netip"
)

type CIDRBlock struct {
	cidr netip.Prefix
}

func ParseCIDRBlock(cidrBlock string) (CIDRBlock, error) {
	prefix, err := netip.ParsePrefix(cidrBlock)
	if err != nil {
		return CIDRBlock{}, err
	}
	return CIDRBlock{cidr: prefix}, nil
}

func (c CIDRBlock) GetFirstIP() IP {
	return c.GetNthIP(0)
}

func (c CIDRBlock) GetNthIP(n int) IP {
	ip := IP{c.cidr.Addr()}

	if n > 0 {
		return ip.Add(n)
	}
	return ip.Subtract(n)

}

func (c CIDRBlock) GetLastIP() IP {
	a := c.cidr.Addr()
	if a.Is4() {
		four := a.As4()
		uint32Four := binary.BigEndian.Uint32(four[:])
		masklen := c.cidr.Addr().BitLen() - c.cidr.Bits()
		mask := uint32(math.Pow(2, float64(masklen))) - 1
		uint32Four += mask
		binary.BigEndian.PutUint32(four[:], uint32Four)
		return IP{netip.AddrFrom4(four)}
	} else if a.Is6() || a.Is4In6() {
		six := a.As16()
		hi := binary.BigEndian.Uint64(six[:8])
		lo := binary.BigEndian.Uint64(six[8:])
		masklen := c.cidr.Addr().BitLen() - c.cidr.Bits()

		var maskhi uint64
		var masklo uint64
		if masklen > 64 {
			maskhi = uint64(math.Pow(2, float64(masklen-64))) - 1
			masklo = uint64(math.Pow(2, float64(64))) - 1
		} else {
			masklo = uint64(math.Pow(2, float64(masklen))) - 1
		}

		binary.BigEndian.PutUint64(six[:], hi+maskhi)
		binary.BigEndian.PutUint64(six[8:], lo+masklo)
		return IP{netip.AddrFrom16(six)}
	}

	panic("not implemented")
}


================================================
FILE: bosh/cidr_block_test.go
================================================
package bosh_test

import (
	"github.com/cloudfoundry/bosh-bootloader/bosh"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("CIDRBlock", func() {
	var (
		cidrBlock bosh.CIDRBlock
	)
	Context("v4", func() {
		BeforeEach(func() {
			var err error
			cidrBlock, err = bosh.ParseCIDRBlock("10.0.16.0/20")
			Expect(err).NotTo(HaveOccurred())
		})

		Describe("GetFirstIP", func() {
			It("returns the first ip of the cidr block", func() {
				ip := cidrBlock.GetFirstIP()
				Expect(ip.String()).To(Equal("10.0.16.0"))
			})
		})

		Describe("GetNthIP", func() {
			It("returns the nth ip of the cidr block", func() {
				ip := cidrBlock.GetNthIP(6)
				Expect(ip.String()).To(Equal("10.0.16.6"))
			})
		})

		Describe("GetLastIP", func() {
			It("returns the first ip of the cidr block", func() {
				ip := cidrBlock.GetLastIP()
				Expect(ip.String()).To(Equal("10.0.31.255"))
			})
		})

		Describe("ParseCIDRBlock", func() {
			Context("failure cases", func() {
				Context("when input string is not a valid CIDR block", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("whatever")
						Expect(err).To(MatchError(ContainSubstring("no '/'")))
					})
				})

				Context("when input string contains an invalid ip", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("not-an-ip/20")
						Expect(err).To(MatchError(ContainSubstring("unable to parse IP")))
					})
				})

				Context("when input string contains mask bits which are not an integer", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("0.0.0.0/not-mask-bits")
						Expect(err).To(MatchError(ContainSubstring(`bad bits after slash: "not-mask-bits"`)))
					})
				})

				Context("when input string contains mask bits which are out of range", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("0.0.0.0/243")
						Expect(err).To(MatchError(ContainSubstring("prefix length out of range")))
					})
				})
			})
		})
	})
	Context("v6", func() {
		BeforeEach(func() {
			var err error
			cidrBlock, err = bosh.ParseCIDRBlock("2001:db8:cf::/80")
			Expect(err).NotTo(HaveOccurred())
		})

		Describe("GetFirstIP", func() {
			It("returns the first ip of the cidr block", func() {
				ip := cidrBlock.GetFirstIP()
				Expect(ip.String()).To(Equal("2001:db8:cf::"))
			})
		})

		Describe("GetNthIP", func() {
			It("returns the nth ip of the cidr block", func() {
				ip := cidrBlock.GetNthIP(6)
				Expect(ip.String()).To(Equal("2001:db8:cf::6"))
			})
		})

		Describe("GetLastIP", func() {
			It("returns the first ip of the cidr block", func() {
				ip := cidrBlock.GetLastIP()
				Expect(ip.String()).To(Equal("2001:db8:cf::ffff:ffff:ffff"))
			})
		})

		Describe("ParseCIDRBlock", func() {
			Context("failure cases", func() {
				Context("when input string is not a valid CIDR block", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("whatever")
						Expect(err).To(MatchError(ContainSubstring("no '/'")))
					})
				})

				Context("when input string contains an invalid ip", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("not-an-ip/96")
						Expect(err).To(MatchError(ContainSubstring("unable to parse IP")))
					})
				})

				Context("when input string contains mask bits which are not an integer", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("2001:db8:cf::/not-mask-bits")
						Expect(err).To(MatchError(ContainSubstring(`bad bits after slash: "not-mask-bits"`)))
					})
				})

				Context("when input string contains mask bits which are out of range", func() {
					It("returns an error", func() {
						_, err := bosh.ParseCIDRBlock("2001:db8:cf::/243")
						Expect(err).To(MatchError(ContainSubstring("prefix length out of range")))
					})
				})
			})
		})
	})
})


================================================
FILE: bosh/cli.go
================================================
package bosh

import (
	"io"
	"os/exec"
)

type CLI struct {
	stderr io.Writer
	path   string
}

func NewCLI(stderr io.Writer, path string) CLI {
	return CLI{
		stderr: stderr,
		path:   path,
	}
}

func (c CLI) Run(stdout io.Writer, workingDirectory string, args []string) error {
	command := exec.Command(c.path, args...)
	command.Dir = workingDirectory

	command.Stdout = stdout
	command.Stderr = c.stderr

	return command.Run()
}

func (c CLI) GetBOSHPath() string {
	return c.path
}


================================================
FILE: bosh/cli_provider.go
================================================
package bosh

import (
	"io"

	"github.com/cloudfoundry/bosh-bootloader/storage"
)

type CLIProvider struct {
	allProxyGetter allProxyGetter
	boshCLIPath    string
}

type allProxyGetter interface {
	GeneratePrivateKey() (string, error)
	BoshAllProxy(string, string) string
}

type AuthenticatedCLIRunner interface {
	Run(stdout io.Writer, workingDirectory string, args []string) error
}

func NewCLIProvider(allProxyGetter allProxyGetter, boshCLIPath string) CLIProvider {
	return CLIProvider{
		allProxyGetter: allProxyGetter,
		boshCLIPath:    boshCLIPath,
	}
}

func (c CLIProvider) AuthenticatedCLI(jumpbox storage.Jumpbox, stderr io.Writer, directorAddress, directorUsername, directorPassword, directorCACert string) (AuthenticatedCLIRunner, error) {
	privateKey, err := c.allProxyGetter.GeneratePrivateKey()
	if err != nil {
		return AuthenticatedCLI{}, err
	}

	boshAllProxy := c.allProxyGetter.BoshAllProxy(jumpbox.GetURLWithJumpboxUser(), privateKey)
	return NewAuthenticatedCLI(stderr, c.boshCLIPath, directorAddress, directorUsername, directorPassword, directorCACert, boshAllProxy), nil
}


================================================
FILE: bosh/cli_provider_test.go
================================================
package bosh_test

import (
	"errors"

	"github.com/cloudfoundry/bosh-bootloader/bosh"
	"github.com/cloudfoundry/bosh-bootloader/fakes"
	"github.com/cloudfoundry/bosh-bootloader/storage"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("Client Provider", func() {
	var (
		allProxyGetter *fakes.AllProxyGetter
		cliProvider    bosh.CLIProvider
	)

	BeforeEach(func() {
		allProxyGetter = &fakes.AllProxyGetter{}

		cliProvider = bosh.NewCLIProvider(allProxyGetter, "some-path-to-bosh")
	})

	Describe("AuthenticatedCLI", func() {
		It("returns an authenticated bosh cli", func() {
			allProxyGetter.BoshAllProxyCall.Returns.URL = "jumpbox@some-all-proxy-url"
			cliRunner, err := cliProvider.AuthenticatedCLI(storage.Jumpbox{URL: "some-jumpbox:22"}, nil, "some-address", "some-username", "some-password", "some-fake-ca")
			Expect(err).NotTo(HaveOccurred())

			cli := cliRunner.(bosh.AuthenticatedCLI)
			Expect(cli.GlobalArgs).To(Equal([]string{
				"--environment", "some-address",
				"--client", "some-username",
				"--client-secret", "some-password",
				"--ca-cert", "some-fake-ca",
				"--non-interactive",
			}))
			Expect(cli.BOSHAllProxy).To(Equal("jumpbox@some-all-proxy-url"))
			Expect(allProxyGetter.BoshAllProxyCall.Receives.JumpboxURL).To(Equal("jumpbox@some-jumpbox:22"))
		})

		Context("when it can not get the correct key", func() {
			It("Errors", func() {
				allProxyGetter.GeneratePrivateKeyCall.Returns.Error = errors.New("fruit")
				_, err := cliProvider.AuthenticatedCLI(storage.Jumpbox{URL: "user@some-jumpbox:2222"}, nil, "some-address", "some-username", "some-password", "some-fake-ca")
				Expect(err).To(HaveOccurred())
				Expect(err).To(MatchError("fruit"))
			})
		})
	})
})


================================================
FILE: bosh/config_updater.go
================================================
package bosh

import (
	"fmt"
	"io"
	"os"

	"github.com/cloudfoundry/bosh-bootloader/storage"
)

type ConfigUpdater struct {
	boshCLIProvider boshCLIProvider
}

type boshCLIProvider interface {
	AuthenticatedCLI(jumpbox storage.Jumpbox, stderr io.Writer, directorAddress, directorUsername, directorPassword, directorCACert string) (AuthenticatedCLIRunner, error)
}

func NewConfigUpdater(boshCLIProvider boshCLIProvider) ConfigUpdater {
	return ConfigUpdater{boshCLIProvider: boshCLIProvider}
}

func (c ConfigUpdater) InitializeAuthenticatedCLI(state storage.State) (AuthenticatedCLIRunner, error) {
	boshCLI, err := c.boshCLIProvider.AuthenticatedCLI(
		state.Jumpbox,
		os.Stderr,
		state.BOSH.DirectorAddress,
		state.BOSH.DirectorUsername,
		state.BOSH.DirectorPassword,
		state.BOSH.DirectorSSLCA,
	)

	if err != nil {
		return AuthenticatedCLI{}, fmt.Errorf("failed to create bosh cli: %s", err)
	}

	return boshCLI, nil
}

func (c ConfigUpdater) UpdateCloudConfig(boshCLI AuthenticatedCLIRunner, filepath string, opsFilepaths []string, varsFilepath string) error {
	args := []string{"update-cloud-config", filepath}
	for _, opsFilepath := range opsFilepaths {
		args = append(args, "--ops-file", opsFilepath)
	}
	args = append(args, "--vars-file", varsFilepath)

	return boshCLI.Run(nil, "", args)
}

func (c ConfigUpdater) UpdateRuntimeConfig(boshCLI AuthenticatedCLIRunner, filepath string, opsFilepaths []string, name string) error {
	args := []string{"update-runtime-config", filepath}
	for _, opsFilepath := range opsFilepaths {
		args = append(args, "--ops-file", opsFilepath)
	}
	args = append(args, "--name", name)

	return boshCLI.Run(nil, "", args)
}


================================================
FILE: bosh/config_updater_test.go
================================================
package bosh_test

import (
	"errors"
	"os"

	"github.com/cloudfoundry/bosh-bootloader/bosh"
	"github.com/cloudfoundry/bosh-bootloader/fakes"
	"github.com/cloudfoundry/bosh-bootloader/storage"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("ConfigUpdater", func() {
	var (
		boshCLIProvider *fakes.BOSHCLIProvider
		boshCLI         *fakes.BOSHCLI
		configUpdater   bosh.ConfigUpdater
	)

	BeforeEach(func() {
		boshCLIProvider = &fakes.BOSHCLIProvider{}
		boshCLI = &fakes.BOSHCLI{}
		configUpdater = bosh.NewConfigUpdater(boshCLIProvider)
	})

	Describe("InitializeAuthenticatedCLI", func() {
		It("initializes an authenticated bosh cli", func() {
			expectedBOSHCLI := bosh.AuthenticatedCLI{
				BOSHExecutablePath: "some-executable-path",
			}
			boshCLIProvider.AuthenticatedCLICall.Returns.AuthenticatedCLI = expectedBOSHCLI
			state := storage.State{
				Jumpbox: storage.Jumpbox{
					URL: "some-jumpbox-url",
				},
				BOSH: storage.BOSH{
					DirectorUsername: "some-bosh-director-username",
					DirectorPassword: "some-bosh-director-password",
					DirectorAddress:  "some-bosh-director-address",
					DirectorSSLCA:    "some-bosh-director-ssl-ca",
				},
			}

			boshCLI, err := configUpdater.InitializeAuthenticatedCLI(state)
			Expect(err).NotTo(HaveOccurred())

			Expect(boshCLIProvider.AuthenticatedCLICall.CallCount).To(Equal(1))
			Expect(boshCLIProvider.AuthenticatedCLICall.Receives.Jumpbox.URL).To(Equal("some-jumpbox-url"))
			Expect(boshCLIProvider.AuthenticatedCLICall.Receives.DirectorAddress).To(Equal("some-bosh-director-address"))
			Expect(boshCLIProvider.AuthenticatedCLICall.Receives.DirectorUsername).To(Equal("some-bosh-director-username"))
			Expect(boshCLIProvider.AuthenticatedCLICall.Receives.DirectorPassword).To(Equal("some-bosh-director-password"))
			Expect(boshCLIProvider.AuthenticatedCLICall.Receives.DirectorCACert).To(Equal("some-bosh-director-ssl-ca"))
			Expect(boshCLIProvider.AuthenticatedCLICall.Receives.Stderr).To(Equal(os.Stderr))

			Expect(boshCLI).To(Equal(expectedBOSHCLI))
		})

		Context("when we can not create a bosh cli", func() {
			It("errors", func() {
				boshCLIProvider.AuthenticatedCLICall.Returns.Error = errors.New("banana")

				_, err := configUpdater.InitializeAuthenticatedCLI(storage.State{})
				Expect(err).To(MatchError("failed to create bosh cli: banana"))

			})
		})
	})

	Describe("UpdateRuntimeConfig", func() {
		It("calls the bosh cli with the correct arguments", func() {
			err := configUpdater.UpdateRuntimeConfig(boshCLI, "runtime-config-filepath", []string{"some-ops-file", "another-ops-file"}, "some-name")
			Expect(err).NotTo(HaveOccurred())

			Expect(boshCLI.RunCall.Receives.Args).To(Equal([]string{
				"update-runtime-config", "runtime-config-filepath",
				"--ops-file", "some-ops-file",
				"--ops-file", "another-ops-file",
				"--name", "some-name",
			}))
		})

	})

	Describe("UpdateCloudConfig", func() {
		It("calls the bosh cli with the correct arguments", func() {
			err := configUpdater.UpdateCloudConfig(boshCLI, "cloud-config-filepath", []string{"some-ops-file", "another-ops-file"}, "some-vars-file")
			Expect(err).NotTo(HaveOccurred())

			Expect(boshCLI.RunCall.Receives.Args).To(Equal([]string{
				"update-cloud-config", "cloud-config-filepath",
				"--ops-file", "some-ops-file",
				"--ops-file", "another-ops-file",
				"--vars-file", "some-vars-file",
			}))
		})

	})
})


================================================
FILE: bosh/credhub_getter.go
================================================
package bosh

import (
	"fmt"
	"path/filepath"

	"github.com/cloudfoundry/bosh-bootloader/fileio"

	"gopkg.in/yaml.v2"
)

type CredhubGetter struct {
	stateStore stateStore
	reader     fileio.FileReader
}

func NewCredhubGetter(stateStore stateStore, fileIO fileio.FileReader) CredhubGetter {
	return CredhubGetter{
		stateStore: stateStore,
		reader:     fileIO,
	}
}

func (c CredhubGetter) GetServer() (string, error) {
	var p struct {
		InternalIp string `yaml:"internal_ip"`
	}

	varsDir, err := c.stateStore.GetVarsDir()
	if err != nil {
		return "", fmt.Errorf("Get vars directory: %s", err) //nolint:staticcheck
	}

	varsFile, err := c.reader.ReadFile(filepath.Join(varsDir, "director-vars-file.yml"))
	if err != nil {
		return "", fmt.Errorf("Read director-vars-file.yml file: %s", err) //nolint:staticcheck
	}

	err = yaml.Unmarshal(varsFile, &p)
	if err != nil {
		return "", err
	}

	return fmt.Sprintf("https://%s:8844", p.InternalIp), nil
}

func (c CredhubGetter) GetCerts() (string, error) {
	var certs struct {
		CredhubCA struct {
			Certificate string `yaml:"certificate"`
		} `yaml:"credhub_ca"`
		UAASSL struct {
			Certificate string `yaml:"certificate"`
		} `yaml:"uaa_ssl"`
	}

	varsDir, err := c.stateStore.GetVarsDir()
	if err != nil {
		return "", fmt.Errorf("Get vars directory: %s", err) //nolint:staticcheck
	}

	varsStore, err := c.reader.ReadFile(filepath.Join(varsDir, "director-vars-store.yml"))
	if err != nil {
		return "", fmt.Errorf("Read director-vars-store.yml file: %s", err) //nolint:staticcheck
	}

	err = yaml.Unmarshal(varsStore, &certs)
	if err != nil {
		return "", err
	}

	return fmt.Sprintf("%s%s", certs.CredhubCA.Certificate, certs.UAASSL.Certificate), nil
}

func (c CredhubGetter) GetPassword() (string, error) {
	var certs struct {
		Password string `yaml:"credhub_admin_client_secret"`
	}

	varsDir, err := c.stateStore.GetVarsDir()
	if err != nil {
		return "", fmt.Errorf("Get vars directory: %s", err) //nolint:staticcheck
	}

	varsStore, err := c.reader.ReadFile(filepath.Join(varsDir, "director-vars-store.yml"))
	if err != nil {
		return "", fmt.Errorf("Read director-vars-store.yml file: %s", err) //nolint:staticcheck
	}

	err = yaml.Unmarshal(varsStore, &certs)
	if err != nil {
		return "", err
	}

	return certs.Password, nil
}


================================================
FILE: bosh/credhub_getter_test.go
================================================
package bosh_test

import (
	"errors"

	"github.com/cloudfoundry/bosh-bootloader/bosh"
	"github.com/cloudfoundry/bosh-bootloader/fakes"

	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("CredhubGetter", func() {
	var (
		credhubGetter bosh.CredhubGetter
		stateStore    *fakes.StateStore
		fileIO        *fakes.FileIO
	)

	BeforeEach(func() {
		stateStore = &fakes.StateStore{}
		stateStore.GetVarsDirCall.Returns.Directory = "fake-vars-dir"
		fileIO = &fakes.FileIO{}
		credhubGetter = bosh.NewCredhubGetter(stateStore, fileIO)
	})

	Context("reading from the vars store", func() {
		BeforeEach(func() {
			varsStoreContents := `---
credhub_ca:
  certificate: |
    -----BEGIN CERTIFICATE-----
    some-credhub-cert
    -----END CERTIFICATE-----
uaa_ssl:
  certificate: |
    -----BEGIN CERTIFICATE-----
    some-uaa-cert
    -----END CERTIFICATE-----
credhub_admin_client_secret: some-credhub-password`
			fileIO.ReadFileCall.Returns.Contents = []byte(varsStoreContents)
		})

		Describe("GetCerts", func() {
			It("returns the credhub cert and uaa cert", func() {
				certs, err := credhubGetter.GetCerts()
				Expect(err).NotTo(HaveOccurred())
				Expect(certs).To(Equal(`-----BEGIN CERTIFICATE-----
some-credhub-cert
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
some-uaa-cert
-----END CERTIFICATE-----
`))
			})

			Context("failure cases", func() {
				Context("when the vars store cannot be unmarshaled", func() {
					BeforeEach(func() {
						fileIO.ReadFileCall.Returns.Contents = []byte("invalid yaml")
					})

					It("returns an error", func() {
						_, err := credhubGetter.GetCerts()
						Expect(err).To(MatchError(ContainSubstring("line 1: cannot unmarshal !!str `invalid...`")))
					})
				})

				Context("when the state store fails to get the vars dir", func() {
					BeforeEach(func() {
						stateStore.GetVarsDirCall.Returns.Error = errors.New("tangelo")
					})

					It("returns an error", func() {
						_, err := credhubGetter.GetCerts()
						Expect(err).To(MatchError("Get vars directory: tangelo"))
					})
				})

				Context("when the vars store can't be read", func() {
					BeforeEach(func() {
						fileIO.ReadFileCall.Returns.Error = errors.New("passionfruit")
					})

					It("returns an error", func() {
						_, err := credhubGetter.GetCerts()
						Expect(err).To(MatchError(ContainSubstring("Read director-vars-store.yml file: ")))
						Expect(err).To(MatchError(ContainSubstring("passionfruit")))
					})
				})
			})
		})

		Describe("GetPassword", func() {
			It("returns the credhub password", func() {
				certs, err := credhubGetter.GetPassword()
				Expect(err).NotTo(HaveOccurred())
				Expect(certs).To(Equal("some-credhub-password"))
			})

			Context("failure cases", func() {
				Context("when the vars store cannot be unmarshaled", func() {
					BeforeEach(func() {
						fileIO.ReadFileCall.Returns.Contents = []byte("invalid yaml")
					})

					It("returns an error", func() {
						_, err := credhubGetter.GetCerts()
						Expect(err).To(MatchError(ContainSubstring("line 1: cannot unmarshal !!str `invalid...`")))
					})
				})

				Context("when the state store fails to get the vars dir", func() {
					BeforeEach(func() {
						stateStore.GetVarsDirCall.Returns.Error = errors.New("tangelo")
					})

					It("returns an error", func() {
						_, err := credhubGetter.GetCerts()
						Expect(err).To(MatchError("Get vars directory: tangelo"))
					})
				})

				Context("when the vars store can't be read", func() {
					BeforeEach(func() {
						fileIO.ReadFileCall.Returns.Error = errors.New("quamquat")
					})

					It("returns an error", func() {
						_, err := credhubGetter.GetCerts()
						Expect(err).To(MatchError(ContainSubstring("Read director-vars-store.yml file: ")))
						Expect(err).To(MatchError(ContainSubstring("quamquat")))
					})
				})
			})
		})
	})

	Describe("GetServer", func() {
		BeforeEach(func() {
			varsFileContents := `---
internal_ip: some-internal-ip`
			fileIO.ReadFileCall.Returns.Contents = []byte(varsFileContents)
		})

		It("returns the credhub server url", func() {
			server, err := credhubGetter.GetServer()
			Expect(err).NotTo(HaveOccurred())
			Expect(server).To(Equal("https://some-internal-ip:8844"))
		})

		Context("failure cases", func() {
			Context("when the vars file cannot be unmarshaled", func() {
				BeforeEach(func() {
					fileIO.ReadFileCall.Returns.Contents = []byte("invalid yaml")
				})

				It("returns an error", func() {
					_, err := credhubGetter.GetServer()
					Expect(err).To(MatchError(ContainSubstring("line 1: cannot unmarshal !!str `invalid...`")))
				})
			})

			Context("when the state store fails to get the vars dir", func() {
				BeforeEach(func() {
					stateStore.GetVarsDirCall.Returns.Error = errors.New("tangelo")
				})

				It("returns an error", func() {
					_, err := credhubGetter.GetServer()
					Expect(err).To(MatchError("Get vars directory: tangelo"))
				})
			})

			Context("when the vars file can't be read", func() {
				BeforeEach(func() {
					fileIO.ReadFileCall.Returns.Error = errors.New("quamquat")
				})

				It("returns an error", func() {
					_, err := credhubGetter.GetServer()
					Expect(err).To(MatchError(ContainSubstring("Read director-vars-file.yml file: ")))
					Expect(err).To(MatchError(ContainSubstring("quamquat")))
				})
			})
		})
	})
})


================================================
FILE: bosh/deployment_vars_yaml.go
================================================
package bosh

type sharedDeploymentVarsYAML struct {
	TerraformOutputs map[string]interface{} `yaml:",inline"`
}


================================================
FILE: bosh/deployments/.gitignore
================================================


================================================
FILE: bosh/deployments/README.md
================================================
## Why?

When building the actual bbl binary, this is where your jumpbox / bosh
deployment repos should end up so they can be included in the final build.

## What happens if this directory isn't empty

Whatever jumpbox / bosh deployment repos you have residing in this directory
will be built into the bbl. Use caution.

## Submodules?

We have submoduled in both deployments as they are pretty tightly coupled to a
particular version of bbl. This should help when building a one-off (you can
still checkout the directories to whatever sha you want)


================================================
FILE: bosh/executor.go
================================================
package bosh

import (
	"bytes"
	"embed"
	"errors"
	"fmt"
	"io"
	"io/fs"
	"os"
	"os/exec"
	"path/filepath"
	"regexp"
	"strings"

	"github.com/cloudfoundry/bosh-bootloader/fileio"
	"github.com/cloudfoundry/bosh-bootloader/storage"
)

type executorFs interface {
	fileio.FileReader
	fileio.FileWriter
	fileio.Stater
}

type Executor struct {
	CLI             cli
	FS              executorFs
	EmbedData       embed.FS
	EmbedDataPrefix string
}

type DirInput struct {
	StateDir   string
	VarsDir    string
	Deployment string
}

type cli interface {
	GetBOSHPath() string
	Run(stdout io.Writer, workingDirectory string, args []string) error
}

type setupFile struct {
	source   string
	dest     string
	contents []byte
}

const (
	jumpboxDeploymentRepo = "jumpbox-deployment"
	boshDeploymentRepo    = "bosh-deployment"
)

//go:embed deployments/*
var content embed.FS

func NewExecutor(cmd cli, fs executorFs) Executor {
	return Executor{
		CLI:             cmd,
		FS:              fs,
		EmbedData:       content,
		EmbedDataPrefix: "deployments/",
	}
}
func extractNestedFiles(fs embed.FS, fileList []setupFile, path string, trimPrefix string, destPath string, source_entries ...fs.DirEntry) []setupFile {
	for _, source_entry := range source_entries {
		if source_entry.IsDir() {
			dirContents, err := fs.ReadDir(fmt.Sprintf("%v/%v", path, source_entry.Name()))
			if err != nil {
				panic(err)
			}
			fileList = extractNestedFiles(fs, fileList, filepath.Join(path, source_entry.Name()), trimPrefix, destPath, dirContents...)
		} else {
			contents, err := fs.ReadFile(filepath.Join(path, source_entry.Name()))
			if err != nil {
				panic(err)
			}
			fileList = append(fileList, setupFile{
				source:   source_entry.Name(),
				dest:     filepath.Join(destPath, strings.TrimPrefix(path, trimPrefix), source_entry.Name()),
				contents: contents,
			})
		}

	}

	return fileList
}
func (e Executor) getSetupFiles(sourcePath, destPath string) []setupFile {
	files := []setupFile{}
	fullPath := filepath.Join(e.EmbedDataPrefix, sourcePath)

	assetNames, err := e.EmbedData.ReadDir(fullPath)
	prefix := filepath.Join(e.EmbedDataPrefix, sourcePath)

	if err != nil {
		panic(err)
	}
	return extractNestedFiles(e.EmbedData, files, fullPath, prefix, destPath, assetNames...)
}

func (e Executor) PlanJumpbox(input DirInput, deploymentDir, iaas string) error {
	return e.PlanJum
Download .txt
Showing preview only (206K chars total). Download the full file or copy to clipboard to get everything.
gitextract_lkwd3cnd/

├── .adr-dir
├── .github/
│   ├── dependabot.yml
│   └── workflows/
│       └── go.yml
├── .gitignore
├── .gitmodules
├── .golangci.yml
├── CHANGELOG.md
├── CONTRIBUTING.md
├── LICENSE
├── NOTICE
├── README.md
├── acceptance-tests/
│   ├── actors/
│   │   ├── aws.go
│   │   ├── azure.go
│   │   ├── bbl.go
│   │   ├── boshcli.go
│   │   ├── cloudstack.go
│   │   ├── gcp.go
│   │   ├── iaas_helper.go
│   │   ├── openstack.go
│   │   └── vsphere.go
│   ├── bbl/
│   │   ├── init_test.go
│   │   ├── latest_error_test.go
│   │   ├── plan_test.go
│   │   ├── print_env_test.go
│   │   ├── ssh_linux_test.go
│   │   ├── up_and_down_test.go
│   │   └── upgrade_test.go
│   ├── config.go
│   ├── no-iaas/
│   │   ├── flags_error_test.go
│   │   ├── help_test.go
│   │   ├── init_test.go
│   │   ├── state_query_test.go
│   │   └── version_test.go
│   ├── state.go
│   └── vm_extensions.go
├── application/
│   ├── app.go
│   ├── app_test.go
│   ├── configuration.go
│   ├── configuration_test.go
│   ├── init_test.go
│   ├── logger.go
│   ├── logger_test.go
│   ├── state_validator.go
│   └── state_validator_test.go
├── aws/
│   ├── client.go
│   ├── client_test.go
│   ├── exports_test.go
│   └── init_test.go
├── azure/
│   ├── azure_suite_test.go
│   ├── client.go
│   ├── client_provider.go
│   ├── client_test.go
│   ├── client_wrappers.go
│   └── export_test.go
├── backends/
│   └── backend.go
├── bbl/
│   └── main.go
├── bosh/
│   ├── all_proxy_getter.go
│   ├── all_proxy_getter_test.go
│   ├── assets/
│   │   ├── bosh-deployment/
│   │   │   ├── LICENSE
│   │   │   └── vsphere/
│   │   │       └── cpi.yml
│   │   └── jumpbox-deployment/
│   │       ├── aws/
│   │       │   └── cpi.yml
│   │       ├── azure/
│   │       │   └── cpi.yml
│   │       └── no-external-ip.yml
│   ├── authenticated_cli.go
│   ├── cidr_block.go
│   ├── cidr_block_test.go
│   ├── cli.go
│   ├── cli_provider.go
│   ├── cli_provider_test.go
│   ├── config_updater.go
│   ├── config_updater_test.go
│   ├── credhub_getter.go
│   ├── credhub_getter_test.go
│   ├── deployment_vars_yaml.go
│   ├── deployments/
│   │   ├── .gitignore
│   │   └── README.md
│   ├── executor.go
│   ├── executor_test.go
│   ├── exports_test.go
│   ├── fixtures/
│   │   ├── some-cert.crt
│   │   ├── some-cert.key
│   │   └── some-fake-ca.crt
│   ├── init_test.go
│   ├── ip.go
│   ├── ip_test.go
│   ├── manager.go
│   ├── manager_create_error.go
│   ├── manager_delete_error.go
│   ├── manager_test.go
│   ├── ops.go
│   ├── ssh_key_deleter.go
│   ├── ssh_key_deleter_test.go
│   ├── ssh_key_getter.go
│   ├── ssh_key_getter_test.go
│   └── version_error.go
├── certs/
│   ├── fixtures/
│   │   ├── pkcs8.crt
│   │   └── pkcs8.key
│   ├── init_test.go
│   ├── validator.go
│   └── validator_test.go
├── ci/
│   ├── configure.sh
│   ├── dockerfiles/
│   │   └── deployment/
│   │       └── Dockerfile
│   ├── ops-files/
│   │   ├── concourse-gcp-spot.yml
│   │   └── replace-n1-machine-types.yml
│   ├── pipelines/
│   │   ├── README.md
│   │   └── bosh-bootloader.yml
│   └── tasks/
│       ├── acceptance/
│       │   ├── task
│       │   └── task.yml
│       ├── bbl-up-concourse/
│       │   ├── task
│       │   └── task.yml
│       ├── build-bbl-docs/
│       │   ├── task
│       │   └── task.yml
│       ├── build-release/
│       │   ├── task
│       │   └── task.yml
│       ├── bump-brew-tap/
│       │   ├── task
│       │   └── task.yml
│       ├── bump-deployments/
│       │   ├── task
│       │   └── task.yml
│       ├── create-bosh-deployment-source-file/
│       │   ├── source-template.yml
│       │   ├── task
│       │   └── task.yml
│       ├── download-terraform/
│       │   ├── task
│       │   └── task.yml
│       ├── generate-version-from-sha/
│       │   ├── task
│       │   └── task.yml
│       ├── get-concourse-test-vars/
│       │   ├── task
│       │   └── task.yml
│       ├── leftovers/
│       │   ├── task
│       │   └── task.yml
│       ├── merge-bump-deployments-change/
│       │   ├── task
│       │   └── task.yml
│       ├── prepare-docker-workspace/
│       │   └── task.yml
│       ├── setup-github-release/
│       │   ├── task
│       │   └── task.yml
│       ├── test-bosh-bootloader/
│       │   ├── task
│       │   └── task.yml
│       └── test-bosh-ssh/
│           ├── task
│           └── task.yml
├── cloudconfig/
│   ├── aws/
│   │   ├── base_ops_template.go
│   │   ├── exports_test.go
│   │   ├── fixtures/
│   │   │   ├── aws-concourse-lb-ops.yml
│   │   │   ├── aws-ops.yml
│   │   │   └── terraform-aws-cf-lb-ops.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── azure/
│   │   ├── base_ops_template.go
│   │   ├── exports_test.go
│   │   ├── fixtures/
│   │   │   └── azure-ops.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── cloud_config_templates.go
│   ├── cloudstack/
│   │   ├── base_ops_template.go
│   │   ├── fixtures/
│   │   │   ├── iso-segment.yml
│   │   │   └── ops-file.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── fixtures/
│   │   └── base-cloud-config.yml
│   ├── gcp/
│   │   ├── base_ops_template.go
│   │   ├── exports_test.go
│   │   ├── fixtures/
│   │   │   ├── gcp-cf-lb-ops.yml
│   │   │   ├── gcp-concourse-lb-ops.yml
│   │   │   └── gcp-ops.yml
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   ├── init_test.go
│   ├── manager.go
│   ├── manager_test.go
│   ├── openstack/
│   │   ├── base_ops_template.go
│   │   ├── init_test.go
│   │   ├── ops_generator.go
│   │   └── ops_generator_test.go
│   └── vsphere/
│       ├── base_ops_template.go
│       ├── init_test.go
│       ├── ops_generator.go
│       └── ops_generator_test.go
├── commands/
│   ├── aws_lbs.go
│   ├── aws_lbs_test.go
│   ├── azure_lbs.go
│   ├── azure_lbs_test.go
│   ├── cleanup_leftovers.go
│   ├── cleanup_leftovers_test.go
│   ├── command.go
│   ├── commands_usage.go
│   ├── commands_usage_test.go
│   ├── destroy.go
│   ├── destroy_test.go
│   ├── fail_fast_bosh_version.go
│   ├── fixtures/
│   │   └── terraform_template_no_lb.tf
│   ├── gcp_lbs.go
│   ├── gcp_lbs_test.go
│   ├── global_flags.go
│   ├── helpers.go
│   ├── init_test.go
│   ├── interfaces.go
│   ├── latest_error.go
│   ├── latest_error_test.go
│   ├── lb_args_handler.go
│   ├── lb_args_handler_test.go
│   ├── lbs.go
│   ├── lbs_test.go
│   ├── outputs.go
│   ├── outputs_test.go
│   ├── plan.go
│   ├── plan_test.go
│   ├── print_env.go
│   ├── print_env_test.go
│   ├── rotate.go
│   ├── rotate_test.go
│   ├── ssh.go
│   ├── ssh_key.go
│   ├── ssh_key_test.go
│   ├── ssh_test.go
│   ├── state_query.go
│   ├── state_query_test.go
│   ├── up.go
│   ├── up_test.go
│   ├── usage.go
│   ├── usage_test.go
│   ├── validate.go
│   ├── validate_test.go
│   ├── version.go
│   └── version_test.go
├── config/
│   ├── bosh_path.go
│   ├── bosh_path_test.go
│   ├── downloader.go
│   ├── fixtures/
│   │   └── bbl-state.tgz
│   ├── gcp_zoner_hack.go
│   ├── gcp_zoner_hack_test.go
│   ├── global_flags.go
│   ├── init_test.go
│   ├── load_state.go
│   ├── load_state_test.go
│   ├── merger.go
│   └── validate_iaas.go
├── deployment-versions.txt
├── dockerfiles/
│   └── cf-deployment-concourse-tasks-bbl-dev/
│       └── Dockerfile
├── docs/
│   ├── advanced-configuration.md
│   ├── architecture/
│   │   └── decisions/
│   │       ├── 0001-record-architecture-decisions.md
│   │       ├── 0002-replace-go-bindata-with-packr2.md
│   │       └── 0003-replace-packr2-with-go-embed.md
│   ├── cf-lbs.md
│   ├── cleaning-up.md
│   ├── cloudfoundry.md
│   ├── concourse.md
│   ├── credhub.md
│   ├── customization.md
│   ├── getting-started-aws.md
│   ├── getting-started-azure.md
│   ├── getting-started-cloudstack.md
│   ├── getting-started-gcp.md
│   ├── getting-started-openstack.md
│   ├── getting-started-vsphere.md
│   ├── howto-backup-restore.md
│   ├── howto-ssh.md
│   ├── howto-target-bosh-director.md
│   ├── index.md
│   ├── known-issues.md
│   └── upgrade.md
├── fakes/
│   ├── all_proxy_getter.go
│   ├── aws_client.go
│   ├── aws_client_provider.go
│   ├── aws_ec2_client.go
│   ├── aws_route53_client.go
│   ├── azure_groups_client.go
│   ├── azure_vms_client.go
│   ├── bosh_cli.go
│   ├── bosh_cli_provider.go
│   ├── bosh_config_updater.go
│   ├── bosh_executor.go
│   ├── bosh_manager.go
│   ├── certificate_deleter.go
│   ├── certificate_validator.go
│   ├── cloud_config_manager.go
│   ├── cloud_config_ops_generator.go
│   ├── command.go
│   ├── config_merger.go
│   ├── credhub_getter.go
│   ├── delete_lbs.go
│   ├── dialer.go
│   ├── dir_provider.go
│   ├── downloader.go
│   ├── env_getter.go
│   ├── env_id_generator.go
│   ├── env_id_manager.go
│   ├── environment_validator.go
│   ├── executable.go
│   ├── fancy_ssh_key_getter.go
│   ├── file_info.go
│   ├── file_io.go
│   ├── filtered_deleter.go
│   ├── garbage_collector.go
│   ├── gcp_client.go
│   ├── gcp_client_provider.go
│   ├── gcp_compute_client.go
│   ├── guid_generator.go
│   ├── host_key_getter.go
│   ├── input_generator.go
│   ├── lb_args_handler.go
│   ├── lbs.go
│   ├── logger.go
│   ├── network_client.go
│   ├── network_deletion_validator.go
│   ├── network_instances_checker.go
│   ├── patch_detector.go
│   ├── path_finder.go
│   ├── plan.go
│   ├── random_port.go
│   ├── reader.go
│   ├── runtime_config_manager.go
│   ├── socks5_proxy.go
│   ├── ssh_cli.go
│   ├── ssh_key_deleter.go
│   ├── ssh_key_getter.go
│   ├── state_bootstrap.go
│   ├── state_migrator.go
│   ├── state_store.go
│   ├── state_validator.go
│   ├── template_generator.go
│   ├── terraform_cli.go
│   ├── terraform_executor.go
│   ├── terraform_manager.go
│   ├── up.go
│   ├── up_cmd.go
│   ├── usage.go
│   ├── uuid_generator.go
│   ├── vpc_status_checker.go
│   └── zone_getter.go
├── fileio/
│   └── file_io.go
├── flags/
│   ├── flags.go
│   ├── flags_test.go
│   └── init_test.go
├── gcp/
│   ├── client.go
│   ├── client_provider.go
│   ├── client_provider_test.go
│   ├── client_test.go
│   ├── compute_client.go
│   ├── export_test.go
│   ├── fixtures/
│   │   └── service-account-key
│   └── init_test.go
├── go.mod
├── go.sum
├── helpers/
│   ├── env_getter.go
│   ├── env_id_generator.go
│   ├── env_id_generator_test.go
│   ├── env_id_manager.go
│   ├── env_id_manager_test.go
│   ├── errors.go
│   ├── errors_test.go
│   ├── exports_test.go
│   ├── init_test.go
│   ├── path_finder.go
│   └── path_finder_test.go
├── mkdocs.yml
├── plan-patches/
│   ├── 1-az-aws/
│   │   ├── PATCH.md
│   │   └── vars/
│   │       └── zone.tfvars
│   ├── README.md
│   ├── acm-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       ├── cert_override.tf
│   │       ├── dns_override.tf
│   │       └── lb_override.tf
│   ├── alb-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── lb-ops.yml
│   │   └── terraform/
│   │       └── cf-lb_override.tf
│   ├── bosh-lite-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── cloud-confg.yml
│   │   ├── create-director-override.sh
│   │   ├── delete-director-override.sh
│   │   └── terraform/
│   │       └── bosh-lite_override.tf
│   ├── bosh-lite-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── bosh-lite.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── external-ip-gcp.yml
│   │   ├── ip-forwarding.yml
│   │   └── terraform/
│   │       └── bosh-lite.tf
│   ├── byobastion-gcp/
│   │   ├── README.md
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── terraform/
│   │   │   └── bastion_override.tf
│   │   └── vars/
│   │       └── bastion.tfvars
│   ├── byoresource-group-azure/
│   │   ├── README.md
│   │   ├── terraform/
│   │   │   └── resource_group_override.tf
│   │   └── vars/
│   │       └── existing-resource-group.tfvars
│   ├── cf-azure/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   ├── better-compiler.yml
│   │   │   ├── cf-cloud-config-ops.yml
│   │   │   └── cf-subnet-ops.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── ops/
│   │   │   ├── jumpbox-use-managed-disk.yml
│   │   │   ├── rename-network-and-deployment.yml
│   │   │   ├── scale-to-one-az.yml
│   │   │   ├── small-vm.yml
│   │   │   ├── use-cf-resource-group.yml
│   │   │   └── use-cf-subnet.yml
│   │   └── terraform/
│   │       ├── cf_lb_override.tf
│   │       ├── cf_outputs_override.tf
│   │       ├── cf_resource_group_override.tf
│   │       ├── cf_sg_override.tf
│   │       ├── cf_storage_account.tf
│   │       └── cf_subnet.tf
│   ├── cf-lite-azure/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   ├── better-compiler.yml
│   │   │   ├── cf-cloud-config-ops.yml
│   │   │   └── cf-subnet-ops.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── ops/
│   │   │   ├── jumpbox-use-managed-disk.yml
│   │   │   ├── small-vm.yml
│   │   │   ├── use-cf-resource-group.yml
│   │   │   └── use-cf-subnet.yml
│   │   └── terraform/
│   │       ├── cf_lb_override.tf
│   │       ├── cf_outputs_override.tf
│   │       ├── cf_resource_group_override.tf
│   │       ├── cf_sg_override.tf
│   │       ├── cf_storage_account.tf
│   │       └── cf_subnet.tf
│   ├── cfcr-aws/
│   │   ├── README.md
│   │   ├── terraform/
│   │   │   ├── cfcr_dns_override.tf
│   │   │   ├── cfcr_iam_override.tf
│   │   │   ├── cfcr_lb_override.tf
│   │   │   └── cfcr_outputs_override.tf
│   │   └── vars/
│   │       └── cfcr.tfvars
│   ├── cfcr-azure/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   ├── better-compiler.yml
│   │   │   ├── cfcr-cloud-config-ops.yml
│   │   │   └── cfcr-subnet-ops.yml
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   ├── ops/
│   │   │   ├── cfcr-vm-extensions.yml
│   │   │   ├── cloud-provider.yml
│   │   │   ├── jumpbox-use-managed-disk.yml
│   │   │   ├── use-cfcr-subnet.yml
│   │   │   └── use-vm-extensions.yml
│   │   └── terraform/
│   │       ├── cfcr_lb_override.tf
│   │       ├── cfcr_outputs_override.tf
│   │       ├── cfcr_resource_group_override.tf
│   │       ├── cfcr_sg_override.tf
│   │       └── cfcr_subnet.tf
│   ├── cfcr-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── cfcr-cloud-config-ops.yml
│   │   └── terraform/
│   │       ├── cfcr_iam_override.tf
│   │       ├── cfcr_lb_override.tf
│   │       └── cfcr_outputs_override.tf
│   ├── cfcr-openstack/
│   │   ├── README.md
│   │   └── cloud-config/
│   │       └── cfcr-overrides.yml
│   ├── cfcr-vsphere/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── cfcr-overrides.yml
│   │   └── terraform/
│   │       └── outputs-override.tf
│   ├── colocate-gorouter-ssh-proxy-gcp/
│   │   ├── cloud-config/
│   │   │   └── colocated-gorouter-ssh-proxy.yml
│   │   └── terraform/
│   │       └── colocated-gorouter-ssh-proxy_override.tf
│   ├── credhub-lb-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── add_credhub_lb_target.yml
│   │   └── terraform/
│   │       └── credhub_lb.tf
│   ├── dns-delegation-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── aws_parent_ns.tf
│   ├── gcs-blobstore-gcp/
│   │   ├── README.md
│   │   └── terraform/
│   │       ├── gcs_blobstore_buckets_override.tf
│   │       ├── gcs_blobstore_iam_override.tf
│   │       └── gcs_blobstore_outputs_override.tf
│   ├── http2-lb-gcp/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── http2-cf-lb-gcp_override.tf
│   ├── iam-profile-aws/
│   │   ├── README.md
│   │   └── vars/
│   │       └── iam.tfvars
│   ├── iso-segs-aws/
│   │   ├── README.md
│   │   └── cloud-config/
│   │       └── iso-segs-ops.yml
│   ├── iso-segs-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── routing-iso-segs.yml
│   │   └── terraform/
│   │       └── routing-iso-segs.tf
│   ├── n-cf-gcp/
│   │   ├── README.md
│   │   ├── cf-lb-ops.yml
│   │   ├── cloud-config/
│   │   │   └── cf-lbs-ops-override.yml
│   │   ├── terraform/
│   │   │   ├── cf-dns_override.tf
│   │   │   └── cf-lb_override.tf
│   │   └── update-configs.sh
│   ├── nat-aws/
│   │   └── terraform/
│   │       └── nat_override.tf
│   ├── nat-per-az/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── nat-per-az_override.tf
│   ├── network-lb-gcp/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── http-and-ws-share-network-lb.yml
│   │   └── terraform/
│   │       └── network_lb_override.tf
│   ├── openvpn-aws/
│   │   ├── cloud-config/
│   │   │   └── openvpn_vip.yml
│   │   └── terraform/
│   │       └── openvpn_override.tf
│   ├── prometheus-lb-aws/
│   │   ├── README.md
│   │   ├── cloud-config/
│   │   │   └── add_prometheus_lb_target.yml
│   │   └── terraform/
│   │       └── prometheus_lb.tf
│   ├── prometheus-lb-gcp/
│   │   ├── README.md
│   │   ├── add-nginx-network-properties.yml
│   │   ├── cloud-config/
│   │   │   └── add_prometheus_lb_target.yml
│   │   └── terraform/
│   │       └── prometheus-lb.tf
│   ├── restricted-instance-groups-gcp/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── restricted_instance_groups_override.tf
│   ├── s3-blobstore-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       ├── s3_blobstore_buckets.tf
│   │       ├── s3_blobstore_iam.tf
│   │       └── s3_blobstore_outputs.tf
│   ├── spot-gcp/
│   │   ├── README.md
│   │   ├── create-director-override.sh
│   │   ├── create-jumpbox-override.sh
│   │   ├── delete-director-override.sh
│   │   ├── delete-jumpbox-override.sh
│   │   └── ops/
│   │       └── spot.yml
│   ├── tf-backend-aws/
│   │   ├── README.md
│   │   └── terraform/
│   │       └── s3_backend_override.tf
│   └── tf-backend-gcp/
│       ├── README.md
│       └── terraform/
│           └── gcs_backend_override.tf
├── renderers/
│   ├── factory.go
│   ├── factory_test.go
│   ├── init_test.go
│   ├── posix.go
│   ├── posix_test.go
│   ├── powershell.go
│   ├── powershell_test.go
│   ├── renderer.go
│   ├── shell_types.go
│   ├── yaml.go
│   └── yaml_test.go
├── runtimeconfig/
│   ├── manager.go
│   ├── manager_test.go
│   └── runtimeconfig_suite_test.go
├── scripts/
│   ├── acceptance_tests
│   ├── build
│   ├── create_mod
│   ├── lint
│   ├── local_build
│   └── test
├── ssh/
│   ├── cli.go
│   └── random_port.go
├── storage/
│   ├── aws.go
│   ├── azure.go
│   ├── bootstrap.go
│   ├── bootstrap_test.go
│   ├── bosh.go
│   ├── cloudstack.go
│   ├── exports_test.go
│   ├── file_ownership.go
│   ├── fixtures/
│   │   ├── empty/
│   │   │   └── .gitkeep
│   │   ├── patched/
│   │   │   ├── UNRELATED_FILE.md
│   │   │   ├── bbl-ops-files/
│   │   │   │   └── gcp/
│   │   │   │       └── bosh-director-ephemeral-ip-ops.yml
│   │   │   ├── bosh-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── cloud-config/
│   │   │   │   ├── cloud-config.yml
│   │   │   │   ├── ops.yml
│   │   │   │   └── patch-cloud-config.yml
│   │   │   ├── create-director-override.sh
│   │   │   ├── create-director.sh
│   │   │   ├── create-jumpbox-override.sh
│   │   │   ├── create-jumpbox.sh
│   │   │   ├── delete-director-override.sh
│   │   │   ├── delete-director.sh
│   │   │   ├── delete-jumpbox-override.sh
│   │   │   ├── delete-jumpbox.sh
│   │   │   ├── jumpbox-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── terraform/
│   │   │   │   ├── bbl-template.tf
│   │   │   │   └── patched-terraform.tf
│   │   │   └── vars/
│   │   │       ├── bbl.tfvars
│   │   │       └── patched-vars.tfvars
│   │   ├── unpatched/
│   │   │   ├── bbl-ops-files/
│   │   │   │   └── gcp/
│   │   │   │       └── bosh-director-ephemeral-ip-ops.yml
│   │   │   ├── bosh-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── cloud-config/
│   │   │   │   ├── cloud-config.yml
│   │   │   │   └── ops.yml
│   │   │   ├── create-director.sh
│   │   │   ├── create-jumpbox.sh
│   │   │   ├── delete-director.sh
│   │   │   ├── delete-jumpbox.sh
│   │   │   ├── jumpbox-deployment/
│   │   │   │   └── .gitignore
│   │   │   ├── terraform/
│   │   │   │   └── bbl-template.tf
│   │   │   └── vars/
│   │   │       └── bbl.tfvars
│   │   └── upped/
│   │       ├── bbl-ops-files/
│   │       │   └── gcp/
│   │       │       └── bosh-director-ephemeral-ip-ops.yml
│   │       ├── bosh-deployment/
│   │       │   ├── .gitignore
│   │       │   ├── LICENSE
│   │       │   ├── NOTICE
│   │       │   ├── README.md
│   │       │   ├── aws/
│   │       │   │   ├── cli-iam-instance-profile.yml
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── encrypted-disk.yml
│   │       │   │   └── iam-instance-profile.yml
│   │       │   ├── azure/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── custom-environment.yml
│   │       │   │   └── use-managed-disks.yml
│   │       │   ├── bbr.yml
│   │       │   ├── bosh-lite-docker.yml
│   │       │   ├── bosh-lite-grootfs.yml
│   │       │   ├── bosh-lite-runc.yml
│   │       │   ├── bosh-lite.yml
│   │       │   ├── bosh.yml
│   │       │   ├── ci/
│   │       │   │   ├── bosh-alpha-compiled-releases/
│   │       │   │   │   ├── configure.sh
│   │       │   │   │   ├── pipeline.yml
│   │       │   │   │   └── tasks/
│   │       │   │   │       ├── build-release.sh
│   │       │   │   │       └── build-release.yml
│   │       │   │   └── compiled-releases/
│   │       │   │       ├── configure.sh
│   │       │   │       ├── pipeline-3363.yml
│   │       │   │       ├── pipeline-3421.yml
│   │       │   │       ├── pipeline-3445.yml
│   │       │   │       ├── pipeline-3468.yml
│   │       │   │       ├── pipeline-3541.yml
│   │       │   │       ├── pipeline-3586.yml
│   │       │   │       └── tasks/
│   │       │   │           ├── export-release.sh
│   │       │   │           └── export-release.yml
│   │       │   ├── credhub.yml
│   │       │   ├── docker/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── ipv6/
│   │       │   │   │   └── cpi.yml
│   │       │   │   └── unix-sock.yml
│   │       │   ├── docs/
│   │       │   │   ├── bosh-lite-on-vbox.md
│   │       │   │   └── jumpbox-user.md
│   │       │   ├── experimental/
│   │       │   │   ├── blobstore-https-bosh-lite.yml
│   │       │   │   ├── blobstore-https.yml
│   │       │   │   ├── bpm.yml
│   │       │   │   ├── db-enable-mutual-tls.yml
│   │       │   │   ├── db-enable-tls.yml
│   │       │   │   ├── db-gcp-postgres-connection-options.yml
│   │       │   │   ├── db-mysql-connection-options.yml
│   │       │   │   ├── db-postgres-connection-options.yml
│   │       │   │   ├── dns-addon-with-api-certificates.yml
│   │       │   │   ├── local-bosh-release-tarball.yml
│   │       │   │   └── ntp-agent-env.yml
│   │       │   ├── external-ip-not-recommended-uaa.yml
│   │       │   ├── external-ip-not-recommended.yml
│   │       │   ├── external-ip-with-registry-not-recommended.yml
│   │       │   ├── gcp/
│   │       │   │   ├── bosh-lite-vm-type.yml
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── gcs-blobstore.yml
│   │       │   │   └── service-account.yml
│   │       │   ├── hm/
│   │       │   │   ├── datadog.yml
│   │       │   │   └── disable.yml
│   │       │   ├── jumpbox-user.yml
│   │       │   ├── local-bosh-release-tarball.yml
│   │       │   ├── local-bosh-release.yml
│   │       │   ├── local-dns.yml
│   │       │   ├── misc/
│   │       │   │   ├── bosh-dev.yml
│   │       │   │   ├── config-server.yml
│   │       │   │   ├── cpi-secondary-registry.yml
│   │       │   │   ├── dns.yml
│   │       │   │   ├── external-db.yml
│   │       │   │   ├── external-ip-not-recommended/
│   │       │   │   │   └── mbus-only.yml
│   │       │   │   ├── ipv6/
│   │       │   │   │   ├── bosh.yml
│   │       │   │   │   ├── credhub.yml
│   │       │   │   │   └── uaa.yml
│   │       │   │   ├── nats-strict-tls.yml
│   │       │   │   ├── no-internet-access/
│   │       │   │   │   ├── credhub.yml
│   │       │   │   │   ├── stemcell.yml
│   │       │   │   │   ├── uaa.yml
│   │       │   │   │   └── vsphere-cpi.yml
│   │       │   │   ├── ntp.yml
│   │       │   │   ├── powerdns.yml
│   │       │   │   ├── proxy.yml
│   │       │   │   └── second-network.yml
│   │       │   ├── openstack/
│   │       │   │   ├── auto-anti-affinity.yml
│   │       │   │   ├── boot-from-volume.yml
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── custom-ca.yml
│   │       │   │   ├── disable-readable-vm-names.yml
│   │       │   │   ├── keystone-v2.yml
│   │       │   │   └── trusted-certs.yml
│   │       │   ├── runtime-configs/
│   │       │   │   ├── dns.yml
│   │       │   │   └── syslog.yml
│   │       │   ├── softlayer/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-dynamic.yml
│   │       │   │   └── cpi.yml
│   │       │   ├── syslog.yml
│   │       │   ├── tests/
│   │       │   │   ├── .gitignore
│   │       │   │   ├── cred-test.yml
│   │       │   │   ├── run-checks.sh
│   │       │   │   └── run.sh
│   │       │   ├── turbulence.yml
│   │       │   ├── uaa.yml
│   │       │   ├── vcloud/
│   │       │   │   └── cpi.yml
│   │       │   ├── virtualbox/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── create-env.sh
│   │       │   │   ├── delete-env.sh
│   │       │   │   ├── internal-network.yml
│   │       │   │   ├── ipv6/
│   │       │   │   │   ├── cpi.yml
│   │       │   │   │   └── remote.yml
│   │       │   │   ├── outbound-network.yml
│   │       │   │   ├── remote.yml
│   │       │   │   └── remove-ntp.yml
│   │       │   ├── vsphere/
│   │       │   │   ├── cloud-config.yml
│   │       │   │   ├── cpi-secondary.yml
│   │       │   │   ├── cpi.yml
│   │       │   │   ├── resource-pool.yml
│   │       │   │   └── second-network.yml
│   │       │   └── warden/
│   │       │       ├── cloud-config.yml
│   │       │       ├── cpi-grootfs.yml
│   │       │       ├── cpi.yml
│   │       │       └── ignore-gateway.yml
│   │       ├── certs/
│   │       │   ├── fake.crt
│   │       │   ├── fake.csr
│   │       │   ├── fake.key
│   │       │   ├── fake_ca.crl
│   │       │   ├── fake_ca.crt
│   │       │   └── fake_ca.key
│   │       ├── cloud-config/
│   │       │   ├── cloud-config.yml
│   │       │   └── ops.yml
│   │       ├── create-director.sh
│   │       ├── create-jumpbox.sh
│   │       ├── delete-director.sh
│   │       ├── delete-jumpbox.sh
│   │       ├── jumpbox-deployment/
│   │       │   ├── .gitignore
│   │       │   ├── README.md
│   │       │   ├── aws/
│   │       │   │   └── cpi.yml
│   │       │   ├── azure/
│   │       │   │   └── cpi.yml
│   │       │   ├── gcp/
│   │       │   │   └── cpi.yml
│   │       │   ├── jumpbox.yml
│   │       │   ├── no-external-ip-registry.yml
│   │       │   ├── no-external-ip.yml
│   │       │   ├── openstack/
│   │       │   │   └── cpi.yml
│   │       │   ├── test.sh
│   │       │   └── vsphere/
│   │       │       ├── cpi.yml
│   │       │       └── resource-pool.yml
│   │       ├── terraform/
│   │       │   └── bbl-template.tf
│   │       └── vars/
│   │           ├── bbl.tfvars
│   │           ├── bosh-state.json
│   │           ├── cloud-config-vars.yml
│   │           ├── director-vars-file.yml
│   │           ├── director-vars-store.yml
│   │           ├── jumpbox-state.json
│   │           ├── jumpbox-vars-file.yml
│   │           ├── jumpbox-vars-store.yml
│   │           ├── terraform.tfstate
│   │           └── terraform.tfstate.backup
│   ├── garbage_collector.go
│   ├── garbage_collector_test.go
│   ├── gcp.go
│   ├── gcp_test.go
│   ├── init_test.go
│   ├── jumpbox.go
│   ├── jumpbox_test.go
│   ├── lb.go
│   ├── migrator.go
│   ├── migrator_test.go
│   ├── openstack.go
│   ├── patch_detector.go
│   ├── patch_detector_test.go
│   ├── permissions.go
│   ├── state.go
│   ├── store.go
│   ├── store_test.go
│   └── vsphere.go
├── terraform/
│   ├── aws/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── base.tf
│   │       ├── cf_dns.tf
│   │       ├── cf_lb.tf
│   │       ├── concourse_lb.tf
│   │       ├── iam.tf
│   │       ├── iso_segments.tf
│   │       ├── lb_subnet.tf
│   │       ├── ssl_certificate.tf
│   │       └── vpc.tf
│   ├── azure/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── cf_dns.tf
│   │       ├── cf_lb.tf
│   │       ├── concourse_lb.tf
│   │       ├── network.tf
│   │       ├── network_security_group.tf
│   │       ├── output.tf
│   │       ├── resource_group.tf
│   │       ├── storage.tf
│   │       ├── tls.tf
│   │       └── vars.tf
│   ├── binary_path.go
│   ├── binary_path_test.go
│   ├── cli.go
│   ├── cloudstack/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   └── templates/
│   │       ├── provider-vars.tf
│   │       ├── provider.tf
│   │       ├── resources-outputs.tf
│   │       ├── resources-vars.tf
│   │       └── resources.tf
│   ├── executor.go
│   ├── executor_test.go
│   ├── gcp/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── bosh_director.tf
│   │       ├── cf_dns.tf
│   │       ├── cf_lb.tf
│   │       ├── concourse_lb.tf
│   │       ├── jumpbox.tf
│   │       └── vars.tf
│   ├── init_test.go
│   ├── manager.go
│   ├── manager_test.go
│   ├── openstack/
│   │   ├── init_test.go
│   │   ├── input_generator.go
│   │   ├── input_generator_test.go
│   │   ├── template_generator.go
│   │   ├── template_generator_test.go
│   │   └── templates/
│   │       ├── provider-vars.tf
│   │       ├── provider.tf
│   │       ├── resources-outputs.tf
│   │       ├── resources-vars.tf
│   │       └── resources.tf
│   ├── outputs.go
│   ├── outputs_test.go
│   ├── testassets/
│   │   ├── incorrect_mod_time/
│   │   │   ├── terraform
│   │   │   └── terraform-mod-time
│   │   ├── only_mod_time/
│   │   │   └── terraform-mod-time
│   │   ├── only_terraform/
│   │   │   └── terraform
│   │   └── success/
│   │       ├── terraform
│   │       └── terraform-mod-time
│   └── vsphere/
│       ├── init_test.go
│       ├── input_generator.go
│       ├── input_generator_test.go
│       └── template_generator.go
├── testhelpers/
│   ├── certificate_constants.go
│   └── temp_file_helpers.go
├── tools/
│   └── tools.go
└── vendor/
    ├── cloud.google.com/
    │   └── go/
    │       ├── AUTHORS
    │       ├── CONTRIBUTORS
    │       ├── LICENSE
    │       ├── compute/
    │       │   └── metadata/
    │       │       └── metadata.go
    │       ├── iam/
    │       │   └── iam.go
    │       ├── internal/
    │       │   ├── annotate.go
    │       │   ├── optional/
    │       │   │   └── optional.go
    │       │   ├── retry.go
    │       │   ├── trace/
    │       │   │   └── trace.go
    │       │   └── version/
    │       │       ├── update_version.sh
    │       │       └── version.go
    │       └── storage/
    │           ├── acl.go
    │           ├── bucket.go
    │           ├── copy.go
    │           ├── doc.go
    │           ├── go110.go
    │           ├── iam.go
    │           ├── invoke.go
    │           ├── not_go110.go
    │           ├── notifications.go
    │           ├── reader.go
    │           ├── storage.go
    │           ├── storage.replay
    │           └── writer.go
    ├── github.com/
    │   ├── Azure/
    │   │   ├── azure-sdk-for-go/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   ├── arm/
    │   │   │   │   └── resources/
    │   │   │   │       └── resources/
    │   │   │   │           ├── client.go
    │   │   │   │           ├── deploymentoperations.go
    │   │   │   │           ├── deployments.go
    │   │   │   │           ├── group.go
    │   │   │   │           ├── groups.go
    │   │   │   │           ├── models.go
    │   │   │   │           ├── providers.go
    │   │   │   │           ├── tags.go
    │   │   │   │           └── version.go
    │   │   │   └── sdk/
    │   │   │       ├── azcore/
    │   │   │       │   ├── CHANGELOG.md
    │   │   │       │   ├── LICENSE.txt
    │   │   │       │   ├── README.md
    │   │   │       │   ├── arm/
    │   │   │       │   │   ├── client.go
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   ├── internal/
    │   │   │       │   │   │   └── resource/
    │   │   │       │   │   │       ├── resource_identifier.go
    │   │   │       │   │   │       └── resource_type.go
    │   │   │       │   │   ├── policy/
    │   │   │       │   │   │   └── policy.go
    │   │   │       │   │   ├── resource_identifier.go
    │   │   │       │   │   ├── resource_type.go
    │   │   │       │   │   └── runtime/
    │   │   │       │   │       ├── pipeline.go
    │   │   │       │   │       ├── policy_bearer_token.go
    │   │   │       │   │       ├── policy_register_rp.go
    │   │   │       │   │       └── runtime.go
    │   │   │       │   ├── ci.yml
    │   │   │       │   ├── cloud/
    │   │   │       │   │   ├── cloud.go
    │   │   │       │   │   └── doc.go
    │   │   │       │   ├── core.go
    │   │   │       │   ├── doc.go
    │   │   │       │   ├── errors.go
    │   │   │       │   ├── etag.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   ├── exported/
    │   │   │       │   │   │   ├── exported.go
    │   │   │       │   │   │   ├── pipeline.go
    │   │   │       │   │   │   ├── request.go
    │   │   │       │   │   │   └── response_error.go
    │   │   │       │   │   ├── log/
    │   │   │       │   │   │   └── log.go
    │   │   │       │   │   ├── pollers/
    │   │   │       │   │   │   ├── async/
    │   │   │       │   │   │   │   └── async.go
    │   │   │       │   │   │   ├── body/
    │   │   │       │   │   │   │   └── body.go
    │   │   │       │   │   │   ├── loc/
    │   │   │       │   │   │   │   └── loc.go
    │   │   │       │   │   │   ├── op/
    │   │   │       │   │   │   │   └── op.go
    │   │   │       │   │   │   ├── poller.go
    │   │   │       │   │   │   └── util.go
    │   │   │       │   │   └── shared/
    │   │   │       │   │       ├── constants.go
    │   │   │       │   │       └── shared.go
    │   │   │       │   ├── log/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── log.go
    │   │   │       │   ├── policy/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── policy.go
    │   │   │       │   ├── runtime/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   ├── errors.go
    │   │   │       │   │   ├── pager.go
    │   │   │       │   │   ├── pipeline.go
    │   │   │       │   │   ├── policy_api_version.go
    │   │   │       │   │   ├── policy_bearer_token.go
    │   │   │       │   │   ├── policy_body_download.go
    │   │   │       │   │   ├── policy_http_header.go
    │   │   │       │   │   ├── policy_include_response.go
    │   │   │       │   │   ├── policy_logging.go
    │   │   │       │   │   ├── policy_request_id.go
    │   │   │       │   │   ├── policy_retry.go
    │   │   │       │   │   ├── policy_telemetry.go
    │   │   │       │   │   ├── poller.go
    │   │   │       │   │   ├── request.go
    │   │   │       │   │   ├── response.go
    │   │   │       │   │   └── transport_default_http_client.go
    │   │   │       │   ├── streaming/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── progress.go
    │   │   │       │   └── tracing/
    │   │   │       │       ├── constants.go
    │   │   │       │       └── tracing.go
    │   │   │       ├── azidentity/
    │   │   │       │   ├── CHANGELOG.md
    │   │   │       │   ├── LICENSE.txt
    │   │   │       │   ├── MIGRATION.md
    │   │   │       │   ├── README.md
    │   │   │       │   ├── TROUBLESHOOTING.md
    │   │   │       │   ├── assets.json
    │   │   │       │   ├── azidentity.go
    │   │   │       │   ├── azure_cli_credential.go
    │   │   │       │   ├── chained_token_credential.go
    │   │   │       │   ├── ci.yml
    │   │   │       │   ├── client_assertion_credential.go
    │   │   │       │   ├── client_certificate_credential.go
    │   │   │       │   ├── client_secret_credential.go
    │   │   │       │   ├── default_azure_credential.go
    │   │   │       │   ├── device_code_credential.go
    │   │   │       │   ├── environment_credential.go
    │   │   │       │   ├── errors.go
    │   │   │       │   ├── interactive_browser_credential.go
    │   │   │       │   ├── logging.go
    │   │   │       │   ├── managed_identity_client.go
    │   │   │       │   ├── managed_identity_credential.go
    │   │   │       │   ├── on_behalf_of_credential.go
    │   │   │       │   ├── syncer.go
    │   │   │       │   ├── username_password_credential.go
    │   │   │       │   ├── version.go
    │   │   │       │   └── workload_identity.go
    │   │   │       ├── internal/
    │   │   │       │   ├── LICENSE.txt
    │   │   │       │   ├── diag/
    │   │   │       │   │   ├── diag.go
    │   │   │       │   │   └── doc.go
    │   │   │       │   ├── errorinfo/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── errorinfo.go
    │   │   │       │   ├── exported/
    │   │   │       │   │   └── exported.go
    │   │   │       │   ├── log/
    │   │   │       │   │   ├── doc.go
    │   │   │       │   │   └── log.go
    │   │   │       │   ├── poller/
    │   │   │       │   │   └── util.go
    │   │   │       │   ├── temporal/
    │   │   │       │   │   └── resource.go
    │   │   │       │   └── uuid/
    │   │   │       │       ├── doc.go
    │   │   │       │       └── uuid.go
    │   │   │       └── resourcemanager/
    │   │   │           ├── compute/
    │   │   │           │   └── armcompute/
    │   │   │           │       ├── CHANGELOG.md
    │   │   │           │       ├── LICENSE.txt
    │   │   │           │       ├── README.md
    │   │   │           │       ├── autorest.md
    │   │   │           │       ├── build.go
    │   │   │           │       ├── ci.yml
    │   │   │           │       ├── zz_generated_availabilitysets_client.go
    │   │   │           │       ├── zz_generated_capacityreservationgroups_client.go
    │   │   │           │       ├── zz_generated_capacityreservations_client.go
    │   │   │           │       ├── zz_generated_cloudserviceoperatingsystems_client.go
    │   │   │           │       ├── zz_generated_cloudserviceroleinstances_client.go
    │   │   │           │       ├── zz_generated_cloudserviceroles_client.go
    │   │   │           │       ├── zz_generated_cloudservices_client.go
    │   │   │           │       ├── zz_generated_cloudservicesupdatedomain_client.go
    │   │   │           │       ├── zz_generated_communitygalleries_client.go
    │   │   │           │       ├── zz_generated_communitygalleryimages_client.go
    │   │   │           │       ├── zz_generated_communitygalleryimageversions_client.go
    │   │   │           │       ├── zz_generated_constants.go
    │   │   │           │       ├── zz_generated_dedicatedhostgroups_client.go
    │   │   │           │       ├── zz_generated_dedicatedhosts_client.go
    │   │   │           │       ├── zz_generated_diskaccesses_client.go
    │   │   │           │       ├── zz_generated_diskencryptionsets_client.go
    │   │   │           │       ├── zz_generated_diskrestorepoint_client.go
    │   │   │           │       ├── zz_generated_disks_client.go
    │   │   │           │       ├── zz_generated_galleries_client.go
    │   │   │           │       ├── zz_generated_galleryapplications_client.go
    │   │   │           │       ├── zz_generated_galleryapplicationversions_client.go
    │   │   │           │       ├── zz_generated_galleryimages_client.go
    │   │   │           │       ├── zz_generated_galleryimageversions_client.go
    │   │   │           │       ├── zz_generated_gallerysharingprofile_client.go
    │   │   │           │       ├── zz_generated_images_client.go
    │   │   │           │       ├── zz_generated_loganalytics_client.go
    │   │   │           │       ├── zz_generated_models.go
    │   │   │           │       ├── zz_generated_models_serde.go
    │   │   │           │       ├── zz_generated_operations_client.go
    │   │   │           │       ├── zz_generated_proximityplacementgroups_client.go
    │   │   │           │       ├── zz_generated_resourceskus_client.go
    │   │   │           │       ├── zz_generated_response_types.go
    │   │   │           │       ├── zz_generated_restorepointcollections_client.go
    │   │   │           │       ├── zz_generated_restorepoints_client.go
    │   │   │           │       ├── zz_generated_sharedgalleries_client.go
    │   │   │           │       ├── zz_generated_sharedgalleryimages_client.go
    │   │   │           │       ├── zz_generated_sharedgalleryimageversions_client.go
    │   │   │           │       ├── zz_generated_snapshots_client.go
    │   │   │           │       ├── zz_generated_sshpublickeys_client.go
    │   │   │           │       ├── zz_generated_time_rfc3339.go
    │   │   │           │       ├── zz_generated_usage_client.go
    │   │   │           │       ├── zz_generated_virtualmachineextensionimages_client.go
    │   │   │           │       ├── zz_generated_virtualmachineextensions_client.go
    │   │   │           │       ├── zz_generated_virtualmachineimages_client.go
    │   │   │           │       ├── zz_generated_virtualmachineimagesedgezone_client.go
    │   │   │           │       ├── zz_generated_virtualmachineruncommands_client.go
    │   │   │           │       ├── zz_generated_virtualmachines_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetextensions_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetrollingupgrades_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesets_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetvmextensions_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetvmruncommands_client.go
    │   │   │           │       ├── zz_generated_virtualmachinescalesetvms_client.go
    │   │   │           │       └── zz_generated_virtualmachinesizes_client.go
    │   │   │           ├── network/
    │   │   │           │   └── armnetwork/
    │   │   │           │       ├── CHANGELOG.md
    │   │   │           │       ├── LICENSE.txt
    │   │   │           │       ├── README.md
    │   │   │           │       ├── adminrulecollections_client.go
    │   │   │           │       ├── adminrules_client.go
    │   │   │           │       ├── applicationgatewayprivateendpointconnections_client.go
    │   │   │           │       ├── applicationgatewayprivatelinkresources_client.go
    │   │   │           │       ├── applicationgateways_client.go
    │   │   │           │       ├── applicationsecuritygroups_client.go
    │   │   │           │       ├── autorest.md
    │   │   │           │       ├── availabledelegations_client.go
    │   │   │           │       ├── availableendpointservices_client.go
    │   │   │           │       ├── availableprivateendpointtypes_client.go
    │   │   │           │       ├── availableresourcegroupdelegations_client.go
    │   │   │           │       ├── availableservicealiases_client.go
    │   │   │           │       ├── azurefirewallfqdntags_client.go
    │   │   │           │       ├── azurefirewalls_client.go
    │   │   │           │       ├── bastionhosts_client.go
    │   │   │           │       ├── bgpservicecommunities_client.go
    │   │   │           │       ├── build.go
    │   │   │           │       ├── ci.yml
    │   │   │           │       ├── configurationpolicygroups_client.go
    │   │   │           │       ├── connectionmonitors_client.go
    │   │   │           │       ├── connectivityconfigurations_client.go
    │   │   │           │       ├── constants.go
    │   │   │           │       ├── customipprefixes_client.go
    │   │   │           │       ├── ddoscustompolicies_client.go
    │   │   │           │       ├── ddosprotectionplans_client.go
    │   │   │           │       ├── defaultsecurityrules_client.go
    │   │   │           │       ├── dscpconfiguration_client.go
    │   │   │           │       ├── expressroutecircuitauthorizations_client.go
    │   │   │           │       ├── expressroutecircuitconnections_client.go
    │   │   │           │       ├── expressroutecircuitpeerings_client.go
    │   │   │           │       ├── expressroutecircuits_client.go
    │   │   │           │       ├── expressrouteconnections_client.go
    │   │   │           │       ├── expressroutecrossconnectionpeerings_client.go
    │   │   │           │       ├── expressroutecrossconnections_client.go
    │   │   │           │       ├── expressroutegateways_client.go
    │   │   │           │       ├── expressroutelinks_client.go
    │   │   │           │       ├── expressrouteportauthorizations_client.go
    │   │   │           │       ├── expressrouteports_client.go
    │   │   │           │       ├── expressrouteportslocations_client.go
    │   │   │           │       ├── expressrouteproviderportslocation_client.go
    │   │   │           │       ├── expressrouteserviceproviders_client.go
    │   │   │           │       ├── firewallpolicies_client.go
    │   │   │           │       ├── firewallpolicyidpssignatures_client.go
    │   │   │           │       ├── firewallpolicyidpssignaturesfiltervalues_client.go
    │   │   │           │       ├── firewallpolicyidpssignaturesoverrides_client.go
    │   │   │           │       ├── firewallpolicyrulecollectiongroups_client.go
    │   │   │           │       ├── flowlogs_client.go
    │   │   │           │       ├── groups_client.go
    │   │   │           │       ├── hubroutetables_client.go
    │   │   │           │       ├── hubvirtualnetworkconnections_client.go
    │   │   │           │       ├── inboundnatrules_client.go
    │   │   │           │       ├── inboundsecurityrule_client.go
    │   │   │           │       ├── interfaceipconfigurations_client.go
    │   │   │           │       ├── interfaceloadbalancers_client.go
    │   │   │           │       ├── interfaces_client.go
    │   │   │           │       ├── interfacetapconfigurations_client.go
    │   │   │           │       ├── ipallocations_client.go
    │   │   │           │       ├── ipgroups_client.go
    │   │   │           │       ├── loadbalancerbackendaddresspools_client.go
    │   │   │           │       ├── loadbalancerfrontendipconfigurations_client.go
    │   │   │           │       ├── loadbalancerloadbalancingrules_client.go
    │   │   │           │       ├── loadbalancernetworkinterfaces_client.go
    │   │   │           │       ├── loadbalanceroutboundrules_client.go
    │   │   │           │       ├── loadbalancerprobes_client.go
    │   │   │           │       ├── loadbalancers_client.go
    │   │   │           │       ├── localnetworkgateways_client.go
    │   │   │           │       ├── management_client.go
    │   │   │           │       ├── managementgroupnetworkmanagerconnections_client.go
    │   │   │           │       ├── managercommits_client.go
    │   │   │           │       ├── managerdeploymentstatus_client.go
    │   │   │           │       ├── managers_client.go
    │   │   │           │       ├── models.go
    │   │   │           │       ├── models_serde.go
    │   │   │           │       ├── natgateways_client.go
    │   │   │           │       ├── natrules_client.go
    │   │   │           │       ├── operations_client.go
    │   │   │           │       ├── p2svpngateways_client.go
    │   │   │           │       ├── packetcaptures_client.go
    │   │   │           │       ├── peerexpressroutecircuitconnections_client.go
    │   │   │           │       ├── polymorphic_helpers.go
    │   │   │           │       ├── privatednszonegroups_client.go
    │   │   │           │       ├── privateendpoints_client.go
    │   │   │           │       ├── privatelinkservices_client.go
    │   │   │           │       ├── profiles_client.go
    │   │   │           │       ├── publicipaddresses_client.go
    │   │   │           │       ├── publicipprefixes_client.go
    │   │   │           │       ├── resourcenavigationlinks_client.go
    │   │   │           │       ├── response_types.go
    │   │   │           │       ├── routefilterrules_client.go
    │   │   │           │       ├── routefilters_client.go
    │   │   │           │       ├── routes_client.go
    │   │   │           │       ├── routetables_client.go
    │   │   │           │       ├── routingintent_client.go
    │   │   │           │       ├── scopeconnections_client.go
    │   │   │           │       ├── securityadminconfigurations_client.go
    │   │   │           │       ├── securitygroups_client.go
    │   │   │           │       ├── securitypartnerproviders_client.go
    │   │   │           │       ├── securityrules_client.go
    │   │   │           │       ├── serviceassociationlinks_client.go
    │   │   │           │       ├── serviceendpointpolicies_client.go
    │   │   │           │       ├── serviceendpointpolicydefinitions_client.go
    │   │   │           │       ├── servicetaginformation_client.go
    │   │   │           │       ├── servicetags_client.go
    │   │   │           │       ├── staticmembers_client.go
    │   │   │           │       ├── subnets_client.go
    │   │   │           │       ├── subscriptionnetworkmanagerconnections_client.go
    │   │   │           │       ├── time_rfc3339.go
    │   │   │           │       ├── usages_client.go
    │   │   │           │       ├── virtualappliances_client.go
    │   │   │           │       ├── virtualappliancesites_client.go
    │   │   │           │       ├── virtualapplianceskus_client.go
    │   │   │           │       ├── virtualhubbgpconnection_client.go
    │   │   │           │       ├── virtualhubbgpconnections_client.go
    │   │   │           │       ├── virtualhubipconfiguration_client.go
    │   │   │           │       ├── virtualhubroutetablev2s_client.go
    │   │   │           │       ├── virtualhubs_client.go
    │   │   │           │       ├── virtualnetworkgatewayconnections_client.go
    │   │   │           │       ├── virtualnetworkgatewaynatrules_client.go
    │   │   │           │       ├── virtualnetworkgateways_client.go
    │   │   │           │       ├── virtualnetworkpeerings_client.go
    │   │   │           │       ├── virtualnetworks_client.go
    │   │   │           │       ├── virtualnetworktaps_client.go
    │   │   │           │       ├── virtualrouterpeerings_client.go
    │   │   │           │       ├── virtualrouters_client.go
    │   │   │           │       ├── virtualwans_client.go
    │   │   │           │       ├── vpnconnections_client.go
    │   │   │           │       ├── vpngateways_client.go
    │   │   │           │       ├── vpnlinkconnections_client.go
    │   │   │           │       ├── vpnserverconfigurations_client.go
    │   │   │           │       ├── vpnserverconfigurationsassociatedwithvirtualwan_client.go
    │   │   │           │       ├── vpnsitelinkconnections_client.go
    │   │   │           │       ├── vpnsitelinks_client.go
    │   │   │           │       ├── vpnsites_client.go
    │   │   │           │       ├── vpnsitesconfiguration_client.go
    │   │   │           │       ├── watchers_client.go
    │   │   │           │       ├── webapplicationfirewallpolicies_client.go
    │   │   │           │       └── webcategories_client.go
    │   │   │           ├── resources/
    │   │   │           │   └── armresources/
    │   │   │           │       ├── CHANGELOG.md
    │   │   │           │       ├── LICENSE.txt
    │   │   │           │       ├── README.md
    │   │   │           │       ├── assets.json
    │   │   │           │       ├── autorest.md
    │   │   │           │       ├── build.go
    │   │   │           │       ├── ci.yml
    │   │   │           │       ├── client.go
    │   │   │           │       ├── client_factory.go
    │   │   │           │       ├── constants.go
    │   │   │           │       ├── deploymentoperations_client.go
    │   │   │           │       ├── deployments_client.go
    │   │   │           │       ├── models.go
    │   │   │           │       ├── models_serde.go
    │   │   │           │       ├── operations_client.go
    │   │   │           │       ├── providerresourcetypes_client.go
    │   │   │           │       ├── providers_client.go
    │   │   │           │       ├── resourcegroups_client.go
    │   │   │           │       ├── response_types.go
    │   │   │           │       ├── tags_client.go
    │   │   │           │       └── time_rfc3339.go
    │   │   │           └── storage/
    │   │   │               └── armstorage/
    │   │   │                   ├── CHANGELOG.md
    │   │   │                   ├── LICENSE.txt
    │   │   │                   ├── README.md
    │   │   │                   ├── accounts_client.go
    │   │   │                   ├── assets.json
    │   │   │                   ├── autorest.md
    │   │   │                   ├── blobcontainers_client.go
    │   │   │                   ├── blobinventorypolicies_client.go
    │   │   │                   ├── blobservices_client.go
    │   │   │                   ├── build.go
    │   │   │                   ├── ci.yml
    │   │   │                   ├── client_factory.go
    │   │   │                   ├── constants.go
    │   │   │                   ├── deletedaccounts_client.go
    │   │   │                   ├── encryptionscopes_client.go
    │   │   │                   ├── fileservices_client.go
    │   │   │                   ├── fileshares_client.go
    │   │   │                   ├── localusers_client.go
    │   │   │                   ├── managementpolicies_client.go
    │   │   │                   ├── models.go
    │   │   │                   ├── models_serde.go
    │   │   │                   ├── objectreplicationpolicies_client.go
    │   │   │                   ├── operations_client.go
    │   │   │                   ├── privateendpointconnections_client.go
    │   │   │                   ├── privatelinkresources_client.go
    │   │   │                   ├── queue_client.go
    │   │   │                   ├── queueservices_client.go
    │   │   │                   ├── response_types.go
    │   │   │                   ├── skus_client.go
    │   │   │                   ├── table_client.go
    │   │   │                   ├── tableservices_client.go
    │   │   │                   ├── time_rfc3339.go
    │   │   │                   └── usages_client.go
    │   │   └── go-autorest/
    │   │       ├── LICENSE
    │   │       └── autorest/
    │   │           ├── adal/
    │   │           │   ├── README.md
    │   │           │   ├── config.go
    │   │           │   ├── devicetoken.go
    │   │           │   ├── msi.go
    │   │           │   ├── msi_windows.go
    │   │           │   ├── persist.go
    │   │           │   ├── sender.go
    │   │           │   └── token.go
    │   │           ├── authorization.go
    │   │           ├── autorest.go
    │   │           ├── azure/
    │   │           │   ├── async.go
    │   │           │   ├── azure.go
    │   │           │   ├── environments.go
    │   │           │   └── rp.go
    │   │           ├── client.go
    │   │           ├── date/
    │   │           │   ├── date.go
    │   │           │   ├── time.go
    │   │           │   ├── timerfc1123.go
    │   │           │   ├── unixtime.go
    │   │           │   └── utility.go
    │   │           ├── error.go
    │   │           ├── preparer.go
    │   │           ├── responder.go
    │   │           ├── retriablerequest.go
    │   │           ├── retriablerequest_1.7.go
    │   │           ├── retriablerequest_1.8.go
    │   │           ├── sender.go
    │   │           ├── to/
    │   │           │   └── convert.go
    │   │           ├── utility.go
    │   │           ├── validation/
    │   │           │   └── validation.go
    │   │           └── version.go
    │   ├── AzureAD/
    │   │   └── microsoft-authentication-library-for-go/
    │   │       ├── LICENSE
    │   │       └── apps/
    │   │           ├── cache/
    │   │           │   └── cache.go
    │   │           ├── confidential/
    │   │           │   └── confidential.go
    │   │           ├── errors/
    │   │           │   ├── error_design.md
    │   │           │   └── errors.go
    │   │           ├── internal/
    │   │           │   ├── base/
    │   │           │   │   ├── base.go
    │   │           │   │   └── internal/
    │   │           │   │       └── storage/
    │   │           │   │           ├── items.go
    │   │           │   │           ├── partitioned_storage.go
    │   │           │   │           ├── storage.go
    │   │           │   │           └── test_serialized_cache.json
    │   │           │   ├── exported/
    │   │           │   │   └── exported.go
    │   │           │   ├── json/
    │   │           │   │   ├── design.md
    │   │           │   │   ├── json.go
    │   │           │   │   ├── mapslice.go
    │   │           │   │   ├── marshal.go
    │   │           │   │   ├── struct.go
    │   │           │   │   └── types/
    │   │           │   │       └── time/
    │   │           │   │           └── time.go
    │   │           │   ├── local/
    │   │           │   │   └── server.go
    │   │           │   ├── oauth/
    │   │           │   │   ├── oauth.go
    │   │           │   │   ├── ops/
    │   │           │   │   │   ├── accesstokens/
    │   │           │   │   │   │   ├── accesstokens.go
    │   │           │   │   │   │   ├── apptype_string.go
    │   │           │   │   │   │   └── tokens.go
    │   │           │   │   │   ├── authority/
    │   │           │   │   │   │   ├── authority.go
    │   │           │   │   │   │   └── authorizetype_string.go
    │   │           │   │   │   ├── internal/
    │   │           │   │   │   │   ├── comm/
    │   │           │   │   │   │   │   ├── comm.go
    │   │           │   │   │   │   │   └── compress.go
    │   │           │   │   │   │   └── grant/
    │   │           │   │   │   │       └── grant.go
    │   │           │   │   │   ├── ops.go
    │   │           │   │   │   └── wstrust/
    │   │           │   │   │       ├── defs/
    │   │           │   │   │       │   ├── endpointtype_string.go
    │   │           │   │   │       │   ├── mex_document_definitions.go
    │   │           │   │   │       │   ├── saml_assertion_definitions.go
    │   │           │   │   │       │   ├── version_string.go
    │   │           │   │   │       │   ├── wstrust_endpoint.go
    │   │           │   │   │       │   └── wstrust_mex_document.go
    │   │           │   │   │       └── wstrust.go
    │   │           │   │   └── resolvers.go
    │   │           │   ├── options/
    │   │           │   │   └── options.go
    │   │           │   ├── shared/
    │   │           │   │   └── shared.go
    │   │           │   └── version/
    │   │           │       └── version.go
    │   │           └── public/
    │   │               └── public.go
    │   ├── araddon/
    │   │   └── gou/
    │   │       ├── .gitignore
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── coerce.go
    │   │       ├── http.go
    │   │       ├── jsonhelper.go
    │   │       ├── log.go
    │   │       ├── log_unix.go
    │   │       ├── log_windows.go
    │   │       ├── testutil.go
    │   │       ├── throttle.go
    │   │       └── uid.go
    │   ├── aws/
    │   │   └── aws-sdk-go/
    │   │       ├── LICENSE.txt
    │   │       ├── NOTICE.txt
    │   │       ├── aws/
    │   │       │   ├── awserr/
    │   │       │   │   ├── error.go
    │   │       │   │   └── types.go
    │   │       │   ├── awsutil/
    │   │       │   │   ├── copy.go
    │   │       │   │   ├── equal.go
    │   │       │   │   ├── path_value.go
    │   │       │   │   ├── prettify.go
    │   │       │   │   └── string_value.go
    │   │       │   ├── client/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── default_retryer.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── metadata/
    │   │       │   │       └── client_info.go
    │   │       │   ├── config.go
    │   │       │   ├── context.go
    │   │       │   ├── context_1_6.go
    │   │       │   ├── context_1_7.go
    │   │       │   ├── convert_types.go
    │   │       │   ├── corehandlers/
    │   │       │   │   ├── handlers.go
    │   │       │   │   ├── param_validator.go
    │   │       │   │   └── user_agent.go
    │   │       │   ├── credentials/
    │   │       │   │   ├── chain_provider.go
    │   │       │   │   ├── credentials.go
    │   │       │   │   ├── ec2rolecreds/
    │   │       │   │   │   └── ec2_role_provider.go
    │   │       │   │   ├── endpointcreds/
    │   │       │   │   │   └── provider.go
    │   │       │   │   ├── env_provider.go
    │   │       │   │   ├── example.ini
    │   │       │   │   ├── shared_credentials_provider.go
    │   │       │   │   ├── static_provider.go
    │   │       │   │   └── stscreds/
    │   │       │   │       └── assume_role_provider.go
    │   │       │   ├── csm/
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── enable.go
    │   │       │   │   ├── metric.go
    │   │       │   │   ├── metric_chan.go
    │   │       │   │   └── reporter.go
    │   │       │   ├── defaults/
    │   │       │   │   ├── defaults.go
    │   │       │   │   └── shared_config.go
    │   │       │   ├── doc.go
    │   │       │   ├── ec2metadata/
    │   │       │   │   ├── api.go
    │   │       │   │   └── service.go
    │   │       │   ├── endpoints/
    │   │       │   │   ├── decode.go
    │   │       │   │   ├── defaults.go
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── endpoints.go
    │   │       │   │   ├── v3model.go
    │   │       │   │   └── v3model_codegen.go
    │   │       │   ├── errors.go
    │   │       │   ├── jsonvalue.go
    │   │       │   ├── logger.go
    │   │       │   ├── request/
    │   │       │   │   ├── connection_reset_error.go
    │   │       │   │   ├── connection_reset_error_other.go
    │   │       │   │   ├── handlers.go
    │   │       │   │   ├── http_request.go
    │   │       │   │   ├── offset_reader.go
    │   │       │   │   ├── request.go
    │   │       │   │   ├── request_1_7.go
    │   │       │   │   ├── request_1_8.go
    │   │       │   │   ├── request_context.go
    │   │       │   │   ├── request_context_1_6.go
    │   │       │   │   ├── request_pagination.go
    │   │       │   │   ├── retryer.go
    │   │       │   │   ├── timeout_read_closer.go
    │   │       │   │   ├── validation.go
    │   │       │   │   └── waiter.go
    │   │       │   ├── session/
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── env_config.go
    │   │       │   │   ├── session.go
    │   │       │   │   └── shared_config.go
    │   │       │   ├── signer/
    │   │       │   │   └── v4/
    │   │       │   │       ├── header_rules.go
    │   │       │   │       ├── options.go
    │   │       │   │       ├── uri_path.go
    │   │       │   │       └── v4.go
    │   │       │   ├── types.go
    │   │       │   ├── url.go
    │   │       │   ├── url_1_7.go
    │   │       │   └── version.go
    │   │       ├── internal/
    │   │       │   ├── sdkio/
    │   │       │   │   ├── io_go1.6.go
    │   │       │   │   └── io_go1.7.go
    │   │       │   ├── sdkrand/
    │   │       │   │   └── locked_source.go
    │   │       │   └── shareddefaults/
    │   │       │       └── shared_config.go
    │   │       ├── private/
    │   │       │   └── protocol/
    │   │       │       ├── ec2query/
    │   │       │       │   ├── build.go
    │   │       │       │   └── unmarshal.go
    │   │       │       ├── eventstream/
    │   │       │       │   ├── debug.go
    │   │       │       │   ├── decode.go
    │   │       │       │   ├── encode.go
    │   │       │       │   ├── error.go
    │   │       │       │   ├── eventstreamapi/
    │   │       │       │   │   ├── api.go
    │   │       │       │   │   └── error.go
    │   │       │       │   ├── header.go
    │   │       │       │   ├── header_value.go
    │   │       │       │   └── message.go
    │   │       │       ├── idempotency.go
    │   │       │       ├── json/
    │   │       │       │   └── jsonutil/
    │   │       │       │       ├── build.go
    │   │       │       │       └── unmarshal.go
    │   │       │       ├── jsonrpc/
    │   │       │       │   └── jsonrpc.go
    │   │       │       ├── jsonvalue.go
    │   │       │       ├── payload.go
    │   │       │       ├── query/
    │   │       │       │   ├── build.go
    │   │       │       │   ├── queryutil/
    │   │       │       │   │   └── queryutil.go
    │   │       │       │   ├── unmarshal.go
    │   │       │       │   └── unmarshal_error.go
    │   │       │       ├── rest/
    │   │       │       │   ├── build.go
    │   │       │       │   ├── payload.go
    │   │       │       │   └── unmarshal.go
    │   │       │       ├── restjson/
    │   │       │       │   └── restjson.go
    │   │       │       ├── restxml/
    │   │       │       │   └── restxml.go
    │   │       │       ├── unmarshal.go
    │   │       │       └── xml/
    │   │       │           └── xmlutil/
    │   │       │               ├── build.go
    │   │       │               ├── unmarshal.go
    │   │       │               └── xml_to_struct.go
    │   │       └── service/
    │   │           ├── ec2/
    │   │           │   ├── api.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── eks/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   └── service.go
    │   │           ├── elb/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── elbv2/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── iam/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── kms/
    │   │           │   ├── api.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   └── service.go
    │   │           ├── rds/
    │   │           │   ├── api.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── doc_custom.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   └── waiters.go
    │   │           ├── route53/
    │   │           │   ├── api.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── errors.go
    │   │           │   ├── service.go
    │   │           │   ├── unmarshal_error.go
    │   │           │   └── waiters.go
    │   │           ├── s3/
    │   │           │   ├── api.go
    │   │           │   ├── body_hash.go
    │   │           │   ├── bucket_location.go
    │   │           │   ├── customizations.go
    │   │           │   ├── doc.go
    │   │           │   ├── doc_custom.go
    │   │           │   ├── errors.go
    │   │           │   ├── host_style_bucket.go
    │   │           │   ├── platform_handlers.go
    │   │           │   ├── platform_handlers_go1.6.go
    │   │           │   ├── s3iface/
    │   │           │   │   └── interface.go
    │   │           │   ├── s3manager/
    │   │           │   │   ├── batch.go
    │   │           │   │   ├── bucket_region.go
    │   │           │   │   ├── doc.go
    │   │           │   │   ├── download.go
    │   │           │   │   └── upload.go
    │   │           │   ├── service.go
    │   │           │   ├── sse.go
    │   │           │   ├── statusok_error.go
    │   │           │   ├── unmarshal_error.go
    │   │           │   └── waiters.go
    │   │           └── sts/
    │   │               ├── api.go
    │   │               ├── customizations.go
    │   │               ├── doc.go
    │   │               ├── errors.go
    │   │               └── service.go
    │   ├── cloudfoundry/
    │   │   ├── bbl-state-resource/
    │   │   │   ├── LICENSE
    │   │   │   ├── NOTICE
    │   │   │   └── storage/
    │   │   │       ├── gcp.go
    │   │   │       ├── storage.go
    │   │   │       └── storage_client.go
    │   │   └── multierror/
    │   │       ├── LICENSE
    │   │       ├── NOTICE
    │   │       ├── README.md
    │   │       └── multierror.go
    │   ├── coreos/
    │   │   └── go-semver/
    │   │       ├── LICENSE
    │   │       └── semver/
    │   │           ├── semver.go
    │   │           └── sort.go
    │   ├── dgrijalva/
    │   │   └── jwt-go/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── MIGRATION_GUIDE.md
    │   │       ├── README.md
    │   │       ├── VERSION_HISTORY.md
    │   │       ├── claims.go
    │   │       ├── doc.go
    │   │       ├── ecdsa.go
    │   │       ├── ecdsa_utils.go
    │   │       ├── errors.go
    │   │       ├── hmac.go
    │   │       ├── map_claims.go
    │   │       ├── none.go
    │   │       ├── parser.go
    │   │       ├── rsa.go
    │   │       ├── rsa_pss.go
    │   │       ├── rsa_utils.go
    │   │       ├── signing_method.go
    │   │       └── token.go
    │   ├── dsnet/
    │   │   └── compress/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── api.go
    │   │       ├── bzip2/
    │   │       │   ├── bwt.go
    │   │       │   ├── common.go
    │   │       │   ├── fuzz_off.go
    │   │       │   ├── fuzz_on.go
    │   │       │   ├── internal/
    │   │       │   │   └── sais/
    │   │       │   │       ├── common.go
    │   │       │   │       ├── sais_byte.go
    │   │       │   │       └── sais_int.go
    │   │       │   ├── mtf_rle2.go
    │   │       │   ├── prefix.go
    │   │       │   ├── reader.go
    │   │       │   ├── rle1.go
    │   │       │   └── writer.go
    │   │       ├── internal/
    │   │       │   ├── common.go
    │   │       │   ├── debug.go
    │   │       │   ├── errors/
    │   │       │   │   └── errors.go
    │   │       │   ├── gofuzz.go
    │   │       │   ├── prefix/
    │   │       │   │   ├── debug.go
    │   │       │   │   ├── decoder.go
    │   │       │   │   ├── encoder.go
    │   │       │   │   ├── prefix.go
    │   │       │   │   ├── range.go
    │   │       │   │   ├── reader.go
    │   │       │   │   ├── wrap.go
    │   │       │   │   └── writer.go
    │   │       │   └── release.go
    │   │       ├── zbench.sh
    │   │       ├── zfuzz.sh
    │   │       ├── zprof.sh
    │   │       └── ztest.sh
    │   ├── fatih/
    │   │   └── color/
    │   │       ├── .travis.yml
    │   │       ├── Gopkg.toml
    │   │       ├── LICENSE.md
    │   │       ├── README.md
    │   │       ├── color.go
    │   │       └── doc.go
    │   ├── genevieve/
    │   │   └── leftovers/
    │   │       ├── LICENSE
    │   │       ├── app/
    │   │       │   ├── async_deleter.go
    │   │       │   └── logger.go
    │   │       ├── aws/
    │   │       │   ├── LOGIC.md
    │   │       │   ├── common/
    │   │       │   │   └── state.go
    │   │       │   ├── ec2/
    │   │       │   │   ├── address.go
    │   │       │   │   ├── addresses.go
    │   │       │   │   ├── image.go
    │   │       │   │   ├── images.go
    │   │       │   │   ├── instance.go
    │   │       │   │   ├── instances.go
    │   │       │   │   ├── internet_gateways.go
    │   │       │   │   ├── key_pair.go
    │   │       │   │   ├── key_pairs.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── nat_gateway.go
    │   │       │   │   ├── nat_gateways.go
    │   │       │   │   ├── network_interface.go
    │   │       │   │   ├── network_interfaces.go
    │   │       │   │   ├── resource_tags.go
    │   │       │   │   ├── route_tables.go
    │   │       │   │   ├── security_group.go
    │   │       │   │   ├── security_groups.go
    │   │       │   │   ├── snapshot.go
    │   │       │   │   ├── snapshots.go
    │   │       │   │   ├── subnets.go
    │   │       │   │   ├── tag.go
    │   │       │   │   ├── tags.go
    │   │       │   │   ├── volume.go
    │   │       │   │   ├── volumes.go
    │   │       │   │   ├── vpc.go
    │   │       │   │   └── vpcs.go
    │   │       │   ├── eks/
    │   │       │   │   ├── cluster.go
    │   │       │   │   └── clusters.go
    │   │       │   ├── elb/
    │   │       │   │   ├── load_balancer.go
    │   │       │   │   ├── load_balancers.go
    │   │       │   │   └── logger.go
    │   │       │   ├── elbv2/
    │   │       │   │   ├── load_balancer.go
    │   │       │   │   ├── load_balancers.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── target_group.go
    │   │       │   │   └── target_groups.go
    │   │       │   ├── iam/
    │   │       │   │   ├── access_keys.go
    │   │       │   │   ├── instance_profile.go
    │   │       │   │   ├── instance_profiles.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── policies.go
    │   │       │   │   ├── policy.go
    │   │       │   │   ├── role.go
    │   │       │   │   ├── role_policies.go
    │   │       │   │   ├── roles.go
    │   │       │   │   ├── server_certificate.go
    │   │       │   │   ├── server_certificates.go
    │   │       │   │   ├── user.go
    │   │       │   │   ├── user_policies.go
    │   │       │   │   └── users.go
    │   │       │   ├── kms/
    │   │       │   │   ├── alias.go
    │   │       │   │   ├── aliases.go
    │   │       │   │   ├── key.go
    │   │       │   │   ├── keys.go
    │   │       │   │   └── logger.go
    │   │       │   ├── leftovers.go
    │   │       │   ├── logger.go
    │   │       │   ├── rds/
    │   │       │   │   ├── db_cluster.go
    │   │       │   │   ├── db_clusters.go
    │   │       │   │   ├── db_instance.go
    │   │       │   │   ├── db_instances.go
    │   │       │   │   ├── db_subnet_group.go
    │   │       │   │   ├── db_subnet_groups.go
    │   │       │   │   └── logger.go
    │   │       │   ├── route53/
    │   │       │   │   ├── health_check.go
    │   │       │   │   ├── health_checks.go
    │   │       │   │   ├── hosted_zone.go
    │   │       │   │   ├── hosted_zones.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── record_sets.go
    │   │       │   └── s3/
    │   │       │       ├── bucket.go
    │   │       │       ├── bucket_manager.go
    │   │       │       ├── buckets.go
    │   │       │       └── logger.go
    │   │       ├── azure/
    │   │       │   ├── group.go
    │   │       │   ├── groups.go
    │   │       │   ├── leftovers.go
    │   │       │   └── logger.go
    │   │       ├── common/
    │   │       │   └── deletable.go
    │   │       ├── gcp/
    │   │       │   ├── common/
    │   │       │   │   ├── logger.go
    │   │       │   │   └── state.go
    │   │       │   ├── compute/
    │   │       │   │   ├── address.go
    │   │       │   │   ├── addresses.go
    │   │       │   │   ├── backend_service.go
    │   │       │   │   ├── backend_services.go
    │   │       │   │   ├── client.go
    │   │       │   │   ├── disk.go
    │   │       │   │   ├── disks.go
    │   │       │   │   ├── firewall.go
    │   │       │   │   ├── firewalls.go
    │   │       │   │   ├── forwarding_rule.go
    │   │       │   │   ├── forwarding_rules.go
    │   │       │   │   ├── global_address.go
    │   │       │   │   ├── global_addresses.go
    │   │       │   │   ├── global_forwarding_rule.go
    │   │       │   │   ├── global_forwarding_rules.go
    │   │       │   │   ├── global_health_check.go
    │   │       │   │   ├── global_health_checks.go
    │   │       │   │   ├── http_health_check.go
    │   │       │   │   ├── http_health_checks.go
    │   │       │   │   ├── https_health_check.go
    │   │       │   │   ├── https_health_checks.go
    │   │       │   │   ├── image.go
    │   │       │   │   ├── images.go
    │   │       │   │   ├── instance.go
    │   │       │   │   ├── instance_group.go
    │   │       │   │   ├── instance_group_manager.go
    │   │       │   │   ├── instance_group_managers.go
    │   │       │   │   ├── instance_groups.go
    │   │       │   │   ├── instance_template.go
    │   │       │   │   ├── instance_templates.go
    │   │       │   │   ├── instances.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── network.go
    │   │       │   │   ├── networks.go
    │   │       │   │   ├── operation_error.go
    │   │       │   │   ├── operation_waiter.go
    │   │       │   │   ├── route.go
    │   │       │   │   ├── router.go
    │   │       │   │   ├── routers.go
    │   │       │   │   ├── routes.go
    │   │       │   │   ├── ssl_certificate.go
    │   │       │   │   ├── ssl_certificates.go
    │   │       │   │   ├── subnetwork.go
    │   │       │   │   ├── subnetworks.go
    │   │       │   │   ├── target_http_proxies.go
    │   │       │   │   ├── target_http_proxy.go
    │   │       │   │   ├── target_https_proxies.go
    │   │       │   │   ├── target_https_proxy.go
    │   │       │   │   ├── target_pool.go
    │   │       │   │   ├── target_pools.go
    │   │       │   │   ├── target_vpn_gateway.go
    │   │       │   │   ├── target_vpn_gateways.go
    │   │       │   │   ├── url_map.go
    │   │       │   │   ├── url_maps.go
    │   │       │   │   ├── vpn_tunnel.go
    │   │       │   │   └── vpn_tunnels.go
    │   │       │   ├── container/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── cluster.go
    │   │       │   │   ├── clusters.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── operation_waiter.go
    │   │       │   ├── dns/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── managed_zone.go
    │   │       │   │   ├── managed_zones.go
    │   │       │   │   └── record_sets.go
    │   │       │   ├── iam/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── logger.go
    │   │       │   │   ├── mutexkv.go
    │   │       │   │   ├── service_account.go
    │   │       │   │   └── service_accounts.go
    │   │       │   ├── leftovers.go
    │   │       │   ├── logger.go
    │   │       │   ├── sql/
    │   │       │   │   ├── client.go
    │   │       │   │   ├── instance.go
    │   │       │   │   ├── instances.go
    │   │       │   │   ├── logger.go
    │   │       │   │   └── operation_waiter.go
    │   │       │   └── storage/
    │   │       │       ├── bucket.go
    │   │       │       ├── buckets.go
    │   │       │       ├── client.go
    │   │       │       └── logger.go
    │   │       └── vsphere/
    │   │           ├── client.go
    │   │           ├── folder.go
    │   │           ├── folders.go
    │   │           ├── helpers.go
    │   │           ├── leftovers.go
    │   │           ├── logger.go
    │   │           └── virtual_machine.go
    │   ├── go-ini/
    │   │   └── ini/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── error.go
    │   │       ├── file.go
    │   │       ├── ini.go
    │   │       ├── key.go
    │   │       ├── parser.go
    │   │       ├── section.go
    │   │       └── struct.go
    │   ├── go-logr/
    │   │   └── logr/
    │   │       ├── .golangci.yaml
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── discard.go
    │   │       ├── funcr/
    │   │       │   └── funcr.go
    │   │       └── logr.go
    │   ├── golang/
    │   │   ├── protobuf/
    │   │   │   ├── AUTHORS
    │   │   │   ├── CONTRIBUTORS
    │   │   │   ├── LICENSE
    │   │   │   ├── proto/
    │   │   │   │   ├── buffer.go
    │   │   │   │   ├── defaults.go
    │   │   │   │   ├── deprecated.go
    │   │   │   │   ├── discard.go
    │   │   │   │   ├── extensions.go
    │   │   │   │   ├── properties.go
    │   │   │   │   ├── proto.go
    │   │   │   │   ├── registry.go
    │   │   │   │   ├── text_decode.go
    │   │   │   │   ├── text_encode.go
    │   │   │   │   ├── wire.go
    │   │   │   │   └── wrappers.go
    │   │   │   ├── protoc-gen-go/
    │   │   │   │   └── descriptor/
    │   │   │   │       └── descriptor.pb.go
    │   │   │   └── ptypes/
    │   │   │       ├── any/
    │   │   │       │   └── any.pb.go
    │   │   │       ├── any.go
    │   │   │       ├── doc.go
    │   │   │       ├── duration/
    │   │   │       │   └── duration.pb.go
    │   │   │       ├── duration.go
    │   │   │       ├── timestamp/
    │   │   │       │   └── timestamp.pb.go
    │   │   │       └── timestamp.go
    │   │   └── snappy/
    │   │       ├── .gitignore
    │   │       ├── AUTHORS
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README
    │   │       ├── decode.go
    │   │       ├── decode_amd64.go
    │   │       ├── decode_amd64.s
    │   │       ├── decode_other.go
    │   │       ├── encode.go
    │   │       ├── encode_amd64.go
    │   │       ├── encode_amd64.s
    │   │       ├── encode_other.go
    │   │       └── snappy.go
    │   ├── golang-jwt/
    │   │   └── jwt/
    │   │       └── v4/
    │   │           ├── .gitignore
    │   │           ├── LICENSE
    │   │           ├── MIGRATION_GUIDE.md
    │   │           ├── README.md
    │   │           ├── SECURITY.md
    │   │           ├── VERSION_HISTORY.md
    │   │           ├── claims.go
    │   │           ├── doc.go
    │   │           ├── ecdsa.go
    │   │           ├── ecdsa_utils.go
    │   │           ├── ed25519.go
    │   │           ├── ed25519_utils.go
    │   │           ├── errors.go
    │   │           ├── hmac.go
    │   │           ├── map_claims.go
    │   │           ├── none.go
    │   │           ├── parser.go
    │   │           ├── parser_option.go
    │   │           ├── rsa.go
    │   │           ├── rsa_pss.go
    │   │           ├── rsa_utils.go
    │   │           ├── signing_method.go
    │   │           ├── staticcheck.conf
    │   │           ├── token.go
    │   │           └── types.go
    │   ├── google/
    │   │   ├── go-cmp/
    │   │   │   ├── LICENSE
    │   │   │   └── cmp/
    │   │   │       ├── compare.go
    │   │   │       ├── export.go
    │   │   │       ├── internal/
    │   │   │       │   ├── diff/
    │   │   │       │   │   ├── debug_disable.go
    │   │   │       │   │   ├── debug_enable.go
    │   │   │       │   │   └── diff.go
    │   │   │       │   ├── flags/
    │   │   │       │   │   └── flags.go
    │   │   │       │   ├── function/
    │   │   │       │   │   └── func.go
    │   │   │       │   └── value/
    │   │   │       │       ├── name.go
    │   │   │       │       ├── pointer.go
    │   │   │       │       └── sort.go
    │   │   │       ├── options.go
    │   │   │       ├── path.go
    │   │   │       ├── report.go
    │   │   │       ├── report_compare.go
    │   │   │       ├── report_references.go
    │   │   │       ├── report_reflect.go
    │   │   │       ├── report_slices.go
    │   │   │       ├── report_text.go
    │   │   │       └── report_value.go
    │   │   ├── pprof/
    │   │   │   ├── AUTHORS
    │   │   │   ├── CONTRIBUTORS
    │   │   │   ├── LICENSE
    │   │   │   └── profile/
    │   │   │       ├── encode.go
    │   │   │       ├── filter.go
    │   │   │       ├── index.go
    │   │   │       ├── legacy_java_profile.go
    │   │   │       ├── legacy_profile.go
    │   │   │       ├── merge.go
    │   │   │       ├── profile.go
    │   │   │       ├── proto.go
    │   │   │       └── prune.go
    │   │   └── uuid/
    │   │       ├── .travis.yml
    │   │       ├── CONTRIBUTING.md
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── dce.go
    │   │       ├── doc.go
    │   │       ├── hash.go
    │   │       ├── marshal.go
    │   │       ├── node.go
    │   │       ├── node_js.go
    │   │       ├── node_net.go
    │   │       ├── null.go
    │   │       ├── sql.go
    │   │       ├── time.go
    │   │       ├── util.go
    │   │       ├── uuid.go
    │   │       ├── version1.go
    │   │       └── version4.go
    │   ├── googleapis/
    │   │   └── gax-go/
    │   │       └── v2/
    │   │           ├── LICENSE
    │   │           ├── call_option.go
    │   │           ├── gax.go
    │   │           ├── header.go
    │   │           └── invoke.go
    │   ├── hashicorp/
    │   │   ├── errwrap/
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   └── errwrap.go
    │   │   └── go-multierror/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── append.go
    │   │       ├── flatten.go
    │   │       ├── format.go
    │   │       ├── multierror.go
    │   │       ├── prefix.go
    │   │       └── sort.go
    │   ├── jessevdk/
    │   │   └── go-flags/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── arg.go
    │   │       ├── check_crosscompile.sh
    │   │       ├── closest.go
    │   │       ├── command.go
    │   │       ├── completion.go
    │   │       ├── convert.go
    │   │       ├── error.go
    │   │       ├── flags.go
    │   │       ├── group.go
    │   │       ├── help.go
    │   │       ├── ini.go
    │   │       ├── man.go
    │   │       ├── multitag.go
    │   │       ├── option.go
    │   │       ├── optstyle_other.go
    │   │       ├── optstyle_windows.go
    │   │       ├── parser.go
    │   │       ├── termsize.go
    │   │       ├── termsize_nosysioctl.go
    │   │       ├── tiocgwinsz_bsdish.go
    │   │       ├── tiocgwinsz_linux.go
    │   │       └── tiocgwinsz_other.go
    │   ├── jmespath/
    │   │   └── go-jmespath/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── Makefile
    │   │       ├── README.md
    │   │       ├── api.go
    │   │       ├── astnodetype_string.go
    │   │       ├── functions.go
    │   │       ├── interpreter.go
    │   │       ├── lexer.go
    │   │       ├── parser.go
    │   │       ├── toktype_string.go
    │   │       └── util.go
    │   ├── kr/
    │   │   └── pty/
    │   │       ├── .gitignore
    │   │       ├── License
    │   │       ├── README.md
    │   │       ├── doc.go
    │   │       ├── ioctl.go
    │   │       ├── ioctl_bsd.go
    │   │       ├── mktypes.bash
    │   │       ├── pty_darwin.go
    │   │       ├── pty_dragonfly.go
    │   │       ├── pty_freebsd.go
    │   │       ├── pty_linux.go
    │   │       ├── pty_openbsd.go
    │   │       ├── pty_unsupported.go
    │   │       ├── run.go
    │   │       ├── util.go
    │   │       ├── ztypes_386.go
    │   │       ├── ztypes_amd64.go
    │   │       ├── ztypes_arm.go
    │   │       ├── ztypes_arm64.go
    │   │       ├── ztypes_dragonfly_amd64.go
    │   │       ├── ztypes_freebsd_386.go
    │   │       ├── ztypes_freebsd_amd64.go
    │   │       ├── ztypes_freebsd_arm.go
    │   │       ├── ztypes_mipsx.go
    │   │       ├── ztypes_openbsd_386.go
    │   │       ├── ztypes_openbsd_amd64.go
    │   │       ├── ztypes_ppc64.go
    │   │       ├── ztypes_ppc64le.go
    │   │       └── ztypes_s390x.go
    │   ├── kylelemons/
    │   │   └── godebug/
    │   │       ├── LICENSE
    │   │       ├── diff/
    │   │       │   └── diff.go
    │   │       └── pretty/
    │   │           ├── .gitignore
    │   │           ├── doc.go
    │   │           ├── public.go
    │   │           ├── reflect.go
    │   │           └── structure.go
    │   ├── lytics/
    │   │   └── cloudstorage/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── TODO.md
    │   │       ├── awss3/
    │   │       │   └── store.go
    │   │       ├── cachecleaner.go
    │   │       ├── codecov.yml
    │   │       ├── csbufio/
    │   │       │   ├── reader.go
    │   │       │   └── writer.go
    │   │       ├── doc.go
    │   │       ├── file_helper.go
    │   │       ├── go.test.sh
    │   │       ├── iterator.go
    │   │       ├── query.go
    │   │       ├── registry.go
    │   │       ├── store.go
    │   │       ├── test.sh
    │   │       └── updatepkgs.sh
    │   ├── mattn/
    │   │   ├── go-colorable/
    │   │   │   ├── .travis.yml
    │   │   │   ├── LICENSE
    │   │   │   ├── README.md
    │   │   │   ├── colorable_appengine.go
    │   │   │   ├── colorable_others.go
    │   │   │   ├── colorable_windows.go
    │   │   │   └── noncolorable.go
    │   │   └── go-isatty/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── doc.go
    │   │       ├── isatty_appengine.go
    │   │       ├── isatty_bsd.go
    │   │       ├── isatty_linux.go
    │   │       ├── isatty_linux_ppc64x.go
    │   │       ├── isatty_others.go
    │   │       ├── isatty_solaris.go
    │   │       └── isatty_windows.go
    │   ├── mholt/
    │   │   └── archiver/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── appveyor.yml
    │   │       ├── archiver.go
    │   │       ├── build.bash
    │   │       ├── rar.go
    │   │       ├── tar.go
    │   │       ├── tarbz2.go
    │   │       ├── targz.go
    │   │       ├── tarlz4.go
    │   │       ├── tarsz.go
    │   │       ├── tarxz.go
    │   │       └── zip.go
    │   ├── mitchellh/
    │   │   └── go-homedir/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       └── homedir.go
    │   ├── nu7hatch/
    │   │   └── gouuid/
    │   │       ├── .gitignore
    │   │       ├── COPYING
    │   │       ├── README.md
    │   │       └── uuid.go
    │   ├── nwaples/
    │   │   └── rardecode/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── archive.go
    │   │       ├── archive15.go
    │   │       ├── archive50.go
    │   │       ├── bit_reader.go
    │   │       ├── decode29.go
    │   │       ├── decode29_lz.go
    │   │       ├── decode29_ppm.go
    │   │       ├── decode50.go
    │   │       ├── decode_reader.go
    │   │       ├── decrypt_reader.go
    │   │       ├── filters.go
    │   │       ├── huffman.go
    │   │       ├── ppm_model.go
    │   │       ├── reader.go
    │   │       └── vm.go
    │   ├── onsi/
    │   │   ├── ginkgo/
    │   │   │   └── v2/
    │   │   │       ├── .gitignore
    │   │   │       ├── CHANGELOG.md
    │   │   │       ├── CONTRIBUTING.md
    │   │   │       ├── LICENSE
    │   │   │       ├── README.md
    │   │   │       ├── RELEASING.md
    │   │   │       ├── config/
    │   │   │       │   └── deprecated.go
    │   │   │       ├── core_dsl.go
    │   │   │       ├── decorator_dsl.go
    │   │   │       ├── deprecated_dsl.go
    │   │   │       ├── formatter/
    │   │   │       │   ├── colorable_others.go
    │   │   │       │   ├── colorable_windows.go
    │   │   │       │   └── formatter.go
    │   │   │       ├── ginkgo/
    │   │   │       │   ├── build/
    │   │   │       │   │   └── build_command.go
    │   │   │       │   ├── command/
    │   │   │       │   │   ├── abort.go
    │   │   │       │   │   ├── command.go
    │   │   │       │   │   └── program.go
    │   │   │       │   ├── generators/
    │   │   │       │   │   ├── boostrap_templates.go
    │   │   │       │   │   ├── bootstrap_command.go
    │   │   │       │   │   ├── generate_command.go
    │   │   │       │   │   ├── generate_templates.go
    │   │   │       │   │   └── generators_common.go
    │   │   │       │   ├── internal/
    │   │   │       │   │   ├── compile.go
    │   │   │       │   │   ├── profiles_and_reports.go
    │   │   │       │   │   ├── run.go
    │   │   │       │   │   ├── test_suite.go
    │   │   │       │   │   ├── utils.go
    │   │   │       │   │   └── verify_version.go
    │   │   │       │   ├── labels/
    │   │   │       │   │   └── labels_command.go
    │   │   │       │   ├── main.go
    │   │   │       │   ├── outline/
    │   │   │       │   │   ├── ginkgo.go
    │   │   │       │   │   ├── import.go
    │   │   │       │   │   ├── outline.go
    │   │   │       │   │   └── outline_command.go
    │   │   │       │   ├── run/
    │   │   │       │   │   └── run_command.go
    │   │   │       │   ├── unfocus/
    │   │   │       │   │   └── unfocus_command.go
    │   │   │       │   └── watch/
    │   │   │       │       ├── delta.go
    │   │   │       │       ├── delta_tracker.go
    │   │   │       │       ├── dependencies.go
    │   │   │       │       ├── package_hash.go
    │   │   │       │       ├── package_hashes.go
    │   │   │       │       ├── suite.go
    │   │   │       │       └── watch_command.go
    │   │   │       ├── ginkgo_cli_dependencies.go
    │   │   │       ├── ginkgo_t_dsl.go
    │   │   │       ├── internal/
    │   │   │       │   ├── counter.go
    │   │   │       │   ├── failer.go
    │   │   │       │   ├── focus.go
    │   │   │       │   ├── global/
    │   │   │       │   │   └── init.go
    │   │   │       │   ├── group.go
    │   │   │       │   ├── interrupt_handler/
    │   │   │       │   │   ├── interrupt_handler.go
    │   │   │       │   │   ├── sigquit_swallower_unix.go
    │   │   │       │   │   └── sigquit_swallower_windows.go
    │   │   │       │   ├── node.go
    │   │   │       │   ├── ordering.go
    │   │   │       │   ├── output_interceptor.go
    │   │   │       │   ├── output_interceptor_unix.go
    │   │   │       │   ├── output_interceptor_win.go
    │   │   │       │   ├── parallel_support/
    │   │   │       │   │   ├── client_server.go
    │   │   │       │   │   ├── http_client.go
    │   │   │       │   │   ├── http_server.go
    │   │   │       │   │   ├── rpc_client.go
    │   │   │       │   │   ├── rpc_server.go
    │   │   │       │   │   └── server_handler.go
    │   │   │       │   ├── progress_report.go
    │   │   │       │   ├── progress_report_bsd.go
    │   │   │       │   ├── progress_report_unix.go
    │   │   │       │   ├── progress_report_win.go
    │   │   │       │   ├── progress_reporter_manager.go
    │   │   │       │   ├── report_entry.go
    │   │   │       │   ├── spec.go
    │   │   │       │   ├── spec_context.go
    │   │   │       │   ├── suite.go
    │   │   │       │   ├── testingtproxy/
    │   │   │       │   │   └── testing_t_proxy.go
    │   │   │       │   ├── tree.go
    │   │   │       │   └── writer.go
    │   │   │       ├── reporters/
    │   │   │       │   ├── default_reporter.go
    │   │   │       │   ├── deprecated_reporter.go
    │   │   │       │   ├── json_report.go
    │   │   │       │   ├── junit_report.go
    │   │   │       │   ├── reporter.go
    │   │   │       │   └── teamcity_report.go
    │   │   │       ├── reporting_dsl.go
    │   │   │       ├── table_dsl.go
    │   │   │       └── types/
    │   │   │           ├── code_location.go
    │   │   │           ├── config.go
    │   │   │           ├── deprecated_types.go
    │   │   │           ├── deprecation_support.go
    │   │   │           ├── enum_support.go
    │   │   │           ├── errors.go
    │   │   │           ├── file_filter.go
    │   │   │           ├── flags.go
    │   │   │           ├── label_filter.go
    │   │   │           ├── report_entry.go
    │   │   │           ├── types.go
    │   │   │           └── version.go
    │   │   └── gomega/
    │   │       ├── .gitignore
    │   │       ├── CHANGELOG.md
    │   │       ├── CONTRIBUTING.md
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── RELEASING.md
    │   │       ├── format/
    │   │       │   └── format.go
    │   │       ├── gbytes/
    │   │       │   ├── buffer.go
    │   │       │   ├── io_wrappers.go
    │   │       │   └── say_matcher.go
    │   │       ├── gexec/
    │   │       │   ├── build.go
    │   │       │   ├── exit_matcher.go
    │   │       │   ├── prefixed_writer.go
    │   │       │   └── session.go
    │   │       ├── gomega_dsl.go
    │   │       ├── internal/
    │   │       │   ├── assertion.go
    │   │       │   ├── async_assertion.go
    │   │       │   ├── duration_bundle.go
    │   │       │   ├── gomega.go
    │   │       │   ├── gutil/
    │   │       │   │   ├── post_ioutil.go
    │   │       │   │   └── using_ioutil.go
    │   │       │   ├── polling_signal_error.go
    │   │       │   └── vetoptdesc.go
    │   │       ├── matchers/
    │   │       │   ├── and.go
    │   │       │   ├── assignable_to_type_of_matcher.go
    │   │       │   ├── attributes_slice.go
    │   │       │   ├── be_a_directory.go
    │   │       │   ├── be_a_regular_file.go
    │   │       │   ├── be_an_existing_file.go
    │   │       │   ├── be_closed_matcher.go
    │   │       │   ├── be_comparable_to_matcher.go
    │   │       │   ├── be_element_of_matcher.go
    │   │       │   ├── be_empty_matcher.go
    │   │       │   ├── be_equivalent_to_matcher.go
    │   │       │   ├── be_false_matcher.go
    │   │       │   ├── be_identical_to.go
    │   │       │   ├── be_key_of_matcher.go
    │   │       │   ├── be_nil_matcher.go
    │   │       │   ├── be_numerically_matcher.go
    │   │       │   ├── be_sent_matcher.go
    │   │       │   ├── be_temporally_matcher.go
    │   │       │   ├── be_true_matcher.go
    │   │       │   ├── be_zero_matcher.go
    │   │       │   ├── consist_of.go
    │   │       │   ├── contain_element_matcher.go
    │   │       │   ├── contain_elements_matcher.go
    │   │       │   ├── contain_substring_matcher.go
    │   │       │   ├── equal_matcher.go
    │   │       │   ├── have_cap_matcher.go
    │   │       │   ├── have_each_matcher.go
    │   │       │   ├── have_exact_elements.go
    │   │       │   ├── have_existing_field_matcher.go
    │   │       │   ├── have_field.go
    │   │       │   ├── have_http_body_matcher.go
    │   │       │   ├── have_http_header_with_value_matcher.go
    │   │       │   ├── have_http_status_matcher.go
    │   │       │   ├── have_key_matcher.go
    │   │       │   ├── have_key_with_value_matcher.go
    │   │       │   ├── have_len_matcher.go
    │   │       │   ├── have_occurred_matcher.go
    │   │       │   ├── have_prefix_matcher.go
    │   │       │   ├── have_suffix_matcher.go
    │   │       │   ├── have_value.go
    │   │       │   ├── match_error_matcher.go
    │   │       │   ├── match_json_matcher.go
    │   │       │   ├── match_regexp_matcher.go
    │   │       │   ├── match_xml_matcher.go
    │   │       │   ├── match_yaml_matcher.go
    │   │       │   ├── not.go
    │   │       │   ├── or.go
    │   │       │   ├── panic_matcher.go
    │   │       │   ├── receive_matcher.go
    │   │       │   ├── satisfy_matcher.go
    │   │       │   ├── semi_structured_data_support.go
    │   │       │   ├── succeed_matcher.go
    │   │       │   ├── support/
    │   │       │   │   └── goraph/
    │   │       │   │       ├── bipartitegraph/
    │   │       │   │       │   ├── bipartitegraph.go
    │   │       │   │       │   └── bipartitegraphmatching.go
    │   │       │   │       ├── edge/
    │   │       │   │       │   └── edge.go
    │   │       │   │       ├── node/
    │   │       │   │       │   └── node.go
    │   │       │   │       └── util/
    │   │       │   │           └── util.go
    │   │       │   ├── type_support.go
    │   │       │   └── with_transform.go
    │   │       ├── matchers.go
    │   │       └── types/
    │   │           └── types.go
    │   ├── pborman/
    │   │   └── uuid/
    │   │       ├── .travis.yml
    │   │       ├── CONTRIBUTING.md
    │   │       ├── CONTRIBUTORS
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── dce.go
    │   │       ├── doc.go
    │   │       ├── hash.go
    │   │       ├── marshal.go
    │   │       ├── node.go
    │   │       ├── sql.go
    │   │       ├── time.go
    │   │       ├── util.go
    │   │       ├── uuid.go
    │   │       ├── version1.go
    │   │       └── version4.go
    │   ├── pierrec/
    │   │   └── lz4/
    │   │       ├── .gitignore
    │   │       ├── .travis.yml
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── block.go
    │   │       ├── debug.go
    │   │       ├── debug_stub.go
    │   │       ├── internal/
    │   │       │   └── xxh32/
    │   │       │       └── xxh32zero.go
    │   │       ├── lz4.go
    │   │       ├── lz4_go1.10.go
    │   │       ├── lz4_notgo1.10.go
    │   │       ├── reader.go
    │   │       └── writer.go
    │   ├── pkg/
    │   │   └── browser/
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── browser.go
    │   │       ├── browser_darwin.go
    │   │       ├── browser_freebsd.go
    │   │       ├── browser_linux.go
    │   │       ├── browser_netbsd.go
    │   │       ├── browser_openbsd.go
    │   │       ├── browser_unsupported.go
    │   │       └── browser_windows.go
    │   ├── pmezard/
    │   │   └── go-difflib/
    │   │       ├── LICENSE
    │   │       └── difflib/
    │   │           └── difflib.go
    │   ├── spf13/
    │   │   └── afero/
    │   │       ├── .travis.yml
    │   │       ├── LICENSE.txt
    │   │       ├── README.md
    │   │       ├── afero.go
    │   │       ├── appveyor.yml
    │   │       ├── basepath.go
    │   │       ├── cacheOnReadFs.go
    │   │       ├── const_bsds.go
    │   │       ├── const_win_unix.go
    │   │       ├── copyOnWriteFs.go
    │   │       ├── httpFs.go
    │   │       ├── ioutil.go
    │   │       ├── lstater.go
    │   │       ├── match.go
    │   │       ├── mem/
    │   │       │   ├── dir.go
    │   │       │   ├── dirmap.go
    │   │       │   └── file.go
    │   │       ├── memmap.go
    │   │       ├── os.go
    │   │       ├── path.go
    │   │       ├── readonlyfs.go
    │   │       ├── regexpfs.go
    │   │       ├── unionFile.go
    │   │       └── util.go
    │   ├── ulikunitz/
    │   │   └── xz/
    │   │       ├── .gitignore
    │   │       ├── LICENSE
    │   │       ├── README.md
    │   │       ├── SECURITY.md
    │   │       ├── TODO.md
    │   │       ├── bits.go
    │   │       ├── crc.go
    │   │       ├── format.go
    │   │       ├── fox-check-none.xz
    │   │       ├── fox.xz
    │   │       ├── internal/
    │   │       │   ├── hash/
    │   │       │   │   ├── cyclic_poly.go
    │   │       │   │   ├── doc.go
    │   │       │   │   ├── rabin_karp.go
    │   │       │   │   └── roller.go
    │   │       │   └── xlog/
    │   │       │       └── xlog.go
    │   │       ├── lzma/
    │   │       │   ├── bintree.go
    │   │       │   ├── bitops.go
    │   │       │   ├── breader.go
    │   │       │   ├── buffer.go
    │   │       │   ├── bytewriter.go
    │   │       │   ├── decoder.go
    │   │       │   ├── decoderdict.go
    │   │       │   ├── directcodec.go
    │   │       │   ├── distcodec.go
    │   │       │   ├── encoder.go
    │   │       │   ├── encoderdict.go
    │   │       │   ├── fox.lzma
    │   │       │   ├── hashtable.go
    │   │       │   ├── header.go
    │   │       │   ├── header2.go
    │   │       │   ├── lengthcodec.go
    │   │       │   ├── literalcodec.go
    │   │       │   ├── matchalgorithm.go
    │   │       │   ├── operation.go
    │   │       │   ├── prob.go
    │   │       │   ├── properties.go
    │   │       │   ├── rangecodec.go
    │   │       │   ├── reader.go
    │   │       │   ├── reader2.go
    │   │       │   ├── state.go
    │   │       │   ├── treecodecs.go
    │   │       │   ├── writer.go
    │   │       │   └── writer2.go
    │   │       ├── lzmafilter.go
    │   │       ├── make-docs
    │   │       ├── none-check.go
    │   │       ├── reader.go
    │   │       └── writer.go
    │   └── vmware/
    │       └── govmomi/
    │           ├── .gitignore
    │           ├── .goreleaser.yml
    │           ├── .mailmap
    │           ├── .travis.yml
    │           ├── CHANGELOG.md
    │           ├── CONTRIBUTING.md
    │           ├── CONTRIBUTORS
    │           ├── Dockerfile
    │           ├── Gopkg.toml
    │           ├── LICENSE.txt
    │           ├── Makefile
    │           ├── README.md
    │           ├── client.go
    │           ├── find/
    │           │   ├── doc.go
    │           │   ├── error.go
    │           │   ├── finder.go
    │           │   └── recurser.go
    │           ├── list/
    │           │   ├── lister.go
    │           │   └── path.go
    │           ├── nfc/
    │           │   ├── lease.go
    │           │   └── lease_updater.go
    │           ├── object/
    │           │   ├── authorization_manager.go
    │           │   ├── authorization_manager_internal.go
    │           │   ├── cluster_compute_resource.go
    │           │   ├── common.go
    │           │   ├── compute_resource.go
    │           │   ├── custom_fields_manager.go
    │           │   ├── customization_spec_manager.go
    │           │   ├── datacenter.go
    │           │   ├── datastore.go
    │           │   ├── datastore_file.go
    │           │   ├── datastore_file_manager.go
    │           │   ├── datastore_path.go
    │           │   ├── diagnostic_log.go
    │           │   ├── diagnostic_manager.go
    │           │   ├── distributed_virtual_portgroup.go
    │           │   ├── distributed_virtual_switch.go
    │           │   ├── extension_manager.go
    │           │   ├── file_manager.go
    │           │   ├── folder.go
    │           │   ├── history_collector.go
    │           │   ├── host_account_manager.go
    │           │   ├── host_certificate_info.go
    │           │   ├── host_certificate_manager.go
    │           │   ├── host_config_manager.go
    │           │   ├── host_datastore_browser.go
    │           │   ├── host_datastore_system.go
    │           │   ├── host_date_time_system.go
    │           │   ├── host_firewall_system.go
    │           │   ├── host_network_system.go
    │           │   ├── host_service_system.go
    │           │   ├── host_storage_system.go
    │           │   ├── host_system.go
    │           │   ├── host_virtual_nic_manager.go
    │           │   ├── host_vsan_internal_system.go
    │           │   ├── host_vsan_system.go
    │           │   ├── namespace_manager.go
    │           │   ├── network.go
    │           │   ├── network_reference.go
    │           │   ├── opaque_network.go
    │           │   ├── option_manager.go
    │           │   ├── resource_pool.go
    │           │   ├── search_index.go
    │           │   ├── storage_pod.go
    │           │   ├── storage_resource_manager.go
    │           │   ├── task.go
    │           │   ├── types.go
    │           │   ├── virtual_app.go
    │           │   ├── virtual_device_list.go
    │           │   ├── virtual_disk_manager.go
    │           │   ├── virtual_disk_manager_internal.go
    │           │   ├── virtual_machine.go
    │           │   └── vmware_distributed_virtual_switch.go
    │           ├── property/
    │           │   ├── collector.go
    │           │   ├── filter.go
    │           │   └── wait.go
    │           ├── session/
    │           │   ├── keep_alive.go
    │           │   └── manager.go
    │           ├── task/
    │           │   ├── error.go
    │           │   └── wait.go
    │           └── vim25/
    │               ├── client.go
    │               ├── debug/
    │               │   └── debug.go
    │               ├── doc.go
    │               ├── methods/
    │               │   ├── methods.go
    │               │   └── service_content.go
    │               ├── mo/
    │               │   ├── ancestors.go
    │               │   ├── entity.go
    │               │   ├── extra.go
    │               │   ├── mo.go
    │               │   ├── reference.go
    │               │   ├── registry.go
    │               │   ├── retrieve.go
    │               │   └── type_info.go
    │               ├── progress/
    │               │   ├── aggregator.go
    │               │   ├── doc.go
    │               │   ├── prefix.go
    │               │   ├── reader.go
    │               │   ├── report.go
    │               │   ├── scale.go
    │               │   ├── sinker.go
    │               │   └── tee.go
    │               ├── retry.go
    │               ├── soap/
    │               │   ├── client.go
    │               │   ├── debug.go
    │               │   ├── error.go
    │               │   └── soap.go
    │               ├── types/
    │               │   ├── base.go
    │               │   ├── enum.go
    │               │   ├── fault.go
    │               │   ├── helpers.go
    │               │   ├── if.go
    │               │   ├── registry.go
    │               │   └── types.go
    │               └── xml/
    │                   ├── LICENSE
    │                   ├── extras.go
    │                   ├── marshal.go
    │                   ├── read.go
    │                   ├── typeinfo.go
    │                   └── xml.go
    ├── go.opencensus.io/
    │   ├── .gitignore
    │   ├── .travis.yml
    │   ├── AUTHORS
    │   ├── CONTRIBUTING.md
    │   ├── Gopkg.toml
    │   ├── LICENSE
    │   ├── README.md
    │   ├── appveyor.yml
    │   ├── exemplar/
    │   │   └── exemplar.go
    │   ├── internal/
    │   │   ├── internal.go
    │   │   ├── sanitize.go
    │   │   ├── tagencoding/
    │   │   │   └── tagencoding.go
    │   │   └── traceinternals.go
    │   ├── opencensus.go
    │   ├── plugin/
    │   │   └── ochttp/
    │   │       ├── client.go
    │   │       ├── client_stats.go
    │   │       ├── doc.go
    │   │       ├── propagation/
    │   │       │   └── b3/
    │   │       │       └── b3.go
    │   │       ├── route.go
    │   │       ├── server.go
    │   │       ├── span_annotating_client_trace.go
    │   │       ├── stats.go
    │   │       └── trace.go
    │   ├── stats/
    │   │   ├── doc.go
    │   │   ├── internal/
    │   │   │   ├── record.go
    │   │   │   └── validation.go
    │   │   ├── measure.go
    │   │   ├── measure_float64.go
    │   │   ├── measure_int64.go
    │   │   ├── record.go
    │   │   ├── units.go
    │   │   └── view/
    │   │       ├── aggregation.go
    │   │       ├── aggregation_data.go
    │   │       ├── collector.go
    │   │       ├── doc.go
    │   │       ├── export.go
    │   │       ├── view.go
    │   │       ├── worker.go
    │   │       └── worker_commands.go
    │   ├── tag/
    │   │   ├── context.go
    │   │   ├── doc.go
    │   │   ├── key.go
    │   │   ├── map.go
    │   │   ├── map_codec.go
    │   │   ├── profile_19.go
    │   │   ├── profile_not19.go
    │   │   └── validate.go
    │   └── trace/
    │       ├── basetypes.go
    │       ├── config.go
    │       ├── doc.go
    │       ├── exemplar.go
    │       ├── export.go
    │       ├── internal/
    │       │   └── internal.go
    │       ├── propagation/
    │       │   └── propagation.go
    │       ├── sampling.go
    │       ├── spanbucket.go
    │       ├── spanstore.go
    │       ├── status_codes.go
    │       ├── trace.go
    │       ├── trace_go11.go
    │       ├── trace_nongo11.go
    │       └── tracestate/
    │           └── tracestate.go
    ├── golang.org/
    │   └── x/
    │       ├── crypto/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── blowfish/
    │       │   │   ├── block.go
    │       │   │   ├── cipher.go
    │       │   │   └── const.go
    │       │   ├── chacha20/
    │       │   │   ├── chacha_arm64.go
    │       │   │   ├── chacha_arm64.s
    │       │   │   ├── chacha_generic.go
    │       │   │   ├── chacha_noasm.go
    │       │   │   ├── chacha_ppc64x.go
    │       │   │   ├── chacha_ppc64x.s
    │       │   │   ├── chacha_s390x.go
    │       │   │   ├── chacha_s390x.s
    │       │   │   └── xor.go
    │       │   ├── curve25519/
    │       │   │   └── curve25519.go
    │       │   ├── internal/
    │       │   │   ├── alias/
    │       │   │   │   ├── alias.go
    │       │   │   │   └── alias_purego.go
    │       │   │   └── poly1305/
    │       │   │       ├── mac_noasm.go
    │       │   │       ├── poly1305.go
    │       │   │       ├── sum_amd64.go
    │       │   │       ├── sum_amd64.s
    │       │   │       ├── sum_generic.go
    │       │   │       ├── sum_ppc64x.go
    │       │   │       ├── sum_ppc64x.s
    │       │   │       ├── sum_s390x.go
    │       │   │       └── sum_s390x.s
    │       │   ├── pkcs12/
    │       │   │   ├── bmp-string.go
    │       │   │   ├── crypto.go
    │       │   │   ├── errors.go
    │       │   │   ├── internal/
    │       │   │   │   └── rc2/
    │       │   │   │       └── rc2.go
    │       │   │   ├── mac.go
    │       │   │   ├── pbkdf.go
    │       │   │   ├── pkcs12.go
    │       │   │   └── safebags.go
    │       │   └── ssh/
    │       │       ├── buffer.go
    │       │       ├── certs.go
    │       │       ├── channel.go
    │       │       ├── cipher.go
    │       │       ├── client.go
    │       │       ├── client_auth.go
    │       │       ├── common.go
    │       │       ├── connection.go
    │       │       ├── doc.go
    │       │       ├── handshake.go
    │       │       ├── internal/
    │       │       │   └── bcrypt_pbkdf/
    │       │       │       └── bcrypt_pbkdf.go
    │       │       ├── kex.go
    │       │       ├── keys.go
    │       │       ├── mac.go
    │       │       ├── messages.go
    │       │       ├── mux.go
    │       │       ├── server.go
    │       │       ├── session.go
    │       │       ├── ssh_gss.go
    │       │       ├── streamlocal.go
    │       │       ├── tcpip.go
    │       │       └── transport.go
    │       ├── net/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── context/
    │       │   │   └── context.go
    │       │   ├── html/
    │       │   │   ├── atom/
    │       │   │   │   ├── atom.go
    │       │   │   │   └── table.go
    │       │   │   ├── charset/
    │       │   │   │   └── charset.go
    │       │   │   ├── const.go
    │       │   │   ├── doc.go
    │       │   │   ├── doctype.go
    │       │   │   ├── entity.go
    │       │   │   ├── escape.go
    │       │   │   ├── foreign.go
    │       │   │   ├── iter.go
    │       │   │   ├── node.go
    │       │   │   ├── parse.go
    │       │   │   ├── render.go
    │       │   │   └── token.go
    │       │   ├── http/
    │       │   │   └── httpguts/
    │       │   │       ├── guts.go
    │       │   │       └── httplex.go
    │       │   ├── http2/
    │       │   │   ├── .gitignore
    │       │   │   ├── ascii.go
    │       │   │   ├── ciphers.go
    │       │   │   ├── client_conn_pool.go
    │       │   │   ├── config.go
    │       │   │   ├── config_go124.go
    │       │   │   ├── config_pre_go124.go
    │       │   │   ├── databuffer.go
    │       │   │   ├── errors.go
    │       │   │   ├── flow.go
    │       │   │   ├── frame.go
    │       │   │   ├── gotrack.go
    │       │   │   ├── hpack/
    │       │   │   │   ├── encode.go
    │       │   │   │   ├── hpack.go
    │       │   │   │   ├── huffman.go
    │       │   │   │   ├── static_table.go
    │       │   │   │   └── tables.go
    │       │   │   ├── http2.go
    │       │   │   ├── pipe.go
    │       │   │   ├── server.go
    │       │   │   ├── timer.go
    │       │   │   ├── transport.go
    │       │   │   ├── unencrypted.go
    │       │   │   ├── write.go
    │       │   │   ├── writesched.go
    │       │   │   ├── writesched_priority.go
    │       │   │   ├── writesched_random.go
    │       │   │   └── writesched_roundrobin.go
    │       │   ├── idna/
    │       │   │   ├── go118.go
    │       │   │   ├── idna10.0.0.go
    │       │   │   ├── idna9.0.0.go
    │       │   │   ├── pre_go118.go
    │       │   │   ├── punycode.go
    │       │   │   ├── tables10.0.0.go
    │       │   │   ├── tables11.0.0.go
    │       │   │   ├── tables12.0.0.go
    │       │   │   ├── tables13.0.0.go
    │       │   │   ├── tables15.0.0.go
    │       │   │   ├── tables9.0.0.go
    │       │   │   ├── trie.go
    │       │   │   ├── trie12.0.0.go
    │       │   │   ├── trie13.0.0.go
    │       │   │   └── trieval.go
    │       │   ├── internal/
    │       │   │   ├── httpcommon/
    │       │   │   │   ├── ascii.go
    │       │   │   │   ├── headermap.go
    │       │   │   │   └── request.go
    │       │   │   └── timeseries/
    │       │   │       └── timeseries.go
    │       │   └── trace/
    │       │       ├── events.go
    │       │       ├── histogram.go
    │       │       └── trace.go
    │       ├── oauth2/
    │       │   ├── .travis.yml
    │       │   ├── CONTRIBUTING.md
    │       │   ├── LICENSE
    │       │   ├── README.md
    │       │   ├── authhandler/
    │       │   │   └── authhandler.go
    │       │   ├── deviceauth.go
    │       │   ├── google/
    │       │   │   ├── appengine.go
    │       │   │   ├── default.go
    │       │   │   ├── doc.go
    │       │   │   ├── error.go
    │       │   │   ├── externalaccount/
    │       │   │   │   ├── aws.go
    │       │   │   │   ├── basecredentials.go
    │       │   │   │   ├── executablecredsource.go
    │       │   │   │   ├── filecredsource.go
    │       │   │   │   ├── header.go
    │       │   │   │   ├── programmaticrefreshcredsource.go
    │       │   │   │   └── urlcredsource.go
    │       │   │   ├── google.go
    │       │   │   ├── internal/
    │       │   │   │   ├── externalaccountauthorizeduser/
    │       │   │   │   │   └── externalaccountauthorizeduser.go
    │       │   │   │   ├── impersonate/
    │       │   │   │   │   └── impersonate.go
    │       │   │   │   └── stsexchange/
    │       │   │   │       ├── clientauth.go
    │       │   │   │       └── sts_exchange.go
    │       │   │   ├── jwt.go
    │       │   │   └── sdk.go
    │       │   ├── internal/
    │       │   │   ├── doc.go
    │       │   │   ├── oauth2.go
    │       │   │   ├── token.go
    │       │   │   └── transport.go
    │       │   ├── jws/
    │       │   │   └── jws.go
    │       │   ├── jwt/
    │       │   │   └── jwt.go
    │       │   ├── oauth2.go
    │       │   ├── pkce.go
    │       │   ├── token.go
    │       │   └── transport.go
    │       ├── sys/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── cpu/
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_darwin_x86_gc.s
    │       │   │   ├── byteorder.go
    │       │   │   ├── cpu.go
    │       │   │   ├── cpu_aix.go
    │       │   │   ├── cpu_arm.go
    │       │   │   ├── cpu_arm64.go
    │       │   │   ├── cpu_arm64.s
    │       │   │   ├── cpu_darwin_x86.go
    │       │   │   ├── cpu_gc_arm64.go
    │       │   │   ├── cpu_gc_s390x.go
    │       │   │   ├── cpu_gc_x86.go
    │       │   │   ├── cpu_gc_x86.s
    │       │   │   ├── cpu_gccgo_arm64.go
    │       │   │   ├── cpu_gccgo_s390x.go
    │       │   │   ├── cpu_gccgo_x86.c
    │       │   │   ├── cpu_gccgo_x86.go
    │       │   │   ├── cpu_linux.go
    │       │   │   ├── cpu_linux_arm.go
    │       │   │   ├── cpu_linux_arm64.go
    │       │   │   ├── cpu_linux_mips64x.go
    │       │   │   ├── cpu_linux_noinit.go
    │       │   │   ├── cpu_linux_ppc64x.go
    │       │   │   ├── cpu_linux_riscv64.go
    │       │   │   ├── cpu_linux_s390x.go
    │       │   │   ├── cpu_loong64.go
    │       │   │   ├── cpu_mips64x.go
    │       │   │   ├── cpu_mipsx.go
    │       │   │   ├── cpu_netbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.go
    │       │   │   ├── cpu_openbsd_arm64.s
    │       │   │   ├── cpu_other_arm.go
    │       │   │   ├── cpu_other_arm64.go
    │       │   │   ├── cpu_other_mips64x.go
    │       │   │   ├── cpu_other_ppc64x.go
    │       │   │   ├── cpu_other_riscv64.go
    │       │   │   ├── cpu_other_x86.go
    │       │   │   ├── cpu_ppc64x.go
    │       │   │   ├── cpu_riscv64.go
    │       │   │   ├── cpu_s390x.go
    │       │   │   ├── cpu_s390x.s
    │       │   │   ├── cpu_wasm.go
    │       │   │   ├── cpu_x86.go
    │       │   │   ├── cpu_zos.go
    │       │   │   ├── cpu_zos_s390x.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── hwcap_linux.go
    │       │   │   ├── parse.go
    │       │   │   ├── proc_cpuinfo_linux.go
    │       │   │   ├── runtime_auxv.go
    │       │   │   ├── runtime_auxv_go121.go
    │       │   │   ├── syscall_aix_gccgo.go
    │       │   │   ├── syscall_aix_ppc64_gc.go
    │       │   │   └── syscall_darwin_x86_gc.go
    │       │   ├── unix/
    │       │   │   ├── .gitignore
    │       │   │   ├── README.md
    │       │   │   ├── affinity_linux.go
    │       │   │   ├── aliases.go
    │       │   │   ├── asm_aix_ppc64.s
    │       │   │   ├── asm_bsd_386.s
    │       │   │   ├── asm_bsd_amd64.s
    │       │   │   ├── asm_bsd_arm.s
    │       │   │   ├── asm_bsd_arm64.s
    │       │   │   ├── asm_bsd_ppc64.s
    │       │   │   ├── asm_bsd_riscv64.s
    │       │   │   ├── asm_linux_386.s
    │       │   │   ├── asm_linux_amd64.s
    │       │   │   ├── asm_linux_arm.s
    │       │   │   ├── asm_linux_arm64.s
    │       │   │   ├── asm_linux_loong64.s
    │       │   │   ├── asm_linux_mips64x.s
    │       │   │   ├── asm_linux_mipsx.s
    │       │   │   ├── asm_linux_ppc64x.s
    │       │   │   ├── asm_linux_riscv64.s
    │       │   │   ├── asm_linux_s390x.s
    │       │   │   ├── asm_openbsd_mips64.s
    │       │   │   ├── asm_solaris_amd64.s
    │       │   │   ├── asm_zos_s390x.s
    │       │   │   ├── auxv.go
    │       │   │   ├── auxv_unsupported.go
    │       │   │   ├── bluetooth_linux.go
    │       │   │   ├── bpxsvc_zos.go
    │       │   │   ├── bpxsvc_zos.s
    │       │   │   ├── cap_freebsd.go
    │       │   │   ├── constants.go
    │       │   │   ├── dev_aix_ppc.go
    │       │   │   ├── dev_aix_ppc64.go
    │       │   │   ├── dev_darwin.go
    │       │   │   ├── dev_dragonfly.go
    │       │   │   ├── dev_freebsd.go
    │       │   │   ├── dev_linux.go
    │       │   │   ├── dev_netbsd.go
    │       │   │   ├── dev_openbsd.go
    │       │   │   ├── dev_zos.go
    │       │   │   ├── dirent.go
    │       │   │   ├── endian_big.go
    │       │   │   ├── endian_little.go
    │       │   │   ├── env_unix.go
    │       │   │   ├── fcntl.go
    │       │   │   ├── fcntl_darwin.go
    │       │   │   ├── fcntl_linux_32bit.go
    │       │   │   ├── fdset.go
    │       │   │   ├── gccgo.go
    │       │   │   ├── gccgo_c.c
    │       │   │   ├── gccgo_linux_amd64.go
    │       │   │   ├── ifreq_linux.go
    │       │   │   ├── ioctl_linux.go
    │       │   │   ├── ioctl_signed.go
    │       │   │   ├── ioctl_unsigned.go
    │       │   │   ├── ioctl_zos.go
    │       │   │   ├── mkall.sh
    │       │   │   ├── mkerrors.sh
    │       │   │   ├── mmap_nomremap.go
    │       │   │   ├── mremap.go
    │       │   │   ├── pagesize_unix.go
    │       │   │   ├── pledge_openbsd.go
    │       │   │   ├── ptrace_darwin.go
    │       │   │   ├── ptrace_ios.go
    │       │   │   ├── race.go
    │       │   │   ├── race0.go
    │       │   │   ├── readdirent_getdents.go
    │       │   │   ├── readdirent_getdirentries.go
    │       │   │   ├── sockcmsg_dragonfly.go
    │       │   │   ├── sockcmsg_linux.go
    │       │   │   ├── sockcmsg_unix.go
    │       │   │   ├── sockcmsg_unix_other.go
    │       │   │   ├── sockcmsg_zos.go
    │       │   │   ├── symaddr_zos_s390x.s
    │       │   │   ├── syscall.go
    │       │   │   ├── syscall_aix.go
    │       │   │   ├── syscall_aix_ppc.go
    │       │   │   ├── syscall_aix_ppc64.go
    │       │   │   ├── syscall_bsd.go
    │       │   │   ├── syscall_darwin.go
    │       │   │   ├── syscall_darwin_amd64.go
    │       │   │   ├── syscall_darwin_arm64.go
    │       │   │   ├── syscall_darwin_libSystem.go
    │       │   │   ├── syscall_dragonfly.go
    │       │   │   ├── syscall_dragonfly_amd64.go
    │       │   │   ├── syscall_freebsd.go
    │       │   │   ├── syscall_freebsd_386.go
    │       │   │   ├── syscall_freebsd_amd64.go
    │       │   │   ├── syscall_freebsd_arm.go
    │       │   │   ├── syscall_freebsd_arm64.go
    │       │   │   ├── syscall_freebsd_riscv64.go
    │       │   │   ├── syscall_hurd.go
    │       │   │   ├── syscall_hurd_386.go
    │       │   │   ├── syscall_illumos.go
    │       │   │   ├── syscall_linux.go
    │       │   │   ├── syscall_linux_386.go
    │       │   │   ├── syscall_linux_alarm.go
    │       │   │   ├── syscall_linux_amd64.go
    │       │   │   ├── syscall_linux_amd64_gc.go
    │       │   │   ├── syscall_linux_arm.go
    │       │   │   ├── syscall_linux_arm64.go
    │       │   │   ├── syscall_linux_gc.go
    │       │   │   ├── syscall_linux_gc_386.go
    │       │   │   ├── syscall_linux_gc_arm.go
    │       │   │   ├── syscall_linux_gccgo_386.go
    │       │   │   ├── syscall_linux_gccgo_arm.go
    │       │   │   ├── syscall_linux_loong64.go
    │       │   │   ├── syscall_linux_mips64x.go
    │       │   │   ├── syscall_linux_mipsx.go
    │       │   │   ├── syscall_linux_ppc.go
    │       │   │   ├── syscall_linux_ppc64x.go
    │       │   │   ├── syscall_linux_riscv64.go
    │       │   │   ├── syscall_linux_s390x.go
    │       │   │   ├── syscall_linux_sparc64.go
    │       │   │   ├── syscall_netbsd.go
    │       │   │   ├── syscall_netbsd_386.go
    │       │   │   ├── syscall_netbsd_amd64.go
    │       │   │   ├── syscall_netbsd_arm.go
    │       │   │   ├── syscall_netbsd_arm64.go
    │       │   │   ├── syscall_openbsd.go
    │       │   │   ├── syscall_openbsd_386.go
    │       │   │   ├── syscall_openbsd_amd64.go
    │       │   │   ├── syscall_openbsd_arm.go
    │       │   │   ├── syscall_openbsd_arm64.go
    │       │   │   ├── syscall_openbsd_libc.go
    │       │   │   ├── syscall_openbsd_mips64.go
    │       │   │   ├── syscall_openbsd_ppc64.go
    │       │   │   ├── syscall_openbsd_riscv64.go
    │       │   │   ├── syscall_solaris.go
    │       │   │   ├── syscall_solaris_amd64.go
    │       │   │   ├── syscall_unix.go
    │       │   │   ├── syscall_unix_gc.go
    │       │   │   ├── syscall_unix_gc_ppc64x.go
    │       │   │   ├── syscall_zos_s390x.go
    │       │   │   ├── sysvshm_linux.go
    │       │   │   ├── sysvshm_unix.go
    │       │   │   ├── sysvshm_unix_other.go
    │       │   │   ├── timestruct.go
    │       │   │   ├── unveil_openbsd.go
    │       │   │   ├── vgetrandom_linux.go
    │       │   │   ├── vgetrandom_unsupported.go
    │       │   │   ├── xattr_bsd.go
    │       │   │   ├── zerrors_aix_ppc.go
    │       │   │   ├── zerrors_aix_ppc64.go
    │       │   │   ├── zerrors_darwin_amd64.go
    │       │   │   ├── zerrors_darwin_arm64.go
    │       │   │   ├── zerrors_dragonfly_amd64.go
    │       │   │   ├── zerrors_freebsd_386.go
    │       │   │   ├── zerrors_freebsd_amd64.go
    │       │   │   ├── zerrors_freebsd_arm.go
    │       │   │   ├── zerrors_freebsd_arm64.go
    │       │   │   ├── zerrors_freebsd_riscv64.go
    │       │   │   ├── zerrors_linux.go
    │       │   │   ├── zerrors_linux_386.go
    │       │   │   ├── zerrors_linux_amd64.go
    │       │   │   ├── zerrors_linux_arm.go
    │       │   │   ├── zerrors_linux_arm64.go
    │       │   │   ├── zerrors_linux_loong64.go
    │       │   │   ├── zerrors_linux_mips.go
    │       │   │   ├── zerrors_linux_mips64.go
    │       │   │   ├── zerrors_linux_mips64le.go
    │       │   │   ├── zerrors_linux_mipsle.go
    │       │   │   ├── zerrors_linux_ppc.go
    │       │   │   ├── zerrors_linux_ppc64.go
    │       │   │   ├── zerrors_linux_ppc64le.go
    │       │   │   ├── zerrors_linux_riscv64.go
    │       │   │   ├── zerrors_linux_s390x.go
    │       │   │   ├── zerrors_linux_sparc64.go
    │       │   │   ├── zerrors_netbsd_386.go
    │       │   │   ├── zerrors_netbsd_amd64.go
    │       │   │   ├── zerrors_netbsd_arm.go
    │       │   │   ├── zerrors_netbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_386.go
    │       │   │   ├── zerrors_openbsd_amd64.go
    │       │   │   ├── zerrors_openbsd_arm.go
    │       │   │   ├── zerrors_openbsd_arm64.go
    │       │   │   ├── zerrors_openbsd_mips64.go
    │       │   │   ├── zerrors_openbsd_ppc64.go
    │       │   │   ├── zerrors_openbsd_riscv64.go
    │       │   │   ├── zerrors_solaris_amd64.go
    │       │   │   ├── zerrors_zos_s390x.go
    │       │   │   ├── zptrace_armnn_linux.go
    │       │   │   ├── zptrace_linux_arm64.go
    │       │   │   ├── zptrace_mipsnn_linux.go
    │       │   │   ├── zptrace_mipsnnle_linux.go
    │       │   │   ├── zptrace_x86_linux.go
    │       │   │   ├── zsymaddr_zos_s390x.s
    │       │   │   ├── zsyscall_aix_ppc.go
    │       │   │   ├── zsyscall_aix_ppc64.go
    │       │   │   ├── zsyscall_aix_ppc64_gc.go
    │       │   │   ├── zsyscall_aix_ppc64_gccgo.go
    │       │   │   ├── zsyscall_darwin_amd64.go
    │       │   │   ├── zsyscall_darwin_amd64.s
    │       │   │   ├── zsyscall_darwin_arm64.go
    │       │   │   ├── zsyscall_darwin_arm64.s
    │       │   │   ├── zsyscall_dragonfly_amd64.go
    │       │   │   ├── zsyscall_freebsd_386.go
    │       │   │   ├── zsyscall_freebsd_amd64.go
    │       │   │   ├── zsyscall_freebsd_arm.go
    │       │   │   ├── zsyscall_freebsd_arm64.go
    │       │   │   ├── zsyscall_freebsd_riscv64.go
    │       │   │   ├── zsyscall_illumos_amd64.go
    │       │   │   ├── zsyscall_linux.go
    │       │   │   ├── zsyscall_linux_386.go
    │       │   │   ├── zsyscall_linux_amd64.go
    │       │   │   ├── zsyscall_linux_arm.go
    │       │   │   ├── zsyscall_linux_arm64.go
    │       │   │   ├── zsyscall_linux_loong64.go
    │       │   │   ├── zsyscall_linux_mips.go
    │       │   │   ├── zsyscall_linux_mips64.go
    │       │   │   ├── zsyscall_linux_mips64le.go
    │       │   │   ├── zsyscall_linux_mipsle.go
    │       │   │   ├── zsyscall_linux_ppc.go
    │       │   │   ├── zsyscall_linux_ppc64.go
    │       │   │   ├── zsyscall_linux_ppc64le.go
    │       │   │   ├── zsyscall_linux_riscv64.go
    │       │   │   ├── zsyscall_linux_s390x.go
    │       │   │   ├── zsyscall_linux_sparc64.go
    │       │   │   ├── zsyscall_netbsd_386.go
    │       │   │   ├── zsyscall_netbsd_amd64.go
    │       │   │   ├── zsyscall_netbsd_arm.go
    │       │   │   ├── zsyscall_netbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_386.go
    │       │   │   ├── zsyscall_openbsd_386.s
    │       │   │   ├── zsyscall_openbsd_amd64.go
    │       │   │   ├── zsyscall_openbsd_amd64.s
    │       │   │   ├── zsyscall_openbsd_arm.go
    │       │   │   ├── zsyscall_openbsd_arm.s
    │       │   │   ├── zsyscall_openbsd_arm64.go
    │       │   │   ├── zsyscall_openbsd_arm64.s
    │       │   │   ├── zsyscall_openbsd_mips64.go
    │       │   │   ├── zsyscall_openbsd_mips64.s
    │       │   │   ├── zsyscall_openbsd_ppc64.go
    │       │   │   ├── zsyscall_openbsd_ppc64.s
    │       │   │   ├── zsyscall_openbsd_riscv64.go
    │       │   │   ├── zsyscall_openbsd_riscv64.s
    │       │   │   ├── zsyscall_solaris_amd64.go
    │       │   │   ├── zsyscall_zos_s390x.go
    │       │   │   ├── zsysctl_openbsd_386.go
    │       │   │   ├── zsysctl_openbsd_amd64.go
    │       │   │   ├── zsysctl_openbsd_arm.go
    │       │   │   ├── zsysctl_openbsd_arm64.go
    │       │   │   ├── zsysctl_openbsd_mips64.go
    │       │   │   ├── zsysctl_openbsd_ppc64.go
    │       │   │   ├── zsysctl_openbsd_riscv64.go
    │       │   │   ├── zsysnum_darwin_amd64.go
    │       │   │   ├── zsysnum_darwin_arm64.go
    │       │   │   ├── zsysnum_dragonfly_amd64.go
    │       │   │   ├── zsysnum_freebsd_386.go
    │       │   │   ├── zsysnum_freebsd_amd64.go
    │       │   │   ├── zsysnum_freebsd_arm.go
    │       │   │   ├── zsysnum_freebsd_arm64.go
    │       │   │   ├── zsysnum_freebsd_riscv64.go
    │       │   │   ├── zsysnum_linux_386.go
    │       │   │   ├── zsysnum_linux_amd64.go
    │       │   │   ├── zsysnum_linux_arm.go
    │       │   │   ├── zsysnum_linux_arm64.go
    │       │   │   ├── zsysnum_linux_loong64.go
    │       │   │   ├── zsysnum_linux_mips.go
    │       │   │   ├── zsysnum_linux_mips64.go
    │       │   │   ├── zsysnum_linux_mips64le.go
    │       │   │   ├── zsysnum_linux_mipsle.go
    │       │   │   ├── zsysnum_linux_ppc.go
    │       │   │   ├── zsysnum_linux_ppc64.go
    │       │   │   ├── zsysnum_linux_ppc64le.go
    │       │   │   ├── zsysnum_linux_riscv64.go
    │       │   │   ├── zsysnum_linux_s390x.go
    │       │   │   ├── zsysnum_linux_sparc64.go
    │       │   │   ├── zsysnum_netbsd_386.go
    │       │   │   ├── zsysnum_netbsd_amd64.go
    │       │   │   ├── zsysnum_netbsd_arm.go
    │       │   │   ├── zsysnum_netbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_386.go
    │       │   │   ├── zsysnum_openbsd_amd64.go
    │       │   │   ├── zsysnum_openbsd_arm.go
    │       │   │   ├── zsysnum_openbsd_arm64.go
    │       │   │   ├── zsysnum_openbsd_mips64.go
    │       │   │   ├── zsysnum_openbsd_ppc64.go
    │       │   │   ├── zsysnum_openbsd_riscv64.go
    │       │   │   ├── zsysnum_zos_s390x.go
    │       │   │   ├── ztypes_aix_ppc.go
    │       │   │   ├── ztypes_aix_ppc64.go
    │       │   │   ├── ztypes_darwin_amd64.go
    │       │   │   ├── ztypes_darwin_arm64.go
    │       │   │   ├── ztypes_dragonfly_amd64.go
    │       │   │   ├── ztypes_freebsd_386.go
    │       │   │   ├── ztypes_freebsd_amd64.go
    │       │   │   ├── ztypes_freebsd_arm.go
    │       │   │   ├── ztypes_freebsd_arm64.go
    │       │   │   ├── ztypes_freebsd_riscv64.go
    │       │   │   ├── ztypes_linux.go
    │       │   │   ├── ztypes_linux_386.go
    │       │   │   ├── ztypes_linux_amd64.go
    │       │   │   ├── ztypes_linux_arm.go
    │       │   │   ├── ztypes_linux_arm64.go
    │       │   │   ├── ztypes_linux_loong64.go
    │       │   │   ├── ztypes_linux_mips.go
    │       │   │   ├── ztypes_linux_mips64.go
    │       │   │   ├── ztypes_linux_mips64le.go
    │       │   │   ├── ztypes_linux_mipsle.go
    │       │   │   ├── ztypes_linux_ppc.go
    │       │   │   ├── ztypes_linux_ppc64.go
    │       │   │   ├── ztypes_linux_ppc64le.go
    │       │   │   ├── ztypes_linux_riscv64.go
    │       │   │   ├── ztypes_linux_s390x.go
    │       │   │   ├── ztypes_linux_sparc64.go
    │       │   │   ├── ztypes_netbsd_386.go
    │       │   │   ├── ztypes_netbsd_amd64.go
    │       │   │   ├── ztypes_netbsd_arm.go
    │       │   │   ├── ztypes_netbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_386.go
    │       │   │   ├── ztypes_openbsd_amd64.go
    │       │   │   ├── ztypes_openbsd_arm.go
    │       │   │   ├── ztypes_openbsd_arm64.go
    │       │   │   ├── ztypes_openbsd_mips64.go
    │       │   │   ├── ztypes_openbsd_ppc64.go
    │       │   │   ├── ztypes_openbsd_riscv64.go
    │       │   │   ├── ztypes_solaris_amd64.go
    │       │   │   └── ztypes_zos_s390x.go
    │       │   └── windows/
    │       │       ├── aliases.go
    │       │       ├── dll_windows.go
    │       │       ├── env_windows.go
    │       │       ├── eventlog.go
    │       │       ├── exec_windows.go
    │       │       ├── memory_windows.go
    │       │       ├── mkerrors.bash
    │       │       ├── mkknownfolderids.bash
    │       │       ├── mksyscall.go
    │       │       ├── race.go
    │       │       ├── race0.go
    │       │       ├── security_windows.go
    │       │       ├── service.go
    │       │       ├── setupapi_windows.go
    │       │       ├── str.go
    │       │       ├── syscall.go
    │       │       ├── syscall_windows.go
    │       │       ├── types_windows.go
    │       │       ├── types_windows_386.go
    │       │       ├── types_windows_amd64.go
    │       │       ├── types_windows_arm.go
    │       │       ├── types_windows_arm64.go
    │       │       ├── zerrors_windows.go
    │       │       ├── zknownfolderids_windows.go
    │       │       └── zsyscall_windows.go
    │       ├── text/
    │       │   ├── LICENSE
    │       │   ├── PATENTS
    │       │   ├── encoding/
    │       │   │   ├── charmap/
    │       │   │   │   ├── charmap.go
    │       │   │   │   └── tables.go
    │       │   │   ├── encoding.go
    │       │   │   ├── htmlindex/
    │       │   │   │   ├── htmlindex.go
    │       │   │   │   ├── map.go
    │       │   │   │   └── tables.go
    │       │   │   ├── internal/
    │       │   │   │   ├── identifier/
    │       │   │   │   │   ├── identifier.go
    │       │   │   │   │   └── mib.go
    │       │   │   │   └── internal.go
    │       │   │   ├── japanese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── eucjp.go
    │       │   │   │   ├── iso2022jp.go
    │       │   │   │   ├── shiftjis.go
    │       │   │   │   └── tables.go
    │       │   │   ├── korean/
    │       │   │   │   ├── euckr.go
    │       │   │   │   └── tables.go
    │       │   │   ├── simplifiedchinese/
    │       │   │   │   ├── all.go
    │       │   │   │   ├── gbk.go
    │       │   │   │   ├── hzgb2312.go
    │       │   │   │   └── tables.go
    │       │   │   ├── traditionalchinese/
    │       │   │   │   ├── big5.go
    │       │   │   │   └── tables.go
    │       │   │   └── unicode/
    │       │   │       ├── override.go
    │       │   │       └── unicode.go
    │       │   ├── internal/
    │       │   │   ├── language/
    │       │   │   │   ├── common.go
    │       │   │   │   ├── compact/
    │       │   │   │   │   ├── compact.go
    │       │   │   │   │   ├── language.go
    │       │   │   │   │   ├── parents.go
    │       │   │   │   │   ├── tables.go
    │       │   │   │   │   └── tags.go
    │       │   │   │   ├── compact.go
    │       │   │   │   ├── compose.go
    │       │   │   │   ├── coverage.go
    │       │   │   │   ├── language.go
    │       │   │   │   ├── lookup.go
    │       │   │   │   ├── match.go
    │       │   │   │   ├── parse.go
    │       │   │   │   ├── tables.go
    │       │   │   │   └── tags.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── utf8internal/
    │       │   │       └── utf8internal.go
    │       │   ├── language/
    │       │   │   ├── coverage.go
    │       │   │   ├── doc.go
    │       │   │   ├── language.go
    │       │   │   ├── match.go
    │       │   │   ├── parse.go
    │       │   │   ├── tables.go
    │       │   │   └── tags.go
    │       │   ├── runes/
    │       │   │   ├── cond.go
    │       │   │   └── runes.go
    │       │   ├── secure/
    │       │   │   └── bidirule/
    │       │   │       ├── bidirule.go
    │       │   │       ├── bidirule10.0.0.go
    │       │   │       └── bidirule9.0.0.go
    │       │   ├── transform/
    │       │   │   └── transform.go
    │       │   └── unicode/
    │       │       ├── bidi/
    │       │       │   ├── bidi.go
    │       │       │   ├── bracket.go
    │       │       │   ├── core.go
    │       │       │   ├── prop.go
    │       │       │   ├── tables10.0.0.go
    │       │       │   ├── tables11.0.0.go
    │       │       │   ├── tables12.0.0.go
    │       │       │   ├── tables13.0.0.go
    │       │       │   ├── tables15.0.0.go
    │       │       │   ├── tables9.0.0.go
    │       │       │   └── trieval.go
    │       │       └── norm/
    │       │           ├── composition.go
    │       │           ├── forminfo.go
    │       │           ├── input.go
    │       │           ├── iter.go
    │       │           ├── normalize.go
    │       │           ├── readwriter.go
    │       │           ├── tables10.0.0.go
    │       │           ├── tables11.0.0.go
    │       │           ├── tables12.0.0.go
    │       │           ├── tables13.0.0.go
    │       │           ├── tables15.0.0.go
    │       │           ├── tables9.0.0.go
    │       │           ├── transform.go
    │       │           └── trie.go
    │       └── tools/
    │           ├── LICENSE
    │           ├── PATENTS
    │           └── go/
    │               └── ast/
    │                   └── inspector/
    │                       ├── inspector.go
    │                       └── typeof.go
    ├── google.golang.org/
    │   ├── api/
    │   │   ├── AUTHORS
    │   │   ├── CONTRIBUTORS
    │   │   ├── LICENSE
    │   │   ├── cloudresourcemanager/
    │   │   │   └── v1/
    │   │   │       ├── cloudresourcemanager-api.json
    │   │   │       └── cloudresourcemanager-gen.go
    │   │   ├── compute/
    │   │   │   └── v1/
    │   │   │       ├── compute-api.json
    │   │   │       └── compute-gen.go
    │   │   ├── container/
    │   │   │   └── v1/
    │   │   │       ├── container-api.json
    │   │   │       └── container-gen.go
    │   │   ├── dns/
    │   │   │   └── v1/
    │   │   │       ├── dns-api.json
    │   │   │       └── dns-gen.go
    │   │   ├── gensupport/
    │   │   │   ├── backoff.go
    │   │   │   ├── buffer.go
    │   │   │   ├── doc.go
    │   │   │   ├── header.go
    │   │   │   ├── json.go
    │   │   │   ├── jsonfloat.go
    │   │   │   ├── media.go
    │   │   │   ├── params.go
    │   │   │   ├── resumable.go
    │   │   │   ├── retry.go
    │   │   │   └── send.go
    │   │   ├── googleapi/
    │   │   │   ├── googleapi.go
    │   │   │   ├── internal/
    │   │   │   │   └── uritemplates/
    │   │   │   │       ├── LICENSE
    │   │   │   │       ├── uritemplates.go
    │   │   │   │       └── utils.go
    │   │   │   ├── transport/
    │   │   │   │   └── apikey.go
    │   │   │   └── types.go
    │   │   ├── iam/
    │   │   │   └── v1/
    │   │   │       ├── iam-api.json
    │   │   │       └── iam-gen.go
    │   │   ├── internal/
    │   │   │   ├── creds.go
    │   │   │   ├── pool.go
    │   │   │   ├── service-account.json
    │   │   │   └── settings.go
    │   │   ├── iterator/
    │   │   │   └── iterator.go
    │   │   ├── option/
    │   │   │   ├── credentials_go19.go
    │   │   │   ├── credentials_notgo19.go
    │   │   │   └── option.go
    │   │   ├── sqladmin/
    │   │   │   └── v1beta4/
    │   │   │       ├── sqladmin-api.json
    │   │   │       └── sqladmin-gen.go
    │   │   ├── storage/
    │   │   │   └── v1/
    │   │   │       ├── storage-api.json
    │   │   │       └── storage-gen.go
    │   │   └── transport/
    │   │       └── http/
    │   │           ├── dial.go
    │   │           ├── dial_appengine.go
    │   │           └── internal/
    │   │               └── propagation/
    │   │                   └── http.go
    │   ├── appengine/
    │   │   ├── LICENSE
    │   │   ├── internal/
    │   │   │   ├── api.go
    │   │   │   ├── api_classic.go
    │   │   │   ├── api_common.go
    │   │   │   ├── app_id.go
    │   │   │   ├── base/
    │   │   │   │   ├── api_base.pb.go
    │   │   │   │   └── api_base.proto
    │   │   │   ├── datastore/
    │   │   │   │   ├── datastore_v3.pb.go
    │   │   │   │   └── datastore_v3.proto
    │   │   │   ├── identity.go
    │   │   │   ├── identity_classic.go
    │   │   │   ├── identity_flex.go
    │   │   │   ├── identity_vm.go
    │   │   │   ├── internal.go
    │   │   │   ├── log/
    │   │   │   │   ├── log_service.pb.go
    │   │   │   │   └── log_service.proto
    │   │   │   ├── main.go
    │   │   │   ├── main_common.go
    │   │   │   ├── main_vm.go
    │   │   │   ├── metadata.go
    │   │   │   ├── net.go
    │   │   │   ├── regen.sh
    │   │   │   ├── remote_api/
    │   │   │   │   ├── remote_api.pb.go
    │   │   │   │   └── remote_api.proto
    │   │   │   ├── transaction.go
    │   │   │   └── urlfetch/
    │   │   │       ├── urlfetch_service.pb.go
    │   │   │       └── urlfetch_service.proto
    │   │   └── urlfetch/
    │   │       └── urlfetch.go
    │   ├── genproto/
    │   │   ├── LICENSE
    │   │   └── googleapis/
    │   │       ├── api/
    │   │       │   └── annotations/
    │   │       │       ├── annotations.pb.go
    │   │       │       └── http.pb.go
    │   │       ├── iam/
    │   │       │   └── v1/
    │   │       │       ├── iam_policy.pb.go
    │   │       │       └── policy.pb.go
    │   │       └── rpc/
    │   │           ├── code/
    │   │           │   └── code.pb.go
    │   │           └── status/
    │   │               └── status.pb.go
    │   ├── grpc/
    │   │   ├── .travis.yml
    │   │   ├── AUTHORS
    │   │   ├── CONTRIBUTING.md
    │   │   ├── LICENSE
    │   │   ├── Makefile
    │   │   ├── README.md
    │   │   ├── backoff.go
    │   │   ├── balancer/
    │   │   │   ├── balancer.go
    │   │   │   ├── base/
    │   │   │   │   ├── balancer.go
    │   │   │   │   └── base.go
    │   │   │   └── roundrobin/
    │   │   │       └── roundrobin.go
    │   │   ├── balancer.go
    │   │   ├── balancer_conn_wrappers.go
    │   │   ├── balancer_v1_wrapper.go
    │   │   ├── binarylog/
    │   │   │   └── grpc_binarylog_v1/
    │   │   │       └── binarylog.pb.go
    │   │   ├── call.go
    │   │   ├── clientconn.go
    │   │   ├── codec.go
    │   │   ├── codegen.sh
    │   │   ├── codes/
    │   │   │   ├── code_string.go
    │   │   │   └── codes.go
    │   │   ├── connectivity/
    │   │   │   └── connectivity.go
    │   │   ├── credentials/
    │   │   │   ├── credentials.go
    │   │   │   └── internal/
    │   │   │       ├── syscallconn.go
    │   │   │       └── syscallconn_appengine.go
    │   │   ├── dialoptions.go
    │   │   ├── doc.go
    │   │   ├── encoding/
    │   │   │   ├── encoding.go
    │   │   │   └── proto/
    │   │   │       └── proto.go
    │   │   ├── grpclog/
    │   │   │   ├── grpclog.go
    │   │   │   ├── logger.go
    │   │   │   └── loggerv2.go
    │   │   ├── install_gae.sh
    │   │   ├── interceptor.go
    │   │   ├── internal/
    │   │   │   ├── backoff/
    │   │   │   │   └── backoff.go
    │   │   │   ├── binarylog/
    │   │   │   │   ├── binarylog.go
    │   │   │   │   ├── binarylog_testutil.go
    │   │   │   │   ├── env_config.go
    │   │   │   │   ├── method_logger.go
    │   │   │   │   ├── regenerate.sh
    │   │   │   │   ├── sink.go
    │   │   │   │   └── util.go
    │   │   │   ├── channelz/
    │   │   │   │   ├── funcs.go
    │   │   │   │   ├── types.go
    │   │   │   │   ├── types_linux.go
    │   │   │   │   ├── types_nonlinux.go
    │   │   │   │   ├── util_linux.go
    │   │   │   │   └── util_nonlinux.go
    │   │   │   ├── envconfig/
    │   │   │   │   └── envconfig.go
    │   │   │   ├── grpcrand/
    │   │   │   │   └── grpcrand.go
    │   │   │   ├── grpcsync/
    │   │   │   │   └── event.go
    │   │   │   ├── internal.go
    │   │   │   ├── syscall/
    │   │   │   │   ├── syscall_linux.go
    │   │   │   │   └── syscall_nonlinux.go
    │   │   │   └── transport/
    │   │   │       ├── bdp_estimator.go
    │   │   │       ├── controlbuf.go
    │   │   │       ├── defaults.go
    │   │   │       ├── flowcontrol.go
    │   │   │       ├── handler_server.go
    │   │   │       ├── http2_client.go
    │   │   │       ├── http2_server.go
    │   │   │       ├── http_util.go
    │   │   │       ├── log.go
    │   │   │       └── transport.go
    │   │   ├── keepalive/
    │   │   │   └── keepalive.go
    │   │   ├── metadata/
    │   │   │   └── metadata.go
    │   │   ├── naming/
    │   │   │   ├── dns_resolver.go
    │   │   │   └── naming.go
    │   │   ├── peer/
    │   │   │   └── peer.go
    │   │   ├── picker_wrapper.go
    │   │   ├── pickfirst.go
    │   │   ├── proxy.go
    │   │   ├── resolver/
    │   │   │   ├── dns/
    │   │   │   │   └── dns_resolver.go
    │   │   │   ├── passthrough/
    │   │   │   │   └── passthrough.go
    │   │   │   └── resolver.go
    │   │   ├── resolver_conn_wrapper.go
    │   │   ├── rpc_util.go
    │   │   ├── server.go
    │   │   ├── service_config.go
    │   │   ├── stats/
    │   │   │   ├── handlers.go
    │   │   │   └── stats.go
    │   │   ├── status/
    │   │   │   └── status.go
    │   │   ├── stream.go
    │   │   ├── tap/
    │   │   │   └── tap.go
    │   │   ├── trace.go
    │   │   ├── version.go
    │   │   └── vet.sh
    │   └── protobuf/
    │       ├── AUTHORS
    │       ├── CONTRIBUTORS
    │       ├── LICENSE
    │       ├── PATENTS
    │       ├── encoding/
    │       │   ├── prototext/
    │       │   │   ├── decode.go
    │       │   │   ├── doc.go
    │       │   │   └── encode.go
    │       │   └── protowire/
    │       │       └── wire.go
    │       ├── internal/
    │       │   ├── descfmt/
    │       │   │   └── stringer.go
    │       │   ├── descopts/
    │       │   │   └── options.go
    │       │   ├── detrand/
    │       │   │   └── rand.go
    │       │   ├── encoding/
    │       │   │   ├── defval/
    │       │   │   │   └── default.go
    │       │   │   ├── messageset/
    │       │   │   │   └── messageset.go
    │       │   │   ├── tag/
    │       │   │   │   └── tag.go
    │       │   │   └── text/
    │       │   │       ├── decode.go
    │       │   │       ├── decode_number.go
    │       │   │       ├── decode_string.go
    │       │   │       ├── decode_token.go
    │       │   │       ├── doc.go
    │       │   │       └── encode.go
    │       │   ├── errors/
    │       │   │   ├── errors.go
    │       │   │   ├── is_go112.go
    │       │   │   └── is_go113.go
    │       │   ├── filedesc/
    │       │   │   ├── build.go
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_lazy.go
    │       │   │   ├── desc_list.go
    │       │   │   ├── desc_list_gen.go
    │       │   │   └── placeholder.go
    │       │   ├── filetype/
    │       │   │   └── build.go
    │       │   ├── flags/
    │       │   │   ├── flags.go
    │       │   │   ├── proto_legacy_disable.go
    │       │   │   └── proto_legacy_enable.go
    │       │   ├── genid/
    │       │   │   ├── any_gen.go
    │       │   │   ├── api_gen.go
    │       │   │   ├── descriptor_gen.go
    │       │   │   ├── doc.go
    │       │   │   ├── duration_gen.go
    │       │   │   ├── empty_gen.go
    │       │   │   ├── field_mask_gen.go
    │       │   │   ├── goname.go
    │       │   │   ├── map_entry.go
    │       │   │   ├── source_context_gen.go
    │       │   │   ├── struct_gen.go
    │       │   │   ├── timestamp_gen.go
    │       │   │   ├── type_gen.go
    │       │   │   ├── wrappers.go
    │       │   │   └── wrappers_gen.go
    │       │   ├── impl/
    │       │   │   ├── api_export.go
    │       │   │   ├── checkinit.go
    │       │   │   ├── codec_extension.go
    │       │   │   ├── codec_field.go
    │       │   │   ├── codec_gen.go
    │       │   │   ├── codec_map.go
    │       │   │   ├── codec_map_go111.go
    │       │   │   ├── codec_map_go112.go
    │       │   │   ├── codec_message.go
    │       │   │   ├── codec_messageset.go
    │       │   │   ├── codec_reflect.go
    │       │   │   ├── codec_tables.go
    │       │   │   ├── codec_unsafe.go
    │       │   │   ├── convert.go
    │       │   │   ├── convert_list.go
    │       │   │   ├── convert_map.go
    │       │   │   ├── decode.go
    │       │   │   ├── encode.go
    │       │   │   ├── enum.go
    │       │   │   ├── extension.go
    │       │   │   ├── legacy_enum.go
    │       │   │   ├── legacy_export.go
    │       │   │   ├── legacy_extension.go
    │       │   │   ├── legacy_file.go
    │       │   │   ├── legacy_message.go
    │       │   │   ├── merge.go
    │       │   │   ├── merge_gen.go
    │       │   │   ├── message.go
    │       │   │   ├── message_reflect.go
    │       │   │   ├── message_reflect_field.go
    │       │   │   ├── message_reflect_gen.go
    │       │   │   ├── pointer_reflect.go
    │       │   │   ├── pointer_unsafe.go
    │       │   │   ├── validate.go
    │       │   │   └── weak.go
    │       │   ├── order/
    │       │   │   ├── order.go
    │       │   │   └── range.go
    │       │   ├── pragma/
    │       │   │   └── pragma.go
    │       │   ├── set/
    │       │   │   └── ints.go
    │       │   ├── strs/
    │       │   │   ├── strings.go
    │       │   │   ├── strings_pure.go
    │       │   │   └── strings_unsafe.go
    │       │   └── version/
    │       │       └── version.go
    │       ├── proto/
    │       │   ├── checkinit.go
    │       │   ├── decode.go
    │       │   ├── decode_gen.go
    │       │   ├── doc.go
    │       │   ├── encode.go
    │       │   ├── encode_gen.go
    │       │   ├── equal.go
    │       │   ├── extension.go
    │       │   ├── merge.go
    │       │   ├── messageset.go
    │       │   ├── proto.go
    │       │   ├── proto_methods.go
    │       │   ├── proto_reflect.go
    │       │   ├── reset.go
    │       │   ├── size.go
    │       │   ├── size_gen.go
    │       │   └── wrappers.go
    │       ├── reflect/
    │       │   ├── protodesc/
    │       │   │   ├── desc.go
    │       │   │   ├── desc_init.go
    │       │   │   ├── desc_resolve.go
    │       │   │   ├── desc_validate.go
    │       │   │   └── proto.go
    │       │   ├── protoreflect/
    │       │   │   ├── methods.go
    │       │   │   ├── proto.go
    │       │   │   ├── source.go
    │       │   │   ├── source_gen.go
    │       │   │   ├── type.go
    │       │   │   ├── value.go
    │       │   │   ├── value_pure.go
    │       │   │   ├── value_union.go
    │       │   │   └── value_unsafe.go
    │       │   └── protoregistry/
    │       │       └── registry.go
    │       ├── runtime/
    │       │   ├── protoiface/
    │       │   │   ├── legacy.go
    │       │   │   └── methods.go
    │       │   └── protoimpl/
    │       │       ├── impl.go
    │       │       └── version.go
    │       └── types/
    │           ├── descriptorpb/
    │           │   └── descriptor.pb.go
    │           └── known/
    │               ├── anypb/
    │               │   └── any.pb.go
    │               ├── durationpb/
    │               │   └── duration.pb.go
    │               └── timestamppb/
    │                   └── timestamp.pb.go
    ├── gopkg.in/
    │   ├── yaml.v2/
    │   │   ├── .travis.yml
    │   │   ├── LICENSE
    │   │   ├── LICENSE.libyaml
    │   │   ├── NOTICE
    │   │   ├── README.md
    │   │   ├── apic.go
    │   │   ├── decode.go
    │   │   ├── emitterc.go
    │   │   ├── encode.go
    │   │   ├── parserc.go
    │   │   ├── readerc.go
    │   │   ├── resolve.go
    │   │   ├── scannerc.go
    │   │   ├── sorter.go
    │   │   ├── writerc.go
    │   │   ├── yaml.go
    │   │   ├── yamlh.go
    │   │   └── yamlprivateh.go
    │   └── yaml.v3/
    │       ├── LICENSE
    │       ├── NOTICE
    │       ├── README.md
    │       ├── apic.go
    │       ├── decode.go
    │       ├── emitterc.go
    │       ├── encode.go
    │       ├── parserc.go
    │       ├── readerc.go
    │       ├── resolve.go
    │       ├── scannerc.go
    │       ├── sorter.go
    │       ├── writerc.go
    │       ├── yaml.go
    │       ├── yamlh.go
    │       └── yamlprivateh.go
    └── modules.txt
Copy disabled (too large) Download .txt
Showing preview only (15,810K chars total). Download the full file to get everything.
SYMBOL INDEX (177928 symbols across 2483 files)

FILE: acceptance-tests/actors/aws.go
  function NewAWSLBHelper (line 20) | func NewAWSLBHelper(c acceptance.Config) awsLBHelper {
  type awsLBHelper (line 59) | type awsLBHelper struct
    method loadBalancers (line 41) | func (a awsLBHelper) loadBalancers(vpcName string) []string {
    method GetLBArgs (line 64) | func (a awsLBHelper) GetLBArgs() []string {
    method VerifyCloudConfigExtensions (line 80) | func (a awsLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
    method ConfirmLBsExist (line 86) | func (a awsLBHelper) ConfirmLBsExist(envID string) {
    method ConfirmNoLBsExist (line 96) | func (a awsLBHelper) ConfirmNoLBsExist(envID string) {
    method VerifyBblLBOutput (line 101) | func (a awsLBHelper) VerifyBblLBOutput(stdout string) {
    method ConfirmNoStemcellsExist (line 107) | func (a awsLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}

FILE: acceptance-tests/actors/azure.go
  type azureLBHelper (line 14) | type azureLBHelper struct
    method getLoadBalancer (line 35) | func (z azureLBHelper) getLoadBalancer(resourceGroupName, loadBalancer...
    method GetLBArgs (line 45) | func (z azureLBHelper) GetLBArgs() []string { //nolint:unused
    method VerifyCloudConfigExtensions (line 49) | func (z azureLBHelper) VerifyCloudConfigExtensions(vmExtensions []stri...
    method ConfirmLBsExist (line 53) | func (z azureLBHelper) ConfirmLBsExist(envID string) {
    method ConfirmNoLBsExist (line 59) | func (z azureLBHelper) ConfirmNoLBsExist(envID string) {
    method VerifyBblLBOutput (line 65) | func (z azureLBHelper) VerifyBblLBOutput(stdout string) {
    method ConfirmNoStemcellsExist (line 69) | func (z azureLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}
  function NewAzureLBHelper (line 19) | func NewAzureLBHelper(config acceptance.Config) azureLBHelper {

FILE: acceptance-tests/actors/bbl.go
  type BBL (line 23) | type BBL struct
    method PredefinedEnvID (line 46) | func (b BBL) PredefinedEnvID() string {
    method Up (line 50) | func (b BBL) Up(additionalArgs ...string) *gexec.Session {
    method Plan (line 62) | func (b BBL) Plan(additionalArgs ...string) *gexec.Session {
    method Rotate (line 74) | func (b BBL) Rotate() *gexec.Session {
    method VerifySSH (line 82) | func (b BBL) VerifySSH(session *gexec.Session, ptmx *os.File) {
    method JumpboxSSH (line 90) | func (b BBL) JumpboxSSH(output io.Writer) *exec.Cmd {
    method DirectorSSH (line 99) | func (b BBL) DirectorSSH(output io.Writer) *exec.Cmd {
    method Destroy (line 108) | func (b BBL) Destroy() *gexec.Session {
    method Down (line 117) | func (b BBL) Down() *gexec.Session {
    method CleanupLeftovers (line 126) | func (b BBL) CleanupLeftovers(filter string) *gexec.Session {
    method Lbs (line 135) | func (b BBL) Lbs() string {
    method DirectorUsername (line 139) | func (b BBL) DirectorUsername() string {
    method DirectorPassword (line 143) | func (b BBL) DirectorPassword() string {
    method DirectorAddress (line 147) | func (b BBL) DirectorAddress() string {
    method DirectorCACert (line 151) | func (b BBL) DirectorCACert() string {
    method JumpboxAddress (line 155) | func (b BBL) JumpboxAddress() string {
    method SSHKey (line 159) | func (b BBL) SSHKey() string {
    method DirectorSSHKey (line 163) | func (b BBL) DirectorSSHKey() string {
    method EnvID (line 167) | func (b BBL) EnvID() string {
    method PrintEnv (line 171) | func (b BBL) PrintEnv() string {
    method LatestError (line 175) | func (b BBL) LatestError() string {
    method SaveDirectorCA (line 179) | func (b BBL) SaveDirectorCA() string {
    method ExportBoshAllProxy (line 196) | func (b BBL) ExportBoshAllProxy() string {
    method StartSSHTunnel (line 203) | func (b BBL) StartSSHTunnel() *gexec.Session {
    method fetchValue (line 236) | func (b BBL) fetchValue(value string) string {
    method fetchValueFromRemoteBBLState (line 243) | func (b BBL) fetchValueFromRemoteBBLState(value string) string {
    method fetchValueFromLocalBBLState (line 257) | func (b BBL) fetchValueFromLocalBBLState(value string) string {
    method execute (line 270) | func (b BBL) execute(args []string, stdout io.Writer, stderr io.Writer...
    method interactiveExecute (line 279) | func (b BBL) interactiveExecute(args []string, stdout io.Writer, stder...
  function NewBBL (line 31) | func NewBBL(stateDirectory string, pathToBBL string, configuration accep...
  function getExport (line 224) | func getExport(keyName string, lines []string) string {

FILE: acceptance-tests/actors/boshcli.go
  type BOSHCLI (line 10) | type BOSHCLI struct
    method DirectorExists (line 16) | func (BOSHCLI) DirectorExists(address, username, password, caCertPath ...
    method Env (line 30) | func (BOSHCLI) Env(address, caCertPath string) (string, error) {
    method CloudConfig (line 42) | func (b BOSHCLI) CloudConfig(address, caCertPath, username, password s...
    method RuntimeConfig (line 56) | func (b BOSHCLI) RuntimeConfig(address, caCertPath, username, password...
    method UploadStemcell (line 72) | func (b BOSHCLI) UploadStemcell(address, caCertPath, username, passwor...
    method Stemcells (line 88) | func (b BOSHCLI) Stemcells(address, caCertPath, username, password str...
  function NewBOSHCLI (line 12) | func NewBOSHCLI() BOSHCLI {

FILE: acceptance-tests/actors/cloudstack.go
  function NewCloudStackLBHelper (line 3) | func NewCloudStackLBHelper() vSphereLBHelper {

FILE: acceptance-tests/actors/gcp.go
  type gcpLBHelper (line 15) | type gcpLBHelper struct
    method GetLBArgs (line 46) | func (g gcpLBHelper) GetLBArgs() []string {
    method VerifyCloudConfigExtensions (line 59) | func (g gcpLBHelper) VerifyCloudConfigExtensions(vmExtensions []string) {
    method ConfirmLBsExist (line 65) | func (g gcpLBHelper) ConfirmLBsExist(envID string) {
    method ConfirmNoLBsExist (line 79) | func (g gcpLBHelper) ConfirmNoLBsExist(envID string) {
    method VerifyBblLBOutput (line 87) | func (g gcpLBHelper) VerifyBblLBOutput(stdout string) {
    method ConfirmNoStemcellsExist (line 94) | func (g gcpLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {
  function NewGCPLBHelper (line 21) | func NewGCPLBHelper(config acceptance.Config) gcpLBHelper {

FILE: acceptance-tests/actors/iaas_helper.go
  type IAASLBHelper (line 9) | type IAASLBHelper interface
  function NewIAASLBHelper (line 18) | func NewIAASLBHelper(iaas string, configuration acceptance.Config) IAASL...

FILE: acceptance-tests/actors/openstack.go
  function NewOpenStackLBHelper (line 3) | func NewOpenStackLBHelper() openStackLBHelper {
  type openStackLBHelper (line 7) | type openStackLBHelper struct
    method GetLBArgs (line 10) | func (o openStackLBHelper) GetLBArgs() []string {
    method VerifyCloudConfigExtensions (line 14) | func (o openStackLBHelper) VerifyCloudConfigExtensions(vmExtensions []...
    method ConfirmLBsExist (line 17) | func (o openStackLBHelper) ConfirmLBsExist(envID string) {
    method ConfirmNoLBsExist (line 20) | func (o openStackLBHelper) ConfirmNoLBsExist(envID string) {
    method VerifyBblLBOutput (line 23) | func (o openStackLBHelper) VerifyBblLBOutput(stdout string) {
    method ConfirmNoStemcellsExist (line 26) | func (o openStackLBHelper) ConfirmNoStemcellsExist(stemcellIDs []strin...

FILE: acceptance-tests/actors/vsphere.go
  function NewVSphereLBHelper (line 3) | func NewVSphereLBHelper() vSphereLBHelper {
  type vSphereLBHelper (line 7) | type vSphereLBHelper struct
    method GetLBArgs (line 10) | func (v vSphereLBHelper) GetLBArgs() []string {
    method VerifyCloudConfigExtensions (line 14) | func (v vSphereLBHelper) VerifyCloudConfigExtensions(vmExtensions []st...
    method ConfirmLBsExist (line 17) | func (v vSphereLBHelper) ConfirmLBsExist(envID string) {
    method ConfirmNoLBsExist (line 20) | func (v vSphereLBHelper) ConfirmNoLBsExist(envID string) {
    method VerifyBblLBOutput (line 23) | func (v vSphereLBHelper) VerifyBblLBOutput(stdout string) {
    method ConfirmNoStemcellsExist (line 26) | func (v vSphereLBHelper) ConfirmNoStemcellsExist(stemcellIDs []string) {}

FILE: acceptance-tests/bbl/init_test.go
  function TestAcceptance (line 13) | func TestAcceptance(t *testing.T) {
  function getTimeout (line 46) | func getTimeout(envVar string, defaultTimeout time.Duration) time.Durati...

FILE: acceptance-tests/bbl/upgrade_test.go
  constant BBLReleaseURL (line 22) | BBLReleaseURL = "https://github.com/cloudfoundry/bosh-bootloader/release...

FILE: acceptance-tests/config.go
  type Config (line 11) | type Config struct
  function LoadConfig (line 62) | func LoadConfig() (Config, error) {
  function validateIAAS (line 99) | func validateIAAS(config Config) error {
  function validateAWSCreds (line 107) | func validateAWSCreds(config Config) error {
  function validateAzureCreds (line 123) | func validateAzureCreds(config Config) error {
  function validateGCPCreds (line 147) | func validateGCPCreds(config Config) error {
  function validateVSphereCreds (line 159) | func validateVSphereCreds(config Config) error {
  function validateOpenStackCreds (line 193) | func validateOpenStackCreds(config Config) error {
  function loadConfigFromEnvVars (line 224) | func loadConfigFromEnvVars() Config {
  function SkipUnless (line 274) | func SkipUnless(match string) {

FILE: acceptance-tests/no-iaas/init_test.go
  function TestAcceptance (line 11) | func TestAcceptance(t *testing.T) {

FILE: acceptance-tests/no-iaas/state_query_test.go
  constant BBL_STATE_6_10_46 (line 90) | BBL_STATE_6_10_46 = `

FILE: acceptance-tests/state.go
  type State (line 12) | type State struct
    method Checksum (line 25) | func (s State) Checksum() string {
    method EnvID (line 31) | func (s State) EnvID() string {
    method TFState (line 36) | func (s State) TFState() string {
    method BOSHState (line 41) | func (s State) BOSHState() string {
    method BOSHManifest (line 50) | func (s State) BOSHManifest() string {
    method readStateFile (line 56) | func (s State) readStateFile() state {
  type state (line 16) | type state struct

FILE: acceptance-tests/vm_extensions.go
  function VmExtensionNames (line 9) | func VmExtensionNames(cloudConfigOutput string) []string {

FILE: application/app.go
  type CommandSet (line 10) | type CommandSet
  type usage (line 12) | type usage interface
  type App (line 17) | type App struct
    method Run (line 31) | func (a App) Run() error {
    method getCommand (line 39) | func (a App) getCommand(commandString string) (commands.Command, error) {
    method execute (line 48) | func (a App) execute() error {
  function New (line 23) | func New(commands CommandSet, configuration Configuration, usage usage) ...

FILE: application/configuration.go
  type GlobalConfiguration (line 5) | type GlobalConfiguration struct
  type StringSlice (line 13) | type StringSlice
    method ContainsAny (line 15) | func (s StringSlice) ContainsAny(targets ...string) bool {
  type Configuration (line 26) | type Configuration struct

FILE: application/init_test.go
  function TestApplication (line 10) | func TestApplication(t *testing.T) {

FILE: application/logger.go
  type Logger (line 9) | type Logger struct
    method clear (line 25) | func (l *Logger) clear() {
    method Step (line 34) | func (l *Logger) Step(message string, a ...interface{}) {
    method Dot (line 40) | func (l *Logger) Dot() {
    method Printf (line 45) | func (l *Logger) Printf(message string, a ...interface{}) {
    method Println (line 50) | func (l *Logger) Println(message string) {
    method Debugf (line 55) | func (l *Logger) Debugf(message string, a ...interface{}) {
    method Debugln (line 60) | func (l *Logger) Debugln(message string) {
    method NoConfirm (line 65) | func (l *Logger) NoConfirm() {
    method Prompt (line 69) | func (l *Logger) Prompt(message string) bool {
    method PromptWithDetails (line 91) | func (l *Logger) PromptWithDetails(resourceType, resourceName string) ...
  function NewLogger (line 16) | func NewLogger(writer io.Writer, reader io.Reader) *Logger {

FILE: application/state_validator.go
  type StateValidator (line 10) | type StateValidator struct
    method Validate (line 18) | func (s StateValidator) Validate() error {
  function NewStateValidator (line 14) | func NewStateValidator(stateDir string) StateValidator {

FILE: aws/client.go
  type EC2Client (line 19) | type EC2Client interface
  type Route53Client (line 25) | type Route53Client interface
  type logger (line 29) | type logger interface
  type AvailabilityZones (line 33) | type AvailabilityZones interface
  type DNSZones (line 37) | type DNSZones interface
  type Client (line 41) | type Client struct
    method RetrieveDNS (line 67) | func (c Client) RetrieveDNS(url string) string {
    method RetrieveAZs (line 92) | func (c Client) RetrieveAZs(region string) ([]string, error) {
    method CheckExists (line 121) | func (c Client) CheckExists(networkName string) (bool, error) {
    method ValidateSafeToDelete (line 141) | func (c Client) ValidateSafeToDelete(vpcID, envID string) error {
    method flattenVMs (line 165) | func (c Client) flattenVMs(reservations []*awsec2.Reservation) []string {
    method vmName (line 175) | func (c Client) vmName(instance *awsec2.Instance) string {
    method removeOneVM (line 187) | func (c Client) removeOneVM(vms []string, vmToRemove string) []string {
    method removeAll (line 197) | func (c Client) removeAll(vms []string, vmToRemove string) []string {
    method GetVPC (line 209) | func (c Client) GetVPC(vpcName string) (*string, error) {
  function NewClient (line 47) | func NewClient(creds storage.AWS, logger logger) Client {

FILE: aws/client_test.go
  function reservationContainingInstance (line 389) | func reservationContainingInstance(tag string) *awsec2.Reservation {

FILE: aws/exports_test.go
  function NewClientWithInjectedEC2Client (line 3) | func NewClientWithInjectedEC2Client(ec2Client EC2Client, logger logger) ...
  function NewClientWithInjectedRoute53Client (line 10) | func NewClientWithInjectedRoute53Client(route53Client Route53Client, log...
  method GetEC2Client (line 17) | func (c Client) GetEC2Client() EC2Client {
  method GetRoute53Client (line 21) | func (c Client) GetRoute53Client() Route53Client {

FILE: aws/init_test.go
  function TestAWS (line 10) | func TestAWS(t *testing.T) {

FILE: azure/azure_suite_test.go
  function TestAzure (line 10) | func TestAzure(t *testing.T) {

FILE: azure/client.go
  type Client (line 11) | type Client struct
    method CheckExists (line 24) | func (c Client) CheckExists(envID string) (bool, error) {
    method ValidateSafeToDelete (line 39) | func (c Client) ValidateSafeToDelete(networkName string, envID string)...
  type AzureVMsClient (line 16) | type AzureVMsClient interface
  type AzureGroupsClient (line 20) | type AzureGroupsClient interface

FILE: azure/client_provider.go
  function NewClient (line 14) | func NewClient(azureConfig storage.Azure) (Client, error) {

FILE: azure/client_wrappers.go
  type AzureVMsClientWrapper (line 11) | type AzureVMsClientWrapper struct
    method List (line 15) | func (c AzureVMsClientWrapper) List(ctx context.Context, resourceGroup...
  type AzureStorageClientWrapper (line 29) | type AzureStorageClientWrapper struct
    method List (line 33) | func (c AzureStorageClientWrapper) List(ctx context.Context) (armstora...

FILE: azure/export_test.go
  function NewClientWithInjectedVMsClient (line 3) | func NewClientWithInjectedVMsClient(azureVMsClient AzureVMsClient) Client {
  function NewClientWithInjectedGroupsClient (line 9) | func NewClientWithInjectedGroupsClient(azureGroupsClient AzureGroupsClie...

FILE: backends/backend.go
  type Config (line 15) | type Config struct
  type Provider (line 24) | type Provider interface
  function NewProvider (line 28) | func NewProvider() Provider {
  type provider (line 32) | type provider struct
    method Client (line 34) | func (p provider) Client(iaas string) (Backend, error) {
  type Backend (line 45) | type Backend interface
  type cloudStorageBackend (line 49) | type cloudStorageBackend struct
    method GetState (line 51) | func (c cloudStorageBackend) GetState(config Config, name string) error {
  type gcsStateBackend (line 87) | type gcsStateBackend struct
    method GetState (line 89) | func (g gcsStateBackend) GetState(config Config, name string) error {
    method getGCPServiceAccountKey (line 108) | func (g gcsStateBackend) getGCPServiceAccountKey(key string) (string, ...

FILE: bbl/main.go
  function main (line 51) | func main() {

FILE: bosh/all_proxy_getter.go
  type AllProxyGetter (line 10) | type AllProxyGetter struct
    method GeneratePrivateKey (line 27) | func (a AllProxyGetter) GeneratePrivateKey() (string, error) {
    method BoshAllProxy (line 48) | func (a AllProxyGetter) BoshAllProxy(jumpboxURL, privateKeyPath string...
  type allProxyFs (line 15) | type allProxyFs interface
  function NewAllProxyGetter (line 20) | func NewAllProxyGetter(sshKeyGetter sshKeyGetter, fs allProxyFs) AllProx...

FILE: bosh/authenticated_cli.go
  type AuthenticatedCLI (line 9) | type AuthenticatedCLI struct
    method Run (line 31) | func (c AuthenticatedCLI) Run(stdout io.Writer, workingDirectory strin...
  function NewAuthenticatedCLI (line 16) | func NewAuthenticatedCLI(stderr io.Writer, boshPath, directorAddress, us...

FILE: bosh/cidr_block.go
  type CIDRBlock (line 9) | type CIDRBlock struct
    method GetFirstIP (line 21) | func (c CIDRBlock) GetFirstIP() IP {
    method GetNthIP (line 25) | func (c CIDRBlock) GetNthIP(n int) IP {
    method GetLastIP (line 35) | func (c CIDRBlock) GetLastIP() IP {
  function ParseCIDRBlock (line 13) | func ParseCIDRBlock(cidrBlock string) (CIDRBlock, error) {

FILE: bosh/cli.go
  type CLI (line 8) | type CLI struct
    method Run (line 20) | func (c CLI) Run(stdout io.Writer, workingDirectory string, args []str...
    method GetBOSHPath (line 30) | func (c CLI) GetBOSHPath() string {
  function NewCLI (line 13) | func NewCLI(stderr io.Writer, path string) CLI {

FILE: bosh/cli_provider.go
  type CLIProvider (line 9) | type CLIProvider struct
    method AuthenticatedCLI (line 30) | func (c CLIProvider) AuthenticatedCLI(jumpbox storage.Jumpbox, stderr ...
  type allProxyGetter (line 14) | type allProxyGetter interface
  type AuthenticatedCLIRunner (line 19) | type AuthenticatedCLIRunner interface
  function NewCLIProvider (line 23) | func NewCLIProvider(allProxyGetter allProxyGetter, boshCLIPath string) C...

FILE: bosh/config_updater.go
  type ConfigUpdater (line 11) | type ConfigUpdater struct
    method InitializeAuthenticatedCLI (line 23) | func (c ConfigUpdater) InitializeAuthenticatedCLI(state storage.State)...
    method UpdateCloudConfig (line 40) | func (c ConfigUpdater) UpdateCloudConfig(boshCLI AuthenticatedCLIRunne...
    method UpdateRuntimeConfig (line 50) | func (c ConfigUpdater) UpdateRuntimeConfig(boshCLI AuthenticatedCLIRun...
  type boshCLIProvider (line 15) | type boshCLIProvider interface
  function NewConfigUpdater (line 19) | func NewConfigUpdater(boshCLIProvider boshCLIProvider) ConfigUpdater {

FILE: bosh/credhub_getter.go
  type CredhubGetter (line 12) | type CredhubGetter struct
    method GetServer (line 24) | func (c CredhubGetter) GetServer() (string, error) {
    method GetCerts (line 47) | func (c CredhubGetter) GetCerts() (string, error) {
    method GetPassword (line 75) | func (c CredhubGetter) GetPassword() (string, error) {
  function NewCredhubGetter (line 17) | func NewCredhubGetter(stateStore stateStore, fileIO fileio.FileReader) C...

FILE: bosh/deployment_vars_yaml.go
  type sharedDeploymentVarsYAML (line 3) | type sharedDeploymentVarsYAML struct

FILE: bosh/executor.go
  type executorFs (line 20) | type executorFs interface
  type Executor (line 26) | type Executor struct
    method getSetupFiles (line 90) | func (e Executor) getSetupFiles(sourcePath, destPath string) []setupFi...
    method PlanJumpbox (line 103) | func (e Executor) PlanJumpbox(input DirInput, deploymentDir, iaas stri...
    method PlanJumpboxWithState (line 107) | func (e Executor) PlanJumpboxWithState(input DirInput, deploymentDir, ...
    method getDirectorSetupFiles (line 205) | func (e Executor) getDirectorSetupFiles(stateDir, deploymentDir, iaas ...
    method getDirectorOpsFiles (line 228) | func (e Executor) getDirectorOpsFiles(stateDir, deploymentDir, iaas st...
    method PlanDirector (line 250) | func (e Executor) PlanDirector(input DirInput, deploymentDir, iaas str...
    method PlanDirectorWithState (line 254) | func (e Executor) PlanDirectorWithState(input DirInput, deploymentDir,...
    method WriteDeploymentVars (line 350) | func (e Executor) WriteDeploymentVars(input DirInput, deploymentVars s...
    method CreateEnv (line 359) | func (e Executor) CreateEnv(input DirInput, state storage.State) (stri...
    method DeleteEnv (line 407) | func (e Executor) DeleteEnv(input DirInput, state storage.State) error {
    method deploymentExists (line 457) | func (e Executor) deploymentExists(varsDir, deployment string) (bool, ...
    method Path (line 474) | func (e Executor) Path() string {
    method Version (line 478) | func (e Executor) Version() (string, error) {
  type DirInput (line 33) | type DirInput struct
  type cli (line 39) | type cli interface
  type setupFile (line 44) | type setupFile struct
  constant jumpboxDeploymentRepo (line 51) | jumpboxDeploymentRepo = "jumpbox-deployment"
  constant boshDeploymentRepo (line 52) | boshDeploymentRepo    = "bosh-deployment"
  function NewExecutor (line 58) | func NewExecutor(cmd cli, fs executorFs) Executor {
  function extractNestedFiles (line 66) | func extractNestedFiles(fs embed.FS, fileList []setupFile, path string, ...
  function formatScript (line 337) | func formatScript(boshPath, stateDir, command string, args []string) str...

FILE: bosh/executor_test.go
  function formatScript (line 1090) | func formatScript(command string, stateDir string, args []string) string {
  type behavesLikePlanFs (line 1103) | type behavesLikePlanFs interface
  function behavesLikePlan (line 1108) | func behavesLikePlan(expectedArgs []string, cli *fakes.BOSHCLI, fs behav...

FILE: bosh/exports_test.go
  function SetOSSetenv (line 7) | func SetOSSetenv(f func(string, string) error) {
  function ResetOSSetenv (line 11) | func ResetOSSetenv() {
  function SetOSUnsetenv (line 15) | func SetOSUnsetenv(f func(string) error) {
  function ResetOSUnsetenv (line 19) | func ResetOSUnsetenv() {

FILE: bosh/init_test.go
  function TestBosh (line 11) | func TestBosh(t *testing.T) {

FILE: bosh/ip.go
  type IP (line 7) | type IP struct
    method Add (line 22) | func (i IP) Add(offset int) IP {
    method Subtract (line 33) | func (i IP) Subtract(offset int) IP {
    method String (line 44) | func (i IP) String() string {
  function ParseIP (line 11) | func ParseIP(ip string) (IP, error) {

FILE: bosh/manager.go
  type managerFs (line 21) | type managerFs interface
  type Manager (line 26) | type Manager struct
    method Path (line 80) | func (m *Manager) Path() string {
    method Version (line 84) | func (m *Manager) Version() (string, error) {
    method InitializeJumpbox (line 93) | func (m *Manager) InitializeJumpbox(state storage.State) error {
    method CreateJumpbox (line 119) | func (m *Manager) CreateJumpbox(state storage.State, terraformOutputs ...
    method InitializeDirector (line 172) | func (m *Manager) InitializeDirector(state storage.State) error {
    method CleanUpDirector (line 198) | func (m *Manager) CleanUpDirector(state storage.State) error {
    method CreateDirector (line 221) | func (m *Manager) CreateDirector(state storage.State, terraformOutputs...
    method DeleteDirector (line 278) | func (m *Manager) DeleteDirector(state storage.State, terraformOutputs...
    method DeleteJumpbox (line 330) | func (m *Manager) DeleteJumpbox(state storage.State, terraformOutputs ...
    method GetJumpboxDeploymentVars (line 363) | func (m *Manager) GetJumpboxDeploymentVars(state storage.State, terraf...
    method GetDirectorDeploymentVars (line 395) | func (m *Manager) GetDirectorDeploymentVars(state storage.State, terra...
  type directorVars (line 35) | type directorVars struct
  type executor (line 43) | type executor interface
  type logger (line 53) | type logger interface
  type stateStore (line 58) | type stateStore interface
  type sshKeyGetter (line 65) | type sshKeyGetter interface
  function NewManager (line 69) | func NewManager(executor executor, logger logger, stateStore stateStore,...
  function mustMarshal (line 386) | func mustMarshal(yamlStruct interface{}) []byte {
  function getDirectorVars (line 418) | func getDirectorVars(v string) directorVars {

FILE: bosh/manager_create_error.go
  type ManagerCreateError (line 5) | type ManagerCreateError struct
    method Error (line 17) | func (b ManagerCreateError) Error() string {
    method State (line 21) | func (b ManagerCreateError) State() storage.State {
  function NewManagerCreateError (line 10) | func NewManagerCreateError(state storage.State, err error) ManagerCreate...

FILE: bosh/manager_delete_error.go
  type ManagerDeleteError (line 5) | type ManagerDeleteError struct
    method Error (line 17) | func (b ManagerDeleteError) Error() string {
    method State (line 21) | func (b ManagerDeleteError) State() storage.State {
  function NewManagerDeleteError (line 10) | func NewManagerDeleteError(state storage.State, err error) ManagerDelete...

FILE: bosh/manager_test.go
  function IndexOf (line 15) | func IndexOf(stringSlice []string, searchValue string) int {

FILE: bosh/ops.go
  constant GCPBoshDirectorEphemeralIPOps (line 3) | GCPBoshDirectorEphemeralIPOps = `
  constant AWSBoshDirectorEphemeralIPOps (line 9) | AWSBoshDirectorEphemeralIPOps = `
  constant VSphereJumpboxNetworkOps (line 15) | VSphereJumpboxNetworkOps = `---

FILE: bosh/ssh_key_deleter.go
  type deleterFs (line 13) | type deleterFs interface
  type SSHKeyDeleter (line 19) | type SSHKeyDeleter struct
    method Delete (line 31) | func (s SSHKeyDeleter) Delete() error {
  function NewSSHKeyDeleter (line 24) | func NewSSHKeyDeleter(stateStore stateStore, fs deleterFs) SSHKeyDeleter {
  function deleteJumpboxSSHKey (line 57) | func deleteJumpboxSSHKey(varsString string) (string, error) {

FILE: bosh/ssh_key_getter.go
  type SSHKeyGetter (line 12) | type SSHKeyGetter struct
    method Get (line 24) | func (j SSHKeyGetter) Get(deployment string) (string, error) {
  function NewSSHKeyGetter (line 17) | func NewSSHKeyGetter(stateStore stateStore, fReader fileio.FileReader) S...

FILE: bosh/version_error.go
  type BOSHVersionError (line 3) | type BOSHVersionError struct
    method Error (line 13) | func (b BOSHVersionError) Error() string {
  function NewBOSHVersionError (line 7) | func NewBOSHVersionError(err error) BOSHVersionError {

FILE: certs/init_test.go
  function TestIAM (line 10) | func TestIAM(t *testing.T) {

FILE: certs/validator.go
  type CertData (line 19) | type CertData struct
  type Validator (line 25) | type Validator struct
    method ReadAndValidate (line 31) | func (v Validator) ReadAndValidate(certPath, keyPath, chainPath string...
    method Read (line 45) | func (v Validator) Read(certPath, keyPath, chainPath string) (CertData...
    method Validate (line 76) | func (v Validator) Validate(cert, key, chain []byte) error {
    method ReadAndValidatePKCS12 (line 141) | func (v Validator) ReadAndValidatePKCS12(certPath, passwordPath string...
    method ReadPKCS12 (line 155) | func (v Validator) ReadPKCS12(certPath, passwordPath string) (CertData...
    method ValidatePKCS12 (line 180) | func (v Validator) ValidatePKCS12(cert, password []byte) error {
  function NewValidator (line 27) | func NewValidator() Validator {
  function validatePEM (line 194) | func validatePEM(data []byte) error {
  function readFile (line 202) | func readFile(propertyName string, flagName string, filePath string) ([]...
  function validateCertAndKey (line 231) | func validateCertAndKey(certificate *x509.Certificate, privateKey *rsa.P...
  function validateCertAndChain (line 240) | func validateCertAndChain(certificate *x509.Certificate, certPool *x509....
  function parseCertificate (line 250) | func parseCertificate(certificateData []byte, loadKeyPairError error) (*...
  function parseChain (line 260) | func parseChain(chainData []byte) (*x509.CertPool, error) {

FILE: cloudconfig/aws/base_ops_template.go
  constant BaseOps (line 4) | BaseOps = `

FILE: cloudconfig/aws/exports_test.go
  function SetMarshal (line 5) | func SetMarshal(f func(interface{}) ([]byte, error)) {
  function ResetMarshal (line 9) | func ResetMarshal() {

FILE: cloudconfig/aws/init_test.go
  function TestAWSCloudConfig (line 10) | func TestAWSCloudConfig(t *testing.T) {

FILE: cloudconfig/aws/ops_generator.go
  type OpsGenerator (line 16) | type OpsGenerator struct
    method GenerateVars (line 84) | func (o OpsGenerator) GenerateVars(state storage.State) (string, error) {
    method Generate (line 189) | func (o OpsGenerator) Generate(state storage.State) (string, error) {
    method generateOps (line 214) | func (o OpsGenerator) generateOps(state storage.State) ([]op, error) {
  type availabilityZones (line 21) | type availabilityZones interface
  type terraformManager (line 25) | type terraformManager interface
  type op (line 29) | type op struct
  type az (line 35) | type az struct
  type azCloudProperties (line 40) | type azCloudProperties struct
  type network (line 44) | type network struct
  type networkSubnet (line 50) | type networkSubnet struct
  type networkSubnetCloudProperties (line 59) | type networkSubnetCloudProperties struct
  type lb (line 64) | type lb struct
  type lbCloudProperties (line 69) | type lbCloudProperties struct
  function NewOpsGenerator (line 77) | func NewOpsGenerator(terraformManager terraformManager, availabilityZone...
  function generateAZs (line 158) | func generateAZs(startingIndex int, idMap, cidrMap map[string]string) ([...
  function createOp (line 206) | func createOp(opType, opPath string, value interface{}) op {
  function azify (line 286) | func azify(az int, azName, cidr, subnet string) (map[string]string, erro...
  function generateNetworkSubnet (line 310) | func generateNetworkSubnet(az int) networkSubnet {

FILE: cloudconfig/azure/base_ops_template.go
  constant BaseOps (line 4) | BaseOps = `

FILE: cloudconfig/azure/exports_test.go
  function SetMarshal (line 5) | func SetMarshal(f func(interface{}) ([]byte, error)) {
  function ResetMarshal (line 9) | func ResetMarshal() {

FILE: cloudconfig/azure/init_test.go
  function TestAzure (line 10) | func TestAzure(t *testing.T) {

FILE: cloudconfig/azure/ops_generator.go
  type OpsGenerator (line 13) | type OpsGenerator struct
    method GenerateVars (line 67) | func (o OpsGenerator) GenerateVars(state storage.State) (string, error) {
    method Generate (line 86) | func (o OpsGenerator) Generate(state storage.State) (string, error) {
  type terraformManager (line 17) | type terraformManager interface
  type op (line 21) | type op struct
  type lb (line 27) | type lb struct
  type cloudProperties (line 32) | type cloudProperties struct
  type network (line 38) | type network struct
  type networkSubnet (line 44) | type networkSubnet struct
  type subnetCloudProperties (line 53) | type subnetCloudProperties struct
  function NewOpsGenerator (line 61) | func NewOpsGenerator(terraformManager terraformManager) OpsGenerator {

FILE: cloudconfig/cloud_config_templates.go
  constant BaseCloudConfig (line 4) | BaseCloudConfig = `---

FILE: cloudconfig/cloudstack/base_ops_template.go
  constant BaseOps (line 4) | BaseOps = `

FILE: cloudconfig/cloudstack/init_test.go
  function TestCloudstack (line 10) | func TestCloudstack(t *testing.T) {

FILE: cloudconfig/cloudstack/ops_generator.go
  type networkSubnet (line 15) | type networkSubnet struct
  type op (line 25) | type op struct
  type network (line 31) | type network struct
  function createOp (line 39) | func createOp(opType, opPath string, value interface{}) op {
  type networkSubnetCloudProperties (line 47) | type networkSubnetCloudProperties struct
  type OpsGenerator (line 51) | type OpsGenerator struct
    method Generate (line 69) | func (o OpsGenerator) Generate(state storage.State) (string, error) {
    method GenerateVars (line 122) | func (o OpsGenerator) GenerateVars(state storage.State) (string, error) {
    method generateNetworkSubnetVars (line 168) | func (o OpsGenerator) generateNetworkSubnetVars(networkName, cidr, gw ...
    method generateNetworkName (line 188) | func (o OpsGenerator) generateNetworkName(networkName, shortEnvID stri...
    method generateNetworkSubnet (line 192) | func (o OpsGenerator) generateNetworkSubnet(networkName string) networ...
  type terraformManager (line 55) | type terraformManager interface
  constant terraformNameCharLimit (line 59) | terraformNameCharLimit = 45
  function NewOpsGenerator (line 63) | func NewOpsGenerator(terraformManager terraformManager) OpsGenerator {

FILE: cloudconfig/gcp/base_ops_template.go
  constant BaseOps (line 4) | BaseOps = `

FILE: cloudconfig/gcp/exports_test.go
  function SetMarshal (line 5) | func SetMarshal(f func(interface{}) ([]byte, error)) {
  function ResetMarshal (line 9) | func ResetMarshal() {

FILE: cloudconfig/gcp/init_test.go
  function TestGCP (line 10) | func TestGCP(t *testing.T) {

FILE: cloudconfig/gcp/ops_generator.go
  type OpsGenerator (line 14) | type OpsGenerator struct
    method GenerateVars (line 78) | func (o OpsGenerator) GenerateVars(state storage.State) (string, error) {
    method Generate (line 119) | func (o OpsGenerator) Generate(state storage.State) (string, error) {
    method generateGCPOps (line 144) | func (o *OpsGenerator) generateGCPOps(state storage.State) ([]op, erro...
  type terraformManager (line 18) | type terraformManager interface
  type op (line 22) | type op struct
  type az (line 28) | type az struct
  type azCloudProperties (line 33) | type azCloudProperties struct
  type network (line 37) | type network struct
  type networkSubnet (line 43) | type networkSubnet struct
  type subnetCloudProperties (line 52) | type subnetCloudProperties struct
  type lb (line 59) | type lb struct
  type lbCloudProperties (line 64) | type lbCloudProperties struct
  function NewOpsGenerator (line 72) | func NewOpsGenerator(terraformManager terraformManager) OpsGenerator {
  function createOp (line 136) | func createOp(opType, opPath string, value interface{}) op {

FILE: cloudconfig/init_test.go
  function TestCloudConfig (line 10) | func TestCloudConfig(t *testing.T) {

FILE: cloudconfig/manager.go
  type configUpdater (line 13) | type configUpdater interface
  type fs (line 18) | type fs interface
  type Manager (line 24) | type Manager struct
    method Initialize (line 63) | func (m Manager) Initialize(state storage.State) error {
    method IsPresentCloudConfig (line 87) | func (m Manager) IsPresentCloudConfig() bool {
    method IsPresentCloudConfigVars (line 102) | func (m Manager) IsPresentCloudConfigVars() bool {
    method Update (line 116) | func (m Manager) Update(state storage.State) error {
  type logger (line 33) | type logger interface
  type OpsGenerator (line 37) | type OpsGenerator interface
  type terraformManager (line 42) | type terraformManager interface
  type dirProvider (line 46) | type dirProvider interface
  function NewManager (line 51) | func NewManager(logger logger, cloudConfigUpdater configUpdater, dirProv...

FILE: cloudconfig/openstack/base_ops_template.go
  constant BaseOps (line 4) | BaseOps = `---

FILE: cloudconfig/openstack/init_test.go
  function TestOpenStack (line 10) | func TestOpenStack(t *testing.T) {

FILE: cloudconfig/openstack/ops_generator.go
  type OpsGenerator (line 12) | type OpsGenerator struct
    method Generate (line 26) | func (o OpsGenerator) Generate(state storage.State) (string, error) {
    method GenerateVars (line 30) | func (o OpsGenerator) GenerateVars(state storage.State) (string, error) {
  type terraformManager (line 16) | type terraformManager interface
  function NewOpsGenerator (line 20) | func NewOpsGenerator(terraformManager terraformManager) OpsGenerator {

FILE: cloudconfig/vsphere/base_ops_template.go
  constant BaseOps (line 4) | BaseOps = `---

FILE: cloudconfig/vsphere/init_test.go
  function TestVSphere (line 10) | func TestVSphere(t *testing.T) {

FILE: cloudconfig/vsphere/ops_generator.go
  type OpsGenerator (line 12) | type OpsGenerator struct
    method Generate (line 26) | func (o OpsGenerator) Generate(state storage.State) (string, error) {
    method GenerateVars (line 30) | func (o OpsGenerator) GenerateVars(state storage.State) (string, error) {
  type terraformManager (line 16) | type terraformManager interface
  function NewOpsGenerator (line 20) | func NewOpsGenerator(terraformManager terraformManager) OpsGenerator {

FILE: commands/aws_lbs.go
  type AWSLBs (line 11) | type AWSLBs struct
    method Execute (line 23) | func (l AWSLBs) Execute(subcommandFlags []string, state storage.State)...
  function NewAWSLBs (line 16) | func NewAWSLBs(terraformManager terraformManager, logger logger) AWSLBs {

FILE: commands/azure_lbs.go
  type AzureLBs (line 9) | type AzureLBs struct
    method Execute (line 21) | func (l AzureLBs) Execute(subcommandFlags []string, state storage.Stat...
  function NewAzureLBs (line 14) | func NewAzureLBs(terraformManager terraformManager, logger logger) Azure...

FILE: commands/cleanup_leftovers.go
  type FilteredDeleter (line 11) | type FilteredDeleter interface
  type CleanupLeftovers (line 16) | type CleanupLeftovers struct
    method CheckFastFails (line 26) | func (l CleanupLeftovers) CheckFastFails(subcommandFlags []string, sta...
    method Execute (line 30) | func (l CleanupLeftovers) Execute(subcommandFlags []string, state stor...
    method Usage (line 63) | func (l CleanupLeftovers) Usage() string {
  function NewCleanupLeftovers (line 20) | func NewCleanupLeftovers(deleter FilteredDeleter) CleanupLeftovers {

FILE: commands/command.go
  type Command (line 5) | type Command interface

FILE: commands/commands_usage.go
  constant Credentials (line 6) | Credentials = `
  constant requiresCredentials (line 55) | requiresCredentials = `
  constant LBUsage (line 59) | LBUsage = `
  constant PlanCommandUsage (line 68) | PlanCommandUsage = `Populates a state directory with the latest config w...
  constant UpCommandUsage (line 74) | UpCommandUsage = `Deploys BOSH director on an IAAS
  constant DestroyCommandUsage (line 80) | DestroyCommandUsage = `Tears down BOSH director infrastructure
  constant CleanupLeftoversCommandUsage (line 84) | CleanupLeftoversCommandUsage = `Cleans up orphaned IAAS resources
  constant LBsCommandUsage (line 89) | LBsCommandUsage = "Prints attached load balancer(s)"
  constant OutputsCommandUsage (line 91) | OutputsCommandUsage = "Prints the outputs from terraform."
  constant VersionCommandUsage (line 93) | VersionCommandUsage = "Prints version"
  constant UsageCommandUsage (line 95) | UsageCommandUsage = "Prints helpful message for the given command"
  constant EnvIdCommandUsage (line 97) | EnvIdCommandUsage = "Prints environment ID"
  constant SSHKeyCommandUsage (line 99) | SSHKeyCommandUsage = "Prints SSH private key for the jumpbox."
  constant DirectorSSHKeyCommandUsage (line 101) | DirectorSSHKeyCommandUsage = "Prints SSH private key for the director."
  constant SSHCommandUsage (line 103) | SSHCommandUsage = `Opens an SSH connection to the director or the jumpbox.
  constant RotateCommandUsage (line 110) | RotateCommandUsage = "Rotates SSH key for the jumpbox user."
  constant JumpboxAddressCommandUsage (line 112) | JumpboxAddressCommandUsage = "Prints BOSH jumpbox address"
  constant DirectorUsernameCommandUsage (line 114) | DirectorUsernameCommandUsage = "Prints BOSH director username"
  constant DirectorPasswordCommandUsage (line 116) | DirectorPasswordCommandUsage = "Prints BOSH director password"
  constant DirectorAddressCommandUsage (line 118) | DirectorAddressCommandUsage = "Prints BOSH director address"
  constant DirectorCACertCommandUsage (line 120) | DirectorCACertCommandUsage = "Prints BOSH director CA certificate"
  constant PrintEnvCommandUsage (line 122) | PrintEnvCommandUsage = `Prints required BOSH environment variables.
  constant LatestErrorCommandUsage (line 127) | LatestErrorCommandUsage = "Prints the output from the latest call to ter...
  method Usage (line 130) | func (Up) Usage() string {
  method Usage (line 134) | func (Plan) Usage() string {
  method Usage (line 138) | func (Destroy) Usage() string {
  method Usage (line 142) | func (Rotate) Usage() string {
  method Usage (line 146) | func (LBs) Usage() string { return LBsCommandUsage }
  method Usage (line 148) | func (Outputs) Usage() string { return OutputsCommandUsage }
  method Usage (line 150) | func (Version) Usage() string { return VersionCommandUsage }
  method Usage (line 152) | func (Usage) Usage() string { return UsageCommandUsage }
  method Usage (line 154) | func (PrintEnv) Usage() string { return PrintEnvCommandUsage }
  method Usage (line 156) | func (LatestError) Usage() string { return LatestErrorCommandUsage }
  method Usage (line 158) | func (Validate) Usage() string { return "" }
  method Usage (line 160) | func (s SSHKey) Usage() string {
  method Usage (line 167) | func (s SSH) Usage() string {
  method Usage (line 171) | func (s StateQuery) Usage() string {

FILE: commands/commands_usage_test.go
  function newStateQuery (line 191) | func newStateQuery(propertyName string) commands.StateQuery {

FILE: commands/destroy.go
  type Destroy (line 12) | type Destroy struct
    method CheckFastFails (line 40) | func (d Destroy) CheckFastFails(subcommandFlags []string, state storag...
    method Execute (line 93) | func (d Destroy) Execute(subcommandFlags []string, state storage.State...
    method deleteBOSH (line 166) | func (d Destroy) deleteBOSH(state storage.State, terraformOutputs terr...
  type NetworkDeletionValidator (line 22) | type NetworkDeletionValidator interface
  function NewDestroy (line 26) | func NewDestroy(plan plan, logger logger, boshManager boshManager, state...

FILE: commands/fail_fast_bosh_version.go
  function fastFailBOSHVersion (line 10) | func fastFailBOSHVersion(boshManager boshManager) error {

FILE: commands/gcp_lbs.go
  type GCPLBs (line 11) | type GCPLBs struct
    method Execute (line 23) | func (l GCPLBs) Execute(subcommandFlags []string, state storage.State)...
  function NewGCPLBs (line 16) | func NewGCPLBs(terraformManager terraformManager, logger logger) GCPLBs {

FILE: commands/global_flags.go
  type GlobalFlags (line 3) | type GlobalFlags struct

FILE: commands/helpers.go
  function handleTerraformError (line 11) | func handleTerraformError(err error, state storage.State, stateStore sta...
  type ExitSuccessfully (line 23) | type ExitSuccessfully struct
    method Error (line 25) | func (e ExitSuccessfully) Error() string {
  type NoBBLStateError (line 29) | type NoBBLStateError struct
    method Error (line 37) | func (e NoBBLStateError) Error() string {
    method String (line 41) | func (e NoBBLStateError) String() string {
  function NewNoBBLStateError (line 33) | func NewNoBBLStateError(dir string) NoBBLStateError {

FILE: commands/init_test.go
  function TestCommands (line 10) | func TestCommands(t *testing.T) {

FILE: commands/interfaces.go
  type plan (line 9) | type plan interface
  type up (line 17) | type up interface
  type terraformManager (line 23) | type terraformManager interface
  type boshManager (line 34) | type boshManager interface
  type envIDManager (line 48) | type envIDManager interface
  type stateValidator (line 52) | type stateValidator interface
  type certificateValidator (line 56) | type certificateValidator interface
  type lbArgsHandler (line 63) | type lbArgsHandler interface
  type logger (line 68) | type logger interface
  type stateStore (line 75) | type stateStore interface
  type cloudConfigManager (line 82) | type cloudConfigManager interface
  type runtimeConfigManager (line 89) | type runtimeConfigManager interface

FILE: commands/latest_error.go
  type LatestError (line 5) | type LatestError struct
    method CheckFastFails (line 17) | func (l LatestError) CheckFastFails(subcommandFlags []string, state st...
    method Execute (line 26) | func (l LatestError) Execute(subcommandFlags []string, bblState storag...
  function NewLatestError (line 10) | func NewLatestError(logger logger, stateValidator stateValidator) Latest...

FILE: commands/lb_args_handler.go
  type LBArgsHandler (line 12) | type LBArgsHandler struct
    method GetLBState (line 30) | func (l LBArgsHandler) GetLBState(iaas string, args LBArgs) (storage.L...
    method Merge (line 72) | func (l LBArgsHandler) Merge(new storage.LB, old storage.LB) storage.LB {
  type LBArgs (line 16) | type LBArgs struct
  function NewLBArgsHandler (line 24) | func NewLBArgsHandler(certificateValidator certificateValidator) LBArgsH...

FILE: commands/lbs.go
  type LBs (line 7) | type LBs struct
    method CheckFastFails (line 23) | func (l LBs) CheckFastFails(subcommandFlags []string, state storage.St...
    method Execute (line 32) | func (l LBs) Execute(subcommandFlags []string, state storage.State) er...
  type LBsCmd (line 12) | type LBsCmd interface
  function NewLBs (line 16) | func NewLBs(lbs LBsCmd, stateValidator stateValidator) LBs {

FILE: commands/outputs.go
  type Outputs (line 8) | type Outputs struct
    method CheckFastFails (line 22) | func (o Outputs) CheckFastFails(subcommandFlags []string, state storag...
    method Execute (line 26) | func (o Outputs) Execute(subcommandFlags []string, state storage.State...
  function NewOutputs (line 14) | func NewOutputs(logger logger, terraformManager terraformManager, stateV...

FILE: commands/plan.go
  type patchDetector (line 11) | type patchDetector interface
  type Plan (line 15) | type Plan struct
    method CheckFastFails (line 59) | func (p Plan) CheckFastFails(args []string, state storage.State) error {
    method ParseArgs (line 80) | func (p Plan) ParseArgs(args []string, state storage.State) (PlanConfi...
    method Execute (line 111) | func (p Plan) Execute(args []string, state storage.State) error {
    method InitializePlan (line 121) | func (p Plan) InitializePlan(config PlanConfig, state storage.State) (...
    method IsInitialized (line 163) | func (p Plan) IsInitialized(state storage.State) bool {
  type PlanConfig (line 28) | type PlanConfig struct
  function NewPlan (line 33) | func NewPlan(

FILE: commands/print_env.go
  type PrintEnv (line 16) | type PrintEnv struct
    method CheckFastFails (line 70) | func (p PrintEnv) CheckFastFails(subcommandFlags []string, state stora...
    method ParseArgs (line 77) | func (p PrintEnv) ParseArgs(args []string, state storage.State) (Print...
    method Execute (line 94) | func (p PrintEnv) Execute(args []string, state storage.State) error {
    method renderVariables (line 198) | func (p PrintEnv) renderVariables(renderer renderers.Renderer, variabl...
  type credhubGetter (line 27) | type credhubGetter interface
  type allProxyGetter (line 33) | type allProxyGetter interface
  type fs (line 38) | type fs interface
  type PrintEnvConfig (line 43) | type PrintEnvConfig struct
  function NewPrintEnv (line 49) | func NewPrintEnv(

FILE: commands/rotate.go
  type sshKeyDeleter (line 9) | type sshKeyDeleter interface
  type Rotate (line 13) | type Rotate struct
    method CheckFastFails (line 27) | func (r Rotate) CheckFastFails(subcommandFlags []string, state storage...
    method Execute (line 40) | func (r Rotate) Execute(args []string, state storage.State) error {
  function NewRotate (line 19) | func NewRotate(stateValidator stateValidator, sshKeyDeleter sshKeyDelete...

FILE: commands/ssh.go
  type SSH (line 17) | type SSH struct
    method CheckFastFails (line 55) | func (s SSH) CheckFastFails(subcommandFlags []string, state storage.St...
    method Execute (line 63) | func (s SSH) Execute(args []string, state storage.State) error {
  type sshCLI (line 26) | type sshCLI interface
  type pathFinder (line 31) | type pathFinder interface
  type randomPort (line 35) | type randomPort interface
  type tempDirWriter (line 39) | type tempDirWriter interface
  function NewSSH (line 44) | func NewSSH(logger logger, sshCLI sshCLI, sshKeyGetter sshKeyGetter, pat...

FILE: commands/ssh_key.go
  type SSHKey (line 9) | type SSHKey struct
    method CheckFastFails (line 37) | func (s SSHKey) CheckFastFails(subcommandFlags []string, state storage...
    method Execute (line 41) | func (s SSHKey) Execute(subcommandFlags []string, state storage.State)...
  type sshKeyGetter (line 16) | type sshKeyGetter interface
  function NewSSHKey (line 20) | func NewSSHKey(logger logger, stateValidator stateValidator, sshKeyGette...
  function NewDirectorSSHKey (line 28) | func NewDirectorSSHKey(logger logger, stateValidator stateValidator, ssh...

FILE: commands/state_query.go
  constant EnvIDCommand (line 10) | EnvIDCommand            = "env-id"
  constant JumpboxAddressCommand (line 11) | JumpboxAddressCommand   = "jumpbox-address"
  constant DirectorUsernameCommand (line 12) | DirectorUsernameCommand = "director-username"
  constant DirectorPasswordCommand (line 13) | DirectorPasswordCommand = "director-password"
  constant DirectorAddressCommand (line 14) | DirectorAddressCommand  = "director-address"
  constant DirectorCACertCommand (line 15) | DirectorCACertCommand   = "director-ca-cert"
  constant EnvIDPropertyName (line 17) | EnvIDPropertyName            = "environment id"
  constant JumpboxAddressPropertyName (line 18) | JumpboxAddressPropertyName   = "jumpbox address"
  constant DirectorUsernamePropertyName (line 19) | DirectorUsernamePropertyName = "director username"
  constant DirectorPasswordPropertyName (line 20) | DirectorPasswordPropertyName = "director password"
  constant DirectorAddressPropertyName (line 21) | DirectorAddressPropertyName  = "director address"
  constant DirectorCACertPropertyName (line 22) | DirectorCACertPropertyName   = "director ca cert"
  type StateQuery (line 25) | type StateQuery struct
    method CheckFastFails (line 41) | func (s StateQuery) CheckFastFails(subcommandFlags []string, state sto...
    method Execute (line 50) | func (s StateQuery) Execute(subcommandFlags []string, state storage.St...
    method getDirectorAddress (line 84) | func (s StateQuery) getDirectorAddress(state storage.State) (string, e...
    method getEIP (line 88) | func (s StateQuery) getEIP(state storage.State) (string, error) {
  function NewStateQuery (line 32) | func NewStateQuery(logger logger, stateValidator stateValidator, terrafo...

FILE: commands/up.go
  type Up (line 10) | type Up struct
    method CheckFastFails (line 33) | func (u Up) CheckFastFails(args []string, state storage.State) error {
    method Execute (line 37) | func (u Up) Execute(args []string, state storage.State) error {
    method ParseArgs (line 113) | func (u Up) ParseArgs(args []string, state storage.State) (PlanConfig,...
  function NewUp (line 19) | func NewUp(plan plan, boshManager boshManager,

FILE: commands/usage.go
  constant UsageHeader (line 11) | UsageHeader = `
  constant CommandUsage (line 25) | CommandUsage = `
  constant GlobalUsage (line 30) | GlobalUsage = `
  type Usage (line 59) | type Usage struct
    method CheckFastFails (line 69) | func (u Usage) CheckFastFails(subcommandFlags []string, state storage....
    method Execute (line 73) | func (u Usage) Execute(subcommandFlags []string, state storage.State) ...
    method Print (line 78) | func (u Usage) Print() {
    method PrintCommandUsage (line 83) | func (u Usage) PrintCommandUsage(command, message string) {
  function NewUsage (line 63) | func NewUsage(logger logger) Usage {

FILE: commands/validate.go
  type Validate (line 9) | type Validate struct
    method CheckFastFails (line 23) | func (v Validate) CheckFastFails(args []string, state storage.State) e...
    method Execute (line 27) | func (v Validate) Execute(args []string, state storage.State) error {
  function NewValidate (line 15) | func NewValidate(plan plan, stateStore stateStore, terraformManager terr...

FILE: commands/version.go
  type Version (line 10) | type Version struct
    method Execute (line 22) | func (v Version) Execute(subcommandFlags []string, state storage.State...
    method CheckFastFails (line 27) | func (v Version) CheckFastFails(subcommandFlags []string, state storag...
  function NewVersion (line 15) | func NewVersion(version string, logger logger) Version {

FILE: config/bosh_path.go
  function GetBOSHPath (line 8) | func GetBOSHPath() (string, error) {

FILE: config/downloader.go
  type Downloader (line 9) | type Downloader struct
    method DownloadAndPrepareState (line 17) | func (d Downloader) DownloadAndPrepareState(flags GlobalFlags) error {
  function NewDownloader (line 13) | func NewDownloader(provider backends.Provider) Downloader {

FILE: config/gcp_zoner_hack.go
  type GCPZonerHack (line 10) | type GCPZonerHack struct
    method SetZones (line 24) | func (g GCPZonerHack) SetZones(state storage.State) (storage.State, er...
  type gcpAvailabilityZoneRetriever (line 14) | type gcpAvailabilityZoneRetriever interface
  function NewGCPZonerHack (line 18) | func NewGCPZonerHack(gcpAvailabilityZoneRetriever gcpAvailabilityZoneRet...

FILE: config/global_flags.go
  type GlobalFlags (line 3) | type GlobalFlags struct

FILE: config/init_test.go
  function TestConfig (line 10) | func TestConfig(t *testing.T) {

FILE: config/load_state.go
  type logger (line 13) | type logger interface
  type StateBootstrap (line 17) | type StateBootstrap interface
  type migrator (line 21) | type migrator interface
  type merger (line 25) | type merger interface
  type downloader (line 29) | type downloader interface
  type fs (line 33) | type fs interface
  function NewConfig (line 40) | func NewConfig(bootstrap StateBootstrap, migrator migrator, merger merge...
  type Config (line 51) | type Config struct
    method Bootstrap (line 87) | func (c Config) Bootstrap(globalFlags GlobalFlags, remainingArgs []str...
  function ParseArgs (line 60) | func ParseArgs(args []string) (GlobalFlags, []string, error) {
  function modifiesState (line 176) | func modifiesState(command string) bool {

FILE: config/load_state_test.go
  function bootstrapArgs (line 18) | func bootstrapArgs(args []string) (config.GlobalFlags, []string, int) {

FILE: config/merger.go
  type Merger (line 12) | type Merger struct
    method MergeGlobalFlagsToState (line 20) | func (m Merger) MergeGlobalFlagsToState(globalFlags GlobalFlags, state...
    method updateCloudStackState (line 67) | func (m Merger) updateCloudStackState(globalFlags GlobalFlags, state s...
    method updateOpenStackState (line 79) | func (m Merger) updateOpenStackState(globalFlags GlobalFlags, state st...
    method updateVSphereState (line 96) | func (m Merger) updateVSphereState(globalFlags GlobalFlags, state stor...
    method updateAWSState (line 116) | func (m Merger) updateAWSState(globalFlags GlobalFlags, state storage....
    method updateAzureState (line 131) | func (m Merger) updateAzureState(globalFlags GlobalFlags, state storag...
    method updateGCPState (line 141) | func (m Merger) updateGCPState(globalFlags GlobalFlags, state storage....
    method getGCPServiceAccountKey (line 170) | func (m Merger) getGCPServiceAccountKey(key string) (string, string, e...
    method writeGCPServiceAccountKey (line 177) | func (m Merger) writeGCPServiceAccountKey(contents string) (string, st...
    method readKey (line 189) | func (m Merger) readKey(path string) (string, string, error) {
  function NewMerger (line 16) | func NewMerger(fs fs) Merger {
  function copyFlagToState (line 46) | func copyFlagToState(source string, sink *string) {
  function copySliceFlagToState (line 52) | func copySliceFlagToState(source []string, sink *[]string) {
  function copyFlagToStateWithDefault (line 59) | func copyFlagToStateWithDefault(source string, sink *string, def string) {
  function getGCPProjectID (line 201) | func getGCPProjectID(key string) (string, error) {

FILE: config/validate_iaas.go
  function ValidateIAAS (line 10) | func ValidateIAAS(state storage.State) error {
  constant CRED_ERROR (line 36) | CRED_ERROR = "Missing %s. To see all required credentials run `bbl plan ...
  function aws (line 38) | func aws(state storage.AWS) error {
  function azure (line 51) | func azure(state storage.Azure) error {
  function gcp (line 70) | func gcp(state storage.GCP) error {
  function openstack (line 80) | func openstack(state storage.OpenStack) error {
  function vsphere (line 111) | func vsphere(state storage.VSphere) error {
  function cloudstack (line 142) | func cloudstack(state storage.CloudStack) error {

FILE: fakes/all_proxy_getter.go
  type AllProxyGetter (line 3) | type AllProxyGetter struct
    method GeneratePrivateKey (line 24) | func (a *AllProxyGetter) GeneratePrivateKey() (string, error) {
    method BoshAllProxy (line 29) | func (a *AllProxyGetter) BoshAllProxy(jumpboxURL, privateKey string) s...

FILE: fakes/aws_client.go
  type AWSClient (line 3) | type AWSClient struct
    method RetrieveAZs (line 25) | func (a *AWSClient) RetrieveAZs(region string) ([]string, error) {
    method RetrieveDNS (line 31) | func (a *AWSClient) RetrieveDNS(url string) string {

FILE: fakes/aws_client_provider.go
  type AWSClientProvider (line 8) | type AWSClientProvider struct
    method SetConfig (line 23) | func (c *AWSClientProvider) SetConfig(config storage.AWS) {
    method GetEC2Client (line 28) | func (c *AWSClientProvider) GetEC2Client() aws.Client {

FILE: fakes/aws_ec2_client.go
  type AWSEC2Client (line 7) | type AWSEC2Client struct
    method DescribeAvailabilityZones (line 39) | func (c *AWSEC2Client) DescribeAvailabilityZones(input *awsec2.Describ...
    method DescribeInstances (line 45) | func (c *AWSEC2Client) DescribeInstances(input *awsec2.DescribeInstanc...
    method DescribeVpcs (line 51) | func (c *AWSEC2Client) DescribeVpcs(input *awsec2.DescribeVpcsInput) (...

FILE: fakes/aws_route53_client.go
  type AWSRoute53Client (line 7) | type AWSRoute53Client struct
    method ListHostedZonesByName (line 19) | func (c *AWSRoute53Client) ListHostedZonesByName(input *awsroute53.Lis...

FILE: fakes/azure_groups_client.go
  type AzureGroupsClient (line 9) | type AzureGroupsClient struct
    method CheckExistence (line 22) | func (a *AzureGroupsClient) CheckExistence(ctx context.Context, resour...

FILE: fakes/azure_vms_client.go
  type AzureVMsClient (line 9) | type AzureVMsClient struct
    method List (line 22) | func (a *AzureVMsClient) List(ctx context.Context, resourceGroup strin...

FILE: fakes/bosh_cli.go
  type BOSHCLI (line 8) | type BOSHCLI struct
    method GetBOSHPath (line 43) | func (fake *BOSHCLI) GetBOSHPath() string {
    method Run (line 49) | func (fake *BOSHCLI) Run(stdout io.Writer, workingDirectory string, ar...
    method RunCallCount (line 85) | func (fake *BOSHCLI) RunCallCount() int {
    method RunArgsForCall (line 91) | func (fake *BOSHCLI) RunArgsForCall(i int) (io.Writer, string, []strin...
    method RunReturns (line 97) | func (fake *BOSHCLI) RunReturns(result1 error) {
    method RunReturnsOnCall (line 104) | func (fake *BOSHCLI) RunReturnsOnCall(i int, result1 error) {
    method Invocations (line 116) | func (fake *BOSHCLI) Invocations() map[string][][]interface{} {
    method recordInvocation (line 124) | func (fake *BOSHCLI) recordInvocation(key string, args []interface{}) {

FILE: fakes/bosh_cli_provider.go
  type BOSHCLIProvider (line 10) | type BOSHCLIProvider struct
    method AuthenticatedCLI (line 29) | func (b *BOSHCLIProvider) AuthenticatedCLI(jumpbox storage.Jumpbox, st...

FILE: fakes/bosh_config_updater.go
  type BOSHConfigUpdater (line 8) | type BOSHConfigUpdater struct
    method InitializeAuthenticatedCLI (line 45) | func (c *BOSHConfigUpdater) InitializeAuthenticatedCLI(state storage.S...
    method UpdateRuntimeConfig (line 53) | func (c *BOSHConfigUpdater) UpdateRuntimeConfig(authenticatedCLIRunner...
    method UpdateCloudConfig (line 64) | func (c *BOSHConfigUpdater) UpdateCloudConfig(authenticatedCLIRunner b...

FILE: fakes/bosh_executor.go
  type BOSHExecutor (line 8) | type BOSHExecutor struct
    method WriteDeploymentVars (line 85) | func (e *BOSHExecutor) WriteDeploymentVars(input bosh.DirInput, deploy...
    method CreateEnv (line 93) | func (e *BOSHExecutor) CreateEnv(input bosh.DirInput, state storage.St...
    method DeleteEnv (line 101) | func (e *BOSHExecutor) DeleteEnv(input bosh.DirInput, state storage.St...
    method PlanJumpboxWithState (line 109) | func (e *BOSHExecutor) PlanJumpboxWithState(input bosh.DirInput, deplo...
    method PlanDirectorWithState (line 119) | func (e *BOSHExecutor) PlanDirectorWithState(input bosh.DirInput, depl...
    method Path (line 129) | func (e *BOSHExecutor) Path() string {
    method Version (line 134) | func (e *BOSHExecutor) Version() (string, error) {

FILE: fakes/bosh_manager.go
  type BOSHManager (line 8) | type BOSHManager struct
    method InitializeJumpbox (line 113) | func (b *BOSHManager) InitializeJumpbox(state storage.State) error {
    method CreateJumpbox (line 119) | func (b *BOSHManager) CreateJumpbox(state storage.State, terraformOutp...
    method InitializeDirector (line 126) | func (b *BOSHManager) InitializeDirector(state storage.State) error {
    method CreateDirector (line 132) | func (b *BOSHManager) CreateDirector(state storage.State, terraformOut...
    method DeleteDirector (line 139) | func (b *BOSHManager) DeleteDirector(state storage.State, terraformOut...
    method CleanUpDirector (line 146) | func (b *BOSHManager) CleanUpDirector(state storage.State) error {
    method DeleteJumpbox (line 152) | func (b *BOSHManager) DeleteJumpbox(state storage.State, terraformOutp...
    method GetDirectorDeploymentVars (line 159) | func (b *BOSHManager) GetDirectorDeploymentVars(state storage.State, t...
    method GetJumpboxDeploymentVars (line 166) | func (b *BOSHManager) GetJumpboxDeploymentVars(state storage.State, te...
    method Path (line 173) | func (b *BOSHManager) Path() string {
    method Version (line 178) | func (b *BOSHManager) Version() (string, error) {

FILE: fakes/certificate_deleter.go
  type CertificateDeleter (line 3) | type CertificateDeleter struct
    method Delete (line 15) | func (c *CertificateDeleter) Delete(certificateName string) error {

FILE: fakes/certificate_validator.go
  type CertificateValidator (line 5) | type CertificateValidator struct
    method ReadAndValidate (line 59) | func (c *CertificateValidator) ReadAndValidate(certificatePath, keyPat...
    method Read (line 67) | func (c *CertificateValidator) Read(certificatePath, keyPath, chainPat...
    method ReadPKCS12 (line 75) | func (c *CertificateValidator) ReadPKCS12(certificatePath, passwordPat...
    method ReadAndValidatePKCS12 (line 82) | func (c *CertificateValidator) ReadAndValidatePKCS12(certificatePath, ...

FILE: fakes/cloud_config_manager.go
  type CloudConfigManager (line 7) | type CloudConfigManager struct
    method Update (line 56) | func (c *CloudConfigManager) Update(state storage.State) error {
    method Initialize (line 62) | func (c *CloudConfigManager) Initialize(state storage.State) error {
    method GenerateVars (line 68) | func (c *CloudConfigManager) GenerateVars(state storage.State) error {
    method Interpolate (line 74) | func (c *CloudConfigManager) Interpolate() (string, error) {
    method IsPresentCloudConfig (line 79) | func (c *CloudConfigManager) IsPresentCloudConfig() bool {
    method IsPresentCloudConfigVars (line 84) | func (c *CloudConfigManager) IsPresentCloudConfigVars() bool {

FILE: fakes/cloud_config_ops_generator.go
  type CloudConfigOpsGenerator (line 5) | type CloudConfigOpsGenerator struct
    method Generate (line 26) | func (c *CloudConfigOpsGenerator) Generate(state storage.State) (strin...
    method GenerateVars (line 31) | func (c *CloudConfigOpsGenerator) GenerateVars(state storage.State) (s...

FILE: fakes/command.go
  type Command (line 5) | type Command struct
    method CheckFastFails (line 35) | func (c *Command) CheckFastFails(subcommandFlags []string, state stora...
    method Execute (line 43) | func (c *Command) Execute(subcommandFlags []string, state storage.Stat...
    method Usage (line 51) | func (c *Command) Usage() string {

FILE: fakes/config_merger.go
  type Merger (line 8) | type Merger struct
    method MergeGlobalFlagsToState (line 22) | func (f *Merger) MergeGlobalFlagsToState(globalFlags config.GlobalFlag...

FILE: fakes/credhub_getter.go
  type CredhubGetter (line 3) | type CredhubGetter struct
    method GetServer (line 27) | func (s *CredhubGetter) GetServer() (string, error) {
    method GetCerts (line 33) | func (s *CredhubGetter) GetCerts() (string, error) {
    method GetPassword (line 39) | func (s *CredhubGetter) GetPassword() (string, error) {

FILE: fakes/delete_lbs.go
  type DeleteLBs (line 5) | type DeleteLBs struct
    method Execute (line 18) | func (a *DeleteLBs) Execute(state storage.State) error {

FILE: fakes/dialer.go
  type Dialer (line 5) | type Dialer struct
    method Dial (line 20) | func (s *Dialer) Dial(network, addr string) (net.Conn, error) {

FILE: fakes/dir_provider.go
  type DirProvider (line 3) | type DirProvider struct
    method GetDirectorDeploymentDir (line 37) | func (d *DirProvider) GetDirectorDeploymentDir() (string, error) {
    method GetCloudConfigDir (line 43) | func (d *DirProvider) GetCloudConfigDir() (string, error) {
    method GetVarsDir (line 49) | func (d *DirProvider) GetVarsDir() (string, error) {
    method GetRuntimeConfigDir (line 55) | func (d *DirProvider) GetRuntimeConfigDir() (string, error) {

FILE: fakes/downloader.go
  type Downloader (line 7) | type Downloader struct
    method DownloadAndPrepareState (line 20) | func (d *Downloader) DownloadAndPrepareState(flags config.GlobalFlags)...

FILE: fakes/env_getter.go
  type EnvGetter (line 3) | type EnvGetter struct
    method Get (line 13) | func (e *EnvGetter) Get(name string) string {

FILE: fakes/env_id_generator.go
  type EnvIDGenerator (line 3) | type EnvIDGenerator struct
    method Generate (line 13) | func (e *EnvIDGenerator) Generate() (string, error) {

FILE: fakes/env_id_manager.go
  type EnvIDManager (line 5) | type EnvIDManager struct
    method Sync (line 19) | func (e *EnvIDManager) Sync(state storage.State, name string) (storage...

FILE: fakes/environment_validator.go
  type EnvironmentValidator (line 5) | type EnvironmentValidator struct
    method Validate (line 17) | func (e *EnvironmentValidator) Validate(state storage.State) error {

FILE: fakes/executable.go
  type Executable (line 3) | type Executable struct
    method Run (line 13) | func (e *Executable) Run() error {

FILE: fakes/fancy_ssh_key_getter.go
  type FancySSHKeyGetter (line 3) | type FancySSHKeyGetter struct
    method Get (line 20) | func (s *FancySSHKeyGetter) Get(deployment string) (string, error) {

FILE: fakes/file_info.go
  type FileInfo (line 8) | type FileInfo struct
    method Name (line 13) | func (f FileInfo) Name() string {
    method Size (line 16) | func (f FileInfo) Size() int64 {
    method Mode (line 19) | func (f FileInfo) Mode() os.FileMode {
    method ModTime (line 22) | func (f FileInfo) ModTime() time.Time {
    method IsDir (line 28) | func (f FileInfo) IsDir() bool {
    method Sys (line 31) | func (f FileInfo) Sys() interface{} {
  type DirFileInfo (line 35) | type DirFileInfo struct
    method IsDir (line 39) | func (d DirFileInfo) IsDir() bool {

FILE: fakes/file_io.go
  type FileIO (line 10) | type FileIO struct
    method TempFile (line 170) | func (f *FileIO) TempFile(dir, prefix string) (afero.File, error) {
    method TempDir (line 177) | func (f *FileIO) TempDir(dir, prefix string) (string, error) {
    method GetTempDir (line 184) | func (f *FileIO) GetTempDir(dir string) string {
    method ReadFile (line 190) | func (f *FileIO) ReadFile(filename string) ([]byte, error) {
    method WriteFile (line 199) | func (f *FileIO) WriteFile(filename string, contents []byte, perm os.F...
    method Stat (line 215) | func (f *FileIO) Stat(name string) (os.FileInfo, error) {
    method Exists (line 224) | func (f *FileIO) Exists(path string) (bool, error) {
    method Rename (line 230) | func (f *FileIO) Rename(oldpath, newpath string) error {
    method Chtimes (line 237) | func (f *FileIO) Chtimes(path string, atime, mtime time.Time) error {
    method Remove (line 244) | func (f *FileIO) Remove(name string) error {
    method RemoveAll (line 258) | func (f *FileIO) RemoveAll(path string) error {
    method ReadDir (line 271) | func (f *FileIO) ReadDir(dirname string) ([]os.FileInfo, error) {
    method MkdirAll (line 277) | func (f *FileIO) MkdirAll(dir string, perm os.FileMode) error {
  type WriteFileReceive (line 144) | type WriteFileReceive struct
  type WriteFileReturn (line 150) | type WriteFileReturn struct
  type RemoveReceive (line 154) | type RemoveReceive struct
  type RemoveReturn (line 158) | type RemoveReturn struct
  type RemoveAllReceive (line 162) | type RemoveAllReceive struct
  type RemoveAllReturn (line 166) | type RemoveAllReturn struct

FILE: fakes/filtered_deleter.go
  type FilteredDeleter (line 3) | type FilteredDeleter struct
    method Delete (line 22) | func (l *FilteredDeleter) Delete(filter string) error {
    method List (line 29) | func (l *FilteredDeleter) List(filter string) {

FILE: fakes/garbage_collector.go
  type GarbageCollector (line 3) | type GarbageCollector struct
    method Remove (line 15) | func (g *GarbageCollector) Remove(directory string) error {

FILE: fakes/gcp_client.go
  type GCPClient (line 5) | type GCPClient struct
    method ProjectID (line 78) | func (g *GCPClient) ProjectID() string {
    method GetProject (line 83) | func (g *GCPClient) GetProject() (*compute.Project, error) {
    method SetCommonInstanceMetadata (line 88) | func (g *GCPClient) SetCommonInstanceMetadata(metadata *compute.Metada...
    method ListInstances (line 94) | func (g *GCPClient) ListInstances() (*compute.InstanceList, error) {
    method GetZones (line 99) | func (g *GCPClient) GetZones(region string) ([]string, error) {
    method GetZone (line 105) | func (g *GCPClient) GetZone(zone string) (*compute.Zone, error) {
    method GetRegion (line 111) | func (g *GCPClient) GetRegion(region string) (*compute.Region, error) {
    method GetNetworks (line 117) | func (g *GCPClient) GetNetworks(name string) (*compute.NetworkList, er...

FILE: fakes/gcp_client_provider.go
  type GCPClientProvider (line 5) | type GCPClientProvider struct
    method Client (line 26) | func (g *GCPClientProvider) Client() gcp.Client {
    method SetConfig (line 32) | func (g *GCPClientProvider) SetConfig(serviceAccountKey, projectID, re...

FILE: fakes/gcp_compute_client.go
  type GCPComputeClient (line 5) | type GCPComputeClient struct
    method ListInstances (line 63) | func (g *GCPComputeClient) ListInstances(projectID, zone string) (*com...
    method GetZones (line 70) | func (g *GCPComputeClient) GetZones(region, projectID string) ([]strin...
    method GetZone (line 77) | func (g *GCPComputeClient) GetZone(zone, projectID string) (*compute.Z...
    method GetRegion (line 84) | func (g *GCPComputeClient) GetRegion(region, projectID string) (*compu...
    method GetNetworks (line 91) | func (g *GCPComputeClient) GetNetworks(name, projectID string) (*compu...

FILE: fakes/guid_generator.go
  type GuidGenerator (line 3) | type GuidGenerator struct
    method Generate (line 15) | func (g *GuidGenerator) Generate() (string, error) {

FILE: fakes/host_key_getter.go
  type HostKeyGetter (line 5) | type HostKeyGetter struct
    method Get (line 19) | func (h *HostKeyGetter) Get(privateKey, serverURL string) (ssh.PublicK...

FILE: fakes/input_generator.go
  type InputGenerator (line 5) | type InputGenerator struct
    method Generate (line 27) | func (i *InputGenerator) Generate(state storage.State) (map[string]int...
    method Credentials (line 33) | func (i *InputGenerator) Credentials(state storage.State) map[string]s...

FILE: fakes/lb_args_handler.go
  type LBArgsHandler (line 8) | type LBArgsHandler struct
    method GetLBState (line 32) | func (c *LBArgsHandler) GetLBState(iaas string, args commands.LBArgs) ...
    method Merge (line 39) | func (c *LBArgsHandler) Merge(new storage.LB, old storage.LB) storage....

FILE: fakes/lbs.go
  type LBs (line 5) | type LBs struct
    method Execute (line 19) | func (u *LBs) Execute(subcommandFlags []string, state storage.State) e...

FILE: fakes/logger.go
  type Logger (line 8) | type Logger struct
    method Step (line 53) | func (l *Logger) Step(message string, a ...interface{}) {
    method Dot (line 61) | func (l *Logger) Dot() {
    method Printf (line 65) | func (l *Logger) Printf(message string, a ...interface{}) {
    method Println (line 73) | func (l *Logger) Println(message string) {
    method Prompt (line 87) | func (l *Logger) Prompt(message string) bool {
    method PrintlnMessages (line 94) | func (l *Logger) PrintlnMessages() []string {

FILE: fakes/network_client.go
  type NetworkClient (line 3) | type NetworkClient struct
    method CheckExists (line 16) | func (n *NetworkClient) CheckExists(name string) (bool, error) {

FILE: fakes/network_deletion_validator.go
  type NetworkDeletionValidator (line 3) | type NetworkDeletionValidator struct
    method ValidateSafeToDelete (line 16) | func (n *NetworkDeletionValidator) ValidateSafeToDelete(networkName st...

FILE: fakes/network_instances_checker.go
  type NetworkInstancesChecker (line 3) | type NetworkInstancesChecker struct
    method ValidateSafeToDelete (line 15) | func (n *NetworkInstancesChecker) ValidateSafeToDelete(networkName str...

FILE: fakes/patch_detector.go
  type PatchDetector (line 3) | type PatchDetector struct
    method Find (line 12) | func (p *PatchDetector) Find() error {

FILE: fakes/path_finder.go
  type PathFinder (line 3) | type PathFinder struct
    method CommandExists (line 15) | func (p *PathFinder) CommandExists(command string) bool {

FILE: fakes/plan.go
  type Plan (line 8) | type Plan struct
    method CheckFastFails (line 62) | func (p *Plan) CheckFastFails(subcommandFlags []string, state storage....
    method ParseArgs (line 70) | func (p *Plan) ParseArgs(args []string, state storage.State) (commands...
    method Execute (line 78) | func (p *Plan) Execute(args []string, state storage.State) error {
    method InitializePlan (line 86) | func (p *Plan) InitializePlan(plan commands.PlanConfig, state storage....
    method IsInitialized (line 94) | func (p *Plan) IsInitialized(state storage.State) bool {

FILE: fakes/random_port.go
  type RandomPort (line 3) | type RandomPort struct
    method GetPort (line 13) | func (r *RandomPort) GetPort() (string, error) {

FILE: fakes/reader.go
  type Reader (line 3) | type Reader struct
    method Read (line 11) | func (r *Reader) Read([]byte) (int, error) {

FILE: fakes/runtime_config_manager.go
  type RuntimeConfigManager (line 5) | type RuntimeConfigManager struct
    method Update (line 26) | func (c *RuntimeConfigManager) Update(state storage.State) error {
    method Initialize (line 32) | func (c *RuntimeConfigManager) Initialize(state storage.State) error {

FILE: fakes/socks5_proxy.go
  type Socks5Proxy (line 3) | type Socks5Proxy struct
    method Start (line 24) | func (s *Socks5Proxy) Start(username, privateKey, externalURL string) ...
    method Addr (line 33) | func (s *Socks5Proxy) Addr() (string, error) {

FILE: fakes/ssh_cli.go
  type SSHCLI (line 5) | type SSHCLI struct
    method Run (line 26) | func (s *SSHCLI) Run(args []string) error {
    method Start (line 38) | func (s *SSHCLI) Start(args []string) (*exec.Cmd, error) {
  type SSHRunReceive (line 18) | type SSHRunReceive struct
  type SSHStartReturn (line 21) | type SSHStartReturn struct

FILE: fakes/ssh_key_deleter.go
  type SSHKeyDeleter (line 3) | type SSHKeyDeleter struct
    method Delete (line 12) | func (s *SSHKeyDeleter) Delete() error {

FILE: fakes/ssh_key_getter.go
  type SSHKeyGetter (line 3) | type SSHKeyGetter struct
    method Get (line 16) | func (s *SSHKeyGetter) Get(deployment string) (string, error) {

FILE: fakes/state_bootstrap.go
  type StateBootstrap (line 5) | type StateBootstrap struct
    method GetState (line 18) | func (s *StateBootstrap) GetState(dir string) (storage.State, error) {

FILE: fakes/state_migrator.go
  type StateMigrator (line 5) | type StateMigrator struct
    method Migrate (line 18) | func (s *StateMigrator) Migrate(state storage.State) (storage.State, e...

FILE: fakes/state_store.go
  type StateStore (line 5) | type StateStore struct
    method Set (line 87) | func (s *StateStore) Set(state storage.State) error {
    method GetCloudConfigDir (line 99) | func (s *StateStore) GetCloudConfigDir() (string, error) {
    method GetStateDir (line 105) | func (s *StateStore) GetStateDir() string {
    method GetOldBblDir (line 111) | func (s *StateStore) GetOldBblDir() string {
    method GetTerraformDir (line 117) | func (s *StateStore) GetTerraformDir() (string, error) {
    method GetVarsDir (line 123) | func (s *StateStore) GetVarsDir() (string, error) {
    method GetDirectorDeploymentDir (line 129) | func (s *StateStore) GetDirectorDeploymentDir() (string, error) {
    method GetJumpboxDeploymentDir (line 135) | func (s *StateStore) GetJumpboxDeploymentDir() (string, error) {
  type SetCallReceive (line 79) | type SetCallReceive struct
  type SetCallReturn (line 83) | type SetCallReturn struct

FILE: fakes/state_validator.go
  type StateValidator (line 3) | type StateValidator struct
    method Validate (line 12) | func (s *StateValidator) Validate() error {

FILE: fakes/template_generator.go
  type TemplateGenerator (line 5) | type TemplateGenerator struct
    method Generate (line 17) | func (t *TemplateGenerator) Generate(state storage.State) string {

FILE: fakes/terraform_cli.go
  type TerraformCLI (line 7) | type TerraformCLI struct
    method RunWithEnv (line 24) | func (t *TerraformCLI) RunWithEnv(stdout io.Writer, workingDirectory s...
    method Run (line 49) | func (t *TerraformCLI) Run(stdout io.Writer, workingDirectory string, ...

FILE: fakes/terraform_executor.go
  type Import (line 3) | type Import struct
  type TerraformExecutor (line 8) | type TerraformExecutor struct
    method IsInitialized (line 94) | func (t *TerraformExecutor) IsInitialized() bool {
    method Setup (line 99) | func (t *TerraformExecutor) Setup(template string, inputs map[string]i...
    method Init (line 106) | func (t *TerraformExecutor) Init() error {
    method Apply (line 111) | func (t *TerraformExecutor) Apply(credentials map[string]string) error {
    method Destroy (line 117) | func (t *TerraformExecutor) Destroy(credentials map[string]string) err...
    method Validate (line 123) | func (t *TerraformExecutor) Validate(credentials map[string]string) er...
    method Version (line 129) | func (t *TerraformExecutor) Version() (string, error) {
    method Output (line 134) | func (t *TerraformExecutor) Output(outputName string) (string, error) {
    method Outputs (line 145) | func (t *TerraformExecutor) Outputs() (map[string]interface{}, error) {
    method IsPaved (line 155) | func (t *TerraformExecutor) IsPaved() (bool, error) {

FILE: fakes/terraform_manager.go
  type TerraformManager (line 8) | type TerraformManager struct
    method Setup (line 97) | func (t *TerraformManager) Setup(bblState storage.State) error {
    method Init (line 104) | func (t *TerraformManager) Init(bblState storage.State) error {
    method Apply (line 111) | func (t *TerraformManager) Apply(bblState storage.State) (storage.Stat...
    method Destroy (line 118) | func (t *TerraformManager) Destroy(bblState storage.State) (storage.St...
    method Validate (line 125) | func (t *TerraformManager) Validate(bblState storage.State) (storage.S...
    method Import (line 132) | func (t *TerraformManager) Import(bblState storage.State, outputs map[...
    method GetOutputs (line 140) | func (t *TerraformManager) GetOutputs() (terraform.Outputs, error) {
    method Version (line 145) | func (t *TerraformManager) Version() (string, error) {
    method ValidateVersion (line 150) | func (t *TerraformManager) ValidateVersion() error {
    method IsPaved (line 155) | func (t *TerraformManager) IsPaved() (bool, error) {

FILE: fakes/up.go
  type Up (line 8) | type Up struct
    method CheckFastFails (line 42) | func (u *Up) CheckFastFails(subcommandFlags []string, state storage.St...
    method ParseArgs (line 50) | func (u *Up) ParseArgs(args []string, state storage.State) (commands.P...
    method Execute (line 58) | func (u *Up) Execute(args []string, state storage.State) error {

FILE: fakes/up_cmd.go
  type UpCmd (line 7) | type UpCmd struct
    method Execute (line 20) | func (u *UpCmd) Execute(state storage.State) (storage.State, error) {

FILE: fakes/usage.go
  type Usage (line 3) | type Usage struct
    method Print (line 17) | func (u *Usage) Print() {
    method PrintCommandUsage (line 21) | func (u *Usage) PrintCommandUsage(command, message string) {

FILE: fakes/uuid_generator.go
  type GenerateReturn (line 3) | type GenerateReturn struct
  type UUIDGenerator (line 8) | type UUIDGenerator struct
    method Generate (line 15) | func (u *UUIDGenerator) Generate() (string, error) {

FILE: fakes/vpc_status_checker.go
  type VPCStatusChecker (line 3) | type VPCStatusChecker struct
    method ValidateSafeToDelete (line 16) | func (v *VPCStatusChecker) ValidateSafeToDelete(vpcID, envID string) e...

FILE: fakes/zone_getter.go
  type Zones (line 3) | type Zones struct
    method Get (line 16) | func (z *Zones) Get(region string) ([]string, error) {

FILE: fileio/file_io.go
  type FileWriter (line 9) | type FileWriter interface
  type FileReader (line 13) | type FileReader interface
  type TempFiler (line 17) | type TempFiler interface
  type TempDirer (line 21) | type TempDirer interface
  type Stater (line 25) | type Stater interface
  type Renamer (line 29) | type Renamer interface
  type Remover (line 33) | type Remover interface
  type DirReader (line 37) | type DirReader interface
  type AllRemover (line 41) | type AllRemover interface
  type AllMkdirer (line 45) | type AllMkdirer interface

FILE: flags/flags.go
  type Flags (line 8) | type Flags struct
    method String (line 22) | func (f Flags) String(v *string, name string, value string) {
    method Bool (line 26) | func (f Flags) Bool(v *bool, name string) {
    method Parse (line 30) | func (f Flags) Parse(args []string) error {
    method Args (line 34) | func (f Flags) Args() []string {
  function New (line 12) | func New(name string) Flags {

FILE: flags/init_test.go
  function TestFlags (line 10) | func TestFlags(t *testing.T) {

FILE: gcp/client.go
  type Client (line 10) | type Client struct
    method ProjectID (line 24) | func (c Client) ProjectID() string {
    method listInstances (line 28) | func (c Client) listInstances() (*compute.InstanceList, error) {
    method GetZones (line 32) | func (c Client) GetZones(region string) ([]string, error) {
    method GetZone (line 36) | func (c Client) GetZone(zone string) (*compute.Zone, error) {
    method GetRegion (line 40) | func (c Client) GetRegion(region string) (*compute.Region, error) {
    method GetNetworks (line 44) | func (c Client) GetNetworks(name string) (*compute.NetworkList, error) {
    method CheckExists (line 50) | func (c Client) CheckExists(networkName string) (bool, error) {
    method ValidateSafeToDelete (line 62) | func (c Client) ValidateSafeToDelete(networkName string, envID string)...
    method isInNetwork (line 102) | func (c Client) isInNetwork(networkName string, networkInterfaces []*c...
    method isBoshDirector (line 112) | func (c Client) isBoshDirector(metadata *compute.Metadata) bool {
  type ComputeClient (line 16) | type ComputeClient interface

FILE: gcp/client_provider.go
  function gcpHTTPClientFunc (line 15) | func gcpHTTPClientFunc(config *jwt.Config) *http.Client {
  function NewClient (line 21) | func NewClient(gcpConfig storage.GCP, basePath string) (Client, error) {

FILE: gcp/compute_client.go
  type gcpComputeClient (line 10) | type gcpComputeClient struct
    method ListInstances (line 14) | func (g gcpComputeClient) ListInstances(projectID, zone string) (*comp...
    method GetZones (line 18) | func (g gcpComputeClient) GetZones(region, projectID string) ([]string...
    method GetZone (line 45) | func (g gcpComputeClient) GetZone(zone, projectID string) (*compute.Zo...
    method GetRegion (line 49) | func (g gcpComputeClient) GetRegion(region, projectID string) (*comput...
    method GetNetworks (line 53) | func (g gcpComputeClient) GetNetworks(name, projectID string) (*comput...

FILE: gcp/export_test.go
  function SetGCPHTTPClient (line 9) | func SetGCPHTTPClient(f func(*jwt.Config) *http.Client) {
  function ResetGCPHTTPClient (line 13) | func ResetGCPHTTPClient() {
  function NewClientWithInjectedComputeClient (line 17) | func NewClientWithInjectedComputeClient(computeClient ComputeClient, pro...

FILE: gcp/init_test.go
  function TestGCP (line 10) | func TestGCP(t *testing.T) {

FILE: helpers/env_getter.go
  type envGetter (line 5) | type envGetter struct
    method Get (line 18) | func (*envGetter) Get(name string) string {
  type EnvGetter (line 9) | type EnvGetter interface
  function NewEnvGetter (line 14) | func NewEnvGetter() EnvGetter {

FILE: helpers/env_id_generator.go
  type EnvIDGenerator (line 11) | type EnvIDGenerator struct
    method Generate (line 21) | func (e EnvIDGenerator) Generate() (string, error) {
    method randomLake (line 31) | func (e EnvIDGenerator) randomLake() (string, error) {
  function NewEnvIDGenerator (line 15) | func NewEnvIDGenerator(reader io.Reader) EnvIDGenerator {

FILE: helpers/env_id_manager.go
  type EnvIDManager (line 13) | type EnvIDManager struct
    method Sync (line 33) | func (e EnvIDManager) Sync(state storage.State, envID string) (storage...
    method checkFastFail (line 60) | func (e EnvIDManager) checkFastFail(iaas, envID string) error {
    method validateName (line 90) | func (e EnvIDManager) validateName(envID string) error {
  type envIDGenerator (line 18) | type envIDGenerator interface
  type NetworkClient (line 22) | type NetworkClient interface
  function NewEnvIDManager (line 26) | func NewEnvIDManager(envIDGenerator envIDGenerator, networkClient Networ...

FILE: helpers/errors.go
  type Errors (line 7) | type Errors struct
    method Error (line 17) | func (e Errors) Error() string {
    method Add (line 26) | func (e *Errors) Add(err error) {
  function NewErrors (line 11) | func NewErrors(args ...string) Errors {

FILE: helpers/exports_test.go
  function SetMatchString (line 5) | func SetMatchString(f func(string, string) (bool, error)) {
  function ResetMatchString (line 9) | func ResetMatchString() {

FILE: helpers/init_test.go
  function TestHelpers (line 10) | func TestHelpers(t *testing.T) {
  function HasUniqueValues (line 15) | func HasUniqueValues(values []string) bool {

FILE: helpers/path_finder.go
  type PathFinder (line 5) | type PathFinder struct
    method CommandExists (line 11) | func (p PathFinder) CommandExists(command string) bool {
  function NewPathFinder (line 7) | func NewPathFinder() PathFinder {

FILE: renderers/factory.go
  type factory (line 9) | type factory struct
    method createDefault (line 25) | func (f *factory) createDefault() (Renderer, error) {
    method createFromType (line 34) | func (f *factory) createFromType(shellType string) (Renderer, error) {
    method Create (line 47) | func (f *factory) Create(shellType string) (Renderer, error) {
  type Factory (line 14) | type Factory interface
  function NewFactory (line 19) | func NewFactory(envGetter helpers.EnvGetter) Factory {

FILE: renderers/init_test.go
  function TestRenderers (line 10) | func TestRenderers(t *testing.T) {

FILE: renderers/posix.go
  type posix (line 8) | type posix struct
    method RenderEnvironmentVariable (line 16) | func (renderer *posix) RenderEnvironmentVariable(variable string, valu...
    method Type (line 27) | func (renderer *posix) Type() string {
  function NewPosix (line 12) | func NewPosix() Renderer {

FILE: renderers/powershell.go
  type powershell (line 8) | type powershell struct
    method RenderEnvironmentVariable (line 16) | func (renderer *powershell) RenderEnvironmentVariable(variable string,...
    method Type (line 27) | func (renderer *powershell) Type() string {
  function NewPowershell (line 12) | func NewPowershell() Renderer {

FILE: renderers/renderer.go
  type Renderer (line 4) | type Renderer interface

FILE: renderers/shell_types.go
  constant ShellTypePowershell (line 4) | ShellTypePowershell = "powershell"
  constant ShellTypePosix (line 5) | ShellTypePosix      = "posix"
  constant ShellTypeYaml (line 6) | ShellTypeYaml       = "yaml"

FILE: renderers/yaml.go
  type yaml (line 8) | type yaml struct
    method RenderEnvironmentVariable (line 16) | func (renderer *yaml) RenderEnvironmentVariable(variable string, value...
    method Type (line 28) | func (renderer *yaml) Type() string {
  function NewYaml (line 12) | func NewYaml() Renderer {

FILE: runtimeconfig/manager.go
  type Manager (line 13) | type Manager struct
    method Initialize (line 50) | func (m Manager) Initialize(state storage.State) error {
    method Update (line 75) | func (m Manager) Update(state storage.State) error {
  type fs (line 20) | type fs interface
  type logger (line 27) | type logger interface
  type dirProvider (line 31) | type dirProvider interface
  type configUpdater (line 36) | type configUpdater interface
  function NewManager (line 41) | func NewManager(logger logger, dirProvider dirProvider, runtimeConfigUpd...

FILE: runtimeconfig/runtimeconfig_suite_test.go
  function TestRuntimeconfig (line 10) | func TestRuntimeconfig(t *testing.T) {

FILE: ssh/cli.go
  type CLI (line 10) | type CLI struct
    method Start (line 25) | func (c CLI) Start(args []string) (*exec.Cmd, error) {
    method Run (line 31) | func (c CLI) Run(args []string) error {
    method start (line 40) | func (c CLI) start(args []string) (*exec.Cmd, error) {
  function NewCLI (line 16) | func NewCLI(in io.Reader, out, err io.Writer) CLI {

FILE: ssh/random_port.go
  type RandomPort (line 5) | type RandomPort struct
    method GetPort (line 7) | func (r RandomPort) GetPort() (string, error) {

FILE: storage/aws.go
  type AWS (line 3) | type AWS struct

FILE: storage/azure.go
  type Azure (line 3) | type Azure struct

FILE: storage/bootstrap.go
  type bootstrapLogger (line 12) | type bootstrapLogger interface
  type StateBootstrap (line 16) | type StateBootstrap struct
    method GetState (line 28) | func (b StateBootstrap) GetState(dir string) (State, error) {
    method getBBLVersion (line 71) | func (b StateBootstrap) getBBLVersion(stateSchema int) string {
  function NewStateBootstrap (line 21) | func NewStateBootstrap(bootstrapLogger bootstrapLogger, bblVersion strin...

FILE: storage/bosh.go
  type BOSH (line 5) | type BOSH struct
    method IsEmpty (line 18) | func (b BOSH) IsEmpty() bool {

FILE: storage/cloudstack.go
  type CloudStack (line 3) | type CloudStack struct

FILE: storage/exports_test.go
  function SetMarshalIndent (line 9) | func SetMarshalIndent(f func(state interface{}, prefix, indent string) (...
  function ResetMarshalIndent (line 13) | func ResetMarshalIndent() {
  function SetUUIDNewV4 (line 17) | func SetUUIDNewV4(f func() (uuid *uuid.UUID, err error)) {
  function ResetUUIDNewV4 (line 21) | func ResetUUIDNewV4() {

FILE: storage/file_ownership.go
  function isBBLManaged (line 51) | func isBBLManaged(relPath string) bool {
  function isUserManaged (line 66) | func isUserManaged(relPath string) bool {
  function matchesGlobList (line 70) | func matchesGlobList(relPath string, globList []string) bool {

FILE: storage/garbage_collector.go
  type GarbageCollector (line 9) | type GarbageCollector struct
    method Remove (line 19) | func (g GarbageCollector) Remove(dir string) error {
  function NewGarbageCollector (line 13) | func NewGarbageCollector(fs fs) GarbageCollector {

FILE: storage/gcp.go
  type GCP (line 3) | type GCP struct
    method Empty (line 12) | func (g GCP) Empty() bool {

FILE: storage/init_test.go
  function TestStorage (line 10) | func TestStorage(t *testing.T) {

FILE: storage/jumpbox.go
  type Jumpbox (line 9) | type Jumpbox struct
    method IsEmpty (line 16) | func (j Jumpbox) IsEmpty() bool {
    method GetURLWithJumpboxUser (line 20) | func (j Jumpbox) GetURLWithJumpboxUser() string {

FILE: storage/lb.go
  type LB (line 3) | type LB struct

FILE: storage/migrator.go
  type store (line 12) | type store interface
  type migratorFs (line 20) | type migratorFs interface
  type Migrator (line 30) | type Migrator struct
    method Migrate (line 39) | func (m Migrator) Migrate(state State) (State, error) {
    method MigrateTerraformState (line 117) | func (m Migrator) MigrateTerraformState(state State, varsDir string) (...
    method MigrateTerraformTemplate (line 128) | func (m Migrator) MigrateTerraformTemplate(terraformDir string) error {
    method migrateStateFile (line 140) | func (m Migrator) migrateStateFile(state map[string]interface{}, deplo...
    method MigrateDirectorState (line 154) | func (m Migrator) MigrateDirectorState(state State, varsDir string) (S...
    method MigrateJumpboxState (line 163) | func (m Migrator) MigrateJumpboxState(state State, varsDir string) (St...
    method MigrateCloudConfigDir (line 172) | func (m Migrator) MigrateCloudConfigDir(bblDir, cloudConfigDir string)...
    method MigrateTerraformVars (line 202) | func (m Migrator) MigrateTerraformVars(varsDir string) error {
    method burnAfterReadingLegacyVarsStore (line 214) | func (m Migrator) burnAfterReadingLegacyVarsStore(varsDir, deployment ...
    method MigrateDirectorVars (line 231) | func (m Migrator) MigrateDirectorVars(state State, varsDir string) (St...
    method MigrateJumpboxVars (line 240) | func (m Migrator) MigrateJumpboxVars(state State, varsDir string) (Sta...
    method migrateVarsStore (line 249) | func (m Migrator) migrateVarsStore(variables, deployment, varsDir stri...
    method MigrateDirectorVarsFile (line 269) | func (m Migrator) MigrateDirectorVarsFile(varsDir string) error {
    method MigrateJumpboxVarsFile (line 281) | func (m Migrator) MigrateJumpboxVarsFile(varsDir string) error {
  function NewMigrator (line 35) | func NewMigrator(store store, fs migratorFs) Migrator {

FILE: storage/openstack.go
  type OpenStack (line 3) | type OpenStack struct

FILE: storage/patch_detector.go
  type detectorLogger (line 8) | type detectorLogger interface
  type PatchDetector (line 13) | type PatchDetector struct
    method Find (line 22) | func (p PatchDetector) Find() error {
  function NewPatchDetector (line 18) | func NewPatchDetector(path string, logger detectorLogger) PatchDetector {
  type walker (line 39) | type walker struct
    method walk (line 44) | func (w *walker) walk() ([]string, error) {
    method printIfForeign (line 49) | func (w *walker) printIfForeign(path string, info os.FileInfo, err err...

FILE: storage/permissions.go
  constant StateMode (line 4) | StateMode  = 0740
  constant ScriptMode (line 5) | ScriptMode = 0750

FILE: storage/state.go
  type State (line 3) | type State struct

FILE: storage/store.go
  constant STATE_SCHEMA (line 21) | STATE_SCHEMA = 14
  constant STATE_FILE (line 22) | STATE_FILE   = "bbl-state.json"
  type Store (line 25) | type Store struct
    method Set (line 54) | func (s Store) Set(state State) error {
    method GetStateDir (line 92) | func (s Store) GetStateDir() string {
    method GetCloudConfigDir (line 96) | func (s Store) GetCloudConfigDir() (string, error) {
    method GetRuntimeConfigDir (line 100) | func (s Store) GetRuntimeConfigDir() (string, error) {
    method GetTerraformDir (line 104) | func (s Store) GetTerraformDir() (string, error) {
    method GetVarsDir (line 108) | func (s Store) GetVarsDir() (string, error) {
    method GetDirectorDeploymentDir (line 112) | func (s Store) GetDirectorDeploymentDir() (string, error) {
    method GetJumpboxDeploymentDir (line 116) | func (s Store) GetJumpboxDeploymentDir() (string, error) {
    method GetOldBblDir (line 120) | func (s Store) GetOldBblDir() string {
    method getDir (line 124) | func (s Store) getDir(name string, perm os.FileMode) (string, error) {
  type fs (line 32) | type fs interface
  type garbageCollector (line 41) | type garbageCollector interface
  function NewStore (line 45) | func NewStore(dir string, fs fs, garbageCollector garbageCollector) Store {

FILE: storage/vsphere.go
  type VSphere (line 3) | type VSphere struct

FILE: terraform/aws/init_test.go
  function TestGCP (line 10) | func TestGCP(t *testing.T) {

FILE: terraform/aws/input_generator.go
  type InputGenerator (line 11) | type InputGenerator struct
    method Generate (line 28) | func (i InputGenerator) Generate(state storage.State) (map[string]inte...
    method Credentials (line 65) | func (i InputGenerator) Credentials(state storage.State) map[string]st...
  type awsClient (line 15) | type awsClient interface
  constant terraformNameCharLimit (line 20) | terraformNameCharLimit = 18
  function NewInputGenerator (line 22) | func NewInputGenerator(awsClient awsClient) InputGenerator {

FILE: terraform/aws/template_generator.go
  type templates (line 11) | type templates struct
  type TemplateGenerator (line 23) | type TemplateGenerator struct
    method Generate (line 38) | func (tg TemplateGenerator) Generate(state storage.State) string {
    method readTemplates (line 56) | func (t TemplateGenerator) readTemplates() templates {
  function NewTemplateGenerator (line 31) | func NewTemplateGenerator() TemplateGenerator {

FILE: terraform/aws/template_generator_test.go
  function expectTemplate (line 82) | func expectTemplate(parts ...string) string {
  function checkTemplate (line 92) | func checkTemplate(actual, expected string) {

FILE: terraform/azure/init_test.go
  function TestAzure (line 10) | func TestAzure(t *testing.T) {

FILE: terraform/azure/input_generator.go
  type InputGenerator (line 9) | type InputGenerator struct
    method Generate (line 16) | func (i InputGenerator) Generate(state storage.State) (map[string]inte...
    method Credentials (line 39) | func (i InputGenerator) Credentials(state storage.State) map[string]st...
  function NewInputGenerator (line 12) | func NewInputGenerator() InputGenerator {

FILE: terraform/azure/template_generator.go
  type templates (line 11) | type templates struct
  type TemplateGenerator (line 24) | type TemplateGenerator struct
    method Generate (line 39) | func (t TemplateGenerator) Generate(state storage.State) string {
    method readTemplates (line 58) | func (t TemplateGenerator) readTemplates() templates {
  function NewTemplateGenerator (line 32) | func NewTemplateGenerator() TemplateGenerator {

FILE: terraform/azure/template_generator_test.go
  function expectTemplate (line 67) | func expectTemplate(parts ...string) string {
  function checkTemplate (line 77) | func checkTemplate(actual, expected string) {

FILE: terraform/binary_path.go
  constant tfBinDataAssetName (line 16) | tfBinDataAssetName = "terraform"
  constant bblTfBinaryName (line 17) | bblTfBinaryName    = "bbl-terraform"
  constant terraformModTime (line 18) | terraformModTime   = "terraform-mod-time"
  type tfBinaryPathFs (line 21) | type tfBinaryPathFs interface
  type Binary (line 29) | type Binary struct
    method BinaryPath (line 49) | func (binary *Binary) BinaryPath() (string, error) {
    method installTfBinary (line 86) | func (binary *Binary) installTfBinary() error {
    method RetrieveModTime (line 107) | func (binary *Binary) RetrieveModTime() (time.Time, error) {
  function NewBinary (line 39) | func NewBinary(terraformBinary string) *Binary {

FILE: terraform/cli.go
  type CLI (line 11) | type CLI struct
    method Run (line 29) | func (c CLI) Run(stdout io.Writer, workingDirectory string, args []str...
    method RunWithEnv (line 33) | func (c CLI) RunWithEnv(stdout io.Writer, workingDirectory string, arg...
  function NewCLI (line 19) | func NewCLI(errorBuffer, outputBuffer io.Writer, tfDataDir string, terra...

FILE: terraform/cloudstack/init_test.go
  function TestCloudStack (line 10) | func TestCloudStack(t *testing.T) {

FILE: terraform/cloudstack/input_generator.go
  constant terraformNameCharLimit (line 10) | terraformNameCharLimit = 45
  type InputGenerator (line 12) | type InputGenerator struct
    method Generate (line 19) | func (i InputGenerator) Generate(state storage.State) (map[string]inte...
    method Credentials (line 41) | func (i InputGenerator) Credentials(state storage.State) map[string]st...
  function NewInputGenerator (line 15) | func NewInputGenerator() InputGenerator {

FILE: terraform/cloudstack/template_generator.go
  type templates (line 11) | type templates struct
  type TemplateGenerator (line 19) | type TemplateGenerator struct
    method Generate (line 34) | func (t TemplateGenerator) Generate(state storage.State) string {
    method readTemplates (line 40) | func (t TemplateGenerator) readTemplates() templates {
  function NewTemplateGenerator (line 27) | func NewTemplateGenerator() TemplateGenerator {

FILE: terraform/executor.go
  type Executor (line 20) | type Executor struct
    method Setup (line 61) | func (e Executor) Setup(template string, input map[string]interface{})...
    method runTFCommand (line 112) | func (e Executor) runTFCommand(args []string) error {
    method runTFCommandWithEnvs (line 116) | func (e Executor) runTFCommandWithEnvs(args, envs []string) error {
    method Init (line 167) | func (e Executor) Init() error {
    method Apply (line 181) | func (e Executor) Apply(credentials map[string]string) error {
    method Validate (line 197) | func (e Executor) Validate(credentials map[string]string) error {
    method Destroy (line 243) | func (e Executor) Destroy(credentials map[string]string) error {
    method Version (line 259) | func (e Executor) Version() (string, error) {
    method Output (line 276) | func (e Executor) Output(outputName string) (string, error) {
    method terraformInitIfNeeded (line 306) | func (e Executor) terraformInitIfNeeded(terraformDir string) error {
    method Outputs (line 315) | func (e Executor) Outputs() (map[string]interface{}, error) {
    method IsPaved (line 355) | func (e Executor) IsPaved() (bool, error) {
  type tfOutput (line 29) | type tfOutput struct
  type terraformCLI (line 34) | type terraformCLI interface
  type stateStore (line 39) | type stateStore interface
  type fs (line 44) | type fs interface
  function NewExecutor (line 50) | func NewExecutor(cli terraformCLI, bufferingCLI terraformCLI, stateStore...
  function formatVars (line 95) | func formatVars(inputs map[string]interface{}) string {

FILE: terraform/gcp/init_test.go
  function TestGCP (line 10) | func TestGCP(t *testing.T) {

FILE: terraform/gcp/input_generator.go
  type InputGenerator (line 7) | type InputGenerator struct
    method Generate (line 14) | func (i InputGenerator) Generate(state storage.State) (map[string]inte...
    method Credentials (line 31) | func (i InputGenerator) Credentials(state storage.State) map[string]st...
  function NewInputGenerator (line 10) | func NewInputGenerator() InputGenerator {

FILE: terraform/gcp/template_generator.go
  type templates (line 11) | type templates struct
  type TemplateGenerator (line 20) | type TemplateGenerator struct
    method Generate (line 35) | func (t TemplateGenerator) Generate(state storage.State) string {
    method GenerateBackendService (line 58) | func (t TemplateGenerator) GenerateBackendService(zoneList []string) s...
    method GenerateInstanceGroups (line 84) | func (t TemplateGenerator) GenerateInstanceGroups(zoneList []string) s...
    method readTemplates (line 103) | func (t TemplateGenerator) readTemplates() templates {
  function NewTemplateGenerator (line 28) | func NewTemplateGenerator() TemplateGenerator {

FILE: terraform/gcp/template_generator_test.go
  function expectTemplate (line 157) | func expectTemplate(parts ...string) string {
  function checkTemplate (line 167) | func checkTemplate(actual, expected string) {

FILE: terraform/init_test.go
  function TestTerraform (line 12) | func TestTerraform(t *testing.T) {

FILE: terraform/manager.go
  type Manager (line 13) | type Manager struct
    method Version (line 56) | func (m Manager) Version() (string, error) {
    method ValidateVersion (line 60) | func (m Manager) ValidateVersion() error {
    method Setup (line 83) | func (m Manager) Setup(bblState storage.State) error {
    method Init (line 100) | func (m Manager) Init(bblState storage.State) error {
    method Apply (line 108) | func (m Manager) Apply(bblState storage.State) (storage.State, error) {
    method Destroy (line 126) | func (m Manager) Destroy(bblState storage.State) (storage.State, error) {
    method Validate (line 140) | func (m Manager) Validate(bblState storage.State) (storage.State, erro...
    method GetOutputs (line 153) | func (m Manager) GetOutputs() (Outputs, error) {
    method IsPaved (line 162) | func (m Manager) IsPaved() (bool, error) {
  type executor (line 21) | type executor interface
  type InputGenerator (line 33) | type InputGenerator interface
  type TemplateGenerator (line 38) | type TemplateGenerator interface
  type logger (line 42) | type logger interface
  function NewManager (line 46) | func NewManager(executor executor, templateGenerator TemplateGenerator, ...
  function readAndReset (line 166) | func readAndReset(buf *bytes.Buffer) string {

FILE: terraform/manager_test.go
  function IndexOf (line 15) | func IndexOf(stringSlice []string, searchValue string) int {

FILE: terraform/openstack/init_test.go
  function TestOpenStack (line 10) | func TestOpenStack(t *testing.T) {

FILE: terraform/openstack/input_generator.go
  type InputGenerator (line 7) | type InputGenerator struct
    method Generate (line 14) | func (i InputGenerator) Generate(state storage.State) (map[string]inte...
    method Credentials (line 39) | func (i InputGenerator) Credentials(state storage.State) map[string]st...
  function NewInputGenerator (line 10) | func NewInputGenerator() InputGenerator {

FILE: terraform/openstack/template_generator.go
  type templates (line 11) | type templates struct
  type TemplateGenerator (line 19) | type TemplateGenerator struct
    method Generate (line 34) | func (t TemplateGenerator) Generate(state storage.State) string {
    method readTemplates (line 40) | func (t TemplateGenerator) readTemplates() templates {
  function NewTemplateGenerator (line 27) | func NewTemplateGenerator() TemplateGenerator {

FILE: terraform/openstack/template_generator_test.go
  function expectTemplate (line 37) | func expectTemplate(parts ...string) string {
  function checkTemplate (line 47) | func checkTemplate(actual, expected string) {

FILE: terraform/outputs.go
  type Outputs (line 3) | type Outputs struct
    method GetString (line 7) | func (o Outputs) GetString(key string) string {
    method GetStringSlice (line 16) | func (o Outputs) GetStringSlice(key string) []string {
    method GetStringMap (line 37) | func (o Outputs) GetStringMap(key string) map[string]string {

FILE: terraform/vsphere/init_test.go
  function TestVSphere (line 10) | func TestVSphere(t *testing.T) {

FILE: terraform/vsphere/input_generator.go
  type InputGenerator (line 8) | type InputGenerator struct
    method Generate (line 15) | func (i InputGenerator) Generate(state storage.State) (map[string]inte...
    method Credentials (line 48) | func (i InputGenerator) Credentials(state storage.State) map[string]st...
  function NewInputGenerator (line 11) | func NewInputGenerator() InputGenerator {

FILE: terraform/vsphere/template_generator.go
  type TemplateGenerator (line 7) | type TemplateGenerator struct
    method Generate (line 13) | func (t TemplateGenerator) Generate(state storage.State) string {
  function NewTemplateGenerator (line 9) | func NewTemplateGenerator() TemplateGenerator {

FILE: testhelpers/certificate_constants.go
  constant BBL_CERT (line 4) | BBL_CERT = `-----BEGIN CERTIFICATE-----
  constant BBL_KEY (line 30) | BBL_KEY = `-----BEGIN RSA PRIVATE KEY-----
  constant BBL_CHAIN (line 58) | BBL_CHAIN = `-----BEGIN CERTIFICATE-----
  constant OTHER_BBL_CERT (line 84) | OTHER_BBL_CERT = `-----BEGIN CERTIFICATE-----
  constant OTHER_BBL_KEY (line 110) | OTHER_BBL_KEY = `-----BEGIN RSA PRIVATE KEY-----
  constant OTHER_BBL_CHAIN (line 138) | OTHER_BBL_CHAIN = `-----BEGIN CERTIFICATE-----
  constant PRIVATE_KEY (line 168) | PRIVATE_KEY = `-----BEGIN RSA PRIVATE KEY-----
  constant JUMPBOX_SSH_KEY (line 196) | JUMPBOX_SSH_KEY = `-----BEGIN RSA PRIVATE KEY-----
  constant PFX_BASE64 (line 224) | PFX_BASE64 = `MIIKeQIBAzCCCj8GCSqGSIb3DQEHAaCCCjAEggosMIIKKDCCBN8GCSqGSI...
  constant PFX_PASSWORD (line 226) | PFX_PASSWORD = `SuperSecretPassword`

FILE: testhelpers/temp_file_helpers.go
  function WriteByteContentsToTempFile (line 7) | func WriteByteContentsToTempFile(contents []byte) (string, error) {
  function WriteContentsToTempFile (line 22) | func WriteContentsToTempFile(contents string) (string, error) {

FILE: vendor/cloud.google.com/go/compute/metadata/metadata.go
  constant metadataIP (line 39) | metadataIP = "169.254.169.254"
  constant metadataHostEnv (line 46) | metadataHostEnv = "GCE_METADATA_HOST"
  constant userAgent (line 48) | userAgent = "gcloud-golang/0.1"
  type cachedValue (line 51) | type cachedValue struct
    method get (line 96) | func (c *cachedValue) get(cl *Client) (v string, err error) {
  type NotDefinedError (line 90) | type NotDefinedError
    method Error (line 92) | func (suffix NotDefinedError) Error() string {
  function OnGCE (line 119) | func OnGCE() bool {
  function initOnGCE (line 124) | func initOnGCE() {
  function testOnGCE (line 128) | func testOnGCE() bool {
  function systemInfoSuggestsGCE (line 199) | func systemInfoSuggestsGCE() bool {
  function Subscribe (line 211) | func Subscribe(suffix string, fn func(v string, ok bool) error) error {
  function Get (line 216) | func Get(suffix string) (string, error) { return defaultClient.Get(suffi...
  function ProjectID (line 219) | func ProjectID() (string, error) { return defaultClient.ProjectID() }
  function NumericProjectID (line 222) | func NumericProjectID() (string, error) { return defaultClient.NumericPr...
  function InternalIP (line 225) | func InternalIP() (string, error) { return defaultClient.InternalIP() }
  function ExternalIP (line 228) | func ExternalIP() (string, error) { return defaultClient.ExternalIP() }
  function Hostname (line 232) | func Hostname() (string, error) { return defaultClient.Hostname() }
  function InstanceTags (line 236) | func InstanceTags() ([]string, error) { return defaultClient.InstanceTag...
  function InstanceID (line 239) | func InstanceID() (string, error) { return defaultClient.InstanceID() }
  function InstanceName (line 242) | func InstanceName() (string, error) { return defaultClient.InstanceName() }
  function Zone (line 245) | func Zone() (string, error) { return defaultClient.Zone() }
  function InstanceAttributes (line 248) | func InstanceAttributes() ([]string, error) { return defaultClient.Insta...
  function ProjectAttributes (line 251) | func ProjectAttributes() ([]string, error) { return defaultClient.Projec...
  function InstanceAttributeValue (line 254) | func InstanceAttributeValue(attr string) (string, error) {
  function ProjectAttributeValue (line 259) | func ProjectAttributeValue(attr string) (string, error) {
  function Scopes (line 264) | func Scopes(serviceAccount string) ([]string, error) { return defaultCli...
  function strsContains (line 266) | func strsContains(ss []string, s string) bool {
  type Client (line 276) | type Client struct
    method getETag (line 288) | func (c *Client) getETag(suffix string) (value, etag string, err error) {
    method Get (line 333) | func (c *Client) Get(suffix string) (string, error) {
    method getTrimmed (line 338) | func (c *Client) getTrimmed(suffix string) (s string, err error) {
    method lines (line 344) | func (c *Client) lines(suffix string) ([]string, error) {
    method ProjectID (line 357) | func (c *Client) ProjectID() (string, error) { return projID.get(c) }
    method NumericProjectID (line 360) | func (c *Client) NumericProjectID() (string, error) { return projNum.g...
    method InstanceID (line 363) | func (c *Client) InstanceID() (string, error) { return instID.get(c) }
    method InternalIP (line 366) | func (c *Client) InternalIP() (string, error) {
    method ExternalIP (line 371) | func (c *Client) ExternalIP() (string, error) {
    method Hostname (line 377) | func (c *Client) Hostname() (string, error) {
    method InstanceTags (line 383) | func (c *Client) InstanceTags() ([]string, error) {
    method InstanceName (line 396) | func (c *Client) InstanceName() (string, error) {
    method Zone (line 405) | func (c *Client) Zone() (string, error) {
    method InstanceAttributes (line 417) | func (c *Client) InstanceAttributes() ([]string, error) { return c.lin...
    method ProjectAttributes (line 422) | func (c *Client) ProjectAttributes() ([]string, error) { return c.line...
    method InstanceAttributeValue (line 432) | func (c *Client) InstanceAttributeValue(attr string) (string, error) {
    method ProjectAttributeValue (line 444) | func (c *Client) ProjectAttributeValue(attr string) (string, error) {
    method Scopes (line 451) | func (c *Client) Scopes(serviceAccount string) ([]string, error) {
    method Subscribe (line 467) | func (c *Client) Subscribe(suffix string, fn func(v string, ok bool) e...
  function NewClient (line 282) | func NewClient(c *http.Client) *Client {
  type Error (line 504) | type Error struct
    method Error (line 511) | func (e *Error) Error() string {

FILE: vendor/cloud.google.com/go/iam/iam.go
  type client (line 37) | type client interface
  type grpcClient (line 44) | type grpcClient struct
    method Get (line 59) | func (g *grpcClient) Get(ctx context.Context, resource string) (*pb.Po...
    method Set (line 75) | func (g *grpcClient) Set(ctx context.Context, resource string, p *pb.P...
    method Test (line 88) | func (g *grpcClient) Test(ctx context.Context, resource string, perms ...
  type Handle (line 108) | type Handle struct
    method Policy (line 141) | func (h *Handle) Policy(ctx context.Context) (*Policy, error) {
    method SetPolicy (line 153) | func (h *Handle) SetPolicy(ctx context.Context, policy *Policy) error {
    method TestPermissions (line 158) | func (h *Handle) TestPermissions(ctx context.Context, permissions []st...
  function InternalNewHandle (line 117) | func InternalNewHandle(conn *grpc.ClientConn, resource string) *Handle {
  function InternalNewHandleGRPCClient (line 125) | func InternalNewHandleGRPCClient(c pb.IAMPolicyClient, resource string) ...
  function InternalNewHandleClient (line 133) | func InternalNewHandleClient(c client, resource string) *Handle {
  type RoleName (line 163) | type RoleName
  constant Owner (line 167) | Owner  RoleName = "roles/owner"
  constant Editor (line 168) | Editor RoleName = "roles/editor"
  constant Viewer (line 169) | Viewer RoleName = "roles/viewer"
  constant AllUsers (line 174) | AllUsers = "allUsers"
  constant AllAuthenticatedUsers (line 177) | AllAuthenticatedUsers = "allAuthenticatedUsers"
  type Policy (line 184) | type Policy struct
    method Members (line 196) | func (p *Policy) Members(r RoleName) []string {
    method HasRole (line 205) | func (p *Policy) HasRole(member string, r RoleName) bool {
    method Add (line 211) | func (p *Policy) Add(member string, r RoleName) {
    method Remove (line 230) | func (p *Policy) Remove(member string, r RoleName) {
    method Roles (line 260) | func (p *Policy) Roles() []RoleName {
    method binding (line 272) | func (p *Policy) binding(r RoleName) *pb.Binding {
    method bindingIndex (line 280) | func (p *Policy) bindingIndex(r RoleName) int {
  function memberIndex (line 293) | func memberIndex(m string, b *pb.Binding) int {
  function insertMetadata (line 306) | func insertMetadata(ctx context.Context, mds ...metadata.MD) context.Con...

FILE: vendor/cloud.google.com/go/internal/annotate.go
  function Annotate (line 35) | func Annotate(err error, msg string) error {
  function Annotatef (line 52) | func Annotatef(err error, format string, args ...interface{}) error {

FILE: vendor/cloud.google.com/go/internal/optional/optional.go
  type Bool (line 28) | type Bool interface
  type String (line 31) | type String interface
  type Int (line 34) | type Int interface
  type Uint (line 37) | type Uint interface
  type Float64 (line 40) | type Float64 interface
  type Duration (line 43) | type Duration interface
  function ToBool (line 48) | func ToBool(v Bool) bool {
  function ToString (line 58) | func ToString(v String) string {
  function ToInt (line 68) | func ToInt(v Int) int {
  function ToUint (line 78) | func ToUint(v Uint) uint {
  function ToFloat64 (line 88) | func ToFloat64(v Float64) float64 {
  function ToDuration (line 98) | func ToDuration(v Duration) time.Duration {
  function doPanic (line 106) | func doPanic(capType string, v interface{}) {

FILE: vendor/cloud.google.com/go/internal/retry.go
  function Retry (line 30) | func Retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err...
  function retry (line 34) | func retry(ctx context.Context, bo gax.Backoff, f func() (stop bool, err...

FILE: vendor/cloud.google.com/go/internal/trace/trace.go
  function StartSpan (line 27) | func StartSpan(ctx context.Context, name string) context.Context {
  function EndSpan (line 33) | func EndSpan(ctx context.Context, err error) {
  function toStatus (line 43) | func toStatus(err error) trace.Status {
  function httpStatusCodeToOCCode (line 55) | func httpStatusCodeToOCCode(httpStatusCode int) int32 {

FILE: vendor/cloud.google.com/go/internal/version/version.go
  constant Repo (line 29) | Repo = "20180226"
  function Go (line 33) | func Go() string {
  constant develPrefix (line 39) | develPrefix = "devel +"
  function goVer (line 41) | func goVer(s string) string {
  function notSemverRune (line 69) | func notSemverRune(r rune) bool {

FILE: vendor/cloud.google.com/go/storage/acl.go
  type ACLRole (line 28) | type ACLRole
  constant RoleOwner (line 31) | RoleOwner  ACLRole = "OWNER"
  constant RoleReader (line 32) | RoleReader ACLRole = "READER"
  constant RoleWriter (line 33) | RoleWriter ACLRole = "WRITER"
  type ACLEntity (line 44) | type ACLEntity
  constant AllUsers (line 47) | AllUsers              ACLEntity = "allUsers"
  constant AllAuthenticatedUsers (line 48) | AllAuthenticatedUsers ACLEntity = "allAuthenticatedUsers"
  type ACLRule (line 53) | type ACLRule struct
    method toRawBucketAccessControl (line 299) | func (r ACLRule) toRawBucketAccessControl(bucket string) *raw.BucketAc...
    method toRawObjectAccessControl (line 308) | func (r ACLRule) toRawObjectAccessControl(bucket string) *raw.ObjectAc...
  type ProjectTeam (line 63) | type ProjectTeam struct
  type ACLHandle (line 69) | type ACLHandle struct
    method Delete (line 78) | func (a *ACLHandle) Delete(ctx context.Context, entity ACLEntity) (err...
    method Set (line 92) | func (a *ACLHandle) Set(ctx context.Context, entity ACLEntity, role AC...
    method List (line 106) | func (a *ACLHandle) List(ctx context.Context) (rules []ACLRule, err er...
    method bucketDefaultList (line 119) | func (a *ACLHandle) bucketDefaultList(ctx context.Context) ([]ACLRule,...
    method bucketDefaultDelete (line 134) | func (a *ACLHandle) bucketDefaultDelete(ctx context.Context, entity AC...
    method bucketList (line 142) | func (a *ACLHandle) bucketList(ctx context.Context) ([]ACLRule, error) {
    method bucketSet (line 157) | func (a *ACLHandle) bucketSet(ctx context.Context, entity ACLEntity, r...
    method bucketDelete (line 175) | func (a *ACLHandle) bucketDelete(ctx context.Context, entity ACLEntity...
    method objectList (line 183) | func (a *ACLHandle) objectList(ctx context.Context) ([]ACLRule, error) {
    method objectSet (line 198) | func (a *ACLHandle) objectSet(ctx context.Context, entity ACLEntity, r...
    method objectDelete (line 222) | func (a *ACLHandle) objectDelete(ctx context.Context, entity ACLEntity...
    method configureCall (line 230) | func (a *ACLHandle) configureCall(ctx context.Context, call interface{...
  function toObjectACLRules (line 239) | func toObjectACLRules(items []*raw.ObjectAccessControl) []ACLRule {
  function toBucketACLRules (line 247) | func toBucketACLRules(items []*raw.BucketAccessControl) []ACLRule {
  function toObjectACLRule (line 255) | func toObjectACLRule(a *raw.ObjectAccessControl) ACLRule {
  function toBucketACLRule (line 266) | func toBucketACLRule(a *raw.BucketAccessControl) ACLRule {
  function toRawObjectACL (line 277) | func toRawObjectACL(rules []ACLRule) []*raw.ObjectAccessControl {
  function toRawBucketACL (line 288) | func toRawBucketACL(rules []ACLRule) []*raw.BucketAccessControl {
  function toBucketProjectTeam (line 317) | func toBucketProjectTeam(p *raw.BucketAccessControlProjectTeam) *Project...
  function toObjectProjectTeam (line 327) | func toObjectProjectTeam(p *raw.ObjectAccessControlProjectTeam) *Project...

FILE: vendor/cloud.google.com/go/storage/bucket.go
  type BucketHandle (line 33) | type BucketHandle struct
    method Create (line 67) | func (b *BucketHandle) Create(ctx context.Context, projectID string, a...
    method Delete (line 95) | func (b *BucketHandle) Delete(ctx context.Context) (err error) {
    method newDeleteCall (line 106) | func (b *BucketHandle) newDeleteCall() (*raw.BucketsDeleteCall, error) {
    method ACL (line 121) | func (b *BucketHandle) ACL() *ACLHandle {
    method DefaultObjectACL (line 128) | func (b *BucketHandle) DefaultObjectACL() *ACLHandle {
    method Object (line 138) | func (b *BucketHandle) Object(name string) *ObjectHandle {
    method Attrs (line 155) | func (b *BucketHandle) Attrs(ctx context.Context) (attrs *BucketAttrs,...
    method newGetCall (line 177) | func (b *BucketHandle) newGetCall() (*raw.BucketsGetCall, error) {
    method Update (line 190) | func (b *BucketHandle) Update(ctx context.Context, uattrs BucketAttrsT...
    method newPatchCall (line 212) | func (b *BucketHandle) newPatchCall(uattrs *BucketAttrsToUpdate) (*raw...
    method If (line 752) | func (b *BucketHandle) If(conds BucketConditions) *BucketHandle {
    method UserProject (line 788) | func (b *BucketHandle) UserProject(projectID string) *BucketHandle {
    method LockRetentionPolicy (line 805) | func (b *BucketHandle) LockRetentionPolicy(ctx context.Context) error {
    method Objects (line 1032) | func (b *BucketHandle) Objects(ctx context.Context, q *Query) *ObjectI...
  method Bucket (line 49) | func (c *Client) Bucket(name string) *BucketHandle {
  type BucketAttrs (line 227) | type BucketAttrs struct
    method toRawBucket (line 508) | func (b *BucketAttrs) toRawBucket() *raw.Bucket {
  type BucketPolicyOnly (line 320) | type BucketPolicyOnly struct
  type Lifecycle (line 330) | type Lifecycle struct
  type RetentionPolicy (line 346) | type RetentionPolicy struct
    method toRawRetentionPolicy (line 838) | func (rp *RetentionPolicy) toRawRetentionPolicy() *raw.BucketRetention...
  constant rfc3339Date (line 366) | rfc3339Date = "2006-01-02"
  constant DeleteAction (line 370) | DeleteAction = "Delete"
  constant SetStorageClassAction (line 374) | SetStorageClassAction = "SetStorageClass"
  type LifecycleRule (line 381) | type LifecycleRule struct
  type LifecycleAction (line 392) | type LifecycleAction struct
  type Liveness (line 406) | type Liveness
  constant LiveAndArchived (line 410) | LiveAndArchived Liveness = iota
  constant Live (line 412) | Live
  constant Archived (line 414) | Archived
  type LifecycleCondition (line 421) | type LifecycleCondition struct
  type BucketLogging (line 452) | type BucketLogging struct
    method toRawBucketLogging (line 974) | func (b *BucketLogging) toRawBucketLogging() *raw.BucketLogging {
  type BucketWebsite (line 464) | type BucketWebsite struct
    method toRawBucketWebsite (line 994) | func (w *BucketWebsite) toRawBucketWebsite() *raw.BucketWebsite {
  function newBucket (line 477) | func newBucket(b *raw.Bucket) (*BucketAttrs, error) {
  type CORS (line 556) | type CORS struct
  type BucketEncryption (line 578) | type BucketEncryption struct
    method toRawBucketEncryption (line 958) | func (e *BucketEncryption) toRawBucketEncryption() *raw.BucketEncrypti...
  type BucketAttrsToUpdate (line 587) | type BucketAttrsToUpdate struct
    method SetLabel (line 642) | func (ua *BucketAttrsToUpdate) SetLabel(name, value string) {
    method DeleteLabel (line 651) | func (ua *BucketAttrsToUpdate) DeleteLabel(name string) {
    method toRawBucket (line 658) | func (ua *BucketAttrsToUpdate) toRawBucket() *raw.Bucket {
  type BucketConditions (line 761) | type BucketConditions struct
    method validate (line 773) | func (c *BucketConditions) validate(method string) error {
  function applyBucketConds (line 817) | func applyBucketConds(method string, conds *BucketConditions, call inter...
  function toRetentionPolicy (line 847) | func toRetentionPolicy(rp *raw.BucketRetentionPolicy) (*RetentionPolicy,...
  function toRawCORS (line 862) | func toRawCORS(c []CORS) []*raw.BucketCors {
  function toCORS (line 875) | func toCORS(rc []*raw.BucketCors) []CORS {
  function toRawLifecycle (line 888) | func toRawLifecycle(l Lifecycle) *raw.BucketLifecycle {
  function toLifecycle (line 923) | func toLifecycle(rl *raw.BucketLifecycle) Lifecycle {
  function toBucketEncryption (line 967) | func toBucketEncryption(e *raw.BucketEncryption) *BucketEncryption {
  function toBucketLogging (line 984) | func toBucketLogging(b *raw.BucketLogging) *BucketLogging {
  function toBucketWebsite (line 1004) | func toBucketWebsite(w *raw.BucketWebsite) *BucketWebsite {
  function toBucketPolicyOnly (line 1014) | func toBucketPolicyOnly(b *raw.BucketIamConfiguration) BucketPolicyOnly {
  type ObjectIterator (line 1048) | type ObjectIterator struct
    method PageInfo (line 1058) | func (it *ObjectIterator) PageInfo() *iterator.PageInfo { return it.pa...
    method Next (line 1067) | func (it *ObjectIterator) Next() (*ObjectAttrs, error) {
    method fetch (line 1076) | func (it *ObjectIterator) fetch(pageSize int, pageToken string) (strin...
  method Buckets (line 1115) | func (c *Client) Buckets(ctx context.Context, projectID string) *BucketI...
  type BucketIterator (line 1129) | type BucketIterator struct
    method Next (line 1144) | func (it *BucketIterator) Next() (*BucketAttrs, error) {
    method PageInfo (line 1154) | func (it *BucketIterator) PageInfo() *iterator.PageInfo { return it.pa...
    method fetch (line 1156) | func (it *BucketIterator) fetch(pageSize int, pageToken string) (token...

FILE: vendor/cloud.google.com/go/storage/copy.go
  method CopierFrom (line 32) | func (dst *ObjectHandle) CopierFrom(src *ObjectHandle) *Copier {
  type Copier (line 37) | type Copier struct
    method Run (line 76) | func (c *Copier) Run(ctx context.Context) (attrs *ObjectAttrs, err err...
    method callRewrite (line 108) | func (c *Copier) callRewrite(ctx context.Context, rawObj *raw.Object) ...
  method ComposerFrom (line 156) | func (dst *ObjectHandle) ComposerFrom(srcs ...*ObjectHandle) *Composer {
  type Composer (line 163) | type Composer struct
    method Run (line 174) | func (c *Composer) Run(ctx context.Context) (attrs *ObjectAttrs, err e...

FILE: vendor/cloud.google.com/go/storage/go110.go
  function shouldRetry (line 21) | func shouldRetry(err error) bool {

FILE: vendor/cloud.google.com/go/storage/iam.go
  method IAM (line 27) | func (b *BucketHandle) IAM() *iam.Handle {
  type iamClient (line 35) | type iamClient struct
    method Get (line 40) | func (c *iamClient) Get(ctx context.Context, resource string) (p *iamp...
    method Set (line 60) | func (c *iamClient) Set(ctx context.Context, resource string, p *iampb...
    method Test (line 76) | func (c *iamClient) Test(ctx context.Context, resource string, perms [...
  function iamToStoragePolicy (line 96) | func iamToStoragePolicy(ip *iampb.Policy) *raw.Policy {
  function iamToStorageBindings (line 103) | func iamToStorageBindings(ibs []*iampb.Binding) []*raw.PolicyBindings {
  function iamFromStoragePolicy (line 114) | func iamFromStoragePolicy(rp *raw.Policy) *iampb.Policy {
  function iamFromStorageBindings (line 121) | func iamFromStorageBindings(rbs []*raw.PolicyBindings) []*iampb.Binding {

FILE: vendor/cloud.google.com/go/storage/invoke.go
  function runWithRetry (line 26) | func runWithRetry(ctx context.Context, call func() error) error {

FILE: vendor/cloud.google.com/go/storage/not_go110.go
  function shouldRetry (line 26) | func shouldRetry(err error) bool {

FILE: vendor/cloud.google.com/go/storage/notifications.go
  type Notification (line 29) | type Notification struct
  constant NoPayload (line 60) | NoPayload = "NONE"
  constant JSONPayload (line 63) | JSONPayload = "JSON_API_V1"
  constant ObjectFinalizeEvent (line 69) | ObjectFinalizeEvent = "OBJECT_FINALIZE"
  constant ObjectMetadataUpdateEvent (line 72) | ObjectMetadataUpdateEvent = "OBJECT_METADATA_UPDATE"
  constant ObjectDeleteEvent (line 75) | ObjectDeleteEvent = "OBJECT_DELETE"
  constant ObjectArchiveEvent (line 79) | ObjectArchiveEvent = "OBJECT_ARCHIVE"
  function toNotification (line 82) | func toNotification(rn *raw.Notification) *Notification {
  function parseNotificationTopic (line 99) | func parseNotificationTopic(nt string) (projectID, topicID string) {
  function toRawNotification (line 107) | func toRawNotification(n *Notification) *raw.Notification {
  method AddNotification (line 122) | func (b *BucketHandle) AddNotification(ctx context.Context, n *Notificat...
  method Notifications (line 149) | func (b *BucketHandle) Notifications(ctx context.Context) (n map[string]...
  function notificationsToMap (line 169) | func notificationsToMap(rns []*raw.Notification) map[string]*Notification {
  method DeleteNotification (line 178) | func (b *BucketHandle) DeleteNotification(ctx context.Context, id string...

FILE: vendor/cloud.google.com/go/storage/reader.go
  type ReaderObjectAttrs (line 42) | type ReaderObjectAttrs struct
  method NewReader (line 75) | func (o *ObjectHandle) NewReader(ctx context.Context) (*Reader, error) {
  method NewRangeReader (line 82) | func (o *ObjectHandle) NewRangeReader(ctx context.Context, offset, lengt...
  function uncompressedByServer (line 253) | func uncompressedByServer(res *http.Response) bool {
  function parseCRC32c (line 260) | func parseCRC32c(res *http.Response) (uint32, bool) {
  type Reader (line 281) | type Reader struct
    method Close (line 292) | func (r *Reader) Close() error {
    method Read (line 296) | func (r *Reader) Read(p []byte) (int, error) {
    method readWithRetry (line 316) | func (r *Reader) readWithRetry(p []byte) (int, error) {
    method Size (line 350) | func (r *Reader) Size() int64 {
    method Remain (line 355) | func (r *Reader) Remain() int64 {
    method ContentType (line 362) | func (r *Reader) ContentType() string {
    method ContentEncoding (line 369) | func (r *Reader) ContentEncoding() string {
    method CacheControl (line 376) | func (r *Reader) CacheControl() string {
    method LastModified (line 383) | func (r *Reader) LastModified() (time.Time, error) {
  function shouldRetryRead (line 338) | func shouldRetryRead(err error) bool {

FILE: vendor/cloud.google.com/go/storage/storage.go
  constant userAgent (line 55) | userAgent = "gcloud-golang-storage/20151204"
  constant ScopeFullControl (line 60) | ScopeFullControl = raw.DevstorageFullControlScope
  constant ScopeReadOnly (line 64) | ScopeReadOnly = raw.DevstorageReadOnlyScope
  constant ScopeReadWrite (line 68) | ScopeReadWrite = raw.DevstorageReadWriteScope
  function setClientHeader (line 73) | func setClientHeader(headers http.Header) {
  type Client (line 81) | type Client struct
    method Close (line 114) | func (c *Client) Close() error {
    method ServiceAccount (line 1104) | func (c *Client) ServiceAccount(ctx context.Context, projectID string)...
  function NewClient (line 88) | func NewClient(ctx context.Context, opts ...option.ClientOption) (*Clien...
  type SignedURLOptions (line 122) | type SignedURLOptions struct
  function sanitizeHeaders (line 196) | func sanitizeHeaders(hdrs []string) []string {
  function SignedURL (line 244) | func SignedURL(bucket, name string, opts *SignedURLOptions) (string, err...
  type ObjectHandle (line 316) | type ObjectHandle struct
    method ACL (line 331) | func (o *ObjectHandle) ACL() *ACLHandle {
    method Generation (line 340) | func (o *ObjectHandle) Generation(gen int64) *ObjectHandle {
    method If (line 351) | func (o *ObjectHandle) If(conds Conditions) *ObjectHandle {
    method Key (line 362) | func (o *ObjectHandle) Key(encryptionKey []byte) *ObjectHandle {
    method Attrs (line 370) | func (o *ObjectHandle) Attrs(ctx context.Context) (attrs *ObjectAttrs,...
    method Update (line 402) | func (o *ObjectHandle) Update(ctx context.Context, uattrs ObjectAttrsT...
    method BucketName (line 496) | func (o *ObjectHandle) BucketName() string {
    method ObjectName (line 501) | func (o *ObjectHandle) ObjectName() string {
    method Delete (line 533) | func (o *ObjectHandle) Delete(ctx context.Context) error {
    method ReadCompressed (line 559) | func (o *ObjectHandle) ReadCompressed(compressed bool) *ObjectHandle {
    method NewWriter (line 580) | func (o *ObjectHandle) NewWriter(ctx context.Context) *Writer {
    method validate (line 590) | func (o *ObjectHandle) validate() error {
  type ObjectAttrsToUpdate (line 516) | type ObjectAttrsToUpdate struct
  function parseKey (line 607) | func parseKey(key []byte) (*rsa.PrivateKey, error) {
  type ObjectAttrs (line 649) | type ObjectAttrs struct
    method toRawObject (line 626) | func (o *ObjectAttrs) toRawObject(bucket string) *raw.Object {
  function convertTime (line 784) | func convertTime(t string) time.Time {
  function newObject (line 792) | func newObject(o *raw.Object) *ObjectAttrs {
  function decodeUint32 (line 836) | func decodeUint32(b64 string) (uint32, error) {
  function encodeUint32 (line 848) | func encodeUint32(u uint32) string {
  type Query (line 854) | type Query struct
  type Conditions (line 881) | type Conditions struct
    method validate (line 915) | func (c *Conditions) validate(method string) error {
    method isGenerationValid (line 928) | func (c *Conditions) isGenerationValid() bool {
    method isMetagenerationValid (line 942) | func (c *Conditions) isMetagenerationValid() bool {
  function applyConds (line 948) | func applyConds(method string, gen int64, conds *Conditions, call interf...
  function applySourceConds (line 988) | func applySourceConds(gen int64, conds *Conditions, call *raw.ObjectsRew...
  function setConditionField (line 1018) | func setConditionField(call reflect.Value, name string, value interface{...
  function conditionsQuery (line 1030) | func conditionsQuery(gen int64, conds *Conditions) string {
  type composeSourceObj (line 1067) | type composeSourceObj struct
    method Generation (line 1071) | func (c composeSourceObj) Generation(gen int64) {
    method IfGenerationMatch (line 1075) | func (c composeSourceObj) IfGenerationMatch(gen int64) {
  function setEncryptionHeaders (line 1083) | func setEncryptionHeaders(headers http.Header, key []byte, copySource bo...

FILE: vendor/cloud.google.com/go/storage/writer.go
  type Writer (line 31) | type Writer struct
    method open (line 81) | func (w *Writer) open() error {
    method Write (line 181) | func (w *Writer) Write(p []byte) (n int, err error) {
    method Close (line 211) | func (w *Writer) Close() error {
    method monitorCancel (line 232) | func (w *Writer) monitorCancel() {
    method CloseWithError (line 250) | func (w *Writer) CloseWithError(err error) error {
    method Attrs (line 259) | func (w *Writer) Attrs() *ObjectAttrs {

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/client.go
  constant DefaultBaseURI (line 31) | DefaultBaseURI = "https://management.azure.com"
  type ManagementClient (line 35) | type ManagementClient struct
  function New (line 42) | func New(subscriptionID string) ManagementClient {
  function NewWithBaseURI (line 47) | func NewWithBaseURI(baseURI string, subscriptionID string) ManagementCli...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/deploymentoperations.go
  type DeploymentOperationsClient (line 28) | type DeploymentOperationsClient struct
    method Get (line 46) | func (client DeploymentOperationsClient) Get(resourceGroupName string,...
    method GetPreparer (line 81) | func (client DeploymentOperationsClient) GetPreparer(resourceGroupName...
    method GetSender (line 104) | func (client DeploymentOperationsClient) GetSender(req *http.Request) ...
    method GetResponder (line 112) | func (client DeploymentOperationsClient) GetResponder(resp *http.Respo...
    method List (line 127) | func (client DeploymentOperationsClient) List(resourceGroupName string...
    method ListPreparer (line 162) | func (client DeploymentOperationsClient) ListPreparer(resourceGroupNam...
    method ListSender (line 187) | func (client DeploymentOperationsClient) ListSender(req *http.Request)...
    method ListResponder (line 195) | func (client DeploymentOperationsClient) ListResponder(resp *http.Resp...
    method ListNextResults (line 207) | func (client DeploymentOperationsClient) ListNextResults(lastResults D...
    method ListComplete (line 231) | func (client DeploymentOperationsClient) ListComplete(resourceGroupNam...
  function NewDeploymentOperationsClient (line 33) | func NewDeploymentOperationsClient(subscriptionID string) DeploymentOper...
  function NewDeploymentOperationsClientWithBaseURI (line 38) | func NewDeploymentOperationsClientWithBaseURI(baseURI string, subscripti...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/deployments.go
  type DeploymentsClient (line 28) | type DeploymentsClient struct
    method Cancel (line 48) | func (client DeploymentsClient) Cancel(resourceGroupName string, deplo...
    method CancelPreparer (line 83) | func (client DeploymentsClient) CancelPreparer(resourceGroupName strin...
    method CancelSender (line 105) | func (client DeploymentsClient) CancelSender(req *http.Request) (*http...
    method CancelResponder (line 113) | func (client DeploymentsClient) CancelResponder(resp *http.Response) (...
    method CheckExistence (line 127) | func (client DeploymentsClient) CheckExistence(resourceGroupName strin...
    method CheckExistencePreparer (line 162) | func (client DeploymentsClient) CheckExistencePreparer(resourceGroupNa...
    method CheckExistenceSender (line 184) | func (client DeploymentsClient) CheckExistenceSender(req *http.Request...
    method CheckExistenceResponder (line 192) | func (client DeploymentsClient) CheckExistenceResponder(resp *http.Res...
    method CreateOrUpdate (line 209) | func (client DeploymentsClient) CreateOrUpdate(resourceGroupName strin...
    method CreateOrUpdatePreparer (line 267) | func (client DeploymentsClient) CreateOrUpdatePreparer(resourceGroupNa...
    method CreateOrUpdateSender (line 291) | func (client DeploymentsClient) CreateOrUpdateSender(req *http.Request...
    method CreateOrUpdateResponder (line 300) | func (client DeploymentsClient) CreateOrUpdateResponder(resp *http.Res...
    method Delete (line 322) | func (client DeploymentsClient) Delete(resourceGroupName string, deplo...
    method DeletePreparer (line 373) | func (client DeploymentsClient) DeletePreparer(resourceGroupName strin...
    method DeleteSender (line 395) | func (client DeploymentsClient) DeleteSender(req *http.Request) (*http...
    method DeleteResponder (line 404) | func (client DeploymentsClient) DeleteResponder(resp *http.Response) (...
    method ExportTemplate (line 418) | func (client DeploymentsClient) ExportTemplate(resourceGroupName strin...
    method ExportTemplatePreparer (line 453) | func (client DeploymentsClient) ExportTemplatePreparer(resourceGroupNa...
    method ExportTemplateSender (line 475) | func (client DeploymentsClient) ExportTemplateSender(req *http.Request...
    method ExportTemplateResponder (line 483) | func (client DeploymentsClient) ExportTemplateResponder(resp *http.Res...
    method Get (line 498) | func (client DeploymentsClient) Get(resourceGroupName string, deployme...
    method GetPreparer (line 533) | func (client DeploymentsClient) GetPreparer(resourceGroupName string, ...
    method GetSender (line 555) | func (client DeploymentsClient) GetSender(req *http.Request) (*http.Re...
    method GetResponder (line 563) | func (client DeploymentsClient) GetResponder(resp *http.Response) (res...
    method ListByResourceGroup (line 579) | func (client DeploymentsClient) ListByResourceGroup(resourceGroupName ...
    method ListByResourceGroupPreparer (line 610) | func (client DeploymentsClient) ListByResourceGroupPreparer(resourceGr...
    method ListByResourceGroupSender (line 637) | func (client DeploymentsClient) ListByResourceGroupSender(req *http.Re...
    method ListByResourceGroupResponder (line 645) | func (client DeploymentsClient) ListByResourceGroupResponder(resp *htt...
    method ListByResourceGroupNextResults (line 657) | func (client DeploymentsClient) ListByResourceGroupNextResults(lastRes...
    method ListByResourceGroupComplete (line 681) | func (client DeploymentsClient) ListByResourceGroupComplete(resourceGr...
    method Validate (line 730) | func (client DeploymentsClient) Validate(resourceGroupName string, dep...
    method ValidatePreparer (line 772) | func (client DeploymentsClient) ValidatePreparer(resourceGroupName str...
    method ValidateSender (line 796) | func (client DeploymentsClient) ValidateSender(req *http.Request) (*ht...
    method ValidateResponder (line 804) | func (client DeploymentsClient) ValidateResponder(resp *http.Response)...
  function NewDeploymentsClient (line 33) | func NewDeploymentsClient(subscriptionID string) DeploymentsClient {
  function NewDeploymentsClientWithBaseURI (line 38) | func NewDeploymentsClientWithBaseURI(baseURI string, subscriptionID stri...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/group.go
  type GroupClient (line 28) | type GroupClient struct
    method CheckExistence (line 48) | func (client GroupClient) CheckExistence(resourceGroupName string, res...
    method CheckExistencePreparer (line 79) | func (client GroupClient) CheckExistencePreparer(resourceGroupName str...
    method CheckExistenceSender (line 104) | func (client GroupClient) CheckExistenceSender(req *http.Request) (*ht...
    method CheckExistenceResponder (line 112) | func (client GroupClient) CheckExistenceResponder(resp *http.Response)...
    method CheckExistenceByID (line 126) | func (client GroupClient) CheckExistenceByID(resourceID string) (resul...
    method CheckExistenceByIDPreparer (line 149) | func (client GroupClient) CheckExistenceByIDPreparer(resourceID string...
    method CheckExistenceByIDSender (line 169) | func (client GroupClient) CheckExistenceByIDSender(req *http.Request) ...
    method CheckExistenceByIDResponder (line 177) | func (client GroupClient) CheckExistenceByIDResponder(resp *http.Respo...
    method CreateOrUpdate (line 194) | func (client GroupClient) CreateOrUpdate(resourceGroupName string, res...
    method CreateOrUpdatePreparer (line 244) | func (client GroupClient) CreateOrUpdatePreparer(resourceGroupName str...
    method CreateOrUpdateSender (line 271) | func (client GroupClient) CreateOrUpdateSender(req *http.Request) (*ht...
    method CreateOrUpdateResponder (line 280) | func (client GroupClient) CreateOrUpdateResponder(resp *http.Response)...
    method CreateOrUpdateByID (line 297) | func (client GroupClient) CreateOrUpdateByID(resourceID string, parame...
    method CreateOrUpdateByIDPreparer (line 343) | func (client GroupClient) CreateOrUpdateByIDPreparer(resourceID string...
    method CreateOrUpdateByIDSender (line 365) | func (client GroupClient) CreateOrUpdateByIDSender(req *http.Request) ...
    method CreateOrUpdateByIDResponder (line 374) | func (client GroupClient) CreateOrUpdateByIDResponder(resp *http.Respo...
    method Delete (line 391) | func (client GroupClient) Delete(resourceGroupName string, resourcePro...
    method DeletePreparer (line 438) | func (client GroupClient) DeletePreparer(resourceGroupName string, res...
    method DeleteSender (line 463) | func (client GroupClient) DeleteSender(req *http.Request) (*http.Respo...
    method DeleteResponder (line 472) | func (client GroupClient) DeleteResponder(resp *http.Response) (result...
    method DeleteByID (line 487) | func (client GroupClient) DeleteByID(resourceID string, cancel <-chan ...
    method DeleteByIDPreparer (line 523) | func (client GroupClient) DeleteByIDPreparer(resourceID string, cancel...
    method DeleteByIDSender (line 543) | func (client GroupClient) DeleteByIDSender(req *http.Request) (*http.R...
    method DeleteByIDResponder (line 552) | func (client GroupClient) DeleteByIDResponder(resp *http.Response) (re...
    method Get (line 567) | func (client GroupClient) Get(resourceGroupName string, resourceProvid...
    method GetPreparer (line 598) | func (client GroupClient) GetPreparer(resourceGroupName string, resour...
    method GetSender (line 623) | func (client GroupClient) GetSender(req *http.Request) (*http.Response...
    method GetResponder (line 631) | func (client GroupClient) GetResponder(resp *http.Response) (result Ge...
    method GetByID (line 646) | func (client GroupClient) GetByID(resourceID string) (result GenericRe...
    method GetByIDPreparer (line 669) | func (client GroupClient) GetByIDPreparer(resourceID string) (*http.Re...
    method GetByIDSender (line 689) | func (client GroupClient) GetByIDSender(req *http.Request) (*http.Resp...
    method GetByIDResponder (line 697) | func (client GroupClient) GetByIDResponder(resp *http.Response) (resul...
    method List (line 712) | func (client GroupClient) List(filter string, expand string, top *int3...
    method ListPreparer (line 735) | func (client GroupClient) ListPreparer(filter string, expand string, t...
    method ListSender (line 764) | func (client GroupClient) ListSender(req *http.Request) (*http.Respons...
    method ListResponder (line 772) | func (client GroupClient) ListResponder(resp *http.Response) (result L...
    method ListNextResults (line 784) | func (client GroupClient) ListNextResults(lastResults ListResult) (res...
    method ListComplete (line 808) | func (client GroupClient) ListComplete(filter string, expand string, t...
    method ListByResourceGroup (line 857) | func (client GroupClient) ListByResourceGroup(resourceGroupName string...
    method ListByResourceGroupPreparer (line 888) | func (client GroupClient) ListByResourceGroupPreparer(resourceGroupNam...
    method ListByResourceGroupSender (line 918) | func (client GroupClient) ListByResourceGroupSender(req *http.Request)...
    method ListByResourceGroupResponder (line 926) | func (client GroupClient) ListByResourceGroupResponder(resp *http.Resp...
    method ListByResourceGroupNextResults (line 938) | func (client GroupClient) ListByResourceGroupNextResults(lastResults L...
    method ListByResourceGroupComplete (line 962) | func (client GroupClient) ListByResourceGroupComplete(resourceGroupNam...
    method MoveResources (line 1014) | func (client GroupClient) MoveResources(sourceResourceGroupName string...
    method MoveResourcesPreparer (line 1061) | func (client GroupClient) MoveResourcesPreparer(sourceResourceGroupNam...
    method MoveResourcesSender (line 1084) | func (client GroupClient) MoveResourcesSender(req *http.Request) (*htt...
    method MoveResourcesResponder (line 1093) | func (client GroupClient) MoveResourcesResponder(resp *http.Response) ...
    method ValidateMoveResources (line 1112) | func (client GroupClient) ValidateMoveResources(sourceResourceGroupNam...
    method ValidateMoveResourcesPreparer (line 1159) | func (client GroupClient) ValidateMoveResourcesPreparer(sourceResource...
    method ValidateMoveResourcesSender (line 1182) | func (client GroupClient) ValidateMoveResourcesSender(req *http.Reques...
    method ValidateMoveResourcesResponder (line 1191) | func (client GroupClient) ValidateMoveResourcesResponder(resp *http.Re...
  function NewGroupClient (line 33) | func NewGroupClient(subscriptionID string) GroupClient {
  function NewGroupClientWithBaseURI (line 38) | func NewGroupClientWithBaseURI(baseURI string, subscriptionID string) Gr...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/groups.go
  type GroupsClient (line 28) | type GroupsClient struct
    method CheckExistence (line 45) | func (client GroupsClient) CheckExistence(resourceGroupName string) (r...
    method CheckExistencePreparer (line 76) | func (client GroupsClient) CheckExistencePreparer(resourceGroupName st...
    method CheckExistenceSender (line 97) | func (client GroupsClient) CheckExistenceSender(req *http.Request) (*h...
    method CheckExistenceResponder (line 105) | func (client GroupsClient) CheckExistenceResponder(resp *http.Response...
    method CreateOrUpdate (line 119) | func (client GroupsClient) CreateOrUpdate(resourceGroupName string, pa...
    method CreateOrUpdatePreparer (line 152) | func (client GroupsClient) CreateOrUpdatePreparer(resourceGroupName st...
    method CreateOrUpdateSender (line 175) | func (client GroupsClient) CreateOrUpdateSender(req *http.Request) (*h...
    method CreateOrUpdateResponder (line 183) | func (client GroupsClient) CreateOrUpdateResponder(resp *http.Response...
    method Delete (line 200) | func (client GroupsClient) Delete(resourceGroupName string, cancel <-c...
    method DeletePreparer (line 247) | func (client GroupsClient) DeletePreparer(resourceGroupName string, ca...
    method DeleteSender (line 268) | func (client GroupsClient) DeleteSender(req *http.Request) (*http.Resp...
    method DeleteResponder (line 277) | func (client GroupsClient) DeleteResponder(resp *http.Response) (resul...
    method ExportTemplate (line 291) | func (client GroupsClient) ExportTemplate(resourceGroupName string, pa...
    method ExportTemplatePreparer (line 322) | func (client GroupsClient) ExportTemplatePreparer(resourceGroupName st...
    method ExportTemplateSender (line 345) | func (client GroupsClient) ExportTemplateSender(req *http.Request) (*h...
    method ExportTemplateResponder (line 353) | func (client GroupsClient) ExportTemplateResponder(resp *http.Response...
    method Get (line 367) | func (client GroupsClient) Get(resourceGroupName string) (result Group...
    method GetPreparer (line 398) | func (client GroupsClient) GetPreparer(resourceGroupName string) (*htt...
    method GetSender (line 419) | func (client GroupsClient) GetSender(req *http.Request) (*http.Respons...
    method GetResponder (line 427) | func (client GroupsClient) GetResponder(resp *http.Response) (result G...
    method List (line 442) | func (client GroupsClient) List(filter string, top *int32) (result Gro...
    method ListPreparer (line 465) | func (client GroupsClient) ListPreparer(filter string, top *int32) (*h...
    method ListSender (line 491) | func (client GroupsClient) ListSender(req *http.Request) (*http.Respon...
    method ListResponder (line 499) | func (client GroupsClient) ListResponder(resp *http.Response) (result ...
    method ListNextResults (line 511) | func (client GroupsClient) ListNextResults(lastResults GroupListResult...
    method ListComplete (line 535) | func (client GroupsClient) ListComplete(filter string, top *int32, can...
    method Update (line 584) | func (client GroupsClient) Update(resourceGroupName string, parameters...
    method UpdatePreparer (line 615) | func (client GroupsClient) UpdatePreparer(resourceGroupName string, pa...
    method UpdateSender (line 638) | func (client GroupsClient) UpdateSender(req *http.Request) (*http.Resp...
    method UpdateResponder (line 646) | func (client GroupsClient) UpdateResponder(resp *http.Response) (resul...
  function NewGroupsClient (line 33) | func NewGroupsClient(subscriptionID string) GroupsClient {
  function NewGroupsClientWithBaseURI (line 38) | func NewGroupsClientWithBaseURI(baseURI string, subscriptionID string) G...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/models.go
  type DeploymentMode (line 28) | type DeploymentMode
  constant Complete (line 32) | Complete DeploymentMode = "Complete"
  constant Incremental (line 34) | Incremental DeploymentMode = "Incremental"
  type ResourceIdentityType (line 38) | type ResourceIdentityType
  constant SystemAssigned (line 42) | SystemAssigned ResourceIdentityType = "SystemAssigned"
  type AliasPathType (line 46) | type AliasPathType struct
  type AliasType (line 52) | type AliasType struct
  type BasicDependency (line 58) | type BasicDependency struct
  type DebugSetting (line 65) | type DebugSetting struct
  type Dependency (line 70) | type Dependency struct
  type Deployment (line 78) | type Deployment struct
  type DeploymentExportResult (line 83) | type DeploymentExportResult struct
  type DeploymentExtended (line 89) | type DeploymentExtended struct
  type DeploymentExtendedFilter (line 97) | type DeploymentExtendedFilter struct
  type DeploymentListResult (line 102) | type DeploymentListResult struct
    method DeploymentListResultPreparer (line 110) | func (client DeploymentListResult) DeploymentListResultPreparer() (*ht...
  type DeploymentOperation (line 121) | type DeploymentOperation struct
  type DeploymentOperationProperties (line 129) | type DeploymentOperationProperties struct
  type DeploymentOperationsListResult (line 141) | type DeploymentOperationsListResult struct
    method DeploymentOperationsListResultPreparer (line 149) | func (client DeploymentOperationsListResult) DeploymentOperationsListR...
  type DeploymentProperties (line 160) | type DeploymentProperties struct
  type DeploymentPropertiesExtended (line 170) | type DeploymentPropertiesExtended struct
  type DeploymentValidateResult (line 186) | type DeploymentValidateResult struct
  type ExportTemplateRequest (line 193) | type ExportTemplateRequest struct
  type GenericResource (line 199) | type GenericResource struct
  type GenericResourceFilter (line 215) | type GenericResourceFilter struct
  type Group (line 222) | type Group struct
  type GroupExportResult (line 233) | type GroupExportResult struct
  type GroupFilter (line 240) | type GroupFilter struct
  type GroupListResult (line 246) | type GroupListResult struct
    method GroupListResultPreparer (line 254) | func (client GroupListResult) GroupListResultPreparer() (*http.Request...
  type GroupPatchable (line 265) | type GroupPatchable struct
  type GroupProperties (line 273) | type GroupProperties struct
  type HTTPMessage (line 278) | type HTTPMessage struct
  type Identity (line 283) | type Identity struct
  type ListResult (line 290) | type ListResult struct
    method ListResultPreparer (line 298) | func (client ListResult) ListResultPreparer() (*http.Request, error) {
  type ManagementErrorWithDetails (line 309) | type ManagementErrorWithDetails struct
  type MoveInfo (line 317) | type MoveInfo struct
  type ParametersLink (line 323) | type ParametersLink struct
  type Plan (line 329) | type Plan struct
  type Provider (line 337) | type Provider struct
  type ProviderListResult (line 346) | type ProviderListResult struct
    method ProviderListResultPreparer (line 354) | func (client ProviderListResult) ProviderListResultPreparer() (*http.R...
  type ProviderOperationDisplayProperties (line 365) | type ProviderOperationDisplayProperties struct
  type ProviderResourceType (line 374) | type ProviderResourceType struct
  type Resource (line 383) | type Resource struct
  type Sku (line 392) | type Sku struct
  type SubResource (line 402) | type SubResource struct
  type TagCount (line 407) | type TagCount struct
  type TagDetails (line 413) | type TagDetails struct
  type TagsListResult (line 422) | type TagsListResult struct
    method TagsListResultPreparer (line 430) | func (client TagsListResult) TagsListResultPreparer() (*http.Request, ...
  type TagValue (line 441) | type TagValue struct
  type TargetResource (line 449) | type TargetResource struct
  type TemplateLink (line 456) | type TemplateLink struct

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/providers.go
  type ProvidersClient (line 27) | type ProvidersClient struct
    method Get (line 45) | func (client ProvidersClient) Get(resourceProviderNamespace string, ex...
    method GetPreparer (line 68) | func (client ProvidersClient) GetPreparer(resourceProviderNamespace st...
    method GetSender (line 92) | func (client ProvidersClient) GetSender(req *http.Request) (*http.Resp...
    method GetResponder (line 100) | func (client ProvidersClient) GetResponder(resp *http.Response) (resul...
    method List (line 116) | func (client ProvidersClient) List(top *int32, expand string) (result ...
    method ListPreparer (line 139) | func (client ProvidersClient) ListPreparer(top *int32, expand string) ...
    method ListSender (line 165) | func (client ProvidersClient) ListSender(req *http.Request) (*http.Res...
    method ListResponder (line 173) | func (client ProvidersClient) ListResponder(resp *http.Response) (resu...
    method ListNextResults (line 185) | func (client ProvidersClient) ListNextResults(lastResults ProviderList...
    method ListComplete (line 209) | func (client ProvidersClient) ListComplete(top *int32, expand string, ...
    method Register (line 256) | func (client ProvidersClient) Register(resourceProviderNamespace strin...
    method RegisterPreparer (line 279) | func (client ProvidersClient) RegisterPreparer(resourceProviderNamespa...
    method RegisterSender (line 300) | func (client ProvidersClient) RegisterSender(req *http.Request) (*http...
    method RegisterResponder (line 308) | func (client ProvidersClient) RegisterResponder(resp *http.Response) (...
    method Unregister (line 322) | func (client ProvidersClient) Unregister(resourceProviderNamespace str...
    method UnregisterPreparer (line 345) | func (client ProvidersClient) UnregisterPreparer(resourceProviderNames...
    method UnregisterSender (line 366) | func (client ProvidersClient) UnregisterSender(req *http.Request) (*ht...
    method UnregisterResponder (line 374) | func (client ProvidersClient) UnregisterResponder(resp *http.Response)...
  function NewProvidersClient (line 32) | func NewProvidersClient(subscriptionID string) ProvidersClient {
  function NewProvidersClientWithBaseURI (line 37) | func NewProvidersClientWithBaseURI(baseURI string, subscriptionID string...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/tags.go
  type TagsClient (line 27) | type TagsClient struct
    method CreateOrUpdate (line 45) | func (client TagsClient) CreateOrUpdate(tagName string) (result TagDet...
    method CreateOrUpdatePreparer (line 68) | func (client TagsClient) CreateOrUpdatePreparer(tagName string) (*http...
    method CreateOrUpdateSender (line 89) | func (client TagsClient) CreateOrUpdateSender(req *http.Request) (*htt...
    method CreateOrUpdateResponder (line 97) | func (client TagsClient) CreateOrUpdateResponder(resp *http.Response) ...
    method CreateOrUpdateValue (line 111) | func (client TagsClient) CreateOrUpdateValue(tagName string, tagValue ...
    method CreateOrUpdateValuePreparer (line 134) | func (client TagsClient) CreateOrUpdateValuePreparer(tagName string, t...
    method CreateOrUpdateValueSender (line 156) | func (client TagsClient) CreateOrUpdateValueSender(req *http.Request) ...
    method CreateOrUpdateValueResponder (line 164) | func (client TagsClient) CreateOrUpdateValueResponder(resp *http.Respo...
    method Delete (line 178) | func (client TagsClient) Delete(tagName string) (result autorest.Respo...
    method DeletePreparer (line 201) | func (client TagsClient) DeletePreparer(tagName string) (*http.Request...
    method DeleteSender (line 222) | func (client TagsClient) DeleteSender(req *http.Request) (*http.Respon...
    method DeleteResponder (line 230) | func (client TagsClient) DeleteResponder(resp *http.Response) (result ...
    method DeleteValue (line 243) | func (client TagsClient) DeleteValue(tagName string, tagValue string) ...
    method DeleteValuePreparer (line 266) | func (client TagsClient) DeleteValuePreparer(tagName string, tagValue ...
    method DeleteValueSender (line 288) | func (client TagsClient) DeleteValueSender(req *http.Request) (*http.R...
    method DeleteValueResponder (line 296) | func (client TagsClient) DeleteValueResponder(resp *http.Response) (re...
    method List (line 307) | func (client TagsClient) List() (result TagsListResult, err error) {
    method ListPreparer (line 330) | func (client TagsClient) ListPreparer() (*http.Request, error) {
    method ListSender (line 350) | func (client TagsClient) ListSender(req *http.Request) (*http.Response...
    method ListResponder (line 358) | func (client TagsClient) ListResponder(resp *http.Response) (result Ta...
    method ListNextResults (line 370) | func (client TagsClient) ListNextResults(lastResults TagsListResult) (...
    method ListComplete (line 394) | func (client TagsClient) ListComplete(cancel <-chan struct{}) (<-chan ...
  function NewTagsClient (line 32) | func NewTagsClient(subscriptionID string) TagsClient {
  function NewTagsClientWithBaseURI (line 37) | func NewTagsClientWithBaseURI(baseURI string, subscriptionID string) Tag...

FILE: vendor/github.com/Azure/azure-sdk-for-go/arm/resources/resources/version.go
  function UserAgent (line 21) | func UserAgent() string {
  function Version (line 26) | func Version() string {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/client.go
  type Client (line 23) | type Client struct
    method Endpoint (line 65) | func (c *Client) Endpoint() string {
    method Pipeline (line 70) | func (c *Client) Pipeline() runtime.Pipeline {
    method Tracer (line 75) | func (c *Client) Tracer() tracing.Tracer {
  function NewClient (line 35) | func NewClient(clientName, moduleVersion string, cred azcore.TokenCreden...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_identifier.go
  constant providersKey (line 15) | providersKey             = "providers"
  constant subscriptionsKey (line 16) | subscriptionsKey         = "subscriptions"
  constant resourceGroupsLowerKey (line 17) | resourceGroupsLowerKey   = "resourcegroups"
  constant locationsKey (line 18) | locationsKey             = "locations"
  constant builtInResourceNamespace (line 19) | builtInResourceNamespace = "Microsoft.Resources"
  type ResourceID (line 31) | type ResourceID struct
    method String (line 87) | func (id *ResourceID) String() string {
    method init (line 141) | func (id *ResourceID) init(parent *ResourceID, resourceType ResourceTy...
  function ParseResourceID (line 64) | func ParseResourceID(id string) (*ResourceID, error) {
  function newResourceID (line 113) | func newResourceID(parent *ResourceID, resourceTypeName string, resource...
  function newResourceIDWithResourceType (line 119) | func newResourceIDWithResourceType(parent *ResourceID, resourceType Reso...
  function newResourceIDWithProvider (line 125) | func newResourceIDWithProvider(parent *ResourceID, providerNamespace, re...
  function chooseResourceType (line 131) | func chooseResourceType(resourceTypeName string, parent *ResourceID) Res...
  function appendNext (line 175) | func appendNext(parent *ResourceID, parts []string, id string) (*Resourc...
  function splitStringAndOmitEmpty (line 214) | func splitStringAndOmitEmpty(v, sep string) []string {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/internal/resource/resource_type.go
  type ResourceType (line 28) | type ResourceType struct
    method String (line 45) | func (t ResourceType) String() string {
    method IsParentOf (line 50) | func (t ResourceType) IsParentOf(child ResourceType) bool {
    method AppendChild (line 67) | func (t ResourceType) AppendChild(childType string) ResourceType {
    method lastType (line 112) | func (t ResourceType) lastType() string {
  function NewResourceType (line 73) | func NewResourceType(providerNamespace, typeName string) ResourceType {
  function ParseResourceType (line 85) | func ParseResourceType(resourceIDOrType string) (ResourceType, error) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/policy/policy.go
  type BearerTokenOptions (line 16) | type BearerTokenOptions struct
  type RegistrationOptions (line 29) | type RegistrationOptions struct
  type ClientOptions (line 50) | type ClientOptions struct
    method Clone (line 64) | func (o *ClientOptions) Clone() *ClientOptions {
  function copyMap (line 79) | func copyMap[K comparable, V any](src map[K]V) map[K]V {
  function copyArray (line 91) | func copyArray[T any](src []T) []T {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_identifier.go
  function ParseResourceID (line 21) | func ParseResourceID(id string) (*ResourceID, error) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/resource_type.go
  function NewResourceType (line 31) | func NewResourceType(providerNamespace, typeName string) ResourceType {
  function ParseResourceType (line 38) | func ParseResourceType(resourceIDOrType string) (ResourceType, error) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/pipeline.go
  function NewPipeline (line 23) | func NewPipeline(module, version string, cred azcore.TokenCredential, pl...
  function getConfiguration (line 54) | func getConfiguration(o *azpolicy.ClientOptions) (cloud.ServiceConfigura...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_bearer_token.go
  constant headerAuxiliaryAuthorization (line 21) | headerAuxiliaryAuthorization = "x-ms-authorization-auxiliary"
  type acquiringResourceState (line 24) | type acquiringResourceState struct
  function acquire (line 32) | func acquire(state acquiringResourceState) (newResource azcore.AccessTok...
  type BearerTokenPolicy (line 44) | type BearerTokenPolicy struct
    method onRequest (line 72) | func (b *BearerTokenPolicy) onRequest(req *azpolicy.Request, authNZ fu...
    method Do (line 97) | func (b *BearerTokenPolicy) Do(req *azpolicy.Request) (*http.Response,...
  function NewBearerTokenPolicy (line 54) | func NewBearerTokenPolicy(cred azcore.TokenCredential, opts *armpolicy.B...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/policy_register_rp.go
  constant LogRPRegistration (line 30) | LogRPRegistration log.Event = "RPRegistration"
  function setDefaults (line 34) | func setDefaults(r *armpolicy.RegistrationOptions) {
  function NewRPRegistrationPolicy (line 53) | func NewRPRegistrationPolicy(cred azcore.TokenCredential, o *armpolicy.R...
  type rpRegistrationPolicy (line 72) | type rpRegistrationPolicy struct
    method Do (line 78) | func (r *rpRegistrationPolicy) Do(req *azpolicy.Request) (*http.Respon...
  function getSubscription (line 176) | func getSubscription(path string) (string, error) {
  function getProvider (line 186) | func getProvider(re requestError) (string, error) {
  type requestError (line 194) | type requestError struct
  type serviceError (line 198) | type serviceError struct
  type serviceErrorDetails (line 203) | type serviceErrorDetails struct
  type providersOperations (line 213) | type providersOperations struct
    method Get (line 220) | func (client *providersOperations) Get(ctx context.Context, resourcePr...
    method getCreateRequest (line 237) | func (client *providersOperations) getCreateRequest(ctx context.Contex...
    method getHandleResponse (line 252) | func (client *providersOperations) getHandleResponse(resp *http.Respon...
    method Register (line 265) | func (client *providersOperations) Register(ctx context.Context, resou...
    method registerCreateRequest (line 282) | func (client *providersOperations) registerCreateRequest(ctx context.C...
    method registerHandleResponse (line 297) | func (client *providersOperations) registerHandleResponse(resp *http.R...
  type providerResponse (line 310) | type providerResponse struct
  type provider (line 319) | type provider struct

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/arm/runtime/runtime.go
  function init (line 11) | func init() {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud/cloud.go
  type ServiceName (line 25) | type ServiceName
  constant ResourceManager (line 28) | ResourceManager ServiceName = "resourceManager"
  type ServiceConfiguration (line 31) | type ServiceConfiguration struct
  type Configuration (line 39) | type Configuration struct

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/core.go
  function NullValue (line 30) | func NullValue[T any]() T {
  function IsNullValue (line 54) | func IsNullValue[T any](v T) bool {
  type Client (line 73) | type Client struct
    method Pipeline (line 106) | func (c *Client) Pipeline() runtime.Pipeline {
    method Tracer (line 111) | func (c *Client) Tracer() tracing.Tracer {
  function NewClient (line 83) | func NewClient(clientName, moduleVersion string, plOpts runtime.Pipeline...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/etag.go
  type ETag (line 16) | type ETag
    method Equals (line 23) | func (e ETag) Equals(other ETag) bool {
    method WeakEquals (line 29) | func (e ETag) WeakEquals(other ETag) bool {
    method IsWeak (line 46) | func (e ETag) IsWeak() bool {
  constant ETagAny (line 19) | ETagAny ETag = "*"

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/exported.go
  type nopCloser (line 16) | type nopCloser struct
    method Close (line 20) | func (n nopCloser) Close() error {
  function NopCloser (line 26) | func NopCloser(rs io.ReadSeeker) io.ReadSeekCloser {
  function HasStatusCode (line 32) | func HasStatusCode(resp *http.Response, statusCodes ...int) bool {
  type AccessToken (line 46) | type AccessToken struct
  type TokenRequestOptions (line 53) | type TokenRequestOptions struct
  type TokenCredential (line 64) | type TokenCredential interface

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/pipeline.go
  type Policy (line 20) | type Policy interface
  type Pipeline (line 30) | type Pipeline struct
    method Do (line 74) | func (p Pipeline) Do(req *Request) (*http.Response, error) {
  type Transporter (line 36) | type Transporter interface
  type transportPolicy (line 42) | type transportPolicy struct
    method Do (line 46) | func (tp transportPolicy) Do(req *Request) (*http.Response, error) {
  function NewPipeline (line 63) | func NewPipeline(transport Transporter, policies ...Policy) Pipeline {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/request.go
  type Request (line 24) | type Request struct
    method Body (line 64) | func (req *Request) Body() io.ReadSeekCloser {
    method Raw (line 69) | func (req *Request) Raw() *http.Request {
    method Next (line 77) | func (req *Request) Next() (*http.Response, error) {
    method SetOperationValue (line 88) | func (req *Request) SetOperationValue(value interface{}) {
    method OperationValue (line 96) | func (req *Request) OperationValue(value interface{}) bool {
    method SetBody (line 107) | func (req *Request) SetBody(body io.ReadSeekCloser, contentType string...
    method RewindBody (line 148) | func (req *Request) RewindBody() error {
    method Close (line 159) | func (req *Request) Close() error {
    method Clone (line 167) | func (req *Request) Clone(ctx context.Context) *Request {
  type opValues (line 31) | type opValues
    method set (line 34) | func (ov opValues) set(value interface{}) {
    method get (line 39) | func (ov opValues) get(value interface{}) bool {
  function NewRequest (line 49) | func NewRequest(ctx context.Context, httpMethod string, endpoint string)...
  type PolicyFunc (line 177) | type PolicyFunc
    method Do (line 180) | func (pf PolicyFunc) Do(req *Request) (*http.Response, error) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/exported/response_error.go
  function NewResponseError (line 21) | func NewResponseError(resp *http.Response) error {
  function extractErrorCodeJSON (line 50) | func extractErrorCodeJSON(body []byte) string {
  function extractErrorCodeXML (line 86) | func extractErrorCodeXML(body []byte) string {
  type ResponseError (line 101) | type ResponseError struct
    method Error (line 114) | func (e *ResponseError) Error() string {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/log/log.go
  constant EventRequest (line 18) | EventRequest     = azlog.EventRequest
  constant EventResponse (line 19) | EventResponse    = azlog.EventResponse
  constant EventRetryPolicy (line 20) | EventRetryPolicy = azlog.EventRetryPolicy
  constant EventLRO (line 21) | EventLRO         = azlog.EventLRO
  function Write (line 24) | func Write(cls log.Event, msg string) {
  function Writef (line 28) | func Writef(cls log.Event, format string, a ...interface{}) {
  function SetListener (line 32) | func SetListener(lst func(Event, string)) {
  function Should (line 36) | func Should(cls log.Event) bool {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/async/async.go
  function Applicable (line 25) | func Applicable(resp *http.Response) bool {
  function CanResume (line 30) | func CanResume(token map[string]interface{}) bool {
  type Poller (line 36) | type Poller struct
  function New (line 62) | func New[T any](pl exported.Pipeline, resp *http.Response, finalState po...
  method Done (line 96) | func (p *Poller[T]) Done() bool {
  method Poll (line 101) | func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
  method Result (line 123) | func (p *Poller[T]) Result(ctx context.Context, out *T) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/body/body.go
  constant kind (line 21) | kind = "body"
  function Applicable (line 25) | func Applicable(resp *http.Response) bool {
  function CanResume (line 32) | func CanResume(token map[string]interface{}) bool {
  type Poller (line 45) | type Poller struct
  function New (line 62) | func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], ...
  method Done (line 98) | func (p *Poller[T]) Done() bool {
  method Poll (line 102) | func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
  method Result (line 133) | func (p *Poller[T]) Result(ctx context.Context, out *T) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/loc/loc.go
  constant kind (line 23) | kind = "loc"
  function Applicable (line 26) | func Applicable(resp *http.Response) bool {
  function CanResume (line 31) | func CanResume(token map[string]interface{}) bool {
  type Poller (line 44) | type Poller struct
  function New (line 55) | func New[T any](pl exported.Pipeline, resp *http.Response) (*Poller[T], ...
  method Done (line 84) | func (p *Poller[T]) Done() bool {
  method Poll (line 88) | func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
  method Result (line 117) | func (p *Poller[T]) Result(ctx context.Context, out *T) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/op/op.go
  function Applicable (line 23) | func Applicable(resp *http.Response) bool {
  function CanResume (line 28) | func CanResume(token map[string]interface{}) bool {
  type Poller (line 34) | type Poller struct
  function New (line 48) | func New[T any](pl exported.Pipeline, resp *http.Response, finalState po...
  method Done (line 89) | func (p *Poller[T]) Done() bool {
  method Poll (line 93) | func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
  method Result (line 115) | func (p *Poller[T]) Result(ctx context.Context, out *T) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/poller.go
  type FinalStateVia (line 10) | type FinalStateVia
  constant FinalStateViaAzureAsyncOp (line 14) | FinalStateViaAzureAsyncOp FinalStateVia = "azure-async-operation"
  constant FinalStateViaLocation (line 17) | FinalStateViaLocation FinalStateVia = "location"
  constant FinalStateViaOriginalURI (line 20) | FinalStateViaOriginalURI FinalStateVia = "original-uri"
  constant FinalStateViaOpLocation (line 23) | FinalStateViaOpLocation FinalStateVia = "operation-location"

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/pollers/util.go
  function getTokenTypeName (line 25) | func getTokenTypeName[T any]() (string, error) {
  type resumeTokenWrapper (line 39) | type resumeTokenWrapper struct
  function NewResumeToken (line 46) | func NewResumeToken[TResult, TSource any](from TSource) (string, error) {
  function ExtractToken (line 62) | func ExtractToken(token string) ([]byte, error) {
  function IsTokenValid (line 76) | func IsTokenValid[T any](token string) error {
  type NopPoller (line 100) | type NopPoller struct
  function NewNopPoller (line 107) | func NewNopPoller[T any](resp *http.Response) (*NopPoller[T], error) {
  method Done (line 125) | func (*NopPoller[T]) Done() bool {
  method Poll (line 129) | func (p *NopPoller[T]) Poll(context.Context) (*http.Response, error) {
  method Result (line 133) | func (p *NopPoller[T]) Result(ctx context.Context, out *T) error {
  function PollHelper (line 142) | func PollHelper(ctx context.Context, endpoint string, pl azexported.Pipe...
  function ResultHelper (line 162) | func ResultHelper[T any](resp *http.Response, failed bool, out *T) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/constants.go
  constant ContentTypeAppJSON (line 10) | ContentTypeAppJSON = "application/json"
  constant ContentTypeAppXML (line 11) | ContentTypeAppXML  = "application/xml"
  constant HeaderAuthorization (line 15) | HeaderAuthorization          = "Authorization"
  constant HeaderAuxiliaryAuthorization (line 16) | HeaderAuxiliaryAuthorization = "x-ms-authorization-auxiliary"
  constant HeaderAzureAsync (line 17) | HeaderAzureAsync             = "Azure-AsyncOperation"
  constant HeaderContentLength (line 18) | HeaderContentLength          = "Content-Length"
  constant HeaderContentType (line 19) | HeaderContentType            = "Content-Type"
  constant HeaderLocation (line 20) | HeaderLocation               = "Location"
  constant HeaderOperationLocation (line 21) | HeaderOperationLocation      = "Operation-Location"
  constant HeaderRetryAfter (line 22) | HeaderRetryAfter             = "Retry-After"
  constant HeaderUserAgent (line 23) | HeaderUserAgent              = "User-Agent"
  constant HeaderWWWAuthenticate (line 24) | HeaderWWWAuthenticate        = "WWW-Authenticate"
  constant HeaderXMSClientRequestID (line 25) | HeaderXMSClientRequestID     = "x-ms-client-request-id"
  constant BearerTokenPrefix (line 28) | BearerTokenPrefix = "Bearer "
  constant Module (line 32) | Module = "azcore"
  constant Version (line 35) | Version = "v1.6.0"

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared/shared.go
  type CtxWithHTTPHeaderKey (line 21) | type CtxWithHTTPHeaderKey struct
  type CtxWithRetryOptionsKey (line 24) | type CtxWithRetryOptionsKey struct
  type CtxIncludeResponseKey (line 27) | type CtxIncludeResponseKey struct
  function Delay (line 30) | func Delay(ctx context.Context, delay time.Duration) error {
  function RetryAfter (line 40) | func RetryAfter(resp *http.Response) time.Duration {
  function TypeOfT (line 59) | func TypeOfT[T any]() reflect.Type {
  type TransportFunc (line 66) | type TransportFunc
    method Do (line 69) | func (pf TransportFunc) Do(req *http.Request) (*http.Response, error) {
  function ValidateModVer (line 74) | func ValidateModVer(moduleVersion string) error {
  function ExtractPackageName (line 84) | func ExtractPackageName(clientName string) (string, error) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/log/log.go
  constant EventRequest (line 20) | EventRequest Event = "Request"
  constant EventResponse (line 24) | EventResponse Event = "Response"
  constant EventRetryPolicy (line 27) | EventRetryPolicy Event = "Retry"
  constant EventLRO (line 31) | EventLRO Event = "LongRunningOperation"
  function SetEvents (line 37) | func SetEvents(cls ...Event) {
  function SetListener (line 43) | func SetListener(lst func(Event, string)) {
  function resetEvents (line 48) | func resetEvents() {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/policy/policy.go
  type ClientOptions (line 31) | type ClientOptions struct
  type LogOptions (line 64) | type LogOptions struct
  type RetryOptions (line 83) | type RetryOptions struct
  type TelemetryOptions (line 128) | type TelemetryOptions struct
  type BearerTokenOptions (line 141) | type BearerTokenOptions struct
  type AuthorizationHandler (line 149) | type AuthorizationHandler struct

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/errors.go
  function NewResponseError (line 17) | func NewResponseError(resp *http.Response) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pager.go
  type PagingHandler (line 16) | type PagingHandler struct
  type Pager (line 26) | type Pager struct
  function NewPager (line 34) | func NewPager[T any](handler PagingHandler[T]) *Pager[T] {
  method More (line 42) | func (p *Pager[T]) More() bool {
  method NextPage (line 50) | func (p *Pager[T]) NextPage(ctx context.Context) (T, error) {
  method UnmarshalJSON (line 75) | func (p *Pager[T]) UnmarshalJSON(data []byte) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/pipeline.go
  type PipelineOptions (line 15) | type PipelineOptions struct
  function NewPipeline (line 28) | func NewPipeline(module, version string, plOpts PipelineOptions, options...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_api_version.go
  type APIVersionOptions (line 18) | type APIVersionOptions struct
  type APIVersionLocation (line 26) | type APIVersionLocation
  constant APIVersionLocationQueryParam (line 30) | APIVersionLocationQueryParam = 0
  constant APIVersionLocationHeader (line 32) | APIVersionLocationHeader = 1
  function newAPIVersionPolicy (line 37) | func newAPIVersionPolicy(version string, opts *APIVersionOptions) *apiVe...
  type apiVersionPolicy (line 45) | type apiVersionPolicy struct
    method Do (line 57) | func (a *apiVersionPolicy) Do(req *policy.Request) (*http.Response, er...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_bearer_token.go
  type BearerTokenPolicy (line 19) | type BearerTokenPolicy struct
    method authenticateAndAuthorize (line 61) | func (b *BearerTokenPolicy) authenticateAndAuthorize(req *policy.Reque...
    method Do (line 74) | func (b *BearerTokenPolicy) Do(req *policy.Request) (*http.Response, e...
  type acquiringResourceState (line 28) | type acquiringResourceState struct
  function acquire (line 36) | func acquire(state acquiringResourceState) (newResource exported.AccessT...
  function NewBearerTokenPolicy (line 48) | func NewBearerTokenPolicy(cred exported.TokenCredential, scopes []string...
  function ensureNonRetriable (line 101) | func ensureNonRetriable(err error) error {
  type btpError (line 110) | type btpError struct
    method NonRetriable (line 114) | func (btpError) NonRetriable() {}

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_body_download.go
  function bodyDownloadPolicy (line 19) | func bodyDownloadPolicy(req *policy.Request) (*http.Response, error) {
  type bodyDownloadPolicyOpValues (line 39) | type bodyDownloadPolicyOpValues struct
  type bodyDownloadError (line 43) | type bodyDownloadError struct
    method Error (line 60) | func (b *bodyDownloadError) Error() string {
    method NonRetriable (line 64) | func (b *bodyDownloadError) NonRetriable() {
    method Unwrap (line 68) | func (b *bodyDownloadError) Unwrap() error {
  function newBodyDownloadError (line 47) | func newBodyDownloadError(err error, req *policy.Request) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_http_header.go
  function httpHeaderPolicy (line 18) | func httpHeaderPolicy(req *policy.Request) (*http.Response, error) {
  function WithHTTPHeader (line 37) | func WithHTTPHeader(parent context.Context, header http.Header) context....

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_include_response.go
  function includeResponsePolicy (line 18) | func includeResponsePolicy(req *policy.Request) (*http.Response, error) {
  function WithCaptureResponse (line 32) | func WithCaptureResponse(parent context.Context, resp **http.Response) c...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_logging.go
  type logPolicy (line 25) | type logPolicy struct
    method Do (line 96) | func (p *logPolicy) Do(req *policy.Request) (*http.Response, error) {
    method writeRequestWithResponse (line 166) | func (p *logPolicy) writeRequestWithResponse(b *bytes.Buffer, req *pol...
    method writeHeader (line 182) | func (p *logPolicy) writeHeader(b *bytes.Buffer, header http.Header) {
  function NewLogPolicy (line 33) | func NewLogPolicy(o *policy.LogOptions) policy.Policy {
  function getAllowedQueryParams (line 80) | func getAllowedQueryParams(customAllowedQP []string) map[string]struct{} {
  type logPolicyOpValues (line 91) | type logPolicyOpValues struct
  constant redactedValue (line 149) | redactedValue = "REDACTED"
  function getSanitizedURL (line 152) | func getSanitizedURL(u url.URL, allowedQueryParams map[string]struct{}) ...
  function shouldLogBody (line 205) | func shouldLogBody(b *bytes.Buffer, contentType string) bool {
  function writeReqBody (line 217) | func writeReqBody(req *policy.Request, b *bytes.Buffer) error {
  function writeRespBody (line 238) | func writeRespBody(resp *http.Response, b *bytes.Buffer) error {
  function logBody (line 259) | func logBody(b *bytes.Buffer, body []byte) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_request_id.go
  type requestIDPolicy (line 17) | type requestIDPolicy struct
    method Do (line 24) | func (r *requestIDPolicy) Do(req *policy.Request) (*http.Response, err...
  function NewRequestIDPolicy (line 20) | func NewRequestIDPolicy() policy.Policy {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_retry.go
  constant defaultMaxRetries (line 26) | defaultMaxRetries = 3
  function setDefaults (line 29) | func setDefaults(o *policy.RetryOptions) {
  function calcDelay (line 61) | func calcDelay(o policy.RetryOptions, try int32) time.Duration { // try ...
  function NewRetryPolicy (line 82) | func NewRetryPolicy(o *policy.RetryOptions) policy.Policy {
  type retryPolicy (line 90) | type retryPolicy struct
    method Do (line 94) | func (p *retryPolicy) Do(req *policy.Request) (resp *http.Response, er...
  function WithRetryOptions (line 211) | func WithRetryOptions(parent context.Context, options policy.RetryOption...
  type retryableRequestBody (line 218) | type retryableRequestBody struct
    method Read (line 223) | func (b *retryableRequestBody) Read(p []byte) (n int, err error) {
    method Seek (line 227) | func (b *retryableRequestBody) Seek(offset int64, whence int) (offsetF...
    method Close (line 231) | func (b *retryableRequestBody) Close() error {
    method realClose (line 237) | func (b *retryableRequestBody) realClose() error {
  type contextCancelReadCloser (line 248) | type contextCancelReadCloser struct
    method Read (line 253) | func (rc *contextCancelReadCloser) Read(p []byte) (n int, err error) {
    method Close (line 257) | func (rc *contextCancelReadCloser) Close() error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/policy_telemetry.go
  type telemetryPolicy (line 21) | type telemetryPolicy struct
    method Do (line 57) | func (p telemetryPolicy) Do(req *policy.Request) (*http.Response, erro...
  function NewTelemetryPolicy (line 28) | func NewTelemetryPolicy(mod, ver string, o *policy.TelemetryOptions) pol...
  function formatTelemetry (line 53) | func formatTelemetry(comp, ver string) string {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/poller.go
  constant FinalStateViaAzureAsyncOp (line 34) | FinalStateViaAzureAsyncOp = pollers.FinalStateViaAzureAsyncOp
  constant FinalStateViaLocation (line 37) | FinalStateViaLocation = pollers.FinalStateViaLocation
  constant FinalStateViaOriginalURI (line 40) | FinalStateViaOriginalURI = pollers.FinalStateViaOriginalURI
  constant FinalStateViaOpLocation (line 43) | FinalStateViaOpLocation = pollers.FinalStateViaOpLocation
  type NewPollerOptions (line 47) | type NewPollerOptions struct
  function NewPoller (line 60) | func NewPoller[T any](resp *http.Response, pl exported.Pipeline, options...
  type NewPollerFromResumeTokenOptions (line 117) | type NewPollerFromResumeTokenOptions struct
  function NewPollerFromResumeToken (line 127) | func NewPollerFromResumeToken[T any](token string, pl exported.Pipeline,...
  type PollingHandler (line 173) | type PollingHandler interface
  type Poller (line 186) | type Poller struct
  type PollUntilDoneOptions (line 195) | type PollUntilDoneOptions struct
  method PollUntilDone (line 206) | func (p *Poller[T]) PollUntilDone(ctx context.Context, options *PollUnti...
  method Poll (line 264) | func (p *Poller[T]) Poll(ctx context.Context) (*http.Response, error) {
  method Done (line 279) | func (p *Poller[T]) Done() bool {
  method Result (line 287) | func (p *Poller[T]) Result(ctx context.Context) (T, error) {
  method ResumeToken (line 318) | func (p *Poller[T]) ResumeToken() (string, error) {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/request.go
  type Base64Encoding (line 31) | type Base64Encoding
  constant Base64StdFormat (line 35) | Base64StdFormat Base64Encoding = 0
  constant Base64URLFormat (line 38) | Base64URLFormat Base64Encoding = 1
  function NewRequest (line 43) | func NewRequest(ctx context.Context, httpMethod string, endpoint string)...
  function JoinPaths (line 50) | func JoinPaths(root string, paths ...string) string {
  function EncodeByteArray (line 81) | func EncodeByteArray(v []byte, format Base64Encoding) string {
  function MarshalAsByteArray (line 90) | func MarshalAsByteArray(req *policy.Request, v []byte, format Base64Enco...
  function MarshalAsJSON (line 97) | func MarshalAsJSON(req *policy.Request, v interface{}) error {
  function MarshalAsXML (line 109) | func MarshalAsXML(req *policy.Request, v interface{}) error {
  function SetMultipartFormData (line 122) | func SetMultipartFormData(req *policy.Request, formData map[string]inter...
  function SkipBodyDownload (line 168) | func SkipBodyDownload(req *policy.Request) {
  function cloneWithoutReadOnlyFields (line 174) | func cloneWithoutReadOnlyFields(v interface{}) interface{} {
  function recursiveFindReadOnlyField (line 189) | func recursiveFindReadOnlyField(val reflect.Value) bool {
  function recursiveCloneWithoutReadOnlyFields (line 205) | func recursiveCloneWithoutReadOnlyFields(val reflect.Value) interface{} {
  function azureTagIsReadOnly (line 237) | func azureTagIsReadOnly(tag string) bool {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/response.go
  function Payload (line 24) | func Payload(resp *http.Response) ([]byte, error) {
  function HasStatusCode (line 29) | func HasStatusCode(resp *http.Response, statusCodes ...int) bool {
  function UnmarshalAsByteArray (line 34) | func UnmarshalAsByteArray(resp *http.Response, v *[]byte, format Base64E...
  function UnmarshalAsJSON (line 43) | func UnmarshalAsJSON(resp *http.Response, v interface{}) error {
  function UnmarshalAsXML (line 64) | func UnmarshalAsXML(resp *http.Response, v interface{}) error {
  function Drain (line 85) | func Drain(resp *http.Response) {
  function removeBOM (line 93) | func removeBOM(resp *http.Response) error {
  function DecodeByteArray (line 107) | func DecodeByteArray(s string, v *[]byte, format Base64Encoding) error {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/runtime/transport_default_http_client.go
  function init (line 18) | func init() {

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/streaming/progress.go
  type progress (line 15) | type progress struct
    method Read (line 51) | func (p *progress) Read(b []byte) (n int, err error) {
    method Seek (line 63) | func (p *progress) Seek(offset int64, whence int) (int64, error) {
    method Close (line 73) | func (p *progress) Close() error {
  function NopCloser (line 26) | func NopCloser(rs io.ReadSeeker) io.ReadSeekCloser {
  function NewRequestProgress (line 31) | func NewRequestProgress(body io.ReadSeekCloser, pr func(bytesTransferred...
  function NewResponseProgress (line 41) | func NewResponseProgress(body io.ReadCloser, pr func(bytesTransferred in...

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/constants.go
  type SpanKind (line 10) | type SpanKind
  constant SpanKindInternal (line 14) | SpanKindInternal SpanKind = 1
  constant SpanKindServer (line 17) | SpanKindServer SpanKind = 2
  constant SpanKindClient (line 20) | SpanKindClient SpanKind = 3
  constant SpanKindProducer (line 23) | SpanKindProducer SpanKind = 4
  constant SpanKindConsumer (line 26) | SpanKindConsumer SpanKind = 5
  type SpanStatus (line 30) | type SpanStatus
  constant SpanStatusUnset (line 34) | SpanStatusUnset SpanStatus = 0
  constant SpanStatusError (line 37) | SpanStatusError SpanStatus = 1
  constant SpanStatusOK (line 40) | SpanStatusOK SpanStatus = 2

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azcore/tracing/tracing.go
  type ProviderOptions (line 15) | type ProviderOptions struct
  function NewProvider (line 22) | func NewProvider(newTracerFn func(name, version string) Tracer, options ...
  type Provider (line 30) | type Provider struct
    method NewTracer (line 37) | func (p Provider) NewTracer(name, version string) (tracer Tracer) {
  type TracerOptions (line 47) | type TracerOptions struct
  function NewTracer (line 54) | func NewTracer(newSpanFn func(ctx context.Context, spanName string, opti...
  type Tracer (line 61) | type Tracer struct
    method Start (line 69) | func (t Tracer) Start(ctx context.Context, spanName string, options *S...
  type SpanOptions (line 77) | type SpanOptions struct
  type SpanImpl (line 90) | type SpanImpl struct
  function NewSpan (line 108) | func NewSpan(impl SpanImpl) Span {
  type Span (line 116) | type Span struct
    method End (line 122) | func (s Span) End() {
    method SetAttributes (line 130) | func (s Span) SetAttributes(attrs ...Attribute) {
    method AddEvent (line 137) | func (s Span) AddEvent(name string, attrs ...Attribute) {
    method AddError (line 144) | func (s Span) AddError(err error) {
    method SetStatus (line 151) | func (s Span) SetStatus(code SpanStatus, desc string) {
  type Attribute (line 160) | type Attribute struct

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azidentity.go
  constant azureAdditionallyAllowedTenants (line 29) | azureAdditionallyAllowedTenants = "AZURE_ADDITIONALLY_ALLOWED_TENANTS"
  constant azureAuthorityHost (line 30) | azureAuthorityHost              = "AZURE_AUTHORITY_HOST"
  constant azureClientCertificatePassword (line 31) | azureClientCertificatePassword  = "AZURE_CLIENT_CERTIFICATE_PASSWORD"
  constant azureClientCertificatePath (line 32) | azureClientCertificatePath      = "AZURE_CLIENT_CERTIFICATE_PATH"
  constant azureClientID (line 33) | azureClientID                   = "AZURE_CLIENT_ID"
  constant azureClientSecret (line 34) | azureClientSecret               = "AZURE_CLIENT_SECRET"
  constant azureFederatedTokenFile (line 35) | azureFederatedTokenFile         = "AZURE_FEDERATED_TOKEN_FILE"
  constant azurePassword (line 36) | azurePassword                   = "AZURE_PASSWORD"
  constant azureRegionalAuthorityName (line 37) | azureRegionalAuthorityName      = "AZURE_REGIONAL_AUTHORITY_NAME"
  constant azureTenantID (line 38) | azureTenantID                   = "AZURE_TENANT_ID"
  constant azureUsername (line 39) | azureUsername                   = "AZURE_USERNAME"
  constant organizationsTenantID (line 41) | organizationsTenantID   = "organizations"
  constant developerSignOnClientID (line 42) | developerSignOnClientID = "04b07795-8ddb-461a-bbee-02f9e1bf7b46"
  constant defaultSuffix (line 43) | defaultSuffix           = "/.default"
  constant tenantIDValidationErr (line 44) | tenantIDValidationErr   = "invalid tenantID. You can locate your tenantI...
  function setAuthorityHost (line 103) | func setAuthorityHost(cc cloud.Configuration) (string, error) {
  function validTenantID (line 125) | func validTenantID(tenantID string) bool {
  function newPipelineAdapter (line 133) | func newPipelineAdapter(opts *azcore.ClientOptions) pipelineAdapter {
  type pipelineAdapter (line 138) | type pipelineAdapter struct
    method CloseIdleConnections (line 142) | func (p pipelineAdapter) CloseIdleConnections() {
    method Do (line 146) | func (p pipelineAdapter) Do(r *http.Request) (*http.Response, error) {
  type confidentialClient (line 176) | type confidentialClient interface
  type publicClient (line 184) | type publicClient interface

FILE: vendor/github.com/Azure/azure-sdk-for-go/sdk/azidentity/azure_cli_credential.go
  constant credNameAzureCLI (line 27) | credNameAzureCLI  = "AzureCLICredential"
  constant timeoutCLIRequest (line 28) | timeoutCLIRequest = 10 * time.Second
  type azureCLITokenProvider (line 32) | type azureCLITokenProvider
  type AzureCLICredentialOptions (line 35) | type AzureCLICredentialOptions struct
    method init (line 48) | func (o *AzureCLICredentialOptions) init() {
  type AzureCLICredential (line 55) | type AzureCLICredential struct
    method GetToken (line 74) | func (c *AzureCLICredential) GetToken(ctx context.Context, opts policy...
    method requestToken (line 83) | func (c *AzureCLICredential) requestToken(ctx context.Context, opts po...
    method createAccessToken (line 149) | func (c *AzureCLICredential) createAccessToken(tk []byte) (azcore.Acce...
  function NewAzureCLICredential (line 61) | func NewAzureCLICredential(options *AzureCLICredentialOptions) (*AzureCL...
  function defaultTokenProvider (line 95) | func defaultTokenProvider() func(ctx context.Context, resource strin
Copy disabled (too large) Download .json
Condensed preview — 3492 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (61,894K chars).
[
  {
    "path": ".adr-dir",
    "chars": 28,
    "preview": "docs/architecture/decisions\n"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 121,
    "preview": "---\nversion: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"daily\""
  },
  {
    "path": ".github/workflows/go.yml",
    "chars": 606,
    "preview": "---\nname: go\non:\n  push:\n  pull_request:\njobs:\n  lint:\n    strategy:\n      matrix:\n        os: [macos-latest, ubuntu-lat"
  },
  {
    "path": ".gitignore",
    "chars": 450,
    "preview": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n\n# Folders\n_obj\n_test\n.idea\nignored\n.dire"
  },
  {
    "path": ".gitmodules",
    "chars": 303,
    "preview": "[submodule \"bosh/deployments/bosh-deployment\"]\n\tpath = bosh/deployments/bosh-deployment\n\turl = https://github.com/cloudf"
  },
  {
    "path": ".golangci.yml",
    "chars": 184,
    "preview": "version: \"2\"\n\nlinters:\n  default: standard\n\n  settings:\n    errcheck:\n      check-blank: true # assignment to blank iden"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 6732,
    "preview": "## v7.0.0 (Unreleased)\n\n**BACKWARD INCOMPATIBILITIES / NOTES:**\n\n**FEATURES / IMPROVEMENTS:**\n\n**BUG FIXES:**\n\n## v6.7.0"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 503,
    "preview": "# Contributing to BOSH-Bootloader\n\nThe Infrastructure team accepts contributions via pull request against master.\n\nTo ve"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "NOTICE",
    "chars": 616,
    "preview": "bosh-bootloader\n\nCopyright (c) CloudFoundry.org Foundation, Inc. 2016. All Rights Reserved.\n\nLicensed under the Apache L"
  },
  {
    "path": "README.md",
    "chars": 5912,
    "preview": "[![Build](https://bosh.ci.cloudfoundry.org/api/v1/teams/main/pipelines/bosh-bootloader/badge)](https://bosh.ci.cloudfoun"
  },
  {
    "path": "acceptance-tests/actors/aws.go",
    "chars": 3245,
    "preview": "package actors\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\n\tawslib \"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-sdk-go/aws/credentia"
  },
  {
    "path": "acceptance-tests/actors/azure.go",
    "chars": 2213,
    "preview": "package actors\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azidentity\"\n\t\"github.com/Azure/azure"
  },
  {
    "path": "acceptance-tests/actors/bbl.go",
    "chars": 7450,
    "preview": "package actors\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"syscall\"\n\t\"time\"\n\n\t\"github.com/kr/pty\"\n\n\t\"g"
  },
  {
    "path": "acceptance-tests/actors/boshcli.go",
    "chars": 2595,
    "preview": "package actors\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"os\"\n\t\"os/exec\"\n)\n\ntype BOSHCLI struct{}\n\nfunc NewBOSHCLI() BOSHCLI"
  },
  {
    "path": "acceptance-tests/actors/cloudstack.go",
    "chars": 91,
    "preview": "package actors\n\nfunc NewCloudStackLBHelper() vSphereLBHelper {\n\treturn vSphereLBHelper{}\n}\n"
  },
  {
    "path": "acceptance-tests/actors/gcp.go",
    "chars": 3177,
    "preview": "package actors\n\nimport (\n\t\"context\"\n\t\"encoding/json\"\n\t\"os\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/acceptance-tests\"\n"
  },
  {
    "path": "acceptance-tests/actors/iaas_helper.go",
    "chars": 784,
    "preview": "package actors\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/acceptance-tests\"\n)\n\ntype IAASLBHelper interf"
  },
  {
    "path": "acceptance-tests/actors/openstack.go",
    "chars": 552,
    "preview": "package actors\n\nfunc NewOpenStackLBHelper() openStackLBHelper {\n\treturn openStackLBHelper{}\n}\n\ntype openStackLBHelper st"
  },
  {
    "path": "acceptance-tests/actors/vsphere.go",
    "chars": 532,
    "preview": "package actors\n\nfunc NewVSphereLBHelper() vSphereLBHelper {\n\treturn vSphereLBHelper{}\n}\n\ntype vSphereLBHelper struct {\n}"
  },
  {
    "path": "acceptance-tests/bbl/init_test.go",
    "chars": 1389,
    "preview": "package acceptance_test\n\nimport (\n\t\"os\"\n\t\"testing\"\n\t\"time\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t"
  },
  {
    "path": "acceptance-tests/bbl/latest_error_test.go",
    "chars": 1240,
    "preview": "package acceptance_test\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/acceptanc"
  },
  {
    "path": "acceptance-tests/bbl/plan_test.go",
    "chars": 3814,
    "preview": "package acceptance_test\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/"
  },
  {
    "path": "acceptance-tests/bbl/print_env_test.go",
    "chars": 1658,
    "preview": "package acceptance_test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/acceptance-tests\"\n\t\"github.com/cloud"
  },
  {
    "path": "acceptance-tests/bbl/ssh_linux_test.go",
    "chars": 2618,
    "preview": "package acceptance_test\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\n\tacceptance \"github.com/cloudfoundry/bosh-bootloader/acceptance-tes"
  },
  {
    "path": "acceptance-tests/bbl/up_and_down_test.go",
    "chars": 5315,
    "preview": "package acceptance_test\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/acceptance-tests\"\n\t\"githu"
  },
  {
    "path": "acceptance-tests/bbl/upgrade_test.go",
    "chars": 4791,
    "preview": "package acceptance_test\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io\"\n\t\"net/http\"\n\t\"os\"\n\t\"os/user\"\n\t\"path/filepath\"\n\t\"runtime\""
  },
  {
    "path": "acceptance-tests/config.go",
    "chars": 8033,
    "preview": "package acceptance\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t. \"github.com/onsi/ginkgo/v2\" //nolint:staticcheck\n)\n\ntype Config "
  },
  {
    "path": "acceptance-tests/no-iaas/flags_error_test.go",
    "chars": 1350,
    "preview": "package acceptance_test\n\nimport (\n\t\"os/exec\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/on"
  },
  {
    "path": "acceptance-tests/no-iaas/help_test.go",
    "chars": 6036,
    "preview": "package acceptance_test\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"githu"
  },
  {
    "path": "acceptance-tests/no-iaas/init_test.go",
    "chars": 475,
    "preview": "package acceptance_test\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/on"
  },
  {
    "path": "acceptance-tests/no-iaas/state_query_test.go",
    "chars": 8860,
    "preview": "package acceptance_test\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/acceptance-tests\"\n\t\""
  },
  {
    "path": "acceptance-tests/no-iaas/version_test.go",
    "chars": 2543,
    "preview": "package acceptance_test\n\nimport (\n\t\"fmt\"\n\t\"os/exec\"\n\t\"runtime\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomeg"
  },
  {
    "path": "acceptance-tests/state.go",
    "chars": 1274,
    "preview": "package acceptance\n\nimport (\n\t\"crypto/md5\"\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"os\"\n\n\t. \"github.com/onsi/gomega\" //nolint:staticche"
  },
  {
    "path": "acceptance-tests/vm_extensions.go",
    "chars": 600,
    "preview": "package acceptance\n\nimport (\n\t\"gopkg.in/yaml.v2\"\n\n\t. \"github.com/onsi/gomega\" //nolint:staticcheck\n)\n\nfunc VmExtensionNa"
  },
  {
    "path": "application/app.go",
    "chars": 2183,
    "preview": "package application\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\t\"github.com/cloudfoundry/bosh"
  },
  {
    "path": "application/app_test.go",
    "chars": 8664,
    "preview": "package application_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/application\"\n\t\"github.com/cloudf"
  },
  {
    "path": "application/configuration.go",
    "chars": 701,
    "preview": "package application\n\nimport \"github.com/cloudfoundry/bosh-bootloader/storage\"\n\ntype GlobalConfiguration struct {\n\tStateD"
  },
  {
    "path": "application/configuration_test.go",
    "chars": 698,
    "preview": "package application_test\n\nimport (\n\t\"github.com/cloudfoundry/bosh-bootloader/application\"\n\t. \"github.com/onsi/ginkgo/v2\""
  },
  {
    "path": "application/init_test.go",
    "chars": 203,
    "preview": "package application_test\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestAp"
  },
  {
    "path": "application/logger.go",
    "chars": 1826,
    "preview": "package application\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"strings\"\n)\n\ntype Logger struct {\n\tnewline   bool\n\twriter    io.Writer\n\tread"
  },
  {
    "path": "application/logger_test.go",
    "chars": 3023,
    "preview": "package application_test\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math/rand\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/application\"\n"
  },
  {
    "path": "application/state_validator.go",
    "chars": 492,
    "preview": "package application\n\nimport (\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n)\n\ntype StateV"
  },
  {
    "path": "application/state_validator_test.go",
    "chars": 1560,
    "preview": "package application_test\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"runtime\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/a"
  },
  {
    "path": "aws/client.go",
    "chars": 5691,
    "preview": "package aws\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\tawslib \"github.com/aws/aws-sdk-go/aws\"\n\t\"github.com/aws/aws-"
  },
  {
    "path": "aws/client_test.go",
    "chars": 12553,
    "preview": "package aws_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/aws/aws-sdk-go/aws/credentials\"\n\t\"github.com/cloudfoundry/bosh-bootlo"
  },
  {
    "path": "aws/exports_test.go",
    "chars": 476,
    "preview": "package aws\n\nfunc NewClientWithInjectedEC2Client(ec2Client EC2Client, logger logger) Client {\n\treturn Client{\n\t\tec2Clien"
  },
  {
    "path": "aws/init_test.go",
    "chars": 179,
    "preview": "package aws_test\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestAWS(t *tes"
  },
  {
    "path": "azure/azure_suite_test.go",
    "chars": 185,
    "preview": "package azure_test\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestAzure(t "
  },
  {
    "path": "azure/client.go",
    "chars": 2120,
    "preview": "package azure\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute\"     //nolint"
  },
  {
    "path": "azure/client_provider.go",
    "chars": 1460,
    "preview": "package azure\n\nimport (\n\t\"context\"\n\t\"log\"\n\n\t\"github.com/Azure/azure-sdk-for-go/sdk/azidentity\"                          "
  },
  {
    "path": "azure/client_test.go",
    "chars": 4719,
    "preview": "package azure_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute\"     "
  },
  {
    "path": "azure/client_wrappers.go",
    "chars": 1303,
    "preview": "package azure\n\nimport (\n\t\"log\"\n\n\t\"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute\" //nolint:sta"
  },
  {
    "path": "azure/export_test.go",
    "chars": 293,
    "preview": "package azure\n\nfunc NewClientWithInjectedVMsClient(azureVMsClient AzureVMsClient) Client {\n\treturn Client{\n\t\tazureVMsCli"
  },
  {
    "path": "backends/backend.go",
    "chars": 2645,
    "preview": "package backends\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/araddon/gou\"\n\t\"github.com/cloudfoundry/bbl-state-resour"
  },
  {
    "path": "bbl/main.go",
    "chars": 12805,
    "preview": "package main\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"io\"\n\t\"log\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootl"
  },
  {
    "path": "bosh/all_proxy_getter.go",
    "chars": 1031,
    "preview": "package bosh\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/fileio\"\n)\n\ntype AllProxyGetter"
  },
  {
    "path": "bosh/all_proxy_getter_test.go",
    "chars": 1985,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/clo"
  },
  {
    "path": "bosh/assets/bosh-deployment/LICENSE",
    "chars": 10,
    "preview": "my-license"
  },
  {
    "path": "bosh/assets/bosh-deployment/vsphere/cpi.yml",
    "chars": 11,
    "preview": "vsphere-cpi"
  },
  {
    "path": "bosh/assets/jumpbox-deployment/aws/cpi.yml",
    "chars": 7,
    "preview": "aws-cpi"
  },
  {
    "path": "bosh/assets/jumpbox-deployment/azure/cpi.yml",
    "chars": 9,
    "preview": "azure-cpi"
  },
  {
    "path": "bosh/assets/jumpbox-deployment/no-external-ip.yml",
    "chars": 5,
    "preview": "no-ip"
  },
  {
    "path": "bosh/authenticated_cli.go",
    "chars": 959,
    "preview": "package bosh\n\nimport (\n\t\"io\"\n\t\"os\"\n\t\"os/exec\"\n)\n\ntype AuthenticatedCLI struct {\n\tGlobalArgs         []string\n\tBOSHAllPro"
  },
  {
    "path": "bosh/cidr_block.go",
    "chars": 1426,
    "preview": "package bosh\n\nimport (\n\t\"encoding/binary\"\n\t\"math\"\n\t\"net/netip\"\n)\n\ntype CIDRBlock struct {\n\tcidr netip.Prefix\n}\n\nfunc Par"
  },
  {
    "path": "bosh/cidr_block_test.go",
    "chars": 3917,
    "preview": "package bosh_test\n\nimport (\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.c"
  },
  {
    "path": "bosh/cli.go",
    "chars": 488,
    "preview": "package bosh\n\nimport (\n\t\"io\"\n\t\"os/exec\"\n)\n\ntype CLI struct {\n\tstderr io.Writer\n\tpath   string\n}\n\nfunc NewCLI(stderr io.W"
  },
  {
    "path": "bosh/cli_provider.go",
    "chars": 1102,
    "preview": "package bosh\n\nimport (\n\t\"io\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n)\n\ntype CLIProvider struct {\n\tallProxyG"
  },
  {
    "path": "bosh/cli_provider_test.go",
    "chars": 1743,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/cloudfoundry/bosh-bo"
  },
  {
    "path": "bosh/config_updater.go",
    "chars": 1669,
    "preview": "package bosh\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n)\n\ntype ConfigUpdater stru"
  },
  {
    "path": "bosh/config_updater_test.go",
    "chars": 3431,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\t\"os\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/cloudfoundry/b"
  },
  {
    "path": "bosh/credhub_getter.go",
    "chars": 2295,
    "preview": "package bosh\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/fileio\"\n\n\t\"gopkg.in/yaml.v2\"\n)"
  },
  {
    "path": "bosh/credhub_getter_test.go",
    "chars": 5383,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/cloudfoundry/bosh-bo"
  },
  {
    "path": "bosh/deployment_vars_yaml.go",
    "chars": 113,
    "preview": "package bosh\n\ntype sharedDeploymentVarsYAML struct {\n\tTerraformOutputs map[string]interface{} `yaml:\",inline\"`\n}\n"
  },
  {
    "path": "bosh/deployments/.gitignore",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "bosh/deployments/README.md",
    "chars": 551,
    "preview": "## Why?\n\nWhen building the actual bbl binary, this is where your jumpbox / bosh\ndeployment repos should end up so they c"
  },
  {
    "path": "bosh/executor.go",
    "chars": 16893,
    "preview": "package bosh\n\nimport (\n\t\"bytes\"\n\t\"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"io/fs\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"regexp\"\n\t\"s"
  },
  {
    "path": "bosh/executor_test.go",
    "chars": 42015,
    "preview": "package bosh_test\n\nimport (\n\t\"embed\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/spf13/afero\"\n\n\t\"github."
  },
  {
    "path": "bosh/exports_test.go",
    "chars": 261,
    "preview": "package bosh\n\nimport (\n\t\"os\"\n)\n\nfunc SetOSSetenv(f func(string, string) error) {\n\tosSetenv = f\n}\n\nfunc ResetOSSetenv() {"
  },
  {
    "path": "bosh/fixtures/some-cert.crt",
    "chars": 1525,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIEOjCCAiKgAwIBAgIRALwgbGX3hsXpjMiyN7atLV0wDQYJKoZIhvcNAQELBQAw\nFzEVMBMGA1UEAxMMc29tZS1mYWt"
  },
  {
    "path": "bosh/fixtures/some-cert.key",
    "chars": 1679,
    "preview": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpQIBAAKCAQEAxA8j+xI3ZkeMrF0GjDzhdYGWn0iNYV+GD2gxHCQohejFRZN6\nwnB4UbJ1sRUnYxwPYzLTcnD"
  },
  {
    "path": "bosh/fixtures/some-fake-ca.crt",
    "chars": 1769,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIE7jCCAtagAwIBAgIBATANBgkqhkiG9w0BAQsFADAXMRUwEwYDVQQDEwxzb21l\nLWZha2UtY2EwHhcNMTcwODA5MjM"
  },
  {
    "path": "bosh/init_test.go",
    "chars": 285,
    "preview": "package bosh_test\n\nimport (\n\t\"os\"\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestBos"
  },
  {
    "path": "bosh/ip.go",
    "chars": 528,
    "preview": "package bosh\n\nimport (\n\t\"net/netip\"\n)\n\ntype IP struct {\n\tip netip.Addr\n}\n\nfunc ParseIP(ip string) (IP, error) {\n\tparsed,"
  },
  {
    "path": "bosh/ip_test.go",
    "chars": 4075,
    "preview": "package bosh_test\n\nimport (\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.c"
  },
  {
    "path": "bosh/manager.go",
    "chars": 11067,
    "preview": "package bosh\n\nimport (\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-boo"
  },
  {
    "path": "bosh/manager_create_error.go",
    "chars": 426,
    "preview": "package bosh\n\nimport \"github.com/cloudfoundry/bosh-bootloader/storage\"\n\ntype ManagerCreateError struct {\n\tstate storage."
  },
  {
    "path": "bosh/manager_delete_error.go",
    "chars": 426,
    "preview": "package bosh\n\nimport \"github.com/cloudfoundry/bosh-bootloader/storage\"\n\ntype ManagerDeleteError struct {\n\tstate storage."
  },
  {
    "path": "bosh/manager_test.go",
    "chars": 22766,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\t\"os\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/cloudfoundry/b"
  },
  {
    "path": "bosh/ops.go",
    "chars": 428,
    "preview": "package bosh\n\nconst GCPBoshDirectorEphemeralIPOps = `\n- type: replace\n  path: /networks/name=default/subnets/0/cloud_pro"
  },
  {
    "path": "bosh/ssh_key_deleter.go",
    "chars": 1477,
    "preview": "package bosh\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/fileio\"\n\t\"github.com/cloudfoun"
  },
  {
    "path": "bosh/ssh_key_deleter_test.go",
    "chars": 2784,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/clo"
  },
  {
    "path": "bosh/ssh_key_getter.go",
    "chars": 1010,
    "preview": "package bosh\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/fileio\"\n\n\t\"gopkg.in/yaml.v2\"\n)"
  },
  {
    "path": "bosh/ssh_key_getter_test.go",
    "chars": 2266,
    "preview": "package bosh_test\n\nimport (\n\t\"errors\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/clo"
  },
  {
    "path": "bosh/version_error.go",
    "chars": 225,
    "preview": "package bosh\n\ntype BOSHVersionError struct {\n\terr error\n}\n\nfunc NewBOSHVersionError(err error) BOSHVersionError {\n\tretur"
  },
  {
    "path": "certs/fixtures/pkcs8.crt",
    "chars": 1229,
    "preview": "-----BEGIN CERTIFICATE-----\nMIIDXTCCAkWgAwIBAgIJANOqY0ZvEa2GMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV\nBAYTAkFVMRMwEQYDVQQIDApTb21"
  },
  {
    "path": "certs/fixtures/pkcs8.key",
    "chars": 1708,
    "preview": "-----BEGIN PRIVATE KEY-----\nMIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDQtFsR8Mf3N6CS\nEDNsqPGhDX2wHBDgmyr1g/pM0Pg"
  },
  {
    "path": "certs/init_test.go",
    "chars": 178,
    "preview": "package certs\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestIAM(t *testin"
  },
  {
    "path": "certs/validator.go",
    "chars": 6102,
    "preview": "package certs\n\nimport (\n\t\"crypto/rsa\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"encoding/pem\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"os\"\n\t\"string"
  },
  {
    "path": "certs/validator_test.go",
    "chars": 14056,
    "preview": "package certs_test\n\nimport (\n\t\"encoding/base64\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/certs\""
  },
  {
    "path": "ci/configure.sh",
    "chars": 116,
    "preview": "#!/usr/bin/env bash\n\nset -eu\n\nfly -t bosh set-pipeline -p bosh-bootloader \\\n    -c ci/pipelines/bosh-bootloader.yml\n"
  },
  {
    "path": "ci/dockerfiles/deployment/Dockerfile",
    "chars": 3625,
    "preview": "FROM golang:latest\nLABEL maintainer=\"https://github.com/cloudfoundry/bosh-bootloader\"\n\nARG GITHUB_TOKEN\nENV TERRAFORM_VE"
  },
  {
    "path": "ci/ops-files/concourse-gcp-spot.yml",
    "chars": 772,
    "preview": "# This ops file adds the 'spot' vm_extension to all Concourse instance groups\n# to enable GCP Spot VMs for cost savings "
  },
  {
    "path": "ci/ops-files/replace-n1-machine-types.yml",
    "chars": 207,
    "preview": "- type: replace\n  path: /vm_types/name=default/cloud_properties/machine_type\n  value: n4-standard-2\n\n- type: replace\n  p"
  },
  {
    "path": "ci/pipelines/README.md",
    "chars": 2560,
    "preview": "# bosh-bootloader\n\nThis [pipeline](https://release-integration.ci.cf-app.com/teams/main/pipelines/bosh-bootloader)\nis re"
  },
  {
    "path": "ci/pipelines/bosh-bootloader.yml",
    "chars": 43368,
    "preview": "groups:\n- name: bump-deployments\n  jobs:\n  - sync-version-bump-deployments\n  - bump-deployments\n  - test-bosh-bootloader"
  },
  {
    "path": "ci/tasks/acceptance/task",
    "chars": 576,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\n\nmkdir -p \"${GOPATH}/src/github.com/cloudfoundry\"\n\npushd \"${GOPATH}/src/github.com/cloud"
  },
  {
    "path": "ci/tasks/acceptance/task.yml",
    "chars": 831,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/bbl-up-concourse/task",
    "chars": 1163,
    "preview": "#!/bin/bash -xeu\n\n# shellcheck disable=SC1091\n\nsource cf-deployment-concourse-tasks/shared-functions\n\nfunction main() {\n"
  },
  {
    "path": "ci/tasks/bbl-up-concourse/task.yml",
    "chars": 1165,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/cf-deployment-concour"
  },
  {
    "path": "ci/tasks/build-bbl-docs/task",
    "chars": 582,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\nfunction main() {\n  cp -a \"${ROOT}/bbl-docs-repo/.git\" \"${ROOT}/bbl-docs/.git\"\n  pushd \""
  },
  {
    "path": "ci/tasks/build-bbl-docs/task.yml",
    "chars": 262,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cfinfrastructure/mkdocs\n\ninputs:\n-"
  },
  {
    "path": "ci/tasks/build-release/task",
    "chars": 3166,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\nBUILDS_PATH=\"${ROOT}/builds\"\nBBL_VERSION=\"$(cat ${ROOT}/version/number)\"\nBBL_LINUX_BUILD"
  },
  {
    "path": "ci/tasks/build-release/task.yml",
    "chars": 374,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/bump-brew-tap/task",
    "chars": 2158,
    "preview": "#!/usr/bin/env bash\n\nset -e -x -u\n\nroot=\"${PWD}\"\nversion=$(cat \"${root}/bbl-release/version\")\n\nshaOSAmd64=$(shasum -a 25"
  },
  {
    "path": "ci/tasks/bump-brew-tap/task.yml",
    "chars": 263,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/bump-deployments/task",
    "chars": 1618,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\nfunction main() {\n  authorize_for_github\n  pushd \"${ROOT}/bosh-bootloader\" > /dev/null\n "
  },
  {
    "path": "ci/tasks/bump-deployments/task.yml",
    "chars": 358,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: bosh/integration\n    tag: main\n\nin"
  },
  {
    "path": "ci/tasks/create-bosh-deployment-source-file/source-template.yml",
    "chars": 264,
    "preview": "---\n#@ load(\"@ytt:data\", \"data\")\ntarget: #@ data.values.TARGET\nclient: #@ data.values.CLIENT\nclient_secret: #@ data.valu"
  },
  {
    "path": "ci/tasks/create-bosh-deployment-source-file/task",
    "chars": 644,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\n\nfunction main() {\n  local source_file\n  source_file=\"${ROOT}/source-file/bosh-source.js"
  },
  {
    "path": "ci/tasks/create-bosh-deployment-source-file/task.yml",
    "chars": 283,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/download-terraform/task",
    "chars": 736,
    "preview": "#!/bin/bash -exu\n\nROOT=${PWD}\n\nfunction download_terraform() {\n  local platform\n  local zip_name\n\n  platform=${1}\n  arch"
  },
  {
    "path": "ci/tasks/download-terraform/task.yml",
    "chars": 310,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: bosh/integration\n    tag: main\n\nin"
  },
  {
    "path": "ci/tasks/generate-version-from-sha/task",
    "chars": 181,
    "preview": "#!/bin/bash -exu\n\nfunction main() {\n  pushd ${PWD}/bosh-bootloader\n    COMMIT_SHA=$(git rev-parse --verify HEAD)\n  popd\n"
  },
  {
    "path": "ci/tasks/generate-version-from-sha/task.yml",
    "chars": 253,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/get-concourse-test-vars/task",
    "chars": 1052,
    "preview": "#!/bin/bash -e\n\nROOT=\"${PWD}\"\n\nfunction main() {\n  pushd \"${ROOT}/bbl-states/${BBL_STATE_DIR}\" > /dev/null\n    local ext"
  },
  {
    "path": "ci/tasks/get-concourse-test-vars/task.yml",
    "chars": 275,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/leftovers/task",
    "chars": 172,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\n\nmkdir -p \"${PWD}/bbl-state\"\n\npushd \"${PWD}/bbl-state\" > /dev/null\n\n  bbl leftovers --fi"
  },
  {
    "path": "ci/tasks/leftovers/task.yml",
    "chars": 511,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/cf-deployment-concour"
  },
  {
    "path": "ci/tasks/merge-bump-deployments-change/task",
    "chars": 573,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\n\nfunction main() {\n  pushd \"${ROOT}/bosh-bootloader-bumped\" > /dev/null\n    git config u"
  },
  {
    "path": "ci/tasks/merge-bump-deployments-change/task.yml",
    "chars": 265,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cfinfrastructure/minimal\n\ninputs:\n"
  },
  {
    "path": "ci/tasks/prepare-docker-workspace/task.yml",
    "chars": 448,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: ubuntu\n    tag: jammy\n\ninputs:\n- n"
  },
  {
    "path": "ci/tasks/setup-github-release/task",
    "chars": 145,
    "preview": "#!/bin/bash -exu\n\nROOT=\"${PWD}\"\n\nfunction main () {\n  tar zxvf \"${ROOT}\"/tarred-builds/bbl-*.tgz -C \"${ROOT}\"/github-rel"
  },
  {
    "path": "ci/tasks/setup-github-release/task.yml",
    "chars": 256,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/test-bosh-bootloader/task",
    "chars": 190,
    "preview": "#!/bin/bash -exu\n\nusername=\"testuser\"\nchown -R ${username}:${username} ${PWD}/bosh-bootloader\nchpst -u ${username}:${use"
  },
  {
    "path": "ci/tasks/test-bosh-bootloader/task.yml",
    "chars": 218,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/bbl-deployment\n\ninput"
  },
  {
    "path": "ci/tasks/test-bosh-ssh/task",
    "chars": 145,
    "preview": "#!/usr/bin/env bash\n\nset -e -x -u\n\neval \"$(bbl print-env --state-dir bbl-state/${BBL_STATE_DIR})\"\nbosh ssh diego-cell -d"
  },
  {
    "path": "ci/tasks/test-bosh-ssh/task.yml",
    "chars": 262,
    "preview": "---\nplatform: linux\n\nimage_resource:\n  type: registry-image\n  source:\n    repository: cloudfoundry/cf-deployment-concour"
  },
  {
    "path": "cloudconfig/aws/base_ops_template.go",
    "chars": 10824,
    "preview": "package aws\n\nconst (\n\tBaseOps = `\n- type: replace\n  path: /compilation/vm_type\n  value: c5a.xlarge\n\n- type: replace\n  pa"
  },
  {
    "path": "cloudconfig/aws/exports_test.go",
    "chars": 159,
    "preview": "package aws\n\nimport \"gopkg.in/yaml.v2\"\n\nfunc SetMarshal(f func(interface{}) ([]byte, error)) {\n\tmarshal = f\n}\n\nfunc Rese"
  },
  {
    "path": "cloudconfig/aws/fixtures/aws-concourse-lb-ops.yml",
    "chars": 248,
    "preview": "- type: replace\n  path: /vm_extensions/-\n  value:\n    name: lb\n    cloud_properties:\n      lb_target_groups: ((concourse"
  },
  {
    "path": "cloudconfig/aws/fixtures/aws-ops.yml",
    "chars": 13093,
    "preview": "- type: replace\n  path: /compilation/vm_type\n  value: c5a.xlarge\n\n- type: replace\n  path: /disk_types/name=default/cloud"
  },
  {
    "path": "cloudconfig/aws/fixtures/terraform-aws-cf-lb-ops.yml",
    "chars": 1236,
    "preview": "- type: replace\n  path: /vm_extensions/-\n  value:\n    name: cf-router-network-properties\n    cloud_properties:\n      elb"
  },
  {
    "path": "cloudconfig/aws/init_test.go",
    "chars": 197,
    "preview": "package aws\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestAWSCloudConfig("
  },
  {
    "path": "cloudconfig/aws/ops_generator.go",
    "chars": 8621,
    "preview": "package aws\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"strings\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-bootloade"
  },
  {
    "path": "cloudconfig/aws/ops_generator_test.go",
    "chars": 10786,
    "preview": "package aws_test\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader"
  },
  {
    "path": "cloudconfig/azure/base_ops_template.go",
    "chars": 3955,
    "preview": "package azure\n\nconst (\n\tBaseOps = `\n- type: replace\n  path: /compilation/vm_type\n  value: small-highmem\n\n- type: replace"
  },
  {
    "path": "cloudconfig/azure/exports_test.go",
    "chars": 161,
    "preview": "package azure\n\nimport \"gopkg.in/yaml.v2\"\n\nfunc SetMarshal(f func(interface{}) ([]byte, error)) {\n\tmarshal = f\n}\n\nfunc Re"
  },
  {
    "path": "cloudconfig/azure/fixtures/azure-ops.yml",
    "chars": 4817,
    "preview": "- type: replace\n  path: /compilation/vm_type\n  value: small-highmem\n\n- type: replace\n  path: /azs/-\n  value:\n    name: z"
  },
  {
    "path": "cloudconfig/azure/init_test.go",
    "chars": 192,
    "preview": "package azure\n\nimport (\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestAzure(t *test"
  },
  {
    "path": "cloudconfig/azure/ops_generator.go",
    "chars": 3803,
    "preview": "package azure\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n\t\"git"
  },
  {
    "path": "cloudconfig/azure/ops_generator_test.go",
    "chars": 4431,
    "preview": "package azure_test\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/cloudconfig/azu"
  },
  {
    "path": "cloudconfig/cloud_config_templates.go",
    "chars": 854,
    "preview": "package cloudconfig\n\nconst (\n\tBaseCloudConfig = `---\nazs: []\n\ncompilation:\n  az: z1\n  network: private\n  reuse_compilati"
  },
  {
    "path": "cloudconfig/cloudstack/base_ops_template.go",
    "chars": 3604,
    "preview": "package cloudstack\n\nconst (\n\tBaseOps = `\n- type: replace\n  path: /azs\n  value:\n  - name: z1\n    cloud_properties: {}\n  -"
  },
  {
    "path": "cloudconfig/cloudstack/fixtures/iso-segment.yml",
    "chars": 440,
    "preview": "- path: /networks/-\n  type: replace\n  value:\n    name: data-plane-public\n    subnets:\n    - azs:\n      - z1\n      - z2\n "
  },
  {
    "path": "cloudconfig/cloudstack/fixtures/ops-file.yml",
    "chars": 5601,
    "preview": "- path: /azs\n  type: replace\n  value:\n  - cloud_properties: {}\n    name: z1\n  - cloud_properties: {}\n    name: z2\n  - cl"
  },
  {
    "path": "cloudconfig/cloudstack/init_test.go",
    "chars": 207,
    "preview": "package cloudstack\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestCloudsta"
  },
  {
    "path": "cloudconfig/cloudstack/ops_generator.go",
    "chars": 5993,
    "preview": "package cloudstack\n\nimport (\n\t\"crypto/sha1\"\n\t\"fmt\"\n\t\"strings\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-bootl"
  },
  {
    "path": "cloudconfig/cloudstack/ops_generator_test.go",
    "chars": 5273,
    "preview": "package cloudstack_test\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/cloudfoundry/bosh-boo"
  },
  {
    "path": "cloudconfig/fixtures/base-cloud-config.yml",
    "chars": 801,
    "preview": "---\nazs: []\n\ncompilation:\n  az: z1\n  network: private\n  reuse_compilation_vms: true\n  vm_type: default\n  vm_extensions:\n"
  },
  {
    "path": "cloudconfig/gcp/base_ops_template.go",
    "chars": 11161,
    "preview": "package gcp\n\nconst (\n\tBaseOps = `\n- type: replace\n  path: /compilation/vm_type\n  value: e2-highcpu-8\n\n- type: replace\n  "
  },
  {
    "path": "cloudconfig/gcp/exports_test.go",
    "chars": 159,
    "preview": "package gcp\n\nimport \"gopkg.in/yaml.v2\"\n\nfunc SetMarshal(f func(interface{}) ([]byte, error)) {\n\tmarshal = f\n}\n\nfunc Rese"
  },
  {
    "path": "cloudconfig/gcp/fixtures/gcp-cf-lb-ops.yml",
    "chars": 691,
    "preview": "- type: replace\n  path: /vm_extensions/-\n  value:\n    name: cf-router-network-properties\n    cloud_properties:\n      bac"
  },
  {
    "path": "cloudconfig/gcp/fixtures/gcp-concourse-lb-ops.yml",
    "chars": 160,
    "preview": "- type: replace\n  path: /vm_extensions/-\n  value:\n    name: lb\n    cloud_properties:\n      target_pool: ((concourse_targ"
  },
  {
    "path": "cloudconfig/gcp/fixtures/gcp-ops.yml",
    "chars": 12347,
    "preview": "- type: replace\n  path: /compilation/vm_type\n  value: e2-highcpu-8\n\n- type: replace\n  path: /disk_types/name=default/clo"
  },
  {
    "path": "cloudconfig/gcp/init_test.go",
    "chars": 186,
    "preview": "package gcp\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestGCP(t *testing."
  },
  {
    "path": "cloudconfig/gcp/ops_generator.go",
    "chars": 5653,
    "preview": "package gcp\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.c"
  },
  {
    "path": "cloudconfig/gcp/ops_generator_test.go",
    "chars": 5787,
    "preview": "package gcp_test\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader"
  },
  {
    "path": "cloudconfig/init_test.go",
    "chars": 198,
    "preview": "package cloudconfig\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestCloudCo"
  },
  {
    "path": "cloudconfig/manager.go",
    "chars": 4323,
    "preview": "package cloudconfig\n\nimport (\n\t\"fmt\"\n\t\"path/filepath\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/clou"
  },
  {
    "path": "cloudconfig/manager_test.go",
    "chars": 11018,
    "preview": "package cloudconfig_test\n\nimport (\n\t\"errors\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"strings\"\n\n\t\"github.com/cloudfoundry/bosh-bootloade"
  },
  {
    "path": "cloudconfig/openstack/base_ops_template.go",
    "chars": 1329,
    "preview": "package openstack\n\nconst (\n\tBaseOps = `---\n- type: replace\n  path: /azs\n  value:\n  - name: z1\n    cloud_properties:\n    "
  },
  {
    "path": "cloudconfig/openstack/init_test.go",
    "chars": 204,
    "preview": "package openstack\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestOpenStack"
  },
  {
    "path": "cloudconfig/openstack/ops_generator.go",
    "chars": 967,
    "preview": "package openstack\n\nimport (\n\t\"fmt\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n\t\"github.com"
  },
  {
    "path": "cloudconfig/openstack/ops_generator_test.go",
    "chars": 1251,
    "preview": "package openstack_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/cloudconfig/openstack\"\n\t\"github.co"
  },
  {
    "path": "cloudconfig/vsphere/base_ops_template.go",
    "chars": 2320,
    "preview": "package vsphere\n\nconst (\n\tBaseOps = `---\n- type: replace\n  path: /azs\n  value:\n  - name: z1\n    cloud_properties:\n      "
  },
  {
    "path": "cloudconfig/vsphere/init_test.go",
    "chars": 198,
    "preview": "package vsphere\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestVSphere(t *"
  },
  {
    "path": "cloudconfig/vsphere/ops_generator.go",
    "chars": 915,
    "preview": "package vsphere\n\nimport (\n\t\"fmt\"\n\n\t\"gopkg.in/yaml.v2\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n\t\"github.com/c"
  },
  {
    "path": "cloudconfig/vsphere/ops_generator_test.go",
    "chars": 1243,
    "preview": "package vsphere_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/cloudconfig/vsphere\"\n\t\"github.com/cl"
  },
  {
    "path": "commands/aws_lbs.go",
    "chars": 2693,
    "preview": "package commands\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n)\n\n"
  },
  {
    "path": "commands/aws_lbs_test.go",
    "chars": 4913,
    "preview": "package commands_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\t\"github.com/cloudfoundry"
  },
  {
    "path": "commands/azure_lbs.go",
    "chars": 863,
    "preview": "package commands\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n)\n\ntype AzureLBs struct {\n\tterr"
  },
  {
    "path": "commands/azure_lbs_test.go",
    "chars": 2840,
    "preview": "package commands_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\t\"github.com/cloudfoundry"
  },
  {
    "path": "commands/cleanup_leftovers.go",
    "chars": 1487,
    "preview": "package commands\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/flags\"\n\t\"github.com/cloudfoundry/"
  },
  {
    "path": "commands/cleanup_leftovers_test.go",
    "chars": 1854,
    "preview": "package commands_test\n\nimport (\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\t\"github.com/cloudfoundry/bosh-bootl"
  },
  {
    "path": "commands/command.go",
    "chars": 250,
    "preview": "package commands\n\nimport \"github.com/cloudfoundry/bosh-bootloader/storage\"\n\ntype Command interface {\n\tCheckFastFails(sub"
  },
  {
    "path": "commands/commands_usage.go",
    "chars": 8704,
    "preview": "package commands\n\nimport \"fmt\"\n\nconst (\n\tCredentials = `\n  --aws-access-key-id                AWS Access Key ID         "
  },
  {
    "path": "commands/commands_usage_test.go",
    "chars": 9726,
    "preview": "package commands_test\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\n\t. \"github.com/onsi/ginkgo/"
  },
  {
    "path": "commands/destroy.go",
    "chars": 4321,
    "preview": "package commands\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/cloudfoundry/bosh-bootlo"
  },
  {
    "path": "commands/destroy_test.go",
    "chars": 17771,
    "preview": "package commands_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/cloudfoundry/bos"
  },
  {
    "path": "commands/fail_fast_bosh_version.go",
    "chars": 685,
    "preview": "package commands\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/bosh\"\n\t\"github.com/coreos/go-semver/semver\""
  },
  {
    "path": "commands/fixtures/terraform_template_no_lb.tf",
    "chars": 1900,
    "preview": "variable \"project_id\" {\n\ttype = string\n}\n\nvariable \"region\" {\n\ttype = string\n}\n\nvariable \"zone\" {\n\ttype = string\n}\n\nvari"
  },
  {
    "path": "commands/gcp_lbs.go",
    "chars": 2274,
    "preview": "package commands\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"strings\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/storage\"\n)\n\n"
  },
  {
    "path": "commands/gcp_lbs_test.go",
    "chars": 4524,
    "preview": "package commands_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\t\"github.com/cloudfoundry"
  },
  {
    "path": "commands/global_flags.go",
    "chars": 154,
    "preview": "package commands\n\ntype GlobalFlags struct {\n\tAWSAccessKeyID     string\n\tAWSSecretAccessKey string\n\tAWSRegion          st"
  },
  {
    "path": "commands/helpers.go",
    "chars": 937,
    "preview": "package commands\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/helpers\"\n\t\"github.com/cloudfoundr"
  },
  {
    "path": "commands/init_test.go",
    "chars": 194,
    "preview": "package commands_test\n\nimport (\n\t\"testing\"\n\n\t. \"github.com/onsi/ginkgo/v2\"\n\t. \"github.com/onsi/gomega\"\n)\n\nfunc TestComma"
  },
  {
    "path": "commands/interfaces.go",
    "chars": 2867,
    "preview": "package commands\n\nimport (\n\t\"github.com/cloudfoundry/bosh-bootloader/certs\"\n\t\"github.com/cloudfoundry/bosh-bootloader/st"
  },
  {
    "path": "commands/latest_error.go",
    "chars": 646,
    "preview": "package commands\n\nimport \"github.com/cloudfoundry/bosh-bootloader/storage\"\n\ntype LatestError struct {\n\tlogger         lo"
  },
  {
    "path": "commands/latest_error_test.go",
    "chars": 1279,
    "preview": "package commands_test\n\nimport (\n\t\"errors\"\n\n\t\"github.com/cloudfoundry/bosh-bootloader/commands\"\n\t\"github.com/cloudfoundry"
  }
]

// ... and 3292 more files (download for full content)

About this extraction

This page contains the full source code of the cloudfoundry/bosh-bootloader GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 3492 files (55.3 MB), approximately 14.7M tokens, and a symbol index with 177928 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!