topological_inventory-core 1.0.0

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 (194) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +202 -0
  3. data/README.md +36 -0
  4. data/Rakefile +47 -0
  5. data/app/assets/config/topological_inventory_manifest.js +2 -0
  6. data/app/assets/javascripts/topological_inventory/application.js +13 -0
  7. data/app/assets/stylesheets/topological_inventory/application.css +15 -0
  8. data/app/controllers/topological_inventory/application_controller.rb +5 -0
  9. data/app/helpers/topological_inventory/application_helper.rb +4 -0
  10. data/app/jobs/topological_inventory/application_job.rb +4 -0
  11. data/app/mailers/topological_inventory/application_mailer.rb +6 -0
  12. data/app/models/application_record.rb +15 -0
  13. data/app/models/availability.rb +3 -0
  14. data/app/models/cluster.rb +14 -0
  15. data/app/models/cluster_tag.rb +7 -0
  16. data/app/models/concerns/act_as_taggable_on.rb +75 -0
  17. data/app/models/concerns/archived_concern.rb +16 -0
  18. data/app/models/container.rb +12 -0
  19. data/app/models/container_group.rb +16 -0
  20. data/app/models/container_group_tag.rb +7 -0
  21. data/app/models/container_image.rb +14 -0
  22. data/app/models/container_image_tag.rb +7 -0
  23. data/app/models/container_node.rb +14 -0
  24. data/app/models/container_node_tag.rb +7 -0
  25. data/app/models/container_project.rb +15 -0
  26. data/app/models/container_project_tag.rb +7 -0
  27. data/app/models/container_resource_quota.rb +14 -0
  28. data/app/models/container_template.rb +13 -0
  29. data/app/models/container_template_tag.rb +7 -0
  30. data/app/models/datastore.rb +15 -0
  31. data/app/models/datastore_mount.rb +6 -0
  32. data/app/models/datastore_tag.rb +7 -0
  33. data/app/models/flavor.rb +14 -0
  34. data/app/models/host.rb +20 -0
  35. data/app/models/host_tag.rb +7 -0
  36. data/app/models/ipaddress.rb +18 -0
  37. data/app/models/ipaddress_tag.rb +7 -0
  38. data/app/models/network.rb +18 -0
  39. data/app/models/network_adapter.rb +19 -0
  40. data/app/models/network_adapter_tag.rb +7 -0
  41. data/app/models/network_tag.rb +7 -0
  42. data/app/models/orchestration_stack.rb +24 -0
  43. data/app/models/refresh_state.rb +7 -0
  44. data/app/models/refresh_state_part.rb +63 -0
  45. data/app/models/reservation.rb +15 -0
  46. data/app/models/reservation_tag.rb +7 -0
  47. data/app/models/security_group.rb +19 -0
  48. data/app/models/security_group_tag.rb +7 -0
  49. data/app/models/service_credential.rb +13 -0
  50. data/app/models/service_credential_type.rb +13 -0
  51. data/app/models/service_instance.rb +23 -0
  52. data/app/models/service_instance_node.rb +17 -0
  53. data/app/models/service_instance_node_service_credential.rb +8 -0
  54. data/app/models/service_instance_service_credential.rb +8 -0
  55. data/app/models/service_inventory.rb +18 -0
  56. data/app/models/service_inventory_tag.rb +7 -0
  57. data/app/models/service_offering.rb +25 -0
  58. data/app/models/service_offering_icon.rb +9 -0
  59. data/app/models/service_offering_node.rb +17 -0
  60. data/app/models/service_offering_node_service_credential.rb +8 -0
  61. data/app/models/service_offering_service_credential.rb +8 -0
  62. data/app/models/service_offering_tag.rb +7 -0
  63. data/app/models/service_plan.rb +16 -0
  64. data/app/models/source.rb +82 -0
  65. data/app/models/source_region.rb +24 -0
  66. data/app/models/subnet.rb +21 -0
  67. data/app/models/subnet_tag.rb +7 -0
  68. data/app/models/subscription.rb +25 -0
  69. data/app/models/tag.rb +67 -0
  70. data/app/models/task.rb +8 -0
  71. data/app/models/tenant.rb +47 -0
  72. data/app/models/vm.rb +27 -0
  73. data/app/models/vm_security_group.rb +8 -0
  74. data/app/models/vm_tag.rb +7 -0
  75. data/app/models/volume.rb +18 -0
  76. data/app/models/volume_attachment.rb +8 -0
  77. data/app/models/volume_type.rb +13 -0
  78. data/app/views/layouts/topological_inventory/application.html.erb +14 -0
  79. data/config/database.dev.yml +22 -0
  80. data/db/migrate/20180919170553_add_sources_and_endpoints.rb +19 -0
  81. data/db/migrate/20180927171624_add_container_models.rb +36 -0
  82. data/db/migrate/20180927205317_add_service_catalog_models.rb +38 -0
  83. data/db/migrate/20180928122710_add_authentications.rb +13 -0
  84. data/db/migrate/20180928130326_add_default_to_endpoints.rb +5 -0
  85. data/db/migrate/20181002195506_update_endpoints_uri_parts.rb +10 -0
  86. data/db/migrate/20181005182645_add_tenant_and_tenant_id_to_all_tables.rb +20 -0
  87. data/db/migrate/20181011164429_add_container_nodes.rb +18 -0
  88. data/db/migrate/20181011172858_add_source_created_and_deleted_at_timestamps.rb +19 -0
  89. data/db/migrate/20181015150921_add_missing_name_to_container_template.rb +5 -0
  90. data/db/migrate/20181016141948_add_json_spec_to_parameters_sets.rb +6 -0
  91. data/db/migrate/20181018082155_add_archived_on_timestamp_to_all_models.rb +19 -0
  92. data/db/migrate/20181018141423_rename_service_parameters_sets_to_service_plans.rb +6 -0
  93. data/db/migrate/20181018235055_add_foreign_keys_to_all_models.rb +37 -0
  94. data/db/migrate/20181023094055_add_not_null_constraints_to_all_models.rb +43 -0
  95. data/db/migrate/20181023102858_add_timestamps_for_parallel_saving.rb +27 -0
  96. data/db/migrate/20181023213355_add_tags_and_taggings.rb +28 -0
  97. data/db/migrate/20181023215716_change_column_defaults.rb +5 -0
  98. data/db/migrate/20181024163850_add_source_type.rb +13 -0
  99. data/db/migrate/20181026182144_add_tasks_table.rb +13 -0
  100. data/db/migrate/20181102141329_add_ssl_options_to_endpoints.rb +6 -0
  101. data/db/migrate/20181102145252_add_regions_and_subscriptions.rb +31 -0
  102. data/db/migrate/20181107211649_add_containers.rb +24 -0
  103. data/db/migrate/20181108113645_add_tenant_id_to_regions_and_subscriptions.rb +6 -0
  104. data/db/migrate/20181109170334_add_not_null_constraints_to_source_type.rb +7 -0
  105. data/db/migrate/20181113145803_add_indexes_on_name_column_to_node_and_namespace.rb +6 -0
  106. data/db/migrate/20181113182615_add_vms_table.rb +32 -0
  107. data/db/migrate/20181113190507_add_orchestration_stacks.rb +26 -0
  108. data/db/migrate/20181114094606_add_last_seen_at_to_all_tables.rb +36 -0
  109. data/db/migrate/20181114115416_add_refresh_states_and_refresh_state_parts.rb +26 -0
  110. data/db/migrate/20181119173228_add_lives_on_to_container_nodes.rb +5 -0
  111. data/db/migrate/20181127191451_add_container_images.rb +28 -0
  112. data/db/migrate/20181128101451_add_flavors.rb +25 -0
  113. data/db/migrate/20181128141221_add_json_schema_to_source_types.rb +5 -0
  114. data/db/migrate/20181129150215_rename_archived_on.rb +18 -0
  115. data/db/migrate/20181130111723_add_volumes.rb +57 -0
  116. data/db/migrate/20181205142648_add_unique_constraint_to_source_uid.rb +6 -0
  117. data/db/migrate/20181210164829_add_hardware_attributes_to_flavors.rb +8 -0
  118. data/db/migrate/20190102161242_remove_tags_and_taggings.rb +33 -0
  119. data/db/migrate/20190102161442_add_taggings_for_all_taggable_tables.rb +86 -0
  120. data/db/migrate/20190104213045_rename_authentication_userid_to_username.rb +5 -0
  121. data/db/migrate/20190111083026_change_sources_source_type_to_not_null.rb +5 -0
  122. data/db/migrate/20190111163026_change_sources_name_to_not_null.rb +5 -0
  123. data/db/migrate/20190116164905_add_extra_metadata_and_tags_for_service_offerings.rb +21 -0
  124. data/db/migrate/20190118110059_add_service_offering_icons.rb +16 -0
  125. data/db/migrate/20190122131958_add_missing_foreign_key_constraint_to_tasks.rb +5 -0
  126. data/db/migrate/20190122133424_index_foreign_keys_in_authentications.rb +5 -0
  127. data/db/migrate/20190122133425_index_foreign_keys_in_container_groups.rb +5 -0
  128. data/db/migrate/20190122133426_index_foreign_keys_in_container_projects.rb +5 -0
  129. data/db/migrate/20190122133427_index_foreign_keys_in_container_templates.rb +5 -0
  130. data/db/migrate/20190122133428_index_foreign_keys_in_endpoints.rb +5 -0
  131. data/db/migrate/20190122133429_index_foreign_keys_in_service_instances.rb +5 -0
  132. data/db/migrate/20190122133430_index_foreign_keys_in_service_offerings.rb +5 -0
  133. data/db/migrate/20190122133431_index_foreign_keys_in_service_plans.rb +5 -0
  134. data/db/migrate/20190122133432_index_foreign_keys_in_sources.rb +5 -0
  135. data/db/migrate/20190122153645_remove_extraneous_indexes.rb +17 -0
  136. data/db/migrate/20190124140942_add_missing_indexes_for_last_seen_at.rb +8 -0
  137. data/db/migrate/20190124154742_add_missing_not_null_constraints_to_source_ref.rb +21 -0
  138. data/db/migrate/20190205174227_add_version_to_sources.rb +5 -0
  139. data/db/migrate/20190208143909_add_availabilities_table.rb +15 -0
  140. data/db/migrate/20190213155142_add_resource_version_to_service_plans.rb +5 -0
  141. data/db/migrate/20190218180413_move_tag_value_to_tags.rb +40 -0
  142. data/db/migrate/20190218203848_remove_extra_columns_from_tagging_join_tables.rb +33 -0
  143. data/db/migrate/20190222171042_add_mac_addresses_and_host_inventory_id_to_vms.rb +8 -0
  144. data/db/migrate/20190228103842_add_unique_indexes_to_tag_mapping_tables.rb +21 -0
  145. data/db/migrate/20190308144237_add_application_types.rb +9 -0
  146. data/db/migrate/20190308145549_add_applications.rb +10 -0
  147. data/db/migrate/20190313191654_add_application_type_display_name.rb +5 -0
  148. data/db/migrate/20190314123842_add_containers_resource_quotas_table.rb +30 -0
  149. data/db/migrate/20190314133842_add_columns_for_containers_capacity_planning_analytics.rb +13 -0
  150. data/db/migrate/20190314153151_extract_sources_to_new_service.rb +84 -0
  151. data/db/migrate/20190322122542_add_external_url_to_service_instances.rb +5 -0
  152. data/db/migrate/20190325115642_external_tenant_must_be_unique_and_not_null.rb +6 -0
  153. data/db/migrate/20190401134142_add_last_seen_at_to_all_ingress_exposed_tables.rb +36 -0
  154. data/db/migrate/20190514164916_add_clusters.rb +39 -0
  155. data/db/migrate/20190514165841_add_hosts.rb +45 -0
  156. data/db/migrate/20190522170940_add_datastores.rb +38 -0
  157. data/db/migrate/20190522172440_add_datastore_mounts.rb +17 -0
  158. data/db/migrate/20190724194551_add_network_adapters.rb +39 -0
  159. data/db/migrate/20190729194551_change_network_adapters.rb +27 -0
  160. data/db/migrate/20190729214242_add_ipaddresses_subnets_and_networks.rb +186 -0
  161. data/db/migrate/20190806112121_add_missing_relation_to_subscription_region_and_stack.rb +14 -0
  162. data/db/migrate/20190807102142_add_missing_relation_to_subscription_and_region_to_network_adapter.rb +6 -0
  163. data/db/migrate/20190807183701_add_source_collector_status.rb +5 -0
  164. data/db/migrate/20190815194221_add_reservations_table.rb +43 -0
  165. data/db/migrate/20190926144242_add_service_inventories_table.rb +39 -0
  166. data/db/migrate/20190930112142_add_service_offering_and_instance_nodes_tables.rb +67 -0
  167. data/db/migrate/20190930162142_add_inventory_relation_to_service_offerings_and_instances.rb +6 -0
  168. data/db/migrate/20191002132112_add_root_service_instance_to_service_instances.rb +6 -0
  169. data/db/migrate/20191108135108_add_service_credential_tables.rb +33 -0
  170. data/db/migrate/20191118181501_add_host_to_vm.rb +5 -0
  171. data/db/migrate/20200122181811_add_tenant_to_join_tables.rb +134 -0
  172. data/db/migrate/20200213135429_remove_service_credential_references.rb +8 -0
  173. data/db/migrate/20200213150314_create_service_credential_types.rb +30 -0
  174. data/db/migrate/20200213173958_add_service_credential_type_to_service_credentials.rb +5 -0
  175. data/db/migrate/20200214183108_create_join_table_service_offering_service_credentials.rb +18 -0
  176. data/db/migrate/20200214183117_create_join_table_service_instance_service_credentials.rb +19 -0
  177. data/db/migrate/20200218182928_create_join_table_service_offering_node_service_credentials.rb +18 -0
  178. data/db/migrate/20200218183046_create_join_table_service_instance_node_service_credentials.rb +18 -0
  179. data/db/migrate/20200313124806_remove_extraneous_index_from_service_credential_join_tables.rb +15 -0
  180. data/db/migrate/20200313141215_add_refresh_state_part_to_persisted_models.rb +66 -0
  181. data/db/migrate/20200317082640_add_tracking_timestamps_to_refresh_state.rb +6 -0
  182. data/db/schema.rb +1594 -0
  183. data/db/seeds.rb +0 -0
  184. data/lib/tasks/topological_inventory_tasks.rake +4 -0
  185. data/lib/topological_inventory-core.rb +7 -0
  186. data/lib/topological_inventory/core/ar_helper.rb +50 -0
  187. data/lib/topological_inventory/core/engine.rb +17 -0
  188. data/lib/topological_inventory/core/logging.rb +19 -0
  189. data/lib/topological_inventory/core/seed_loader.rb +9 -0
  190. data/lib/topological_inventory/core/version.rb +5 -0
  191. data/lib/topological_inventory/schema.rb +6 -0
  192. data/lib/topological_inventory/schema/base.rb +26 -0
  193. data/lib/topological_inventory/schema/default.rb +187 -0
  194. metadata +389 -0
