Skip to content

Instantly share code, notes, and snippets.

@apeckham
Last active December 30, 2022 23:18
Show Gist options
  • Save apeckham/d0837834126cb79664429e9c59ea4c5f to your computer and use it in GitHub Desktop.
Save apeckham/d0837834126cb79664429e9c59ea4c5f to your computer and use it in GitHub Desktop.
Import all GCP resources into Pulumi
require 'yaml'
require 'json'
assets = YAML.load_stream(STDIN.read)
type_map = {
'compute.googleapis.com/BackendService' => 'gcp:compute/backendService:BackendService',
'compute.googleapis.com/NetworkEndpointGroup' => 'gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup',
'compute.googleapis.com/UrlMap' => 'gcp:compute/uRLMap:URLMap',
'iam.googleapis.com/ServiceAccount' => 'gcp:serviceAccount/account:Account',
'run.googleapis.com/DomainMapping' => 'gcp:cloudrun/domainMapping:DomainMapping',
'run.googleapis.com/Service' => 'gcp:cloudrun/service:Service',
'sqladmin.googleapis.com/Instance' => 'gcp:sql/database:Database',
'storage.googleapis.com/Bucket' => 'gcp:storage/bucket:Bucket',
}
output = assets.filter { |asset| type_map[asset['assetType']] }.map do |asset|
pulumi_type = type_map[asset['assetType']]
asset_name = asset['name'].split('/')
asset_name = case pulumi_type
when 'gcp:cloudrun/service:Service', 'gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup'
"#{asset_name[6]}/#{asset_name[8]}"
else
asset_name.last
end
{
'type' => pulumi_type,
'name' => asset_name,
'id' => asset_name
}
end
puts JSON.pretty_generate({'resources' => output})

get list of all GCP resources

gcloud asset list --project=xxxxxx >assets.yml

convert to pulumi format

ruby import.rb <assets.yml >assets.json

import into pulumi

pulumi import --file assets.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment