cloud-templates 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|