houcho 0.0.6 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -1
  3. data/Gemfile.lock +32 -0
  4. data/bin/houcho +3 -262
  5. data/houcho.gemspec +2 -1
  6. data/lib/houcho/attribute.rb +99 -0
  7. data/lib/houcho/ci.rb +18 -13
  8. data/lib/houcho/cli/attribute.rb +70 -0
  9. data/lib/houcho/cli/host.rb +46 -0
  10. data/lib/houcho/cli/outerrole.rb +53 -0
  11. data/lib/houcho/cli/role.rb +69 -0
  12. data/lib/houcho/cli/spec.rb +103 -0
  13. data/lib/houcho/cli.rb +52 -0
  14. data/lib/houcho/config.rb +28 -0
  15. data/lib/houcho/database.rb +99 -0
  16. data/lib/houcho/element.rb +79 -50
  17. data/lib/houcho/host.rb +30 -9
  18. data/lib/houcho/outerrole/cloudforecast.rb +94 -0
  19. data/{templates/role/cf_roles.yaml → lib/houcho/outerrole/yabitz.rb} +0 -0
  20. data/lib/houcho/outerrole.rb +52 -0
  21. data/lib/houcho/repository.rb +59 -0
  22. data/lib/houcho/role.rb +78 -91
  23. data/lib/houcho/spec/runner.rb +156 -85
  24. data/lib/houcho/spec.rb +72 -3
  25. data/lib/houcho/version.rb +1 -1
  26. data/lib/houcho.rb +10 -52
  27. data/spec/houcho_spec.rb +334 -91
  28. metadata +31 -22
  29. data/lib/houcho/cloudforecast/host.rb +0 -25
  30. data/lib/houcho/cloudforecast/role.rb +0 -25
  31. data/lib/houcho/cloudforecast.rb +0 -59
  32. data/lib/houcho/yamlhandle.rb +0 -31
  33. data/spec/spec_helper.rb +0 -15
  34. data/templates/conf/houcho.conf +0 -10
  35. data/templates/conf/kk.rb +0 -14
  36. data/templates/conf/rspec.conf +0 -1
  37. data/templates/master +0 -94
  38. data/templates/role/cloudforecast/.gitkeep +0 -0
  39. data/templates/role/cloudforecast.yaml +0 -0
  40. data/templates/role/hosts.yaml +0 -0
  41. data/templates/role/hosts_ignored.yaml +0 -0
  42. data/templates/role/roles.yaml +0 -0
  43. data/templates/role/specs.yaml +0 -0
  44. data/templates/spec/sample_spec.rb +0 -13
  45. data/templates/spec/spec_helper.rb +0 -29
