arc_weld 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +4 -0
  5. data/Gemfile +3 -0
  6. data/Guardfile +58 -0
  7. data/LICENSE.txt +674 -0
  8. data/README.md +73 -0
  9. data/Rakefile +6 -0
  10. data/arc_weld.gemspec +34 -0
  11. data/bin/setup +7 -0
  12. data/bin/weld +8 -0
  13. data/lib/arc_weld/archive.rb +87 -0
  14. data/lib/arc_weld/cli/project.rb +116 -0
  15. data/lib/arc_weld/cli/readers/relation_csv.rb +41 -0
  16. data/lib/arc_weld/cli/readers/resource_csv.rb +64 -0
  17. data/lib/arc_weld/cli.rb +45 -0
  18. data/lib/arc_weld/helpers.rb +12 -0
  19. data/lib/arc_weld/reference.rb +51 -0
  20. data/lib/arc_weld/relationship.rb +96 -0
  21. data/lib/arc_weld/relationships/customer_of.rb +28 -0
  22. data/lib/arc_weld/relationships/has_alternate_interface.rb +27 -0
  23. data/lib/arc_weld/relationships/has_child.rb +42 -0
  24. data/lib/arc_weld/relationships/has_customer.rb +28 -0
  25. data/lib/arc_weld/relationships/has_location.rb +16 -0
  26. data/lib/arc_weld/relationships/in_category.rb +26 -0
  27. data/lib/arc_weld/relationships/in_network.rb +26 -0
  28. data/lib/arc_weld/relationships/in_zone.rb +41 -0
  29. data/lib/arc_weld/relationships/location_of.rb +28 -0
  30. data/lib/arc_weld/resource.rb +149 -0
  31. data/lib/arc_weld/resource_definitions.rb +7 -0
  32. data/lib/arc_weld/resources/asset.rb +33 -0
  33. data/lib/arc_weld/resources/asset_category.rb +40 -0
  34. data/lib/arc_weld/resources/customer.rb +16 -0
  35. data/lib/arc_weld/resources/group.rb +29 -0
  36. data/lib/arc_weld/resources/location.rb +18 -0
  37. data/lib/arc_weld/resources/network.rb +14 -0
  38. data/lib/arc_weld/resources/zone.rb +65 -0
  39. data/lib/arc_weld/templates/project-csv/.gitignore.tt +2 -0
  40. data/lib/arc_weld/templates/project-csv/Gemfile.tt +3 -0
  41. data/lib/arc_weld/templates/project-csv/Thorfile.tt +9 -0
  42. data/lib/arc_weld/templates/project-csv/in/assets.csv.tt +2 -0
  43. data/lib/arc_weld/templates/project-csv/in/categories.csv.tt +3 -0
  44. data/lib/arc_weld/templates/project-csv/in/customer_groups.csv.tt +3 -0
  45. data/lib/arc_weld/templates/project-csv/in/customers.csv.tt +3 -0
  46. data/lib/arc_weld/templates/project-csv/in/group_categories.csv.tt +3 -0
  47. data/lib/arc_weld/templates/project-csv/in/locations.csv.tt +6 -0
  48. data/lib/arc_weld/templates/project-csv/in/networks.csv.tt +3 -0
  49. data/lib/arc_weld/templates/project-csv/in/zone_locations.csv.tt +2 -0
  50. data/lib/arc_weld/templates/project-csv/in/zones.csv.tt +2 -0
  51. data/lib/arc_weld/templates/project-csv/lib/thor/README.txt.tt +2 -0
  52. data/lib/arc_weld/templates/project-csv/lib/thor/sample.thor.tt +7 -0
  53. data/lib/arc_weld/templates/project-csv/out/README-archive.txt.tt +5 -0
  54. data/lib/arc_weld/templates/project-csv/weld.json.tt +39 -0
  55. data/lib/arc_weld/version.rb +3 -0
  56. data/lib/arc_weld.rb +19 -0
  57. metadata +269 -0
