Module: TerraspaceBundler::Mod::Concerns::PathConcern

Defined in:
lib/terraspace_bundler/mod/concerns/path_concern.rb

Instance Method Summary collapse

Instance Method Details

#cache_path(name) ⇒ Object



20
21
22
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 20

def cache_path(name)
  [cache_root, parent_stage_folder, name].compact.join('/')
end

#cache_rootObject



12
13
14
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 12

def cache_root
  "#{tmp_root}/cache"
end

#get_bucket_key(path) ⇒ Object



75
76
77
78
79
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 75

def get_bucket_key(path)
  bucket, *rest = path.split('/')
  key = rest.join('/')
  [bucket, key]
end

#get_mod_path(mod) ⇒ Object



85
86
87
88
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 85

def get_mod_path(mod)
  export_to = mod.export_to || TB.config.export_to
  "#{export_to}/#{mod.name}"
end

#mod_pathObject



81
82
83
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 81

def mod_path
  get_mod_path(@mod)
end

#parent_stage_folderObject



51
52
53
54
55
56
57
58
59
60
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 51

def parent_stage_folder
  case @mod.type
  when 'local'
    'local'
  when 'http'
    'http'
  else # gcs, s3, git, registry
    @mod.vcs_provider
  end
end

#rel_dest_dirObject

Fetcher: Downloader/Local copies to a slightly different folder. Also, Copy will use this and reference same method so it’s consistent.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 30

def rel_dest_dir
  case @mod.type
  when 'local'
    @mod.name      # example-module
  when 's3'
    path = type_path # https://s3-us-west-2.amazonaws.com/demo-terraform-test/example-module.zip
    remove_ext(path) # demo-terraform-test/modules/example-module
  when 'gcs'
    path = type_path # https://www.googleapis.com/storage/v1/BUCKET_NAME/PATH/TO/module.zip
    path.sub!(%r{storage/v\d+/},'')
    remove_ext(path) # terraform-example-modules/modules/example-module
  when 'http'
    path = type_path # https://www.googleapis.com/storage/v1/BUCKET_NAME/PATH/TO/module.zip
    remove_ext(path) # terraform-example-modules/modules/example-module
  when -> (_) { @mod.source.include?('git::') }
    @mod.name      # example-module
  else # inferred git, registry
    @mod.full_repo #  tongueroo/example-module
  end
end

#remove_ext(path) ⇒ Object



70
71
72
73
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 70

def remove_ext(path)
  ext = File.extname(path)
  path.sub(ext,'')
end

#setup_tmpObject



3
4
5
6
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 3

def setup_tmp
  FileUtils.mkdir_p(cache_root)
  FileUtils.mkdir_p(stage_root)
end

#stage_path(name) ⇒ Object



24
25
26
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 24

def stage_path(name)
  [stage_root, parent_stage_folder, name].compact.join('/')
end

#stage_rootObject



16
17
18
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 16

def stage_root
  "#{tmp_root}/stage"
end

#tmp_rootObject



8
9
10
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 8

def tmp_root
  "/tmp/terraspace/bundler"
end

#type_pathObject



62
63
64
65
66
67
68
# File 'lib/terraspace_bundler/mod/concerns/path_concern.rb', line 62

def type_path
  source = @mod.source
  url = source.sub("#{@mod.type}::",'')
  uri = URI(url)
  uri.path.sub('/','')   # removing leading slash to bucket name is the first thing
     .sub(%r{//(.*)},'') # remove subfolder
end