@@ -0,0 +1,7 @@
1
+ class ReservationTag < ApplicationRecord
2
+ belongs_to :reservation
3
+ belongs_to :tag
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+ acts_as_tenant(:tenant)
7
+ end
@@ -0,0 +1,19 @@
1
+ require "archived_concern"
2
+
3
+ class SecurityGroup < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :source_region, :optional => true
10
+ belongs_to :subscription, :optional => true
11
+ belongs_to :orchestration_stack, :optional => true
12
+ belongs_to :network, :optional => true
13
+
14
+ has_many :vm_security_groups
15
+ has_many :vms, :through => :vm_security_groups
16
+
17
+ acts_as_tenant(:tenant)
18
+ acts_as_taggable_on
19
+ end
@@ -0,0 +1,7 @@
1
+ class SecurityGroupTag < ApplicationRecord
2
+ belongs_to :security_group
3
+ belongs_to :tag
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+ acts_as_tenant(:tenant)
7
+ end
@@ -0,0 +1,13 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceCredential < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+
10
+ belongs_to :service_credential_type, :optional => true
11
+
12
+ acts_as_tenant(:tenant)
13
+ end
@@ -0,0 +1,13 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceCredentialType < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+
10
+ has_many :service_credentials
11
+
12
+ acts_as_tenant(:tenant)
13
+ end
@@ -0,0 +1,23 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceInstance < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :service_offering
10
+ belongs_to :service_plan
11
+ belongs_to :source_region
12
+ belongs_to :subscription
13
+ belongs_to :service_inventory, :optional => true
14
+ belongs_to :root_service_instance, :optional => true, :class_name => "ServiceInstance"
15
+
16
+ has_many :service_instance_nodes
17
+ has_many :child_service_instance_nodes, :class_name => "ServiceInstanceNode", :foreign_key => :root_service_instance
18
+
19
+ has_many :service_instance_service_credentials
20
+ has_many :service_credentials, :through => :service_instance_service_credentials
21
+
22
+ acts_as_tenant(:tenant)
23
+ end
@@ -0,0 +1,17 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceInstanceNode < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :service_instance, :optional => true
10
+ belongs_to :root_service_instance, :optional => true, :class_name => "ServiceInstance"
11
+ belongs_to :service_inventory, :optional => true
12
+
13
+ has_many :service_instance_node_service_credentials
14
+ has_many :service_credentials, :through => :service_instance_node_service_credentials
15
+
16
+ acts_as_tenant(:tenant)
17
+ end
@@ -0,0 +1,8 @@
1
+ class ServiceInstanceNodeServiceCredential < ApplicationRecord
2
+ belongs_to :service_credential
3
+ belongs_to :service_instance_node
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+
7
+ acts_as_tenant(:tenant)
8
+ end
@@ -0,0 +1,8 @@
1
+ class ServiceInstanceServiceCredential < ApplicationRecord
2
+ belongs_to :service_credential
3
+ belongs_to :service_instance
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+
7
+ acts_as_tenant(:tenant)
8
+ end
@@ -0,0 +1,18 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceInventory < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+
10
+ has_many :service_instances
11
+ has_many :service_instance_nodes
12
+ has_many :service_inventory_tags
13
+ has_many :service_offerings
14
+ has_many :service_offering_nodes
15
+
16
+ acts_as_tenant(:tenant)
17
+ acts_as_taggable_on
18
+ end
@@ -0,0 +1,7 @@
1
+ class ServiceInventoryTag < ApplicationRecord
2
+ belongs_to :service_inventory
3
+ belongs_to :tag
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+ acts_as_tenant(:tenant)
7
+ end
@@ -0,0 +1,25 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceOffering < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :service_offering_icon, :optional => true
10
+ belongs_to :source_region
11
+ belongs_to :subscription
12
+ belongs_to :service_inventory, :optional => true
13
+
14
+ has_many :service_instances
15
+ has_many :service_plans
16
+
17
+ has_many :service_offering_nodes
18
+ has_many :child_service_offering_nodes, :class_name => "ServiceOfferingNode", :foreign_key => :root_service_offering
19
+
20
+ has_many :service_offering_service_credentials
21
+ has_many :service_credentials, :through => :service_offering_service_credentials
22
+
23
+ acts_as_tenant(:tenant)
24
+ acts_as_taggable_on
25
+ end
@@ -0,0 +1,9 @@
1
+ class ServiceOfferingIcon < ApplicationRecord
2
+ belongs_to :tenant
3
+ belongs_to :source
4
+ belongs_to :refresh_state_part, :optional => true
5
+
6
+ has_many :service_offerings
7
+
8
+ acts_as_tenant(:tenant)
9
+ end
@@ -0,0 +1,17 @@
1
+ require "archived_concern"
2
+
3
+ class ServiceOfferingNode < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :service_offering, :optional => true
10
+ belongs_to :root_service_offering, :optional => true, :class_name => "ServiceOffering"
11
+ belongs_to :service_inventory, :optional => true
12
+
13
+ has_many :service_offering_node_service_credentials
14
+ has_many :service_credentials, :through => :service_offering_node_service_credentials
15
+
16
+ acts_as_tenant(:tenant)
17
+ end
@@ -0,0 +1,8 @@
1
+ class ServiceOfferingNodeServiceCredential < ApplicationRecord
2
+ belongs_to :service_credential
3
+ belongs_to :service_offering_node
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+
7
+ acts_as_tenant(:tenant)
8
+ end
@@ -0,0 +1,8 @@
1
+ class ServiceOfferingServiceCredential < ApplicationRecord
2
+ belongs_to :service_credential
3
+ belongs_to :service_offering
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+
7
+ acts_as_tenant(:tenant)
8
+ end
@@ -0,0 +1,7 @@
1
+ class ServiceOfferingTag < ApplicationRecord
2
+ belongs_to :service_offering
3
+ belongs_to :tag
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+ acts_as_tenant(:tenant)
7
+ end
@@ -0,0 +1,16 @@
1
+ require "archived_concern"
2
+
3
+ class ServicePlan < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :service_offering
10
+ belongs_to :source_region
11
+ belongs_to :subscription
12
+
13
+ has_many :service_instances
14
+
15
+ acts_as_tenant(:tenant)
16
+ end
@@ -0,0 +1,82 @@
1
+ class Source < ApplicationRecord
2
+ attribute :uid, :string, :default => -> { SecureRandom.uuid }
3
+
4
+ has_many :availabilities, :as => :resource, :dependent => :destroy, :inverse_of => :resource
5
+
6
+ belongs_to :tenant
7
+ acts_as_tenant(:tenant)
8
+
9
+ # Refresh tracker
10
+ has_many :refresh_states
11
+ has_many :refresh_state_parts, :through => :refresh_states
12
+
13
+ # Container Inventory Objects
14
+ has_many :container_groups
15
+ has_many :container_group_tags, :through => :container_groups
16
+ has_many :container_images
17
+ has_many :container_image_tags, :through => :container_images
18
+ has_many :container_resource_quotas
19
+ has_many :container_templates
20
+ has_many :container_template_tags, :through => :container_templates
21
+ has_many :container_projects
22
+ has_many :container_project_tags, :through => :container_projects
23
+ has_many :container_nodes
24
+ has_many :container_node_tags, :through => :container_nodes
25
+ has_many :containers, :through => :container_groups
26
+
27
+ # Service Catalog Inventory Objects
28
+ has_many :service_credential_types
29
+ has_many :service_credentials
30
+ has_many :service_offerings
31
+ has_many :service_offering_nodes
32
+ has_many :service_offering_icons
33
+ has_many :service_offering_service_credentials, :through => :service_offerings
34
+ has_many :service_offering_node_service_credentials, :through => :service_offering_nodes
35
+ has_many :service_offering_tags, :through => :service_offerings
36
+ has_many :service_instances
37
+ has_many :service_instance_service_credentials, :through => :service_instances
38
+ has_many :service_instance_node_service_credentials, :through => :service_instance_nodes
39
+ has_many :service_instance_nodes
40
+ has_many :service_instance_node_service_credentials, :through => :service_instance_nodes
41
+ has_many :service_inventories
42
+ has_many :service_inventory_tags, :through => :service_inventories
43
+ has_many :service_plans
44
+ has_many :source_regions
45
+ has_many :subscriptions
46
+
47
+ # Infra/Cloud
48
+ has_many :hosts
49
+ has_many :clusters
50
+ has_many :cluster_tags, :through => :clusters
51
+ has_many :datastores
52
+ has_many :datastore_tags, :through => :datastores
53
+ has_many :datastore_mounts, :through => :hosts
54
+ has_many :flavors
55
+ has_many :host_tags, :through => :hosts
56
+ has_many :orchestration_stacks
57
+ has_many :reservations
58
+ has_many :reservation_tags, :through => :reservations
59
+ has_many :vms
60
+ has_many :vm_tags, :through => :vms
61
+
62
+ # Network
63
+ has_many :ipaddresses
64
+ has_many :ipaddress_tags, :through => :ipaddresses
65
+ has_many :network_adapters
66
+ has_many :network_adapter_tags, :through => :network_adapters
67
+ has_many :networks
68
+ has_many :network_tags, :through => :networks
69
+ has_many :security_groups
70
+ has_many :security_group_tags, :through => :security_groups
71
+ has_many :subnets
72
+ has_many :subnet_tags, :through => :subnets
73
+ has_many :vm_security_groups, :through => :vms
74
+
75
+ # Storage
76
+ has_many :volumes
77
+ has_many :volume_attachments, :through => :volumes
78
+ has_many :volume_types
79
+
80
+ ALLOWED_REFRESH_STATUS_VALUES = ["deployed", "quota_limited"].freeze
81
+ validates :refresh_status, :allow_nil => true, :inclusion => {:in => ALLOWED_REFRESH_STATUS_VALUES, :message => "%{value} is not included in #{ALLOWED_REFRESH_STATUS_VALUES}"}
82
+ end
@@ -0,0 +1,24 @@
1
+ require "archived_concern"
2
+
3
+ class SourceRegion < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+
10
+ has_many :ipaddresses
11
+ has_many :network_adapters
12
+ has_many :networks
13
+ has_many :orchestration_stacks
14
+ has_many :security_groups
15
+ has_many :service_instances
16
+ has_many :service_offerings
17
+ has_many :service_plans
18
+ has_many :subnets
19
+ has_many :vms
20
+ has_many :reservations
21
+ has_many :volumes
22
+
23
+ acts_as_tenant(:tenant)
24
+ end
@@ -0,0 +1,21 @@
1
+ require "archived_concern"
2
+
3
+ class Subnet < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+ belongs_to :source_region, :optional => true
10
+ belongs_to :subscription, :optional => true
11
+ belongs_to :orchestration_stack, :optional => true
12
+
13
+ belongs_to :network, :optional => true
14
+
15
+ has_many :ipaddresses
16
+ has_many :network_adapters, :through => :ipaddresses
17
+ has_many :vms, :through => :network_adapters, :source => :device, :source_type => "Vm"
18
+
19
+ acts_as_tenant(:tenant)
20
+ acts_as_taggable_on
21
+ end
@@ -0,0 +1,7 @@
1
+ class SubnetTag < ApplicationRecord
2
+ belongs_to :subnet
3
+ belongs_to :tag
4
+ belongs_to :tenant
5
+ belongs_to :refresh_state_part, :optional => true
6
+ acts_as_tenant(:tenant)
7
+ end
@@ -0,0 +1,25 @@
1
+ require "archived_concern"
2
+
3
+ class Subscription < ApplicationRecord
4
+ include ArchivedConcern
5
+
6
+ belongs_to :tenant
7
+ belongs_to :source
8
+ belongs_to :refresh_state_part, :optional => true
9
+
10
+ has_many :ipaddresses
11
+ has_many :network_adapters
12
+ has_many :networks
13
+ has_many :orchestration_stacks
14
+ has_many :security_groups
15
+ has_many :service_instances
16
+ has_many :service_offerings
17
+ has_many :service_plans
18
+ has_many :source_regions
19
+ has_many :subnets
20
+ has_many :vms
21
+ has_many :reservations
22
+ has_many :volumes
23
+
24
+ acts_as_tenant(:tenant)
25
+ end
@@ -0,0 +1,67 @@
1
+ class Tag < ApplicationRecord
2
+ belongs_to :tenant
3
+ belongs_to :refresh_state_part, :optional => true
4
+
5
+ has_many :container_group_tags
6
+ has_many :container_groups, :through => :container_group_tags
7
+
8
+ has_many :container_image_tags
9
+ has_many :container_images, :through => :container_image_tags
10
+
11
+ has_many :container_node_tags
12
+ has_many :container_nodes, :through => :container_node_tags
13
+
14
+ has_many :container_project_tags
15
+ has_many :container_projects, :through => :container_project_tags
16
+
17
+ has_many :container_template_tags
18
+ has_many :container_templates, :through => :container_template_tags
19
+
20
+ has_many :service_inventory_tags
21
+ has_many :service_inventories, :through => :service_inventory_tags
22
+
23
+ has_many :service_offering_tags
24
+ has_many :service_offerings, :through => :service_offering_tags
25
+
26
+ has_many :vm_tags
27
+ has_many :vms, :through => :vm_tags
28
+
29
+ has_many :reservation_tags
30
+ has_many :reservations, :through => :reservation_tags
31
+
32
+ # Network
33
+ has_many :ipaddress_tags
34
+ has_many :ipaddresses, :through => :ipaddress_tags
35
+ has_many :network_adapter_tags
36
+ has_many :network_adapters, :through => :network_adapter_tags
37
+ has_many :network_tags
38
+ has_many :networks, :through => :network_tags
39
+ has_many :security_group_tags
40
+ has_many :security_groups, :through => :security_group_tags
41
+ has_many :subnet_tags
42
+ has_many :subnets, :through => :subnet_tags
43
+
44
+ acts_as_tenant(:tenant)
45
+
46
+ def to_tag_string
47
+ "/#{namespace}/#{name}".tap { |string| string << "=#{value}" if value.present? }
48
+ end
49
+
50
+ def self.create!(attributes)
51
+ attributes = attributes.with_indifferent_access
52
+
53
+ super(attributes.except(:tag).merge(parse(attributes[:tag])))
54
+ end
55
+
56
+ def self.parse(tag_string)
57
+ return {} if tag_string.blank?
58
+
59
+ raise ArgumentError, "must start with /" unless tag_string.start_with?("/")
60
+
61
+ {}.tap do |tag_values|
62
+ keyspace, tag_values[:value] = tag_string.split("=")
63
+ _nil, namespace, tag_values[:name] = keyspace.split("/", 3)
64
+ tag_values[:namespace] = namespace.presence
65
+ end
66
+ end
67
+ end