@@ -0,0 +1,27 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module HasAlternateInterface
4
+ def add_interfaces(*assets)
5
+ assets.each do |asset|
6
+ unless has_alternate_interface.include?(asset)
7
+ has_alternate_interface << asset
8
+ end
9
+ unless asset.has_alternate_interface.include?(self)
10
+ asset.has_alternate_interface << self
11
+ end
12
+ end
13
+ end
14
+ def related_has_alternate_interface_references
15
+ (has_alternate_interface.map {|a| a.ref.render}).join
16
+ end
17
+ def has_alternate_interface_relationship
18
+ unless has_alternate_interface.empty?
19
+ { 'hasAlternateInterface' => {
20
+ 'list!' => related_has_alternate_interface_references},
21
+ 'alternateInterfaceOf' => {
22
+ 'list!' => related_has_alternate_interface_references} }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,42 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module HasChild
4
+ def related_has_child_references
5
+ has_child.map {|res| res.ref.render }.join
6
+ end
7
+
8
+ def has_child_relationship
9
+ {'hasChild' => { 'list!' => related_has_child_references }}
10
+ end
11
+
12
+ def set_attributes_from(child)
13
+ self.containedResourceType=child.resource_class_id if containedResourceType.nil?
14
+ self.parent_ref=child.class.toplevel if parent_ref.nil?
15
+
16
+ end
17
+
18
+ def add_child(child)
19
+ unless has_child.include?(child)
20
+ if child.resource_type != 'Group'
21
+ set_attributes_from(child)
22
+ if (child.resource_class_id != self.containedResourceType)
23
+ fail RuntimeError, 'child resource does not match contained types'
24
+ end
25
+ end
26
+ self.has_child.push(child)
27
+ child.parent_ref=self.ref
28
+ end
29
+ end
30
+
31
+ def add_children(*resources)
32
+ resources.each {|res| add_child(res) }
33
+ end
34
+
35
+ def contains_resource_type
36
+ unless self.has_child.empty?
37
+ has_child.first.resource_type
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,28 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module HasCustomer
4
+ def add_customer(cust)
5
+ unless has_customer.include?(cust)
6
+ has_customer.push(cust)
7
+ cust.add_customer_resource(self)
8
+ end
9
+ end
10
+
11
+ def add_customers(*customers)
12
+ customers.each { |cust| add_customer(cust) }
13
+ end
14
+
15
+ def related_has_customer_references
16
+ (has_customer.map { |cust| cust.ref.render }).join
17
+ end
18
+
19
+ def has_customer_relationship
20
+ unless has_customer.empty?
21
+ { 'hasCustomer' => {
22
+ 'list!' => related_has_customer_references
23
+ }}
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,16 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module HasLocation
4
+ def has_location_relationship
5
+ unless has_location.nil?
6
+ { 'hasLocation' => { 'list!' => has_location.ref.render } }
7
+ end
8
+ end
9
+ def has_location=(location)
10
+
11
+ location.add_location_resource(self) unless location.nil?
12
+ @has_location=location
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,26 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module InCategory
4
+
5
+ def add_category(cat)
6
+ unless in_category.include?(cat.ref)
7
+ in_category << cat.ref
8
+ end
9
+ end
10
+
11
+ def add_categories(*cats)
12
+ cats.each { |cat| add_category(cat) }
13
+ end
14
+
15
+ def related_in_category_references
16
+ (in_category.map &:render).join
17
+ end
18
+
19
+ def in_category_relationship
20
+ unless in_category.empty?
21
+ { 'inCategory' => { 'list!' => related_in_category_references } }
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module InNetwork
4
+
5
+ def related_in_network_references
6
+ (in_network.map { |net| net.ref.render }).join
7
+ end
8
+
9
+ def in_network_relationship
10
+ unless in_network.empty?
11
+ { 'inNetwork' => { 'list!' => related_in_network_references } }
12
+ end
13
+ end
14
+
15
+ def add_network(net)
16
+ unless in_network.include?(net)
17
+ in_network << net
18
+ end
19
+ end
20
+
21
+ def add_networks(*nets)
22
+ nets.each { |net| add_network(net) }
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,41 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module InZone
4
+ def in_zone_relationship
5
+ unless in_zone.nil?
6
+ { 'inZone' => { 'list!' => in_zone.ref.render } }
7
+ end
8
+ end
9
+
10
+ def auto_zone(*zones)
11
+ my_zone = zones.find {|z| z.contains?(self.address)}
12
+ self.set_zone(my_zone) unless my_zone.nil?
13
+ end
14
+
15
+ def parent_ref_from_zone(zone)
16
+ unless zone.parent_ref == ArcWeld::Zone.toplevel
17
+ asset_group_uri = zone.ref_uri.gsub('All Zones', 'All Assets')
18
+ ArcWeld::Reference.new(
19
+ uri: asset_group_uri,
20
+ externalID: OpenSSL::Digest::MD5.base64digest(asset_group_uri),
21
+ type: 'Group'
22
+ )
23
+ end
24
+ end
25
+ def set_zone(tgt_zone)
26
+ if tgt_zone.contains?(address)
27
+ self.staticAddressing = tgt_zone.staticAddressing
28
+ self.has_location = tgt_zone.has_location
29
+ self.in_network = tgt_zone.in_network
30
+ tgt_ref = parent_ref_from_zone(tgt_zone)
31
+ self.parent_ref = tgt_ref unless tgt_ref.nil?
32
+ @in_zone = tgt_zone
33
+ end
34
+ end
35
+
36
+ def in_zone=(zone)
37
+ self.set_zone(zone)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,28 @@
1
+ module ArcWeld
2
+ module Relationships
3
+ module LocationOf
4
+ def add_location_resource(res)
5
+ unless location_of.include?(res)
6
+ location_of.push(res)
7
+ res.has_location=self unless res.has_location==self
8
+ end
9
+ end
10
+
11
+ def add_location_resources(*resources)
12
+ resources.each { |res| add_location_resource(res) }
13
+ end
14
+
15
+ def related_location_of_references
16
+ (location_of.map { |resource| resource.ref.render }).join
17
+ end
18
+
19
+ def location_of_relationship
20
+ unless location_of.empty?
21
+ { 'locationOf' => {
22
+ 'list!' => related_location_of_references
23
+ }}
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,149 @@
1
+ module ArcWeld
2
+ module Resource
3
+ def self.included(klass)
4
+ klass.class_eval '@@RESOURCE_PROPERTIES = []'
5
+
6
+ klass.class_eval do
7
+ extend ClassMethods, ArcWeld::Helpers
8
+
9
+ attr_accessor :name, :id, :externalID, :action
10
+
11
+ def initialize(*args)
12
+ Hash[*args].each {|k,v| self.send("#{k}=",v)}
13
+ @action ||= 'insert'
14
+ yield self if block_given?
15
+ self
16
+ end
17
+
18
+ end
19
+ end
20
+
21
+ def resource_class_id
22
+ self.class.class_variable_get :@@CLASS_ID
23
+ end
24
+
25
+ def resource_type
26
+ self.class.send :resource_type
27
+ end
28
+
29
+ def parent_ref
30
+ @parent_ref ||= self.class.toplevel
31
+ end
32
+
33
+ def parent_ref=(containing_group)
34
+ @parent_ref = containing_group.ref
35
+ end
36
+
37
+ def identity_hash
38
+ if id.nil?
39
+ {'@externalID' => externalID}
40
+ else
41
+ {'@id' => id}
42
+ end
43
+ end
44
+
45
+ def identity
46
+ if id.nil?
47
+ {:externalID => externalID}
48
+ else
49
+ {:id => id}
50
+ end
51
+ end
52
+
53
+ def property_hash
54
+ self.class.class_properties.reduce({}) do |memo, key|
55
+ memo[key] = self.send(key) unless self.send(key).nil?
56
+ memo
57
+ end
58
+ end
59
+
60
+ def relationship_hash
61
+ {} # TODO: damn dirty hack
62
+ end
63
+
64
+ def ref_uri
65
+ self.class.uri_join(parent_ref.uri, name) unless parent_ref.nil?
66
+ end
67
+
68
+ def ref
69
+ ArcWeld::Reference.new({
70
+ type: resource_type,
71
+ uri: ref_uri
72
+ }.merge(identity)
73
+ )
74
+ end
75
+
76
+ def to_h
77
+ resource_h = {
78
+ resource_type => {
79
+ 'childOf' => { 'list!' => parent_ref.render },
80
+ '@name' => name,
81
+ '@action' => action
82
+ }.merge(identity_hash)
83
+ .merge(property_hash)
84
+ .merge(relationship_hash)
85
+ }
86
+ end
87
+
88
+ def render
89
+ Gyoku.xml(to_h, key_converter: :none)
90
+ end
91
+
92
+ module ClassMethods
93
+ def resource_type
94
+ name.split('::')[-1]
95
+ end
96
+
97
+
98
+ def toplevel
99
+ @top ||= ArcWeld::Reference.new(
100
+ type: 'Group',
101
+ id: format('01000100010001%03d', class_id),
102
+ uri: class_root
103
+ )
104
+ end
105
+
106
+ def class_id
107
+ self.class_variable_get :@@CLASS_ID
108
+ end
109
+
110
+ def class_root
111
+ self.class_variable_get :@@RESOURCE_ROOT
112
+ end
113
+
114
+ def class_properties
115
+ self.class_variable_get :@@RESOURCE_PROPERTIES
116
+ end
117
+
118
+ def resource_root(str)
119
+ fail ArgumentError, 'resource root must be string' unless str.is_a?(String)
120
+ #puts format('setting resource_root %s on %s', str, self.name)
121
+ norm_str = (str.gsub(%r{\A/?},'').gsub(%r{/?\z},'').split(' ').map &:capitalize).join(' ')
122
+ self.class_eval "@@RESOURCE_ROOT = \"/#{norm_str}/\""
123
+ norm_str
124
+ end
125
+
126
+ def resource_class_id(num)
127
+ fail ArgumentError, 'class id must be Integer' unless num.is_a?(Integer)
128
+ #puts format('setting class id %d on %s', num, self.name)
129
+ self.class_eval "@@CLASS_ID = #{num}"
130
+ num
131
+ end
132
+
133
+ def resource_property(*syms)
134
+ syms.each do |sym|
135
+ #puts format('defining resource property %s on %s', sym.to_s, self.name)
136
+ register_property(sym)
137
+ end
138
+ end
139
+
140
+ def register_property(sym)
141
+ #puts format('registering property %s on %s', sym.to_s, self.name)
142
+ unless class_properties.include?(sym)
143
+ class_properties.push(sym)
144
+ self.class_eval "attr_accessor :#{sym}"
145
+ end
146
+ end
147
+ end
148
+ end
149
+ end
@@ -0,0 +1,7 @@
1
+ require 'arc_weld/resources/asset'
2
+ require 'arc_weld/resources/asset_category'
3
+ require 'arc_weld/resources/customer'
4
+ require 'arc_weld/resources/group'
5
+ require 'arc_weld/resources/location'
6
+ require 'arc_weld/resources/network'
7
+ require 'arc_weld/resources/zone'
@@ -0,0 +1,33 @@
1
+ module ArcWeld
2
+ class Asset
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_class_id 4
7
+ resource_root '/All Assets/'
8
+ resource_property :description, :staticAddressing, :hostname, :macAddress, :address
9
+
10
+ has_relationship :has_location, :in_zone
11
+ has_relationship :in_category, :has_alternate_interface, :in_network, multiple: true
12
+
13
+ def safe_name_from(str)
14
+ str.split('.')[0].gsub(%r{[\/\*:\\]},'-').downcase
15
+ end
16
+
17
+ def generate_name
18
+ if staticAddressing=='false' && (hostname!=nil)
19
+ safe_name_from(hostname)
20
+ elsif (address!=nil) && (hostname!=nil)
21
+ format('%s - %s', address, safe_name_from(hostname))
22
+ elsif (address!=nil)
23
+ address
24
+ else
25
+ externalID
26
+ end
27
+ end
28
+
29
+ def name
30
+ @name ||= generate_name
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,40 @@
1
+ module ArcWeld
2
+ class AssetCategory
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_class_id 31
7
+ resource_root '/All Asset Categories/'
8
+
9
+ resource_property :description, :containedResourceType, :memberReferencePage
10
+
11
+ has_relationship :has_child, multiple: true
12
+
13
+ # @OVERRIDE
14
+ def ref
15
+ ArcWeld::Reference.new({
16
+ type: 'Group',
17
+ uri: ref_uri
18
+ }.merge(identity)
19
+ )
20
+ end
21
+
22
+ # @OVERRIDE
23
+ def containedResourceType
24
+ resource_class_id
25
+ end
26
+
27
+ # @OVERRIDE
28
+ def to_h
29
+ resource_h = {
30
+ 'Group' => {
31
+ 'childOf' => { 'list!' => parent_ref.render },
32
+ '@name' => name,
33
+ '@action' => action
34
+ }.merge(identity_hash)
35
+ .merge(property_hash)
36
+ .merge(relationship_hash)
37
+ }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,16 @@
1
+ module ArcWeld
2
+ class Customer
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_class_id 35
7
+ resource_root '/All Customers/'
8
+ resource_property :description,
9
+ :streetAddress1,
10
+ :streetAddress2,
11
+ :addressState,
12
+ :country
13
+
14
+ has_relationship :customer_of, multiple: true
15
+ end
16
+ end
@@ -0,0 +1,29 @@
1
+ module ArcWeld
2
+ class Group
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_property :containedResourceType, :description, :memberReferencePage
7
+ has_relationship :has_child, :in_category, :in_network, :has_customer, multiple: true
8
+
9
+ def self.class_id
10
+ fail TypeError, 'no group resource class_id'
11
+ end
12
+
13
+ def self.class_root
14
+ fail TypeError, 'no group resource class_root'
15
+ end
16
+
17
+ def resource_class_id
18
+ fail TypeError, 'no group resource class_id'
19
+ end
20
+
21
+ def self.toplevel
22
+ fail TypeError, 'no top-level group resource reference'
23
+ end
24
+
25
+ def parent_ref
26
+ @parent_ref
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ module ArcWeld
2
+ class Location
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_class_id 39
7
+ resource_root '/All Locations/'
8
+ resource_property :countryCode,
9
+ :city,
10
+ :countryName,
11
+ :description,
12
+ :latitude,
13
+ :longitude,
14
+ :postalCode,
15
+ :regionCode
16
+ has_relationship :location_of, multiple: true
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module ArcWeld
2
+ class Network
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_class_id 40
7
+ resource_root '/All Networks/'
8
+ resource_property :description
9
+
10
+ has_relationship :has_customer, multiple: true
11
+ has_relationship :has_location
12
+
13
+ end
14
+ end
@@ -0,0 +1,65 @@
1
+ module ArcWeld
2
+ class Zone
3
+ include ArcWeld::Resource
4
+ include ArcWeld::Relationship
5
+
6
+ resource_class_id 29
7
+ resource_root '/All Zones/'
8
+ resource_property :description, :dynamicAddressing, :startAddress, :endAddress
9
+
10
+ has_relationship :has_location
11
+ has_relationship :in_network, :in_category, multiple: true
12
+
13
+ attr_reader :cidr
14
+
15
+ def cidr=(addr)
16
+ @cidr = case addr
17
+ when String
18
+ IPAddr.new(addr)
19
+ when IPAddr
20
+ addr
21
+ else
22
+ fail ArgumentError, 'must call with either String or IPAddr'
23
+ end
24
+
25
+ @startAddress = cidr.to_range.to_a.first.to_s
26
+ @endAddress = cidr.to_range.to_a.last.to_s
27
+ cidr
28
+ end
29
+
30
+ def start_ip
31
+ IPAddr.new(startAddress)
32
+ end
33
+
34
+ def end_ip
35
+ IPAddr.new(endAddress)
36
+ end
37
+
38
+ def contains?(addr)
39
+ comp = case addr
40
+ when String
41
+ IPAddr.new(addr)
42
+ when IPAddr
43
+ addr
44
+ else
45
+ nil
46
+ end
47
+ if ([comp, startAddress, endAddress].any? &:nil?)
48
+ false
49
+ else
50
+ start_ip <= comp && end_ip >= comp
51
+ end
52
+ end
53
+
54
+ def staticAddressing
55
+ case self.dynamicAddressing
56
+ when 'true', true
57
+ 'false'
58
+ when 'false', false
59
+ 'true'
60
+ else
61
+ nil
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,2 @@
1
+ /tmp/
2
+ /Gemfile.lock
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # add local gems here
@@ -0,0 +1,9 @@
1
+ require 'arc_weld'
2
+ PROJECT_DIR = File.expand_path(File.dirname(__FILE__))
3
+ PROJECT_LIB = File.join(PROJECT_DIR, 'lib')
4
+ PROJECT_THOR = File.join(PROJECT_LIB, 'thor')
5
+ $LOAD_PATH.push(PROJECT_LIB)
6
+
7
+ Dir[File.join(PROJECT_THOR,'*.thor')].each do |tf|
8
+ Thor::Util.load_thorfile(tf)
9
+ end
@@ -0,0 +1,2 @@
1
+ externalID,address,macAddress,hostname,description
2
+ weld_asset_0001,192.168.0.10,be:ef:be:ef:00:10,asset0001,example asset
@@ -0,0 +1,3 @@
1
+ name,externalID,memberReferencePage,description
2
+ Welded Assets,weld_category_assets,,Assets Generated by ArcWeld
3
+ Welded Zones,weld_category_zones,,Zone Resources Generated by ArcWeld
@@ -0,0 +1,3 @@
1
+ customer:externalID,group:ref_uri
2
+ weld_customer_stage,/All Networks/ArcWeld
3
+ weld_customer_stage,/All Zones/<%= @config[:name] %>
@@ -0,0 +1,3 @@
1
+ name,externalID,streetAddress1,streetAddress2,description
2
+ Staging,weld_customer_stage,,,Customer resource for staging asset model. You will want to reassign resources from here to your actual target customers, or set a different target customer in the project config.
3
+ Decom,weld_customer_decom,,,Customer resource for decommissioning assets. You can use this resource to disassociate modeled resources from active customers/connectors.
@@ -0,0 +1,3 @@
1
+ group:externalID,asset_category:externalID
2
+ weld_asset_root,weld_category_assets
3
+ weld_zone_root,weld_category_zones
@@ -0,0 +1,6 @@
1
+ name,externalID,latitude,longitude,city,description
2
+ cota,weld_location_001,30.3077609,-97.7534014,Elroy,Circuit of the Americas
3
+ nurburgring,weld_location_002,50.3460423,6.9660294,Meuspath,Nürburgring Nordschleife
4
+ laguna seca,weld_location_003,36.5842902,-121.7534634,Salinas,Mazda Raceway Laguna Seca
5
+ driveway,weld_location_004,36.5842902,-121.7534634,Austin,Driveway Austin Motorsports
6
+ harris hill,weld_location_005,29.9201124,-97.8744759,San Marcos,Harris Hill Raceway
@@ -0,0 +1,3 @@
1
+ name,externalID,description
2
+ Staging,weld_net_stage,Staging Network for Generated Resources. You will want to move your generated assets out of here to somewhere more useful. You can also retarget the base_model in the config to point to somewhere directly like Local.
3
+ Decom,weld_net_decom,Decom Network for old resources. You will want to move old/unused resources here to disassociate them from active connectors & customers. This will make deleting them cleaner.
@@ -0,0 +1,2 @@
1
+ zone:externalID,location:externalID
2
+ weld_zone_192168,weld_location_001