foreman_deployments 0.0.1

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 (133) hide show
  1. checksums.yaml +15 -0
  2. data/LICENSE +619 -0
  3. data/README.md +52 -0
  4. data/Rakefile +30 -0
  5. data/app/controllers/foreman_deployments/api/v2/base_controller.rb +25 -0
  6. data/app/controllers/foreman_deployments/api/v2/deployments_controller.rb +102 -0
  7. data/app/controllers/foreman_deployments/api/v2/stacks_controller.rb +52 -0
  8. data/app/controllers/foreman_deployments/create_resources_controller.rb +62 -0
  9. data/app/controllers/foreman_deployments/deployments_controller.rb +5 -0
  10. data/app/controllers/foreman_deployments/stacks_controller.rb +5 -0
  11. data/app/lib/foreman_deployments/base_dereference_visitor.rb +55 -0
  12. data/app/lib/foreman_deployments/config.rb +16 -0
  13. data/app/lib/foreman_deployments/config/array.rb +91 -0
  14. data/app/lib/foreman_deployments/config/configurator.rb +23 -0
  15. data/app/lib/foreman_deployments/config/hash.rb +81 -0
  16. data/app/lib/foreman_deployments/config/load_visitor.rb +23 -0
  17. data/app/lib/foreman_deployments/config/merge_visitor.rb +23 -0
  18. data/app/lib/foreman_deployments/config/save_visitor.rb +23 -0
  19. data/app/lib/foreman_deployments/inputs/base_input_definition.rb +39 -0
  20. data/app/lib/foreman_deployments/inputs/value.rb +25 -0
  21. data/app/lib/foreman_deployments/planner_visitor.rb +26 -0
  22. data/app/lib/foreman_deployments/registry.rb +67 -0
  23. data/app/lib/foreman_deployments/stack_definition.rb +37 -0
  24. data/app/lib/foreman_deployments/stack_parser.rb +121 -0
  25. data/app/lib/foreman_deployments/task_reference.rb +48 -0
  26. data/app/lib/foreman_deployments/tasks/base_action.rb +6 -0
  27. data/app/lib/foreman_deployments/tasks/base_definition.rb +72 -0
  28. data/app/lib/foreman_deployments/tasks/creation_task_definition.rb +68 -0
  29. data/app/lib/foreman_deployments/tasks/host_creation_task_definition.rb +44 -0
  30. data/app/lib/foreman_deployments/tasks/search_task_definition.rb +55 -0
  31. data/app/lib/foreman_deployments/tasks/stack_deploy_action.rb +10 -0
  32. data/app/lib/foreman_deployments/tasks/wait_until_built_task_definition.rb +65 -0
  33. data/app/lib/foreman_deployments/validation/dereference_visitor.rb +18 -0
  34. data/app/lib/foreman_deployments/validation/remove_ids_visitor.rb +59 -0
  35. data/app/lib/foreman_deployments/validation/validation_error.rb +12 -0
  36. data/app/lib/foreman_deployments/validation/validation_result.rb +26 -0
  37. data/app/lib/foreman_deployments/validation/validation_visitor.rb +20 -0
  38. data/app/lib/foreman_deployments/validation/validator.rb +29 -0
  39. data/app/models/foreman_deployments/concerns/belongs_to_single_taxonomy.rb +42 -0
  40. data/app/models/foreman_deployments/concerns/belongs_to_stack_taxonomy.rb +24 -0
  41. data/app/models/foreman_deployments/configuration.rb +26 -0
  42. data/app/models/foreman_deployments/deployment.rb +57 -0
  43. data/app/models/foreman_deployments/resource_models/create_resource.rb +18 -0
  44. data/app/models/foreman_deployments/stack.rb +20 -0
  45. data/app/views/foreman_deployments/api/v2/deployments/base.json.rabl +3 -0
  46. data/app/views/foreman_deployments/api/v2/deployments/create.json.rabl +3 -0
  47. data/app/views/foreman_deployments/api/v2/deployments/index.json.rabl +3 -0
  48. data/app/views/foreman_deployments/api/v2/deployments/main.json.rabl +5 -0
  49. data/app/views/foreman_deployments/api/v2/deployments/merge_configuration.json.rabl +3 -0
  50. data/app/views/foreman_deployments/api/v2/deployments/replace_configuration.json.rabl +3 -0
  51. data/app/views/foreman_deployments/api/v2/deployments/run.json.rabl +3 -0
  52. data/app/views/foreman_deployments/api/v2/deployments/show.json.rabl +11 -0
  53. data/app/views/foreman_deployments/api/v2/deployments/update.json.rabl +3 -0
  54. data/app/views/foreman_deployments/api/v2/stacks/base.json.rabl +3 -0
  55. data/app/views/foreman_deployments/api/v2/stacks/create.json.rabl +3 -0
  56. data/app/views/foreman_deployments/api/v2/stacks/index.json.rabl +3 -0
  57. data/app/views/foreman_deployments/api/v2/stacks/main.json.rabl +3 -0
  58. data/app/views/foreman_deployments/api/v2/stacks/show.json.rabl +7 -0
  59. data/app/views/foreman_deployments/api/v2/stacks/update.json.rabl +3 -0
  60. data/app/views/foreman_deployments/create_resources/new.html.erb +6 -0
  61. data/config/routes.rb +41 -0
  62. data/db/migrate/20150623140612_create_stacks.rb +10 -0
  63. data/db/migrate/20150814092932_create_deployment.rb +20 -0
  64. data/db/migrate/20150916133305_add_task_to_deployments.rb +5 -0
  65. data/db/migrate/20150917130618_add_taxonomy_to_deployments.rb +8 -0
  66. data/db/seeds.d/03-permissions.rb +14 -0
  67. data/doc/deployment_process.md +112 -0
  68. data/doc/design/capsule_stack.puml +51 -0
  69. data/doc/design/complete_stack.puml +17 -0
  70. data/doc/design/config_resource_overview.puml +15 -0
  71. data/doc/design/design.md +230 -0
  72. data/doc/design/diagrams/capsule_stack.png +0 -0
  73. data/doc/design/diagrams/capsule_stack.svg +1 -0
  74. data/doc/design/diagrams/complete_stack.png +0 -0
  75. data/doc/design/diagrams/complete_stack.svg +1 -0
  76. data/doc/design/diagrams/config_resource_overview.png +0 -0
  77. data/doc/design/diagrams/config_resource_overview.svg +1 -0
  78. data/doc/design/diagrams/ordered_resource_overview.png +0 -0
  79. data/doc/design/diagrams/ordered_resource_overview.svg +1 -0
  80. data/doc/design/diagrams/overview.png +0 -0
  81. data/doc/design/diagrams/overview.svg +1 -0
  82. data/doc/design/diagrams/overview_class.png +0 -0
  83. data/doc/design/diagrams/overview_class.svg +1 -0
  84. data/doc/design/diagrams/sat_stack.png +0 -0
  85. data/doc/design/diagrams/sat_stack.svg +1 -0
  86. data/doc/design/diagrams/solr_usecase.png +0 -0
  87. data/doc/design/diagrams/solr_usecase.svg +1 -0
  88. data/doc/design/examples.md +192 -0
  89. data/doc/design/generate-diagrams.sh +7 -0
  90. data/doc/design/implementation.md +128 -0
  91. data/doc/design/ordered_resource_overview.puml +15 -0
  92. data/doc/design/overview.puml +42 -0
  93. data/doc/design/overview_class.puml +64 -0
  94. data/doc/design/resources.md +134 -0
  95. data/doc/design/sat_stack.puml +37 -0
  96. data/doc/design/shared.puml +171 -0
  97. data/doc/design/solr_usecase.puml +189 -0
  98. data/doc/design/tasks.md +74 -0
  99. data/doc/design/user_interfaces.md +189 -0
  100. data/doc/introduction.md +84 -0
  101. data/doc/writing_stacks.md +102 -0
  102. data/lib/foreman_deployments.rb +7 -0
  103. data/lib/foreman_deployments/engine.rb +94 -0
  104. data/lib/foreman_deployments/monkey_patches.rb +9 -0
  105. data/lib/foreman_deployments/version.rb +3 -0
  106. data/lib/tasks/foreman_deployments_tasks.rake +22 -0
  107. data/locale/Makefile +62 -0
  108. data/test/factories/foreman_deployments.rb +70 -0
  109. data/test/functional/api/v2/deployments_controller_test.rb +318 -0
  110. data/test/functional/api/v2/stacks_controller_test.rb +140 -0
  111. data/test/test_plugin_helper.rb +14 -0
  112. data/test/unit/lib/config/array_test.rb +217 -0
  113. data/test/unit/lib/config/configurator_test.rb +66 -0
  114. data/test/unit/lib/config/hash_test.rb +178 -0
  115. data/test/unit/lib/inputs/value_test.rb +47 -0
  116. data/test/unit/lib/registry_test.rb +117 -0
  117. data/test/unit/lib/stack_definition_test.rb +54 -0
  118. data/test/unit/lib/stack_parser_test.rb +129 -0
  119. data/test/unit/lib/task_reference_test.rb +63 -0
  120. data/test/unit/lib/tasks/base_definition_test.rb +137 -0
  121. data/test/unit/lib/tasks/creation_task_definition_test.rb +57 -0
  122. data/test/unit/lib/tasks/host_creation_task_definition_test.rb +10 -0
  123. data/test/unit/lib/tasks/search_task_definition_test.rb +49 -0
  124. data/test/unit/lib/tasks/stack_deploy_action_test.rb +83 -0
  125. data/test/unit/lib/tasks/wait_until_built_task_definition_test.rb +71 -0
  126. data/test/unit/lib/validation/dereference_visitor_test.rb +48 -0
  127. data/test/unit/lib/validation/remove_ids_visitor_test.rb +90 -0
  128. data/test/unit/lib/validation/validation_result_test.rb +40 -0
  129. data/test/unit/lib/validation/validation_visitor_test.rb +67 -0
  130. data/test/unit/model/configuration_test.rb +88 -0
  131. data/test/unit/model/deployment_test.rb +159 -0
  132. data/test/unit/model/stack_test.rb +33 -0
  133. metadata +241 -0
