cloud-templates 0.1.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.
- checksums.yaml +7 -0
- data/.rubocop.yml +29 -0
- data/.simplecov +6 -0
- data/Gemfile +2 -0
- data/LICENSE +201 -0
- data/NOTICE +13 -0
- data/README.md +124 -0
- data/Rakefile +27 -0
- data/cloud-templates.gemspec +27 -0
- data/examples/lib/user_directory/artifacts/catalogized.rb +11 -0
- data/examples/lib/user_directory/artifacts/group.rb +37 -0
- data/examples/lib/user_directory/artifacts/ided.rb +11 -0
- data/examples/lib/user_directory/artifacts/organization.rb +17 -0
- data/examples/lib/user_directory/artifacts/pathed.rb +22 -0
- data/examples/lib/user_directory/artifacts/person.rb +20 -0
- data/examples/lib/user_directory/artifacts/team.rb +31 -0
- data/examples/lib/user_directory/artifacts/unit.rb +24 -0
- data/examples/lib/user_directory/artifacts/user.rb +29 -0
- data/examples/lib/user_directory/render/etc/artifact_view.rb +15 -0
- data/examples/lib/user_directory/render/etc/composite_view.rb +26 -0
- data/examples/lib/user_directory/render/etc/group_view.rb +23 -0
- data/examples/lib/user_directory/render/etc/person_view.rb +19 -0
- data/examples/lib/user_directory/render/etc/registry.rb +33 -0
- data/examples/lib/user_directory/render/etc/user_view.rb +35 -0
- data/examples/lib/user_directory/render/etc.rb +3 -0
- data/examples/lib/user_directory/render/ldap/artifact_view.rb +27 -0
- data/examples/lib/user_directory/render/ldap/composite_view.rb +32 -0
- data/examples/lib/user_directory/render/ldap/group_view.rb +28 -0
- data/examples/lib/user_directory/render/ldap/organization_view.rb +26 -0
- data/examples/lib/user_directory/render/ldap/person_view.rb +39 -0
- data/examples/lib/user_directory/render/ldap/registry.rb +16 -0
- data/examples/lib/user_directory/render/ldap/unit_view.rb +26 -0
- data/examples/lib/user_directory/render/ldap/user_view.rb +39 -0
- data/examples/lib/user_directory/render/ldap.rb +3 -0
- data/examples/lib/user_directory/utils.rb +18 -0
- data/examples/lib/user_directory.rb +23 -0
- data/examples/lib_path.rb +2 -0
- data/examples/spec/spec_helper.rb +1 -0
- data/examples/spec/user_directory_spec.rb +568 -0
- data/lib/aws/templates/artifact.rb +140 -0
- data/lib/aws/templates/composite.rb +178 -0
- data/lib/aws/templates/exceptions.rb +221 -0
- data/lib/aws/templates/render/registry.rb +60 -0
- data/lib/aws/templates/render/utils/base_type_views.rb +131 -0
- data/lib/aws/templates/render/view.rb +127 -0
- data/lib/aws/templates/render.rb +72 -0
- data/lib/aws/templates/utils/artifact_storage.rb +141 -0
- data/lib/aws/templates/utils/contextualized/filters.rb +437 -0
- data/lib/aws/templates/utils/contextualized/hash.rb +13 -0
- data/lib/aws/templates/utils/contextualized/nil.rb +13 -0
- data/lib/aws/templates/utils/contextualized/proc.rb +13 -0
- data/lib/aws/templates/utils/contextualized.rb +113 -0
- data/lib/aws/templates/utils/default.rb +185 -0
- data/lib/aws/templates/utils/dependency/enumerable.rb +13 -0
- data/lib/aws/templates/utils/dependency/object.rb +46 -0
- data/lib/aws/templates/utils/dependency.rb +121 -0
- data/lib/aws/templates/utils/dependent.rb +28 -0
- data/lib/aws/templates/utils/inheritable.rb +52 -0
- data/lib/aws/templates/utils/late_bound.rb +89 -0
- data/lib/aws/templates/utils/memoized.rb +27 -0
- data/lib/aws/templates/utils/named.rb +19 -0
- data/lib/aws/templates/utils/options.rb +279 -0
- data/lib/aws/templates/utils/parametrized/constraints.rb +423 -0
- data/lib/aws/templates/utils/parametrized/getters.rb +293 -0
- data/lib/aws/templates/utils/parametrized/guarded.rb +32 -0
- data/lib/aws/templates/utils/parametrized/mapper.rb +73 -0
- data/lib/aws/templates/utils/parametrized/nested.rb +72 -0
- data/lib/aws/templates/utils/parametrized/transformations.rb +660 -0
- data/lib/aws/templates/utils/parametrized.rb +240 -0
- data/lib/aws/templates/utils.rb +219 -0
- data/lib/aws/templates.rb +16 -0
- data/spec/aws/templates/artifact_spec.rb +161 -0
- data/spec/aws/templates/composite_spec.rb +361 -0
- data/spec/aws/templates/render/utils/base_type_views_spec.rb +104 -0
- data/spec/aws/templates/render_spec.rb +62 -0
- data/spec/aws/templates/utils/as_named_spec.rb +31 -0
- data/spec/aws/templates/utils/contextualized/filters_spec.rb +108 -0
- data/spec/aws/templates/utils/contextualized_spec.rb +115 -0
- data/spec/aws/templates/utils/late_bound_spec.rb +52 -0
- data/spec/aws/templates/utils/options_spec.rb +67 -0
- data/spec/aws/templates/utils/parametrized/constraint_spec.rb +175 -0
- data/spec/aws/templates/utils/parametrized/getters_spec.rb +139 -0
- data/spec/aws/templates/utils/parametrized/transformation_spec.rb +314 -0
- data/spec/aws/templates/utils/parametrized_spec.rb +241 -0
- data/spec/spec_helper.rb +6 -0
- metadata +244 -0
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'user_directory/render/etc/registry'
|
2
|
+
|
3
|
+
module UserDirectory
|
4
|
+
module Render
|
5
|
+
module Etc
|
6
|
+
##
|
7
|
+
# Basic render
|
8
|
+
#
|
9
|
+
# It just puts a link between children and type registrar
|
10
|
+
class ArtifactView < Aws::Templates::Render::View
|
11
|
+
register_in Render::Etc
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'aws/templates/composite'
|
2
|
+
require 'user_directory/render/etc/artifact_view'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module Etc
|
7
|
+
##
|
8
|
+
# Composite render
|
9
|
+
#
|
10
|
+
# It aggregates group and passwd entries from children and merges
|
11
|
+
# them into single entry
|
12
|
+
class CompositeView < ArtifactView
|
13
|
+
artifact Aws::Templates::Composite
|
14
|
+
|
15
|
+
def prepare
|
16
|
+
rendered_for(instance.artifacts.values)
|
17
|
+
.each_with_object(Diff.new([], [])) do |diff, memo|
|
18
|
+
memo.passwd.concat(diff.passwd)
|
19
|
+
memo.group.concat(diff.group)
|
20
|
+
memo
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'user_directory/render/etc/artifact_view'
|
2
|
+
|
3
|
+
module UserDirectory
|
4
|
+
module Render
|
5
|
+
module Etc
|
6
|
+
##
|
7
|
+
# POSIX group render
|
8
|
+
#
|
9
|
+
# Creates group file entry.
|
10
|
+
class GroupView < ArtifactView
|
11
|
+
artifact UserDirectory::Group
|
12
|
+
|
13
|
+
def prepare
|
14
|
+
Diff.new [], [group_record.join(':')]
|
15
|
+
end
|
16
|
+
|
17
|
+
def group_record
|
18
|
+
in_instance { [name, 'x', id, members.map(&:login).join(',')] }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'user_directory/render/etc/user_view'
|
2
|
+
|
3
|
+
module UserDirectory
|
4
|
+
module Render
|
5
|
+
module Etc
|
6
|
+
##
|
7
|
+
# Person render
|
8
|
+
#
|
9
|
+
# The same as POSIX user but with customized GECOS field.
|
10
|
+
class PersonView < UserView
|
11
|
+
artifact UserDirectory::Person
|
12
|
+
|
13
|
+
def user_info
|
14
|
+
in_instance { "#{cn},,#{phone}" }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'aws/templates/render/utils/base_type_views'
|
2
|
+
require 'aws/templates/render/view'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
module UserDirectory
|
6
|
+
module Render
|
7
|
+
##
|
8
|
+
# UNIX passwd/group render
|
9
|
+
#
|
10
|
+
# Transforms formed catalog artifacts into standard UNIX passwd/group
|
11
|
+
# representation.
|
12
|
+
module Etc
|
13
|
+
extend Aws::Templates::Render::Utils::BaseTypeViews
|
14
|
+
initialize_base_type_views
|
15
|
+
register Pathname, Aws::Templates::Render::Utils::BaseTypeViews::ToString
|
16
|
+
Diff = Struct.new(:passwd, :group)
|
17
|
+
|
18
|
+
##
|
19
|
+
# Diff view
|
20
|
+
#
|
21
|
+
# Creates Diff object out of the instance atached with recursively rendered passwd and group
|
22
|
+
# fields.
|
23
|
+
class DiffView < Aws::Templates::Render::BasicView
|
24
|
+
register_in Etc
|
25
|
+
artifact Diff
|
26
|
+
|
27
|
+
def to_rendered
|
28
|
+
Diff.new rendered_for(instance.passwd), rendered_for(instance.group)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'user_directory/render/etc/artifact_view'
|
2
|
+
require 'user_directory/artifacts/user'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module Etc
|
7
|
+
##
|
8
|
+
# POSIX user render
|
9
|
+
#
|
10
|
+
# It creates passwd file entry
|
11
|
+
class UserView < ArtifactView
|
12
|
+
artifact UserDirectory::User
|
13
|
+
|
14
|
+
def prepare
|
15
|
+
Diff.new [user_record.join(':')], []
|
16
|
+
end
|
17
|
+
|
18
|
+
def user_record
|
19
|
+
[
|
20
|
+
instance.login, 'x', instance.id, instance.group.id,
|
21
|
+
user_info, path_for(instance.home_directory), path_for(instance.shell)
|
22
|
+
]
|
23
|
+
end
|
24
|
+
|
25
|
+
def user_info
|
26
|
+
instance.login
|
27
|
+
end
|
28
|
+
|
29
|
+
def path_for(obj)
|
30
|
+
obj && obj.path
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'aws/templates/artifact'
|
2
|
+
require 'user_directory/render/ldap/registry'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# Basic render
|
9
|
+
#
|
10
|
+
# It just puts a link between children and type registrar
|
11
|
+
class ArtifactView < Aws::Templates::Render::View
|
12
|
+
register_in Render::LDAP
|
13
|
+
artifact Aws::Templates::Artifact
|
14
|
+
|
15
|
+
def prepare
|
16
|
+
{ dn: instance.dn, objectClass: object_class }
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def object_class
|
22
|
+
%w[top]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'aws/templates/composite'
|
2
|
+
require 'user_directory/render/ldap/registry'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# Composite render
|
9
|
+
#
|
10
|
+
# It aggregates LDIF entries from the children into a single list
|
11
|
+
# putting composite's own LDIF entry into the list head.
|
12
|
+
class CompositeView < Aws::Templates::Render::View
|
13
|
+
register_in Render::LDAP
|
14
|
+
artifact Aws::Templates::Composite
|
15
|
+
|
16
|
+
def prepare
|
17
|
+
rendered_for(instance.artifacts.values).flatten.unshift(entry)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def entry
|
23
|
+
{ dn: instance.dn, objectClass: object_class }
|
24
|
+
end
|
25
|
+
|
26
|
+
def object_class
|
27
|
+
%w[top]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'user_directory/render/ldap/artifact_view'
|
2
|
+
require 'user_directory/artifacts/group'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# POSIX group render
|
9
|
+
#
|
10
|
+
# Creates group LDIF entry.
|
11
|
+
class GroupView < ArtifactView
|
12
|
+
artifact UserDirectory::Group
|
13
|
+
|
14
|
+
def prepare
|
15
|
+
super().merge(
|
16
|
+
in_instance { { cn: cn, gidNumber: id, memberUid: members.map(&:login) } }
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def object_class
|
23
|
+
super() << 'posixGroup'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'user_directory/render/ldap/composite_view'
|
2
|
+
require 'user_directory/artifacts/organization'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# Catalog's organization render
|
9
|
+
#
|
10
|
+
# It renders into organization's LDIF entry with merged list of children.
|
11
|
+
class OrganizationView < CompositeView
|
12
|
+
artifact UserDirectory::Organization
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def entry
|
17
|
+
super().merge(o: instance.name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def object_class
|
21
|
+
super() << 'organization'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'user_directory/render/ldap/user_view'
|
2
|
+
require 'user_directory/artifacts/person'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# Person render
|
9
|
+
#
|
10
|
+
# It merges POSIX user entry with additional fields and object
|
11
|
+
# types valid for a real person.
|
12
|
+
class PersonView < UserView
|
13
|
+
artifact UserDirectory::Person
|
14
|
+
|
15
|
+
def prepare
|
16
|
+
hsh = in_instance do
|
17
|
+
hsh = {
|
18
|
+
gecos: "#{cn},,#{phone}",
|
19
|
+
givenName: given_name,
|
20
|
+
sn: last_name
|
21
|
+
}
|
22
|
+
|
23
|
+
hsh[:manager] = manager.dn if manager
|
24
|
+
|
25
|
+
hsh
|
26
|
+
end
|
27
|
+
|
28
|
+
super().merge(hsh)
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
def object_class
|
34
|
+
super().concat(%w[inetOrgPerson person])
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'aws/templates/render/utils/base_type_views'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
##
|
7
|
+
# LDIF render
|
8
|
+
#
|
9
|
+
# Transforms formed catalog artifacts into LDIF definition.
|
10
|
+
module LDAP
|
11
|
+
extend Aws::Templates::Render::Utils::BaseTypeViews
|
12
|
+
initialize_base_type_views
|
13
|
+
register Pathname, Aws::Templates::Render::Utils::BaseTypeViews::ToString
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'user_directory/render/ldap/composite_view'
|
2
|
+
require 'user_directory/artifacts/unit'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# Catalog's org unit render
|
9
|
+
#
|
10
|
+
# It renders into unit's LDIF entry with merged list of children.
|
11
|
+
class UnitView < CompositeView
|
12
|
+
artifact UserDirectory::Unit
|
13
|
+
|
14
|
+
protected
|
15
|
+
|
16
|
+
def entry
|
17
|
+
super().merge(ou: instance.name)
|
18
|
+
end
|
19
|
+
|
20
|
+
def object_class
|
21
|
+
super() << 'organizationalUnit'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'user_directory/render/ldap/artifact_view'
|
2
|
+
require 'user_directory/artifacts/user'
|
3
|
+
|
4
|
+
module UserDirectory
|
5
|
+
module Render
|
6
|
+
module LDAP
|
7
|
+
##
|
8
|
+
# POSIX user render
|
9
|
+
#
|
10
|
+
# It creates POSIX user LDIF entry
|
11
|
+
class UserView < ArtifactView
|
12
|
+
artifact UserDirectory::User
|
13
|
+
|
14
|
+
def prepare
|
15
|
+
super().merge(cn: instance.cn).merge(passwd_block)
|
16
|
+
end
|
17
|
+
|
18
|
+
def object_class
|
19
|
+
super() << 'posixAccount'
|
20
|
+
end
|
21
|
+
|
22
|
+
def passwd_block
|
23
|
+
{
|
24
|
+
uid: instance.login,
|
25
|
+
uidNumber: instance.id,
|
26
|
+
gidNumber: instance.group.id,
|
27
|
+
homeDirectory: path_for(instance.home_directory),
|
28
|
+
loginShell: path_for(instance.shell),
|
29
|
+
gecos: instance.login
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def path_for(obj)
|
34
|
+
obj && obj.path.to_s
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'aws/templates/utils/parametrized/constraints'
|
2
|
+
|
3
|
+
module UserDirectory
|
4
|
+
##
|
5
|
+
# Auxilliary utils
|
6
|
+
module Utils
|
7
|
+
##
|
8
|
+
# Custom constraint for phone number
|
9
|
+
#
|
10
|
+
# Checks if value passed is a valid phone number
|
11
|
+
def self.phone_number
|
12
|
+
Aws::Templates::Utils::Parametrized::Constraint::SatisfiesCondition
|
13
|
+
.new('Should be a valid phone number') do |phone|
|
14
|
+
phone =~ /^[+]?[0-9\-]+$/
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'user_directory/artifacts/user'
|
2
|
+
require 'user_directory/artifacts/person'
|
3
|
+
require 'user_directory/artifacts/group'
|
4
|
+
require 'user_directory/artifacts/unit'
|
5
|
+
require 'user_directory/artifacts/team'
|
6
|
+
require 'user_directory/artifacts/organization'
|
7
|
+
|
8
|
+
require 'user_directory/render/etc'
|
9
|
+
require 'user_directory/render/ldap'
|
10
|
+
|
11
|
+
##
|
12
|
+
# Example implementation of catalog
|
13
|
+
#
|
14
|
+
# This is a demonstration of how one could use the framework.
|
15
|
+
# In this example, we can render set of users and groups embedded
|
16
|
+
# into org structure into two principally different representations:
|
17
|
+
# * UNIX passwd/group files
|
18
|
+
# * LDIF definition
|
19
|
+
# It is important to emphasize that representations are rendered from
|
20
|
+
# the same logical source. It is an example of loosened MVC pattern
|
21
|
+
# used in the framework.
|
22
|
+
module UserDirectory
|
23
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'simplecov'
|