noc 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/bin/noc CHANGED
@@ -46,6 +46,9 @@ command :init do |c|
46
46
  when args[0] == "solo"
47
47
  puts "Init solo"
48
48
 
49
+ when args[0] == "repo"
50
+ system("git clone git://github.com/opscode/chef-repo.git #{args[1]}") unless args[1].nil?
51
+
49
52
  when args[0] == "users"
50
53
  users_dir = File.join(DATABAGS,"users")
51
54
  Dir.mkdir(users_dir) unless File.exists?(users_dir)
@@ -71,6 +74,7 @@ command :init do |c|
71
74
  %w[clusters users secrets].each do |b|
72
75
  system("knife data bag create #{b}")
73
76
  end
77
+
74
78
  when args[0] == "vagrant"
75
79
  # create vagrantfile
76
80
  if File.exists?(VAGRANTFILE) then
@@ -168,7 +172,6 @@ command :upload do |c|
168
172
  end
169
173
  system("knife data bag from file clusters #{$cluster[:id]}.json")
170
174
 
171
-
172
175
  when args[0] == "users"
173
176
  Dir.glob("data_bags/users/*.json").each do |f|
174
177
  system("knife data bag from file users #{File.basename(f)}")
@@ -209,7 +212,7 @@ pre do |global,command,options,args|
209
212
  STDERR.puts e.message
210
213
  # STDERR.puts "ERROR: No infrastructure .yml file provided."
211
214
  exit(-1)
212
- end
215
+ end unless command.names == "init" and args[0] == "repo"
213
216
 
214
217
  true
215
218
  end
data/lib/noc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Noc
2
- VERSION = '0.0.4'
2
+ VERSION = '0.0.5'
3
3
  end
@@ -0,0 +1,109 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+ #
4
+
5
+ # header
6
+ clusterfile = "<%= clusterfile %>"
7
+ begin
8
+ $cluster = YAML.load_file clusterfile
9
+ rescue Exception => e
10
+ STDERR.puts e.message
11
+ STDERR.puts "ERROR: Clusterfile not found: #{clusterfile}"
12
+ exit(-1)
13
+ end
14
+
15
+
16
+ # vagrant
17
+ Vagrant::Config.run do |config|
18
+
19
+ vm_defaults = proc do |cfg|
20
+ $cluster[:defaults][:vm].each do |k,v|
21
+ eval("cfg.vm.#{k} = \"#{v}\"")
22
+ end
23
+
24
+ $cluster[:defaults][:modifyvm].each do |k,v|
25
+ cfg.vm.customize ["modifyvm", :id, "--#{k}", "#{v}"]
26
+ end
27
+ end
28
+
29
+ # cluster
30
+ $cluster[:nodes].each do |node,opts|
31
+ puts "Load cluster node: #{node}"
32
+ config.vm.define node.to_s do |cfg|
33
+ vm_defaults[cfg]
34
+ # cpu and memory
35
+ if not opts[:cpus].nil? then
36
+ cfg.vm.customize ["modifyvm", :id, "--cpus", opts[:cpus]]
37
+ end
38
+ if not opts[:memory].nil? then
39
+ cfg.vm.customize ["modifyvm", :id, "--memory", opts[:memory]]
40
+ end
41
+
42
+ cfg.vm.host_name = node.to_s
43
+
44
+ # networking
45
+ if not opts[:hostonly].nil? then
46
+ cfg.vm.network :hostonly, opts[:hostonly]
47
+ end
48
+ if not opts[:bridged].nil? then
49
+ cfg.vm.network :bridged, opts[:bridged]
50
+ end
51
+
52
+ # forwarding
53
+ if not opts[:forward].nil? then
54
+ opts[:forward].each { |p| cfg.vm.forward_port p[0], p[1]}
55
+ end
56
+
57
+ if opts[:chef_client] then
58
+ orgname = $cluster[:knife][:node_name]
59
+
60
+ cfg.vm.provision :chef_client do |chef|
61
+ if $cluster[:knife][:server_url].nil? then
62
+ chef.chef_server_url = "https://api.opscode.com/organizations/#{orgname}"
63
+ else
64
+ chef.chef_server_url = $cluster[:knife][:server_url]
65
+ end
66
+
67
+ if $cluster[:knife][:client_name].nil? then
68
+ chef.validation_client_name = "#{orgname}-validator"
69
+ chef.validation_key_path = ".chef/#{orgname}-validator.pem"
70
+ else
71
+ chef.validation_client_name = $cluster[:knife][:client_name]
72
+ chef.validation_key_path = ".chef/#{$cluster[:knife][:client_name]}.pem"
73
+ end
74
+
75
+ chef.encrypted_data_bag_secret_key_path = ".chef/data_bag.key"
76
+ chef.node_name = node.to_s
77
+
78
+ if not $cluster[:knife][:log_level].nil? then
79
+ chef.log_level = $cluster[:knife][:log_level]
80
+ end
81
+ chef.environment = opts[:chef_client]
82
+
83
+ if not opts[:roles].nil? then
84
+ chef.run_list = opts[:roles]
85
+ end
86
+ end # :chef_client
87
+ else
88
+ cfg.vm.provision :chef_solo do |chef|
89
+ chef.cookbooks_path = opts[:cookbooks_path].nil? ? "cookbooks" : opts[:cookbooks_path]
90
+
91
+ chef.log_level = :debug
92
+
93
+ if not opts[:roles].nil? then
94
+ chef.run_list = opts[:roles]
95
+ end
96
+
97
+ # access from chef node[:]
98
+ chef.json = {
99
+ :cluster => $cluster,
100
+ :host => opts,
101
+ "chef_server" => opts[:chef_server]
102
+ }
103
+ end
104
+ end # :chef_solo
105
+
106
+ end # cfg
107
+ end # nodes
108
+
109
+ end
@@ -0,0 +1,12 @@
1
+ current_dir = File.dirname(__FILE__)
2
+ log_level :info
3
+ log_location STDOUT
4
+ node_name "<%= if not defined? node_name then 'localhost' else node_name end %>"
5
+ client_key "#{current_dir}/<%= if not defined? node_name then 'localhost' else node_name end %>.pem"
6
+ validation_client_name "<%= if not defined? client_name then 'localhost' else client_name end %>"
7
+ validation_key "#{current_dir}/<%= if not defined? client_name then 'localhost' else client_name end %>.pem"
8
+ chef_server_url "<%= if not defined? server_url then 'http://localhost:4000' else server_url end %>"
9
+ cache_type 'BasicFile'
10
+ cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
11
+ cookbook_path ["#{current_dir}/../cookbooks"]
12
+ encrypted_data_bag_secret "#{current_dir}/data_bag.key"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: noc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -119,6 +119,8 @@ files:
119
119
  - bin/noc
120
120
  - lib/noc/version.rb
121
121
  - lib/noc.rb
122
+ - templates/Vagrantfile.erb
123
+ - templates/knife.rb.erb
122
124
  - README.rdoc
123
125
  - noc.rdoc
124
126
  homepage: http://your.website.com