@@ -0,0 +1,134 @@
1
+ ## Configuration resources
2
+
3
+ ![Configuration resource class diagram](./diagrams/config_resource_overview.png)
4
+ [SVG version of the diagram for better readability](./diagrams/config_resource_overview.svg)
5
+
6
+ #### Host
7
+ Define host roles, for example "Database" or "Proxy".
8
+
9
+ * enables to specify a range for the number of hosts of such type
10
+ * each host is required to be in a hostgroup
11
+ * hosts are named "#{name}-#{index}", hosts created without provisioning keep their original name
12
+ * relationships:
13
+ * belongs to `hostgroup resource` - each host needs to be in a hostgroup, deployment always creates a new one
14
+ * has many `puppet_run resources`, `subnet_type resources`
15
+ * user input:
16
+ * number of such hosts from the range
17
+ * selecting existing hosts or compute resource and it's parameters
18
+ * networking setup for the hosts
19
+ * whether to provision the host or not
20
+
21
+ #### Hostgroup
22
+ Defines hostgroup that will be created and used internally for organizing the hosts in a deployment.
23
+
24
+ * users can select a parent hostgroup to inject OS settings, puppet proxies and others
25
+ * parents can be defined also in the stack as another hostgroup resource
26
+ * relationships:
27
+ * belongs to `hostgroup resource` - for means of the hostgroup's resource inheritance
28
+ * has many `parameter resources`, `host resources`, `puppetclass resources`
29
+ * user input:
30
+ * parent hostgroup
31
+
32
+ #### SubnetType
33
+ Declares what subnet types are used in the stack, for example "Public API subnet" and "Provisioning subnet". There will always be at least one subnet type for the provisioning purposes. Host resource selects what subnet types it uses. Hosts are required to have one NIC per subnet type.
34
+
35
+ * relationships:
36
+ * has many `host resources`
37
+ * user input:
38
+ * select subnet from the foreman
39
+
40
+ #### Interface
41
+ Dummy interface that is not assigned to any host. It's purpose is to reserve address from the subnet's range.
42
+
43
+ * relationships:
44
+ * belongs to `subnet_type resource`
45
+
46
+ **FUTURE FEATURE**: *it might be interesting to define interfaces requirements on hosts too, e.g. HA deployment requires bond of 2 physical interfaces*
47
+
48
+ #### HostgroupParameter
49
+ Stack's input parameters that are set on a hostgroup. They allow using erb snippets in the value as usual parameters in the Foreman do.
50
+ They are one of the main entry points for user's input. When configured they set global parameter for the hostgroup.
51
+
52
+ * parameters can have default value
53
+ * if the parameter is already set in the parent, we ignore setting it (requires explicit 'inherit' value on parameter)
54
+ * they bear a flag telling if it should be or shouldn't be configured by users
55
+
56
+ * relationships:
57
+ * belongs to `hostgroup resource`
58
+ * user input:
59
+ * parameter value
60
+
61
+ #### StackParameter (nice to have, future feature)
62
+ Global parameters for the whole stack (having the same features as `HostgroupParameter`s). When configured they are copied to all hostgroups as global parameters
63
+ unless the hostgroup already defines such parameter.
64
+
65
+ * user input:
66
+ * parameter value
67
+
68
+ #### PuppetClass
69
+ Puppet classes to be assigned to a hostgroup. It is user's esponsibility to make sure the class is present in the selected environment. We will validate their presence
70
+ in the `before_deployment_validation`. The resource contains meta-parameters with the link to sources and version to point where the class comes from when it's missing.
71
+
72
+ * relationships:
73
+ * belongs to `hostgroup resource`
74
+ * user input:
75
+ * NONE
76
+
77
+ #### PuppetClassOverride
78
+ Allows setting override values for a puppet class on a hostgroup.
79
+
80
+ * relationships:
81
+ * belongs to `puppet class resource`
82
+ * user input:
83
+ * NONE
84
+
85
+ #### ComputeResourceType
86
+ Puts restriction on where the host can be deployed and what are the minimal requirements. For example we can require a specific image for EC2 compute-resource.
87
+
88
+ * relationships:
89
+ * belongs to `hostgroup resource`
90
+ * user input:
91
+ * NONE
92
+
93
+ #### ConnectParameter
94
+ ConnectParameter simplifies connecting parameters from parent and child stacks. It only propagates value from a parameter to a parameter of the child stack.
95
+
96
+
97
+
98
+ ## Ordered resources
99
+
100
+ ![Ordered resource class diagram](./diagrams/ordered_resource_overview.png)
101
+ [SVG version of the diagram for better readability](./diagrams/ordered_resource_overview.svg)
102
+
103
+ #### PuppetRun
104
+ Triggers a puppetrun on a host.
105
+
106
+ * relationships:
107
+ * belongs to `host resource`
108
+ * user input:
109
+ * NONE
110
+
111
+ #### ParameterUpdate
112
+ Updates a parameter on a hostgroup.
113
+
114
+ * relationships:
115
+ * belongs to `parameter resource`
116
+ * user input:
117
+ * NONE
118
+
119
+
120
+ #### ChildStack
121
+ Executes another stack.
122
+
123
+ * user input:
124
+ * NONE
125
+
126
+
127
+ #### RemoteExecution
128
+ Execute custom code on a host.
129
+
130
+ * relationships:
131
+ * belongs to `host resource`
132
+ * user input:
133
+ * NONE
134
+
@@ -0,0 +1,37 @@
1
+ @startuml
2
+
3
+ object ProvisioningSubnet <<TakeSubnet>> {
4
+
5
+ }
6
+
7
+ object SatelliteOs <<TakeOs>> {
8
+ description: OS for the Satellite machine
9
+ family: RHEL
10
+ version: '>= 6.5'
11
+ }
12
+
13
+ object SatelliteMachine <<TakeHost>> {
14
+ count: 1
15
+ name: <input>
16
+ subnet: <reference to ProvisioningSubnet>
17
+ os: <reference to SatelliteOs>
18
+ activation_key: <input>
19
+ }
20
+
21
+ object ProvisionSatellite <<ProvisionHost>> {
22
+ host: <reference to SatelliteMachine>
23
+ }
24
+
25
+ object InstallSatellite <<RemoteExecution>> {
26
+ host: <reference to SatelliteMachine>
27
+ command: "katello-installer ..."
28
+ parameters: [password, ...]
29
+ }
30
+
31
+
32
+ ProvisioningSubnet -[#gray]-> SatelliteMachine
33
+ SatelliteOs -[#gray]-> SatelliteMachine
34
+ SatelliteMachine -[#gray]-> ProvisionSatellite
35
+ ProvisionSatellite -[#gray]-> InstallSatellite
36
+
37
+ @enduml
@@ -0,0 +1,171 @@
1
+ !define DEPLOYCOLOR DarkGreen
2
+ !define FOREMANCOLOR DarkOrange
3
+ !define CONNECTIONCOLOR DarkBlue
4
+ !define FOREMAN << (C,FOREMANCOLOR) Foreman >>
5
+ !define ORDERED << (C,green) Ordered >>
6
+ !define FONT skinparam defaultFontName "Helvetica Neue"
7
+ !define OBJECT(name,klass) object name <<klass>>
8
+ !define DEPLOYOBJECT(type) skinparam objectBorderColor<<type>> DEPLOYCOLOR
9
+ !define FOREMANOBJECT(type) skinparam objectBorderColor<<type>> FOREMANCOLOR
10
+
11
+ !definelong CONFIGRESOURCES
12
+
13
+
14
+ class HostgroupResource {
15
+ String name
16
+ .. notes ..
17
+ Parent is HostgroupResource
18
+ or it's provided on Deployment
19
+ configuration.
20
+ }
21
+
22
+ class ParameterResource {
23
+ String name
24
+ String description # intent
25
+ String default_value # optional
26
+ .. notes ..
27
+ Validations, like list of allowed
28
+ values.
29
+ }
30
+
31
+ class HostgroupParameterResource {
32
+ .. notes ..
33
+ Turns into GroupParameter.
34
+ }
35
+
36
+ class DeploymentParameterResource {
37
+ .. notes ..
38
+ Turns into DeploymentParameter.
39
+ }
40
+
41
+ class ParameterOverrideResource {
42
+ String key
43
+ String value # optional, ERB
44
+ .. notes ..
45
+ If value is not present it
46
+ needs to be supplied on
47
+ deployment configuration.
48
+ }
49
+
50
+ class ComputeResourceResource {
51
+ String type
52
+ Boolean image_based
53
+ String image_url nullable
54
+ .. notes ..
55
+ Each ComputeResourceResource allows
56
+ particular ComputeResource type for
57
+ a given HostResource. It has to
58
+ contain image_url when image_based.
59
+ }
60
+
61
+ class PuppetClassResource {
62
+ String name
63
+ \# of the class to add
64
+ .. notes ..
65
+ possibly allot to limit
66
+ puppet class versions
67
+ }
68
+
69
+ class SubnetTypeResource {
70
+ String name
71
+ .. notes ..
72
+ like Staypuft
73
+ network types
74
+ }
75
+
76
+ class InterfaceResource {
77
+ String ip
78
+ .. notes ..
79
+ creates interface without
80
+ Host to reserve IP
81
+ }
82
+
83
+ class HostResource {
84
+ String name # "db-%02d"
85
+ Integere min
86
+ Integere max
87
+ }
88
+
89
+ class ConnectParameterResource {
90
+ .. notes ..
91
+ Possibly allow to define
92
+ a transformation function.
93
+ Only resource allowing to connect
94
+ resources form child stacks.
95
+ ERB is inserted to destination
96
+ to propagate value from source.
97
+ }
98
+
99
+ InterfaceResource "0..*" --> "1" SubnetTypeResource : where
100
+ HostgroupParameterResource "0..*" --> "0..1" HostgroupResource : will be\nadded to
101
+ ParameterOverrideResource "0..*" --> "1" PuppetClassResource : overrides\nin
102
+ PuppetClassResource "0..*" --> "1" HostgroupResource : will be\nadded to
103
+ HostResource "0..*" --> "0..*" SubnetTypeResource : connects to
104
+ HostResource "1..*" --> "1..*" ComputeResourceResource : allowed ComputeResources
105
+ ConnectParameterResource "0..*" --> "1" ParameterResource : source
106
+ ConnectParameterResource "0..1" --> "1" ParameterResource : destination
107
+ HostResource "0..*" --> "1" HostgroupResource : provisions in
108
+ HostgroupResource "0..*" <-- "0..1" HostgroupResource : be parent of
109
+ note on link
110
+ Foreign keys cannot be stored on
111
+ target HostgroupResource.
112
+ It would prevent Stack share-ability.
113
+ end note
114
+
115
+
116
+ Resource <|-[#gray]- HostgroupResource
117
+ Resource <|-[#gray]- HostResource
118
+ Resource <|-[#gray]- ParameterResource
119
+ ParameterResource <|-[#gray]- HostgroupParameterResource
120
+ ParameterResource <|-[#gray]- DeploymentParameterResource
121
+ Resource <|-[#gray]- ParameterOverrideResource
122
+ Resource <|-[#gray]- PuppetClassResource
123
+ Resource <|-[#gray]- ComputeResourceResource
124
+ Resource <|-[#gray]- SubnetTypeResource
125
+ Resource <|-[#gray]- InterfaceResource
126
+ Resource <|-[#gray]- ConnectParameterResource
127
+
128
+ !enddefinelong
129
+
130
+
131
+
132
+ !definelong ORDEREDRESOURCES
133
+
134
+
135
+ abstract class Resource {
136
+ .. notes ..
137
+ A Foreman object to be configured or created
138
+ to form an Deployment instance.
139
+ }
140
+
141
+ abstract class Ordered <<(A,orchid)>> {
142
+ .. notes ..
143
+ Resources that are ordered and executed via dynflow.
144
+ }
145
+
146
+ class ChildStackResource ORDERED
147
+
148
+ class ParameterUpdateResource ORDERED {
149
+ Staring value
150
+ .. notes ..
151
+ possibly ERB to compute new value
152
+ }
153
+
154
+ class PuppetRunResource ORDERED
155
+
156
+ class RemoteExecutionResource ORDERED
157
+
158
+ Resource <|-[#gray]-- Ordered
159
+
160
+ Ordered <|-[#gray]- ChildStackResource
161
+ Ordered <|-[#gray]- ParameterUpdateResource
162
+ Ordered <|-[#gray]- PuppetRunResource
163
+ Ordered <|-[#gray]- RemoteExecutionResource
164
+
165
+ PuppetRunResource "0..*" --> "1" HostResource : on
166
+ RemoteExecutionResource "0..*" --> "1" HostResource : on
167
+ ParameterUpdateResource "0..*" --> "1" ParameterResource : updates
168
+
169
+ !enddefinelong
170
+
171
+
@@ -0,0 +1,189 @@
1
+ @startuml
2
+
3
+ title Solr stack
4
+ scale 3500 width
5
+
6
+ !include shared.puml
7
+ FONT
8
+
9
+ package zookeeper_server_stack {
10
+ object zk_machine_restrictions <<MachineRestrictionsResource>>{
11
+ CPU = 1
12
+ memory = 4GB
13
+ NOTE:
14
+ This resource is not part of the current design.
15
+ The machine requirements can be solved multiple
16
+ ways.
17
+ }
18
+
19
+ object zk_id <<ParamResource>> {
20
+ name = 'id'
21
+ value = "<%= @host.id %>"
22
+ }
23
+
24
+ object zk_ring <<ParamResource>> {
25
+ name = 'servers'
26
+ value = []
27
+ }
28
+
29
+ object zk_client_ip <<ParamResource>> {
30
+ name = 'zk_client_ip'
31
+ value = "$::ipaddress_eth0"
32
+ }
33
+
34
+
35
+ object zk_server <<HostgroupResource>> {
36
+ }
37
+
38
+ object zk_server_instance <<HostResource>> {
39
+ count = 4
40
+ }
41
+
42
+
43
+ object zk_subnet <<SybnetTypeResource>> {
44
+ name = 'provisioning'
45
+ }
46
+
47
+ object zk_server_instance_run <<PuppetRunResource>> {
48
+ }
49
+
50
+ object zk_zookeeper_class <<PuppetclassResource>> {
51
+ name = 'zookeeper'
52
+ source = https://github.com/deric/puppet-zookeeper
53
+ client_ip => $::ipaddress_eth0
54
+ }
55
+
56
+ object zk_install_java_params <<ParamResource>> {
57
+ name = 'install_java'
58
+ value = 'true'
59
+ }
60
+
61
+ object zk_java_pacakge_params <<ParamResource>> {
62
+ name = 'java_package'
63
+ value = 'openjdk-7-jre-headless'
64
+ }
65
+
66
+ zk_server_instance <-- zk_server
67
+ zk_server <-- zk_zookeeper_class
68
+ zk_server <-- zk_id
69
+ zk_server <-- zk_ring
70
+ zk_server <-- zk_client_ip
71
+ zk_server <-- zk_install_java_params
72
+ zk_server <-- zk_java_pacakge_params
73
+ zk_server_instance <-- zk_machine_restrictions
74
+ zk_server_instance <-- zk_server_instance_run
75
+ zk_server_instance <-- zk_subnet
76
+ }
77
+
78
+
79
+ package solr_single_shard_stack {
80
+
81
+ object solr_machine <<MachineRestrictionsResource>>{
82
+ CPU = 4
83
+ memory = 16GB
84
+ NOTE:
85
+ This resource is not part of the current design.
86
+ The machine requirements can be solved multiple
87
+ ways.
88
+ }
89
+
90
+ object solr_zk_ring <<ParamResource>> {
91
+ name = 'servers'
92
+ value =["$::ipaddress_eth0"]
93
+ }
94
+
95
+ object solr_client_fqdn <<ParamResource>> {
96
+ name = 'client_fqdn'
97
+ value = '$::fqdn_eth0'
98
+ }
99
+
100
+ object solr_home <<ParamResource>> {
101
+ name = 'home_folder'
102
+ value = '/home/lukasz/solr-4.2.1'
103
+ }
104
+
105
+ object solr_server <<HostgroupResource>> {
106
+ }
107
+
108
+ object solr_server_instance <<HostResource>> {
109
+ count = 1
110
+ }
111
+
112
+ object solr_subnet <<SybnetTypeResource>> {
113
+ name = 'provisioning'
114
+ }
115
+
116
+ object solr_server_instance_run <<PuppetRunResource>> {
117
+ }
118
+
119
+ object java_class <<PuppetclassResource>> {
120
+ name = 'puppetlabs-java'
121
+ source = 'https://github.com/puppetlabs/'
122
+ }
123
+ object tomcat_class <<PuppetclassResource>> {
124
+ name = 'puppetlabs-tomcat'
125
+ source = 'https://github.com/puppetlabs/puppetlabs-tomcat'
126
+ }
127
+ object solr_install_class <<PuppetclassResource>> {
128
+ name = 'solr-shard'
129
+ source = 'https://github.com/needs/creating'
130
+ }
131
+
132
+
133
+ solr_server_instance <-- solr_server
134
+ solr_server <-- java_class
135
+ solr_server <-- tomcat_class
136
+ solr_server <-- solr_install_class
137
+ solr_server <-- solr_zk_ring
138
+ solr_server <-- solr_client_fqdn
139
+ solr_server <-- solr_home
140
+ solr_server_instance <-- solr_machine
141
+ solr_server_instance <-- solr_server_instance_run
142
+ solr_server_instance <-- solr_subnet
143
+ }
144
+
145
+
146
+ object zookeeper_childstack <<ChildStackResource>> {
147
+
148
+ }
149
+ object solr_single_shard_childstack <<ChildStackResource>> {
150
+
151
+ }
152
+
153
+ object update_zk_ring_param <<ParamUpdateResource>> {
154
+ name = 'servers'
155
+ value = '<%= hosts_in('zk_server').map(&:ip) %>'
156
+ }
157
+ update_zk_ring_param --> zk_ring
158
+
159
+ object update_solr_zk_ring_param <<ParamUpdateResource>> {
160
+ name = 'servers'
161
+ value = '<%= hosts_in('zk_server').map(&:ip) %>'
162
+ }
163
+ update_solr_zk_ring_param --> solr_zk_ring
164
+
165
+ object zk_server_instance_run2 <<PuppetRunResource>> {
166
+ NOTE
167
+ Scond run to propagate the updated parameters
168
+ }
169
+ zk_server_instance_run2 --> zk_server_instance
170
+
171
+ object solr_server_instance_run2 <<PuppetRunResource>> {
172
+ NOTE
173
+ Scond run to propagate the updated parameters
174
+ }
175
+ solr_server_instance_run2 --> solr_server_instance
176
+
177
+
178
+ zookeeper_childstack <-- zookeeper_server_stack
179
+ solr_single_shard_childstack <-- solr_single_shard_stack
180
+
181
+ zookeeper_childstack <-[#gray]- update_zk_ring_param : depends on
182
+ solr_single_shard_childstack <-[#gray]- update_zk_ring_param : depends on
183
+
184
+ update_zk_ring_param <-[#gray]- update_solr_zk_ring_param : depends on
185
+
186
+ update_solr_zk_ring_param <-[#gray]- zk_server_instance_run2 : depends on
187
+ update_solr_zk_ring_param <-[#gray]- solr_server_instance_run2 : depends on
188
+
189
+ @enduml