@@ -1,25 +0,0 @@
1
- module Houcho
2
- module CloudForecast
3
- class Host
4
- def initialize
5
- @cf = YamlHandle::Loader.new('./role/cloudforecast.yaml')
6
- end
7
-
8
- def roles(host)
9
- @cf.data.select {|cfrole, cfhosts|cfhosts.include?(host)}.keys
10
- end
11
-
12
- def hosts(role)
13
- @cf.data[role] || []
14
- end
15
-
16
- def details(host)
17
- CloudForecast::Role.details(roles(host))
18
- end
19
-
20
- def all
21
- @cf.data.values.flatten.uniq
22
- end
23
- end
24
- end
25
- end
@@ -1,25 +0,0 @@
1
- module Houcho
2
- module CloudForecast
3
- class Role
4
- @elements = YamlHandle::Editor.new('./role/cf_roles.yaml')
5
- extend Element
6
-
7
- def self.details(cfroles)
8
- result = {}
9
- cfroles.each do |cfrole|
10
- hosts = CloudForecast::Host.new.hosts(cfrole)
11
- if ! hosts.empty?
12
- result[cfrole] = {}
13
- result[cfrole]['host'] = hosts
14
- end
15
- end
16
-
17
- result
18
- end
19
-
20
- def self.all
21
- YamlHandle::Loader.new('./role/cloudforecast.yaml').data.keys
22
- end
23
- end
24
- end
25
- end
@@ -1,59 +0,0 @@
1
- module Houcho
2
- module CloudForecast
3
- module_function
4
-
5
- def load_yaml
6
- yaml_file = Tempfile.new('yaml')
7
- File.open(yaml_file,'a') do |t|
8
- Find.find('./role/cloudforecast') do |f|
9
- t.write File.read(f) if f =~ /\.yaml$/
10
- end
11
- end
12
-
13
- role_hosts = {}
14
- elements = {}
15
- group = []
16
- File.open(yaml_file) do |f|
17
- f.each do |l|
18
- if l =~ /^---/
19
- if l =~ /^---\s+#(.+)$/
20
- group << $1.gsub(/\s/, '_')
21
- else
22
- group << 'NOGROUPNAME'
23
- end
24
- end
25
- end
26
- end
27
- File.open(yaml_file) do |f|
28
- i = 0
29
- YAML.load_documents(f) do |data|
30
- elements[group[i]] ||= []
31
- elements[group[i]].concat data['servers']
32
- i += 1
33
- end
34
- end
35
-
36
- elements.each do |groupname, data|
37
- current_label = 'NOCATEGORYNAME'
38
-
39
- data.each do |d|
40
- if ! d['label'].nil?
41
- label = d['label'].gsub(/\s/, '_')
42
- current_label = label if current_label != label
43
- end
44
-
45
- d['hosts'].map! do |host|
46
- host = host.split(' ')
47
- host = host.size == 1 ? host[0] : host[1]
48
- end
49
-
50
- r = groupname + '::' + current_label + '::' + d['config'].sub(/\.yaml$/, '')
51
- ary = (role_hosts[r] || []) | d['hosts']
52
- role_hosts[r] = ary.uniq
53
- end
54
- end
55
-
56
- File.write('./role/cloudforecast.yaml', role_hosts.to_yaml)
57
- end
58
- end
59
- end
@@ -1,31 +0,0 @@
1
- module Houcho
2
- module YamlHandle
3
- class Loader
4
- attr_reader :data
5
-
6
- def initialize(yaml_file)
7
- begin
8
- @data = YAML.load_file(yaml_file)
9
- rescue
10
- # I think it should describe the process when current directory has not ready for houcho
11
- end
12
- @data ||= {}
13
- end
14
- end
15
-
16
- class Editor < Loader
17
- attr_accessor :data
18
-
19
- def initialize(yaml_file)
20
- super
21
- @yaml_file = yaml_file
22
- end
23
-
24
- def save_to_file
25
- open(@yaml_file, 'w') do |f|
26
- YAML.dump(@data, f)
27
- end
28
- end
29
- end
30
- end
31
- end
data/spec/spec_helper.rb DELETED
@@ -1,15 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
- require 'rspec'
4
- require 'houcho'
5
- require 'tmpdir'
6
- require 'tempfile'
7
- require 'fileutils'
8
-
9
- # Requires supporting files with custom matchers and macros, etc,
10
- # in ./support/ and its subdirectories.
11
- Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
12
-
13
- RSpec.configure do |config|
14
-
15
- end
@@ -1,10 +0,0 @@
1
- ---
2
- ukigumo:
3
- host:
4
- port:
5
- ikachan:
6
- host:
7
- port:
8
- channel: []
9
- git:
10
- uri:
data/templates/conf/kk.rb DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- require 'yaml'
3
- File.write('./conf', {
4
- 'ukigumo' => {
5
- 'host' => nil,
6
- 'port' => nil,
7
- },
8
- 'ikachan' => {
9
- 'host' => nil,
10
- 'port' => nil,
11
- 'channel' => [],
12
- },
13
- 'git' => {'uri' => nil}
14
- }.to_yaml)
@@ -1 +0,0 @@
1
- --format documentation
data/templates/master DELETED
@@ -1,94 +0,0 @@
1
- module Houcho
2
- module Initialize
3
- %W{conf role/cloudforecast spec}.each do |d|
4
- FileUtils.mkdir_p d if ! Dir.exists? d
5
- end
6
-
7
- File.write('./role/cloudforecast/houcho_sample.yaml', <<EOH
8
- --- #houcho
9
- servers:
10
- - label: author
11
- config: studio3104
12
- hosts:
13
- - studio3104.test
14
- - studio3105.test
15
- - studio3106.test
16
- - studio3107.test
17
- - studio3108.test
18
- - studio3109.test
19
- - studio3110.test
20
- EOH
21
- ) if ! File.exists? './role/cloudforecast/houcho_sample.yaml'
22
-
23
- File.write('./spec/spec_helper.rb', <<EOH
24
- require 'serverspec'
25
- require 'pathname'
26
- require 'net/ssh'
27
-
28
- include Serverspec::Helper::Ssh
29
- include Serverspec::Helper::DetectOS
30
-
31
- RSpec.configure do |c|
32
- if ENV['ASK_SUDO_PASSWORD']
33
- require 'highline/import'
34
- c.sudo_password = ask("Enter sudo password: ") { |q| q.echo = false }
35
- else
36
- c.sudo_password = ENV['SUDO_PASSWORD']
37
- end
38
- c.before :all do
39
- block = self.class.metadata[:example_group_block]
40
- if RUBY_VERSION.start_with?('1.8')
41
- file = block.to_s.match(/.*@(.*):[0-9]+>/)[1]
42
- else
43
- file = block.source_location.first
44
- end
45
- c.ssh.close if c.ssh
46
- c.host = ENV['TARGET_HOST']
47
- options = Net::SSH::Config.for(c.host)
48
- user = options[:user] || Etc.getlogin
49
- c.ssh = Net::SSH.start(c.host, user, options)
50
- c.os = backend(Serverspec::Commands::Base).check_os
51
- end
52
- end
53
- EOH
54
- ) if ! File.exists? './spec/spec_helper.rb'
55
-
56
- File.write('./spec/houcho_sample_spec.rb', <<EOH
57
- require 'spec_helper'
58
-
59
- describe user('studio3104') do
60
- it { should exist }
61
- it { should have_uid 3104 }
62
- it { should have_home_directory '/home/studio3104' }
63
- it { should have_login_shell '/bin/zsh' }
64
- it { should belong_to_group 'studio3104' }
65
- end
66
- describe group('studio3104') do
67
- it { should exist }
68
- it { should have_gid 3104 }
69
- end
70
- EOH
71
- ) if ! File.exists? './spec/houcho_sample_spec.rb'
72
-
73
- File.write('./conf/houcho.conf', {
74
- 'ukigumo' => {'host' => nil, 'port' => nil,},
75
- 'ikachan' => {'host' => nil, 'port' => nil, 'channel' => [nil],},
76
- 'git' => {'uri' => nil,},
77
- }.to_yaml) if ! File.exists? './conf/houcho.conf'
78
-
79
- File.write('./conf/rspec.conf', '--format documentation') if ! File.exists? './conf/rspec.conf'
80
- File.symlink('./conf/rspec.conf', './.rspec') if ! File.exists? './.rspec'
81
-
82
- %w{
83
- runlists.yaml
84
- roles.yaml
85
- hosts.yaml
86
- specs.yaml
87
- cf_roles.yaml
88
- hosts_ignored.yaml
89
- cloudforecast.yaml
90
- }.each do |f|
91
- f = 'role/' + f
92
- File.write(f, '') if ! File.exists? f
93
- end
94
- end
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,13 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe user('studio3104') do
4
- it { should exist }
5
- it { should have_uid 3104 }
6
- it { should have_home_directory '/home/studio3104' }
7
- it { should have_login_shell '/bin/zsh' }
8
- it { should belong_to_group 'studio3104' }
9
- end
10
- describe group('studio3104') do
11
- it { should exist }
12
- it { should have_gid 3104 }
13
- end
@@ -1,29 +0,0 @@
1
- require 'serverspec'
2
- require 'pathname'
3
- require 'net/ssh'
4
-
5
- include Serverspec::Helper::Ssh
6
- include Serverspec::Helper::DetectOS
7
-
8
- RSpec.configure do |c|
9
- if ENV['ASK_SUDO_PASSWORD']
10
- require 'highline/import'
11
- c.sudo_password = ask("Enter sudo password: ") { |q| q.echo = false }
12
- else
13
- c.sudo_password = ENV['SUDO_PASSWORD']
14
- end
15
- c.before :all do
16
- block = self.class.metadata[:example_group_block]
17
- if RUBY_VERSION.start_with?('1.8')
18
- file = block.to_s.match(/.*@(.*):[0-9]+>/)[1]
19
- else
20
- file = block.source_location.first
21
- end
22
- c.ssh.close if c.ssh
23
- c.host = ENV['TARGET_HOST']
24
- options = Net::SSH::Config.for(c.host)
25
- user = options[:user] || Etc.getlogin
26
- c.ssh = Net::SSH.start(c.host, user, options)
27
- c.os = backend(Serverspec::Commands::Base).check_os
28
- end
29
- end