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.
- checksums.yaml +15 -0
- data/LICENSE +619 -0
- data/README.md +52 -0
- data/Rakefile +30 -0
- data/app/controllers/foreman_deployments/api/v2/base_controller.rb +25 -0
- data/app/controllers/foreman_deployments/api/v2/deployments_controller.rb +102 -0
- data/app/controllers/foreman_deployments/api/v2/stacks_controller.rb +52 -0
- data/app/controllers/foreman_deployments/create_resources_controller.rb +62 -0
- data/app/controllers/foreman_deployments/deployments_controller.rb +5 -0
- data/app/controllers/foreman_deployments/stacks_controller.rb +5 -0
- data/app/lib/foreman_deployments/base_dereference_visitor.rb +55 -0
- data/app/lib/foreman_deployments/config.rb +16 -0
- data/app/lib/foreman_deployments/config/array.rb +91 -0
- data/app/lib/foreman_deployments/config/configurator.rb +23 -0
- data/app/lib/foreman_deployments/config/hash.rb +81 -0
- data/app/lib/foreman_deployments/config/load_visitor.rb +23 -0
- data/app/lib/foreman_deployments/config/merge_visitor.rb +23 -0
- data/app/lib/foreman_deployments/config/save_visitor.rb +23 -0
- data/app/lib/foreman_deployments/inputs/base_input_definition.rb +39 -0
- data/app/lib/foreman_deployments/inputs/value.rb +25 -0
- data/app/lib/foreman_deployments/planner_visitor.rb +26 -0
- data/app/lib/foreman_deployments/registry.rb +67 -0
- data/app/lib/foreman_deployments/stack_definition.rb +37 -0
- data/app/lib/foreman_deployments/stack_parser.rb +121 -0
- data/app/lib/foreman_deployments/task_reference.rb +48 -0
- data/app/lib/foreman_deployments/tasks/base_action.rb +6 -0
- data/app/lib/foreman_deployments/tasks/base_definition.rb +72 -0
- data/app/lib/foreman_deployments/tasks/creation_task_definition.rb +68 -0
- data/app/lib/foreman_deployments/tasks/host_creation_task_definition.rb +44 -0
- data/app/lib/foreman_deployments/tasks/search_task_definition.rb +55 -0
- data/app/lib/foreman_deployments/tasks/stack_deploy_action.rb +10 -0
- data/app/lib/foreman_deployments/tasks/wait_until_built_task_definition.rb +65 -0
- data/app/lib/foreman_deployments/validation/dereference_visitor.rb +18 -0
- data/app/lib/foreman_deployments/validation/remove_ids_visitor.rb +59 -0
- data/app/lib/foreman_deployments/validation/validation_error.rb +12 -0
- data/app/lib/foreman_deployments/validation/validation_result.rb +26 -0
- data/app/lib/foreman_deployments/validation/validation_visitor.rb +20 -0
- data/app/lib/foreman_deployments/validation/validator.rb +29 -0
- data/app/models/foreman_deployments/concerns/belongs_to_single_taxonomy.rb +42 -0
- data/app/models/foreman_deployments/concerns/belongs_to_stack_taxonomy.rb +24 -0
- data/app/models/foreman_deployments/configuration.rb +26 -0
- data/app/models/foreman_deployments/deployment.rb +57 -0
- data/app/models/foreman_deployments/resource_models/create_resource.rb +18 -0
- data/app/models/foreman_deployments/stack.rb +20 -0
- data/app/views/foreman_deployments/api/v2/deployments/base.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/deployments/create.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/deployments/index.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/deployments/main.json.rabl +5 -0
- data/app/views/foreman_deployments/api/v2/deployments/merge_configuration.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/deployments/replace_configuration.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/deployments/run.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/deployments/show.json.rabl +11 -0
- data/app/views/foreman_deployments/api/v2/deployments/update.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/stacks/base.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/stacks/create.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/stacks/index.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/stacks/main.json.rabl +3 -0
- data/app/views/foreman_deployments/api/v2/stacks/show.json.rabl +7 -0
- data/app/views/foreman_deployments/api/v2/stacks/update.json.rabl +3 -0
- data/app/views/foreman_deployments/create_resources/new.html.erb +6 -0
- data/config/routes.rb +41 -0
- data/db/migrate/20150623140612_create_stacks.rb +10 -0
- data/db/migrate/20150814092932_create_deployment.rb +20 -0
- data/db/migrate/20150916133305_add_task_to_deployments.rb +5 -0
- data/db/migrate/20150917130618_add_taxonomy_to_deployments.rb +8 -0
- data/db/seeds.d/03-permissions.rb +14 -0
- data/doc/deployment_process.md +112 -0
- data/doc/design/capsule_stack.puml +51 -0
- data/doc/design/complete_stack.puml +17 -0
- data/doc/design/config_resource_overview.puml +15 -0
- data/doc/design/design.md +230 -0
- data/doc/design/diagrams/capsule_stack.png +0 -0
- data/doc/design/diagrams/capsule_stack.svg +1 -0
- data/doc/design/diagrams/complete_stack.png +0 -0
- data/doc/design/diagrams/complete_stack.svg +1 -0
- data/doc/design/diagrams/config_resource_overview.png +0 -0
- data/doc/design/diagrams/config_resource_overview.svg +1 -0
- data/doc/design/diagrams/ordered_resource_overview.png +0 -0
- data/doc/design/diagrams/ordered_resource_overview.svg +1 -0
- data/doc/design/diagrams/overview.png +0 -0
- data/doc/design/diagrams/overview.svg +1 -0
- data/doc/design/diagrams/overview_class.png +0 -0
- data/doc/design/diagrams/overview_class.svg +1 -0
- data/doc/design/diagrams/sat_stack.png +0 -0
- data/doc/design/diagrams/sat_stack.svg +1 -0
- data/doc/design/diagrams/solr_usecase.png +0 -0
- data/doc/design/diagrams/solr_usecase.svg +1 -0
- data/doc/design/examples.md +192 -0
- data/doc/design/generate-diagrams.sh +7 -0
- data/doc/design/implementation.md +128 -0
- data/doc/design/ordered_resource_overview.puml +15 -0
- data/doc/design/overview.puml +42 -0
- data/doc/design/overview_class.puml +64 -0
- data/doc/design/resources.md +134 -0
- data/doc/design/sat_stack.puml +37 -0
- data/doc/design/shared.puml +171 -0
- data/doc/design/solr_usecase.puml +189 -0
- data/doc/design/tasks.md +74 -0
- data/doc/design/user_interfaces.md +189 -0
- data/doc/introduction.md +84 -0
- data/doc/writing_stacks.md +102 -0
- data/lib/foreman_deployments.rb +7 -0
- data/lib/foreman_deployments/engine.rb +94 -0
- data/lib/foreman_deployments/monkey_patches.rb +9 -0
- data/lib/foreman_deployments/version.rb +3 -0
- data/lib/tasks/foreman_deployments_tasks.rake +22 -0
- data/locale/Makefile +62 -0
- data/test/factories/foreman_deployments.rb +70 -0
- data/test/functional/api/v2/deployments_controller_test.rb +318 -0
- data/test/functional/api/v2/stacks_controller_test.rb +140 -0
- data/test/test_plugin_helper.rb +14 -0
- data/test/unit/lib/config/array_test.rb +217 -0
- data/test/unit/lib/config/configurator_test.rb +66 -0
- data/test/unit/lib/config/hash_test.rb +178 -0
- data/test/unit/lib/inputs/value_test.rb +47 -0
- data/test/unit/lib/registry_test.rb +117 -0
- data/test/unit/lib/stack_definition_test.rb +54 -0
- data/test/unit/lib/stack_parser_test.rb +129 -0
- data/test/unit/lib/task_reference_test.rb +63 -0
- data/test/unit/lib/tasks/base_definition_test.rb +137 -0
- data/test/unit/lib/tasks/creation_task_definition_test.rb +57 -0
- data/test/unit/lib/tasks/host_creation_task_definition_test.rb +10 -0
- data/test/unit/lib/tasks/search_task_definition_test.rb +49 -0
- data/test/unit/lib/tasks/stack_deploy_action_test.rb +83 -0
- data/test/unit/lib/tasks/wait_until_built_task_definition_test.rb +71 -0
- data/test/unit/lib/validation/dereference_visitor_test.rb +48 -0
- data/test/unit/lib/validation/remove_ids_visitor_test.rb +90 -0
- data/test/unit/lib/validation/validation_result_test.rb +40 -0
- data/test/unit/lib/validation/validation_visitor_test.rb +67 -0
- data/test/unit/model/configuration_test.rb +88 -0
- data/test/unit/model/deployment_test.rb +159 -0
- data/test/unit/model/stack_test.rb +33 -0
- metadata +241 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
## Configuration resources
|
|
2
|
+
|
|
3
|
+

|
|
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
|
+

|
|
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
|