profig 0.01
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.
- data/bin/profig +36 -0
- data/lib/profig/config.rb +46 -0
- data/lib/profig/debian.rb +9 -0
- data/lib/profig/linux.rb +35 -0
- data/lib/profig/main.rb +43 -0
- data/lib/profig/ubuntu.rb +37 -0
- metadata +72 -0
data/bin/profig
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#! /usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
require 'profig/config'
|
6
|
+
require 'profig/main'
|
7
|
+
|
8
|
+
|
9
|
+
def parse_args()
|
10
|
+
options = {}
|
11
|
+
OptionParser.new do |opts|
|
12
|
+
opts.banner = 'Usage: profig'
|
13
|
+
|
14
|
+
opts.on('-d', '--directory DIR', 'Select directory') do |d|
|
15
|
+
options[:directory] = d
|
16
|
+
end
|
17
|
+
end.parse!
|
18
|
+
|
19
|
+
return options, ARGV
|
20
|
+
end
|
21
|
+
|
22
|
+
def main()
|
23
|
+
opts, args = parse_args()
|
24
|
+
p opts
|
25
|
+
p args
|
26
|
+
|
27
|
+
os = :ubuntu
|
28
|
+
dir = opts[:directory]
|
29
|
+
dir = '/var/lib/profig/conf.d' if dir.nil?
|
30
|
+
|
31
|
+
config = Profig.load_config(dir)
|
32
|
+
Profig.run(os, config)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
main()
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Profig
|
4
|
+
|
5
|
+
|
6
|
+
class Resource
|
7
|
+
attr_reader :name
|
8
|
+
attr_reader :opts
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
# Take an array of configs, and merge them into a single list
|
13
|
+
def self.merge_config(confs)
|
14
|
+
merge = {}
|
15
|
+
confs.each do |c|
|
16
|
+
c.each do |name, items|
|
17
|
+
if merge.has_key? name:
|
18
|
+
merge[name].concat(items)
|
19
|
+
else
|
20
|
+
merge[name] = items
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
return merge
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def self.load_config_yaml(directory)
|
29
|
+
files = Dir.glob("#{directory}/*")
|
30
|
+
confs = []
|
31
|
+
files.each do |f|
|
32
|
+
if File.file?(f)
|
33
|
+
confs << YAML.load_file(f)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
return confs
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def self.load_config(directory)
|
41
|
+
confs = load_config_yaml(directory)
|
42
|
+
return merge_config(confs)
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
end
|
data/lib/profig/linux.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Profig
|
5
|
+
|
6
|
+
|
7
|
+
def self.handle_linux_dir(name, opts)
|
8
|
+
FileUtils.mkdir_p(name)
|
9
|
+
if opts.has_key? 'owner'
|
10
|
+
owner, group = split_owner(opts['owner'])
|
11
|
+
FileUtils.chown(owner, group, name)
|
12
|
+
end
|
13
|
+
if opts.has_key? 'mode'
|
14
|
+
mode = opts['mode']
|
15
|
+
FileUtils.chmod(mode, name)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def self.split_owner(owner_str)
|
21
|
+
split_owner = owner_str.split(':')
|
22
|
+
owner, group = nil, nil
|
23
|
+
if split_owner.length == 1
|
24
|
+
owner = split_owner[0]
|
25
|
+
elsif split_owner[0].length == 0
|
26
|
+
group = split_owner[1]
|
27
|
+
else
|
28
|
+
owner = split_owner[0]
|
29
|
+
group = split_owner[1]
|
30
|
+
end
|
31
|
+
return owner, group
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
end # module
|
data/lib/profig/main.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'profig/ubuntu'
|
2
|
+
|
3
|
+
|
4
|
+
module Profig
|
5
|
+
|
6
|
+
|
7
|
+
def self.run_handler(handler, items)
|
8
|
+
items.each do |i|
|
9
|
+
if i.instance_of? String
|
10
|
+
name = i
|
11
|
+
opts = nil
|
12
|
+
else
|
13
|
+
name = i.keys[0]
|
14
|
+
opts = i[name]
|
15
|
+
end
|
16
|
+
handler.call(name, opts)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def self.run(os, config)
|
22
|
+
users_groups = `id -G`.split()
|
23
|
+
if not users_groups.include? "0"
|
24
|
+
# this should be made an exception at some point
|
25
|
+
puts "You must be root to run profig."
|
26
|
+
exit
|
27
|
+
end
|
28
|
+
|
29
|
+
config.each do |name, items|
|
30
|
+
handler_name = "handle_#{os}_#{name}"
|
31
|
+
|
32
|
+
if not Profig.respond_to? handler_name
|
33
|
+
puts "No #{name} handler for #{os}"
|
34
|
+
next
|
35
|
+
end
|
36
|
+
|
37
|
+
handler = method(handler_name)
|
38
|
+
run_handler(handler, items)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
|
43
|
+
end # module
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'profig/linux'
|
2
|
+
require 'profig/debian'
|
3
|
+
|
4
|
+
module Profig
|
5
|
+
|
6
|
+
|
7
|
+
def self.handle_ubuntu_group(group_name, opts)
|
8
|
+
if not group_name.instance_of? String
|
9
|
+
raise 'Unknown group definition'
|
10
|
+
end
|
11
|
+
|
12
|
+
cmd = "addgroup -q --system #{group_name}"
|
13
|
+
system(cmd)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.handle_ubuntu_user(user_name, opts)
|
17
|
+
if not user_name.instance_of? String
|
18
|
+
raise 'Unknown user type'
|
19
|
+
elsif not /[a-zA-Z][a-zA-Z0-9_]+/.match user_name
|
20
|
+
raise 'Invalid user format'
|
21
|
+
end
|
22
|
+
|
23
|
+
cmd = "adduser -q --system --no-create-home"
|
24
|
+
cmd += " --disabled-password --disabled-login #{user_name}"
|
25
|
+
system cmd
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.handle_ubuntu_deb(pkg_name, opts)
|
29
|
+
Profig.handle_debian_deb(pkg_name, opts)
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.handle_ubuntu_dir(name, opts)
|
33
|
+
Profig.handle_linux_dir(name, opts)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
end # module
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: profig
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 9
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: "0.01"
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Matthew Graham
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-09-23 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies: []
|
20
|
+
|
21
|
+
description: Push-modeled system configuration manager with limited feature set
|
22
|
+
email:
|
23
|
+
- mdg149@gmail.com
|
24
|
+
executables:
|
25
|
+
- profig
|
26
|
+
extensions: []
|
27
|
+
|
28
|
+
extra_rdoc_files: []
|
29
|
+
|
30
|
+
files:
|
31
|
+
- bin/profig
|
32
|
+
- lib/profig/debian.rb
|
33
|
+
- lib/profig/ubuntu.rb
|
34
|
+
- lib/profig/config.rb
|
35
|
+
- lib/profig/main.rb
|
36
|
+
- lib/profig/linux.rb
|
37
|
+
has_rdoc: true
|
38
|
+
homepage: http://github.com/mdg/profig
|
39
|
+
licenses: []
|
40
|
+
|
41
|
+
post_install_message:
|
42
|
+
rdoc_options: []
|
43
|
+
|
44
|
+
require_paths:
|
45
|
+
- lib
|
46
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
hash: 3
|
52
|
+
segments:
|
53
|
+
- 0
|
54
|
+
version: "0"
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.3.7
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Limited system configuration manager
|
71
|
+
test_files: []
|
72
|
+
|