chake 0.21 → 0.81.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/.ackrc +2 -0
  3. data/.gitignore +22 -0
  4. data/.gitlab-ci.yml +24 -0
  5. data/.manifest +65 -0
  6. data/.rubocop.yml +55 -0
  7. data/.rubocop_todo.yml +40 -0
  8. data/ChangeLog.md +37 -0
  9. data/README.chef.md +70 -0
  10. data/README.itamae.md +58 -0
  11. data/README.md +118 -85
  12. data/README.shell.md +30 -0
  13. data/Rakefile +36 -10
  14. data/bin/chake +2 -2
  15. data/chake.gemspec +16 -16
  16. data/examples/test/.ssh_config +4 -0
  17. data/examples/test/Rakefile +1 -1
  18. data/examples/test/Vagrantfile +6 -0
  19. data/examples/test/config.rb +4 -4
  20. data/examples/test/cookbooks/basics/recipes/default.rb +1 -0
  21. data/examples/test/cookbooks/example/files/default/test +1 -0
  22. data/examples/test/cookbooks/example/files/{host-homer → host-lemur}/test.asc +0 -0
  23. data/lib/chake.rb +111 -153
  24. data/lib/chake/bootstrap/chef/01_installed.sh +4 -0
  25. data/lib/chake/bootstrap/{01_debian.sh → chef/02_debian.sh} +0 -0
  26. data/lib/chake/bootstrap/{99_unsupported.sh → chef/99_unsupported.sh} +0 -0
  27. data/lib/chake/config.rb +2 -7
  28. data/lib/chake/config_manager.rb +89 -0
  29. data/lib/chake/config_manager/chef.rb +35 -0
  30. data/lib/chake/config_manager/itamae.rb +57 -0
  31. data/lib/chake/config_manager/shell.rb +34 -0
  32. data/lib/chake/config_manager/skel/chef/Rakefile +1 -0
  33. data/lib/chake/config_manager/skel/chef/config.rb +4 -0
  34. data/lib/chake/config_manager/skel/chef/cookbooks/basics/recipes/default.rb +1 -0
  35. data/lib/chake/config_manager/skel/chef/nodes.yaml +3 -0
  36. data/lib/chake/config_manager/skel/itamae/Rakefile +1 -0
  37. data/lib/chake/config_manager/skel/itamae/cookbooks/basics/default.rb +1 -0
  38. data/lib/chake/config_manager/skel/itamae/nodes.yaml +3 -0
  39. data/lib/chake/config_manager/skel/itamae/roles/basic.rb +1 -0
  40. data/lib/chake/config_manager/skel/shell/Rakefile +1 -0
  41. data/lib/chake/config_manager/skel/shell/nodes.yaml +3 -0
  42. data/lib/chake/connection.rb +83 -0
  43. data/lib/chake/{backend → connection}/local.rb +2 -8
  44. data/lib/chake/{backend → connection}/ssh.rb +6 -14
  45. data/lib/chake/node.rb +49 -29
  46. data/lib/chake/readline.rb +6 -10
  47. data/lib/chake/version.rb +1 -1
  48. data/lib/chake/wipe.rb +18 -0
  49. data/man/.gitignore +2 -0
  50. data/man/Rakefile +28 -14
  51. data/man/readme2man.sed +5 -5
  52. data/spec/chake/backend/local_spec.rb +5 -6
  53. data/spec/chake/backend/ssh_spec.rb +8 -10
  54. data/spec/chake/backend_spec.rb +1 -2
  55. data/spec/chake/config_manager/chef_spec.rb +38 -0
  56. data/spec/chake/config_manager/itamae_spec.rb +87 -0
  57. data/spec/chake/config_manager/shell_spec.rb +54 -0
  58. data/spec/chake/config_manager_spec.rb +23 -0
  59. data/spec/chake/node_spec.rb +38 -15
  60. data/spec/spec_helper.rb +37 -17
  61. metadata +65 -39
  62. data/coverage/assets/0.11.0/application.css +0 -809
  63. data/coverage/assets/0.11.0/application.js +0 -43679
  64. data/coverage/assets/0.11.0/colorbox/border.png +0 -0
  65. data/coverage/assets/0.11.0/colorbox/controls.png +0 -0
  66. data/coverage/assets/0.11.0/colorbox/loading.gif +0 -0
  67. data/coverage/assets/0.11.0/colorbox/loading_background.png +0 -0
  68. data/coverage/assets/0.11.0/favicon_green.png +0 -0
  69. data/coverage/assets/0.11.0/favicon_red.png +0 -0
  70. data/coverage/assets/0.11.0/favicon_yellow.png +0 -0
  71. data/coverage/assets/0.11.0/loading.gif +0 -0
  72. data/coverage/assets/0.11.0/magnify.png +0 -0
  73. data/coverage/assets/0.11.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  74. data/coverage/assets/0.11.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  75. data/coverage/assets/0.11.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  76. data/coverage/assets/0.11.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  77. data/coverage/assets/0.11.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  78. data/coverage/assets/0.11.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  79. data/coverage/assets/0.11.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  80. data/coverage/assets/0.11.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  81. data/coverage/assets/0.11.0/smoothness/images/ui-icons_222222_256x240.png +0 -0
  82. data/coverage/assets/0.11.0/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
  83. data/coverage/assets/0.11.0/smoothness/images/ui-icons_454545_256x240.png +0 -0
  84. data/coverage/assets/0.11.0/smoothness/images/ui-icons_888888_256x240.png +0 -0
  85. data/coverage/assets/0.11.0/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
  86. data/coverage/index.html +0 -4158
  87. data/lib/chake/backend.rb +0 -80
  88. data/tags +0 -72
@@ -0,0 +1,54 @@
1
+ require 'chake/node'
2
+ require 'chake/config_manager'
3
+ require 'chake/config_manager/shell'
4
+
5
+ describe Chake::ConfigManager::Shell do |_c|
6
+ let(:node) do
7
+ Chake::Node.new('foobar').tap do |n|
8
+ allow(n).to receive(:path).and_return(nil)
9
+ end
10
+ end
11
+ it 'accepts node with explicit config_manager in data' do
12
+ node.data['config_manager'] = 'shell'
13
+ expect(Chake::ConfigManager.get(node)).to be_a(Chake::ConfigManager::Shell)
14
+ end
15
+ it 'accepts node with `shell` in data' do
16
+ node.data['shell'] = ['date']
17
+ expect(Chake::ConfigManager.get(node)).to be_a(Chake::ConfigManager::Shell)
18
+ end
19
+
20
+ let(:subject) { Chake::ConfigManager::Shell.new(node) }
21
+
22
+ it 'calls all shell commands on converge' do
23
+ node.data['shell'] = %w[date true]
24
+ expect(node).to receive(:run_as_root).with("sh -xec 'date && true'")
25
+ subject.converge
26
+ end
27
+
28
+ it 'changes to node path to run commands' do
29
+ node.data['shell'] = %w[true]
30
+ allow(node).to receive(:path).and_return('/foo')
31
+ expect(node).to receive(:run_as_root).with("sh -xec 'cd /foo && true'")
32
+ subject.converge
33
+ end
34
+
35
+ it 'calls given shell command on apply' do
36
+ node.data['shell'] = %w[date true]
37
+ expect(node).to receive(:run_as_root).with("sh -xec 'reboot'")
38
+ subject.apply('reboot')
39
+ end
40
+
41
+ it 'hides output on converge in silent mode' do
42
+ node.data['shell'] = ['date']
43
+ node.silent = true
44
+ expect(node).to receive(:run_as_root).with("sh -ec 'date' >/dev/null")
45
+ subject.converge
46
+ end
47
+
48
+ it 'hides output on apply in silent mode' do
49
+ node.data['shell'] = ['date']
50
+ node.silent = true
51
+ expect(node).to receive(:run_as_root).with("sh -ec 'reboot' >/dev/null")
52
+ subject.apply('reboot')
53
+ end
54
+ end
@@ -0,0 +1,23 @@
1
+ require 'pathname'
2
+ require 'chake/node'
3
+ require 'chake/config_manager'
4
+
5
+ describe Chake::ConfigManager do
6
+ subject { Chake::ConfigManager.new(Chake::Node.new('ssh://user@hostname.tld')) }
7
+ it 'provides a path' do
8
+ allow(subject).to receive(:name).and_return('xyz')
9
+ expect(subject.path).to eq('/var/tmp/xyz.user')
10
+ end
11
+
12
+ it 'provides bootstrap scripts' do
13
+ bootstrap_steps = subject.bootstrap_steps
14
+ expect(bootstrap_steps).to_not be_empty
15
+ bootstrap_steps.each do |path|
16
+ expect(Pathname(path)).to exist
17
+ end
18
+ end
19
+
20
+ it 'requires uploading by default' do
21
+ expect(subject.needs_upload?).to eq(true)
22
+ end
23
+ end
@@ -1,7 +1,6 @@
1
1
  require 'chake/node'
2
2
 
3
3
  describe Chake::Node do
4
-
5
4
  before do
6
5
  ent = double
7
6
  allow(ent).to receive(:name).and_return('jonhdoe')
@@ -10,23 +9,24 @@ describe Chake::Node do
10
9
 
11
10
  let(:simple) { Chake::Node.new('hostname') }
12
11
  it('has a name') { expect(simple.hostname).to eq('hostname') }
13
- it('uses ssh by default') { expect(simple.backend).to be_an_instance_of(Chake::Backend::Ssh) }
12
+ it('uses ssh by default') { expect(simple.connection).to be_an_instance_of(Chake::Connection::Ssh) }
14
13
  it('user current username by default') {
15
14
  expect(simple.username).to eq('jonhdoe')
16
15
  }
17
- it('writes to /var/tmp/chef.$username') {
18
- expect(simple.path).to eq('/var/tmp/chef.jonhdoe')
16
+ it('writes to specified path') {
17
+ node = Chake::Node.new('ssh://host.tld/path/to/config')
18
+ expect(node.path).to eq('/path/to/config')
19
19
  }
20
20
 
21
21
  let(:with_username) { Chake::Node.new('username@hostname') }
22
22
  it('accepts username') { expect(with_username.username).to eq('username') }
23
- it('uses ssh') { expect(with_username.backend).to be_an_instance_of(Chake::Backend::Ssh) }
23
+ it('uses ssh') { expect(with_username.connection).to be_an_instance_of(Chake::Connection::Ssh) }
24
24
 
25
- let(:with_backend) { Chake::Node.new('local://hostname')}
26
- it('accepts backend as URI scheme') { expect(with_backend.backend).to be_an_instance_of(Chake::Backend::Local) }
25
+ let(:with_connection) { Chake::Node.new('local://hostname') }
26
+ it('accepts connection as URI scheme') { expect(with_connection.connection).to be_an_instance_of(Chake::Connection::Local) }
27
27
 
28
- it('wont accept any backend') do
29
- expect { Chake::Node.new('foobar://bazqux').backend }.to raise_error(ArgumentError)
28
+ it('wont accept any connection') do
29
+ expect { Chake::Node.new('foobar://bazqux').connection }.to raise_error(ArgumentError)
30
30
  end
31
31
 
32
32
  let(:with_data) { Chake::Node.new('local://localhost', 'run_list' => ['recipe[common]']) }
@@ -42,20 +42,43 @@ describe Chake::Node do
42
42
  let(:with_port_but_no_scheme) { Chake::Node.new('foo.bar.com:2222') }
43
43
  it('accepts a port specification without a scheme') do
44
44
  expect(with_port_but_no_scheme.port).to eq(2222)
45
- expect(with_port_but_no_scheme.backend.to_s).to eq('ssh')
45
+ expect(with_port_but_no_scheme.connection.to_s).to eq('ssh')
46
46
  end
47
47
 
48
- [:run, :run_as_root, :rsync_dest].each do |method|
49
- it("delegates #{method} to backend") do
48
+ %i[run run_as_root rsync_dest].each do |method|
49
+ it("delegates #{method} to connection") do
50
50
  node = simple
51
51
 
52
- backend = double
52
+ connection = double
53
53
  args = Object.new
54
- allow(node).to receive(:backend).and_return(backend)
54
+ allow(node).to receive(:connection).and_return(connection)
55
55
 
56
- expect(backend).to receive(method).with(args)
56
+ expect(connection).to receive(method).with(args)
57
57
  node.send(method, args)
58
58
  end
59
59
  end
60
60
 
61
+ it 'delegates converge to config_manager' do
62
+ node = simple
63
+ expect(node.config_manager).to receive(:converge)
64
+ node.converge
65
+ end
66
+
67
+ it 'delegates apply to config_manager' do
68
+ node = simple
69
+ expect(node.config_manager).to receive(:apply).with('myrecipe')
70
+ node.apply('myrecipe')
71
+ end
72
+
73
+ it 'falls back to writing to path specified by config manager' do
74
+ expect(simple.path).to eq(simple.config_manager.path)
75
+ end
76
+
77
+ it 'calculates max node name length' do
78
+ Chake::Node.max_node_name_length = 0
79
+ Chake::Node.new('foobar')
80
+ expect(Chake::Node.max_node_name_length).to eq(6)
81
+ Chake::Node.new('foobarbaz')
82
+ expect(Chake::Node.max_node_name_length).to eq(9)
83
+ end
61
84
  end
@@ -1,44 +1,64 @@
1
1
  begin
2
2
  require 'simplecov'
3
- SimpleCov.start
3
+ SimpleCov.start do
4
+ minimum_coverage 35.3
5
+ track_files 'lib/**/*.rb'
6
+ add_filter %r{^/spec/}
7
+ add_filter %r{^/lib/chake/config_manager/skel/}
8
+ end
4
9
  rescue LoadError
5
10
  puts "W: simplecov not installed, we won't have a coverage report"
6
11
  end
7
12
 
8
13
  require 'chake/node'
9
- require 'chake/backend'
14
+ require 'chake/connection'
10
15
 
11
16
  require 'rspec/version'
12
17
  if RSpec::Version::STRING < '2.14'
13
- puts "Skipping tests, need RSpec >= 2.14"
18
+ puts 'Skipping tests, need RSpec >= 2.14'
14
19
  exit
15
20
  end
16
21
 
17
- shared_examples "Chake::Backend" do |backend_class|
18
-
19
- let(:backend) { backend_class.new(node) }
22
+ shared_examples 'Chake::Connection' do |connection_class|
23
+ let(:connection) { connection_class.new(node) }
20
24
 
21
25
  it('runs commands') do
22
- io = StringIO.new("line 1\nline 2\n")
23
- expect(IO).to receive(:popen).with(backend.command_runner + ['/bin/sh'], mode='w+', Hash).and_return(io)
26
+ io = StringIO.new("line 1\n line 2\n")
27
+ expect(IO).to receive(:popen).with(connection.command_runner + ['/bin/sh'], 'w+', Hash).and_return(io)
24
28
  expect(io).to receive(:write).with('something').ordered
25
29
  expect(io).to receive(:close_write).ordered
26
- expect(backend).to receive(:printf).with(anything, "myhost", "something")
27
- expect(backend).to receive(:printf).with(anything, "myhost", "line 1")
28
- expect(backend).to receive(:printf).with(anything, "myhost", "line 2")
29
- backend.run('something')
30
+ expect(node).to receive(:log).with('$ something')
31
+ expect(node).to receive(:log).with('line 1')
32
+ expect(node).to receive(:log).with(' line 2')
33
+ connection.run('something')
30
34
  end
31
35
 
32
36
  it('runs as root') do
33
- expect(backend).to receive(:run).with('sudo something')
34
- backend.run_as_root('something')
37
+ expect(connection).to receive(:run).with('sudo something')
38
+ connection.run_as_root('something')
35
39
  end
36
40
 
37
41
  it('does not use sudo if already root') do
38
- allow(backend.node).to receive(:remote_username).and_return('root')
39
- expect(backend).to receive(:run).with('something')
40
- backend.run_as_root('something')
42
+ allow(connection.node).to receive(:remote_username).and_return('root')
43
+ expect(connection).to receive(:run).with('something')
44
+ connection.run_as_root('something')
41
45
  end
46
+ end
42
47
 
48
+ module Helpers
49
+ def silence(stream)
50
+ orig_stream = stream.clone
51
+ begin
52
+ File.open('/dev/null', 'w') do |f|
53
+ stream.reopen(f)
54
+ yield
55
+ end
56
+ ensure
57
+ stream.reopen(orig_stream)
58
+ end
59
+ end
43
60
  end
44
61
 
62
+ RSpec.configure do |c|
63
+ c.include Helpers
64
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chake
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.21'
4
+ version: 0.81.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Antonio Terceiro
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-22 00:00:00.000000000 Z
11
+ date: 2020-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ronn-ng
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: rspec
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -39,7 +53,7 @@ dependencies:
39
53
  - !ruby/object:Gem::Version
40
54
  version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: simplecov
56
+ name: rubocop
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - ">="
@@ -53,19 +67,19 @@ dependencies:
53
67
  - !ruby/object:Gem::Version
54
68
  version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: asciidoctor
70
+ name: simplecov
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - ">="
60
74
  - !ruby/object:Gem::Version
61
- version: 1.5.5
75
+ version: '0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - ">="
67
81
  - !ruby/object:Gem::Version
68
- version: 1.5.5
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -92,63 +106,71 @@ executables:
92
106
  extensions: []
93
107
  extra_rdoc_files: []
94
108
  files:
109
+ - ".ackrc"
110
+ - ".gitignore"
111
+ - ".gitlab-ci.yml"
112
+ - ".manifest"
113
+ - ".rubocop.yml"
114
+ - ".rubocop_todo.yml"
95
115
  - ChangeLog.md
96
116
  - Gemfile
97
117
  - LICENSE.txt
118
+ - README.chef.md
119
+ - README.itamae.md
98
120
  - README.md
121
+ - README.shell.md
99
122
  - Rakefile
100
123
  - bin/chake
101
124
  - chake.gemspec
102
125
  - chake.spec.erb
103
- - coverage/assets/0.11.0/application.css
104
- - coverage/assets/0.11.0/application.js
105
- - coverage/assets/0.11.0/colorbox/border.png
106
- - coverage/assets/0.11.0/colorbox/controls.png
107
- - coverage/assets/0.11.0/colorbox/loading.gif
108
- - coverage/assets/0.11.0/colorbox/loading_background.png
109
- - coverage/assets/0.11.0/favicon_green.png
110
- - coverage/assets/0.11.0/favicon_red.png
111
- - coverage/assets/0.11.0/favicon_yellow.png
112
- - coverage/assets/0.11.0/loading.gif
113
- - coverage/assets/0.11.0/magnify.png
114
- - coverage/assets/0.11.0/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png
115
- - coverage/assets/0.11.0/smoothness/images/ui-bg_flat_75_ffffff_40x100.png
116
- - coverage/assets/0.11.0/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png
117
- - coverage/assets/0.11.0/smoothness/images/ui-bg_glass_65_ffffff_1x400.png
118
- - coverage/assets/0.11.0/smoothness/images/ui-bg_glass_75_dadada_1x400.png
119
- - coverage/assets/0.11.0/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png
120
- - coverage/assets/0.11.0/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png
121
- - coverage/assets/0.11.0/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png
122
- - coverage/assets/0.11.0/smoothness/images/ui-icons_222222_256x240.png
123
- - coverage/assets/0.11.0/smoothness/images/ui-icons_2e83ff_256x240.png
124
- - coverage/assets/0.11.0/smoothness/images/ui-icons_454545_256x240.png
125
- - coverage/assets/0.11.0/smoothness/images/ui-icons_888888_256x240.png
126
- - coverage/assets/0.11.0/smoothness/images/ui-icons_cd0a0a_256x240.png
127
- - coverage/index.html
126
+ - examples/test/.ssh_config
128
127
  - examples/test/Rakefile
128
+ - examples/test/Vagrantfile
129
129
  - examples/test/config.rb
130
- - examples/test/cookbooks/example/files/host-homer/test.asc
130
+ - examples/test/cookbooks/basics/recipes/default.rb
131
+ - examples/test/cookbooks/example/files/default/test
132
+ - examples/test/cookbooks/example/files/host-lemur/test.asc
131
133
  - examples/test/cookbooks/example/recipes/default.rb
132
134
  - lib/chake.rb
133
- - lib/chake/backend.rb
134
- - lib/chake/backend/local.rb
135
- - lib/chake/backend/ssh.rb
136
135
  - lib/chake/bootstrap/00_set_hostname.sh
137
- - lib/chake/bootstrap/01_debian.sh
138
- - lib/chake/bootstrap/99_unsupported.sh
136
+ - lib/chake/bootstrap/chef/01_installed.sh
137
+ - lib/chake/bootstrap/chef/02_debian.sh
138
+ - lib/chake/bootstrap/chef/99_unsupported.sh
139
139
  - lib/chake/config.rb
140
+ - lib/chake/config_manager.rb
141
+ - lib/chake/config_manager/chef.rb
142
+ - lib/chake/config_manager/itamae.rb
143
+ - lib/chake/config_manager/shell.rb
144
+ - lib/chake/config_manager/skel/chef/Rakefile
145
+ - lib/chake/config_manager/skel/chef/config.rb
146
+ - lib/chake/config_manager/skel/chef/cookbooks/basics/recipes/default.rb
147
+ - lib/chake/config_manager/skel/chef/nodes.yaml
148
+ - lib/chake/config_manager/skel/itamae/Rakefile
149
+ - lib/chake/config_manager/skel/itamae/cookbooks/basics/default.rb
150
+ - lib/chake/config_manager/skel/itamae/nodes.yaml
151
+ - lib/chake/config_manager/skel/itamae/roles/basic.rb
152
+ - lib/chake/config_manager/skel/shell/Rakefile
153
+ - lib/chake/config_manager/skel/shell/nodes.yaml
154
+ - lib/chake/connection.rb
155
+ - lib/chake/connection/local.rb
156
+ - lib/chake/connection/ssh.rb
140
157
  - lib/chake/node.rb
141
158
  - lib/chake/readline.rb
142
159
  - lib/chake/tmpdir.rb
143
160
  - lib/chake/version.rb
161
+ - lib/chake/wipe.rb
162
+ - man/.gitignore
144
163
  - man/Rakefile
145
164
  - man/readme2man.sed
146
165
  - spec/chake/backend/local_spec.rb
147
166
  - spec/chake/backend/ssh_spec.rb
148
167
  - spec/chake/backend_spec.rb
168
+ - spec/chake/config_manager/chef_spec.rb
169
+ - spec/chake/config_manager/itamae_spec.rb
170
+ - spec/chake/config_manager/shell_spec.rb
171
+ - spec/chake/config_manager_spec.rb
149
172
  - spec/chake/node_spec.rb
150
173
  - spec/spec_helper.rb
151
- - tags
152
174
  homepage: https://gitlab.com/terceiro/chake
153
175
  licenses:
154
176
  - MIT
@@ -168,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
168
190
  - !ruby/object:Gem::Version
169
191
  version: '0'
170
192
  requirements: []
171
- rubygems_version: 3.1.2
193
+ rubygems_version: 3.2.0.rc.2
172
194
  signing_key:
173
195
  specification_version: 4
174
196
  summary: serverless configuration management tool for chef
@@ -176,5 +198,9 @@ test_files:
176
198
  - spec/chake/backend/local_spec.rb
177
199
  - spec/chake/backend/ssh_spec.rb
178
200
  - spec/chake/backend_spec.rb
201
+ - spec/chake/config_manager/chef_spec.rb
202
+ - spec/chake/config_manager/itamae_spec.rb
203
+ - spec/chake/config_manager/shell_spec.rb
204
+ - spec/chake/config_manager_spec.rb
179
205
  - spec/chake/node_spec.rb
180
206
  - spec/spec_helper.rb
@@ -1,809 +0,0 @@
1
- /* -----------------------------------------------------------------------
2
-
3
-
4
- Blueprint CSS Framework 0.9
5
- http://blueprintcss.org
6
-
7
- * Copyright (c) 2007-Present. See LICENSE for more info.
8
- * See README for instructions on how to use Blueprint.
9
- * For credits and origins, see AUTHORS.
10
- * This is a compressed file. See the sources in the 'src' directory.
11
-
12
- ----------------------------------------------------------------------- */
13
-
14
- /* reset.css */
15
-
16
- html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, code, del, dfn, em, img, q, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, dialog, figure, footer, header, hgroup, nav, section {margin:0;padding:0;border:0;font-weight:inherit;font-style:inherit;font-size:100%;font-family:inherit;vertical-align:baseline;}
17
- article, aside, dialog, figure, footer, header, hgroup, nav, section {display:block;}
18
- body {line-height:1.5;}
19
- table {border-collapse:separate;border-spacing:0;}
20
- caption, th, td {text-align:left;font-weight:normal;}
21
- table, td, th {vertical-align:middle;}
22
- blockquote:before, blockquote:after, q:before, q:after {content:"";}
23
- blockquote, q {quotes:"" "";}
24
- a img {border:none;}
25
-
26
- /* typography.css */
27
- html {font-size:100.01%;}
28
- body {font-size:82%;color:#222;background:#fff;font-family:"Helvetica Neue", Arial, Helvetica, sans-serif;}
29
- h1, h2, h3, h4, h5, h6 {font-weight:normal;color:#111;}
30
- h1 {font-size:3em;line-height:1;margin-bottom:0.5em;}
31
- h2 {font-size:2em;margin-bottom:0.75em;}
32
- h3 {font-size:1.5em;line-height:1;margin-bottom:1em;}
33
- h4 {font-size:1.2em;line-height:1.25;margin-bottom:1.25em;}
34
- h5 {font-size:1em;font-weight:bold;margin-bottom:1.5em;}
35
- h6 {font-size:1em;font-weight:bold;}
36
- h1 img, h2 img, h3 img, h4 img, h5 img, h6 img {margin:0;}
37
- p {margin:0 0 1.5em;}
38
- p img.left {float:left;margin:1.5em 1.5em 1.5em 0;padding:0;}
39
- p img.right {float:right;margin:1.5em 0 1.5em 1.5em;}
40
- a:focus, a:hover {color:#000;}
41
- a {color:#009;text-decoration:underline;}
42
- blockquote {margin:1.5em;color:#666;font-style:italic;}
43
- strong {font-weight:bold;}
44
- em, dfn {font-style:italic;}
45
- dfn {font-weight:bold;}
46
- sup, sub {line-height:0;}
47
- abbr, acronym {border-bottom:1px dotted #666;}
48
- address {margin:0 0 1.5em;font-style:italic;}
49
- del {color:#666;}
50
- pre {margin:1.5em 0;white-space:pre;}
51
- pre, code, tt {font:1em 'andale mono', 'lucida console', monospace;line-height:1.5;}
52
- li ul, li ol {margin:0;}
53
- ul, ol {margin:0 1.5em 1.5em 0;padding-left:3.333em;}
54
- ul {list-style-type:disc;}
55
- ol {list-style-type:decimal;}
56
- dl {margin:0 0 1.5em 0;}
57
- dl dt {font-weight:bold;}
58
- dd {margin-left:1.5em;}
59
- table {margin-bottom:1.4em;width:100%;}
60
- th {font-weight:bold;}
61
- thead th {background:#c3d9ff;}
62
- th, td, caption {padding:4px 10px 4px 5px;}
63
- tr.even td {background:#efefef;}
64
- tfoot {font-style:italic;}
65
- caption {background:#eee;}
66
- .small {font-size:.8em;margin-bottom:1.875em;line-height:1.875em;}
67
- .large {font-size:1.2em;line-height:2.5em;margin-bottom:1.25em;}
68
- .hide {display:none;}
69
- .quiet {color:#666;}
70
- .loud {color:#000;}
71
- .highlight {background:#ff0;}
72
- .added {background:#060;color:#fff;}
73
- .removed {background:#900;color:#fff;}
74
- .first {margin-left:0;padding-left:0;}
75
- .last {margin-right:0;padding-right:0;}
76
- .top {margin-top:0;padding-top:0;}
77
- .bottom {margin-bottom:0;padding-bottom:0;}
78
-
79
- /* forms.css */
80
- label {font-weight:bold;}
81
- fieldset {padding:1.4em;margin:0 0 1.5em 0;border:1px solid #ccc;}
82
- legend {font-weight:bold;font-size:1.2em;}
83
- input[type=text], input[type=password], input.text, input.title, textarea, select {background-color:#fff;border:1px solid #bbb;}
84
- input[type=text]:focus, input[type=password]:focus, input.text:focus, input.title:focus, textarea:focus, select:focus {border-color:#666;}
85
- input[type=text], input[type=password], input.text, input.title, textarea, select {margin:0.5em 0;}
86
- input.text, input.title {width:300px;padding:5px;}
87
- input.title {font-size:1.5em;}
88
- textarea {width:390px;height:250px;padding:5px;}
89
- input[type=checkbox], input[type=radio], input.checkbox, input.radio {position:relative;top:.25em;}
90
- form.inline {line-height:3;}
91
- form.inline p {margin-bottom:0;}
92
- .error, .notice, .success {padding:.8em;margin-bottom:1em;border:2px solid #ddd;}
93
- .error {background:#FBE3E4;color:#8a1f11;border-color:#FBC2C4;}
94
- .notice {background:#FFF6BF;color:#514721;border-color:#FFD324;}
95
- .success {background:#E6EFC2;color:#264409;border-color:#C6D880;}
96
- .error a {color:#8a1f11;}
97
- .notice a {color:#514721;}
98
- .success a {color:#264409;}
99
- .box {padding:1.5em;margin-bottom:1.5em;background:#E5ECF9;}
100
- hr {background:#ddd;color:#ddd;clear:both;float:none;width:100%;height:.1em;margin:0 0 1.45em;border:none;}
101
- hr.space {background:#fff;color:#fff;visibility:hidden;}
102
- .clearfix:after, .container:after {content:"\0020";display:block;height:0;clear:both;visibility:hidden;overflow:hidden;}
103
- .clearfix, .container {display:block;}
104
- .clear {clear:both;}
105
- /*
106
- github.com style (c) Vasily Polovnyov <vast@whiteants.net>
107
- */
108
-
109
-
110
- pre code {
111
- }
112
-
113
- pre .comment,
114
- pre .template_comment,
115
- pre .diff .header,
116
- pre .javadoc {
117
- color: #998;
118
- font-style: italic
119
- }
120
-
121
- pre .keyword,
122
- pre .css .rule .keyword,
123
- pre .winutils,
124
- pre .javascript .title,
125
- pre .lisp .title {
126
- color: #000;
127
- font-weight: bold
128
- }
129
-
130
- pre .number,
131
- pre .hexcolor {
132
- color: #458
133
- }
134
-
135
-
136
- pre .string,
137
- pre .tag .value,
138
- pre .phpdoc,
139
- pre .tex .formula {
140
- color: #d14
141
- }
142
-
143
- pre .subst {
144
- color: #712;
145
- }
146
-
147
- pre .constant,
148
- pre .title,
149
- pre .id {
150
- color: #900;
151
- font-weight: bold
152
- }
153
-
154
- pre .javascript .title,
155
- pre .lisp .title,
156
- pre .subst {
157
- font-weight: normal
158
- }
159
-
160
- pre .class .title,
161
- pre .haskell .label,
162
- pre .tex .command {
163
- color: #458;
164
- font-weight: bold
165
- }
166
-
167
- pre .tag,
168
- pre .tag .title,
169
- pre .rules .property,
170
- pre .django .tag .keyword {
171
- color: #000080;
172
- font-weight: normal
173
- }
174
-
175
- pre .attribute,
176
- pre .variable,
177
- pre .instancevar,
178
- pre .lisp .body {
179
- color: #008080
180
- }
181
-
182
- pre .regexp {
183
- color: #009926
184
- }
185
-
186
- pre .class {
187
- color: #458;
188
- font-weight: bold
189
- }
190
-
191
- pre .symbol,
192
- pre .ruby .symbol .string,
193
- pre .ruby .symbol .keyword,
194
- pre .ruby .symbol .keymethods,
195
- pre .lisp .keyword,
196
- pre .tex .special,
197
- pre .input_number {
198
- color: #990073
199
- }
200
-
201
- pre .builtin,
202
- pre .built_in,
203
- pre .lisp .title {
204
- color: #0086b3
205
- }
206
-
207
- pre .preprocessor,
208
- pre .pi,
209
- pre .doctype,
210
- pre .shebang,
211
- pre .cdata {
212
- color: #999;
213
- font-weight: bold
214
- }
215
-
216
- pre .deletion {
217
- background: #fdd
218
- }
219
-
220
- pre .addition {
221
- background: #dfd
222
- }
223
-
224
- pre .diff .change {
225
- background: #0086b3
226
- }
227
-
228
- pre .chunk {
229
- color: #aaa
230
- }
231
-
232
- pre .tex .formula {
233
- opacity: 0.5;
234
- }
235
- /*
236
- * jQuery UI CSS Framework @VERSION
237
- *
238
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
239
- * Dual licensed under the MIT or GPL Version 2 licenses.
240
- * http://jquery.org/license
241
- *
242
- * http://docs.jquery.com/UI/Theming/API
243
- */
244
-
245
- /* Layout helpers
246
- ----------------------------------*/
247
-
248
- .ui-helper-hidden { display: none; }
249
- .ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
250
- .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
251
- .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
252
- .ui-helper-clearfix { display: inline-block; }
253
- /* required comment for clearfix to work in Opera \*/
254
- * html .ui-helper-clearfix { height:1%; }
255
- .ui-helper-clearfix { display:block; }
256
- /* end clearfix */
257
- .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
258
-
259
-
260
- /* Interaction Cues
261
- ----------------------------------*/
262
- .ui-state-disabled { cursor: default !important; }
263
-
264
-
265
- /* Icons
266
- ----------------------------------*/
267
-
268
- /* states and images */
269
- .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
270
-
271
-
272
- /* Misc visuals
273
- ----------------------------------*/
274
-
275
- /* Overlays */
276
- .ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
277
-
278
-
279
- /*
280
- * jQuery UI CSS Framework @VERSION
281
- *
282
- * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
283
- * Dual licensed under the MIT or GPL Version 2 licenses.
284
- * http://jquery.org/license
285
- *
286
- * http://docs.jquery.com/UI/Theming/API
287
- *
288
- * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Verdana,Arial,sans-serif&fwDefault=normal&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=cccccc&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=75&borderColorHeader=aaaaaa&fcHeader=222222&iconColorHeader=222222&bgColorContent=ffffff&bgTextureContent=01_flat.png&bgImgOpacityContent=75&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=222222&bgColorDefault=e6e6e6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=75&borderColorDefault=d3d3d3&fcDefault=555555&iconColorDefault=888888&bgColorHover=dadada&bgTextureHover=02_glass.png&bgImgOpacityHover=75&borderColorHover=999999&fcHover=212121&iconColorHover=454545&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=aaaaaa&fcActive=212121&iconColorActive=454545&bgColorHighlight=fbf9ee&bgTextureHighlight=02_glass.png&bgImgOpacityHighlight=55&borderColorHighlight=fcefa1&fcHighlight=363636&iconColorHighlight=2e83ff&bgColorError=fef1ec&bgTextureError=02_glass.png&bgImgOpacityError=95&borderColorError=cd0a0a&fcError=cd0a0a&iconColorError=cd0a0a&bgColorOverlay=aaaaaa&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=aaaaaa&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=30&thicknessShadow=8px&offsetTopShadow=-8px&offsetLeftShadow=-8px&cornerRadiusShadow=8px
289
- */
290
-
291
-
292
- /* Component containers
293
- ----------------------------------*/
294
- .ui-widget { font-family: Verdana,Arial,sans-serif; font-size: 1.1em; }
295
- .ui-widget .ui-widget { font-size: 1em; }
296
- .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Verdana,Arial,sans-serif; font-size: 1em; }
297
- .ui-widget-content { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50% repeat-x; color: #222222; }
298
- .ui-widget-content a { color: #222222; }
299
- .ui-widget-header { border: 1px solid #aaaaaa; background: #cccccc url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x; color: #222222; font-weight: bold; }
300
- .ui-widget-header a { color: #222222; }
301
-
302
- /* Interaction states
303
- ----------------------------------*/
304
- .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #d3d3d3; background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #555555; }
305
- .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #555555; text-decoration: none; }
306
- .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #999999; background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
307
- .ui-state-hover a, .ui-state-hover a:hover { color: #212121; text-decoration: none; }
308
- .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #aaaaaa; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: normal; color: #212121; }
309
- .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #212121; text-decoration: none; }
310
- .ui-widget :active { outline: none; }
311
-
312
- /* Interaction Cues
313
- ----------------------------------*/
314
- .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fcefa1; background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50% repeat-x; color: #363636; }
315
- .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
316
- .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50% repeat-x; color: #cd0a0a; }
317
- .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; }
318
- .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; }
319
- .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
320
- .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
321
- .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
322
-
323
- /* Icons
324
- ----------------------------------*/
325
-
326
- /* states and images */
327
- .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
328
- .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
329
- .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
330
- .ui-state-default .ui-icon { background-image: url(images/ui-icons_888888_256x240.png); }
331
- .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
332
- .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); }
333
- .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_2e83ff_256x240.png); }
334
- .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_cd0a0a_256x240.png); }
335
-
336
- /* positioning */
337
- .ui-icon-carat-1-n { background-position: 0 0; }
338
- .ui-icon-carat-1-ne { background-position: -16px 0; }
339
- .ui-icon-carat-1-e { background-position: -32px 0; }
340
- .ui-icon-carat-1-se { background-position: -48px 0; }
341
- .ui-icon-carat-1-s { background-position: -64px 0; }
342
- .ui-icon-carat-1-sw { background-position: -80px 0; }
343
- .ui-icon-carat-1-w { background-position: -96px 0; }
344
- .ui-icon-carat-1-nw { background-position: -112px 0; }
345
- .ui-icon-carat-2-n-s { background-position: -128px 0; }
346
- .ui-icon-carat-2-e-w { background-position: -144px 0; }
347
- .ui-icon-triangle-1-n { background-position: 0 -16px; }
348
- .ui-icon-triangle-1-ne { background-position: -16px -16px; }
349
- .ui-icon-triangle-1-e { background-position: -32px -16px; }
350
- .ui-icon-triangle-1-se { background-position: -48px -16px; }
351
- .ui-icon-triangle-1-s { background-position: -64px -16px; }
352
- .ui-icon-triangle-1-sw { background-position: -80px -16px; }
353
- .ui-icon-triangle-1-w { background-position: -96px -16px; }
354
- .ui-icon-triangle-1-nw { background-position: -112px -16px; }
355
- .ui-icon-triangle-2-n-s { background-position: -128px -16px; }
356
- .ui-icon-triangle-2-e-w { background-position: -144px -16px; }
357
- .ui-icon-arrow-1-n { background-position: 0 -32px; }
358
- .ui-icon-arrow-1-ne { background-position: -16px -32px; }
359
- .ui-icon-arrow-1-e { background-position: -32px -32px; }
360
- .ui-icon-arrow-1-se { background-position: -48px -32px; }
361
- .ui-icon-arrow-1-s { background-position: -64px -32px; }
362
- .ui-icon-arrow-1-sw { background-position: -80px -32px; }
363
- .ui-icon-arrow-1-w { background-position: -96px -32px; }
364
- .ui-icon-arrow-1-nw { background-position: -112px -32px; }
365
- .ui-icon-arrow-2-n-s { background-position: -128px -32px; }
366
- .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
367
- .ui-icon-arrow-2-e-w { background-position: -160px -32px; }
368
- .ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
369
- .ui-icon-arrowstop-1-n { background-position: -192px -32px; }
370
- .ui-icon-arrowstop-1-e { background-position: -208px -32px; }
371
- .ui-icon-arrowstop-1-s { background-position: -224px -32px; }
372
- .ui-icon-arrowstop-1-w { background-position: -240px -32px; }
373
- .ui-icon-arrowthick-1-n { background-position: 0 -48px; }
374
- .ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
375
- .ui-icon-arrowthick-1-e { background-position: -32px -48px; }
376
- .ui-icon-arrowthick-1-se { background-position: -48px -48px; }
377
- .ui-icon-arrowthick-1-s { background-position: -64px -48px; }
378
- .ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
379
- .ui-icon-arrowthick-1-w { background-position: -96px -48px; }
380
- .ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
381
- .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
382
- .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
383
- .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
384
- .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
385
- .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
386
- .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
387
- .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
388
- .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
389
- .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
390
- .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
391
- .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
392
- .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
393
- .ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
394
- .ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
395
- .ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
396
- .ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
397
- .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
398
- .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
399
- .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
400
- .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
401
- .ui-icon-arrow-4 { background-position: 0 -80px; }
402
- .ui-icon-arrow-4-diag { background-position: -16px -80px; }
403
- .ui-icon-extlink { background-position: -32px -80px; }
404
- .ui-icon-newwin { background-position: -48px -80px; }
405
- .ui-icon-refresh { background-position: -64px -80px; }
406
- .ui-icon-shuffle { background-position: -80px -80px; }
407
- .ui-icon-transfer-e-w { background-position: -96px -80px; }
408
- .ui-icon-transferthick-e-w { background-position: -112px -80px; }
409
- .ui-icon-folder-collapsed { background-position: 0 -96px; }
410
- .ui-icon-folder-open { background-position: -16px -96px; }
411
- .ui-icon-document { background-position: -32px -96px; }
412
- .ui-icon-document-b { background-position: -48px -96px; }
413
- .ui-icon-note { background-position: -64px -96px; }
414
- .ui-icon-mail-closed { background-position: -80px -96px; }
415
- .ui-icon-mail-open { background-position: -96px -96px; }
416
- .ui-icon-suitcase { background-position: -112px -96px; }
417
- .ui-icon-comment { background-position: -128px -96px; }
418
- .ui-icon-person { background-position: -144px -96px; }
419
- .ui-icon-print { background-position: -160px -96px; }
420
- .ui-icon-trash { background-position: -176px -96px; }
421
- .ui-icon-locked { background-position: -192px -96px; }
422
- .ui-icon-unlocked { background-position: -208px -96px; }
423
- .ui-icon-bookmark { background-position: -224px -96px; }
424
- .ui-icon-tag { background-position: -240px -96px; }
425
- .ui-icon-home { background-position: 0 -112px; }
426
- .ui-icon-flag { background-position: -16px -112px; }
427
- .ui-icon-calendar { background-position: -32px -112px; }
428
- .ui-icon-cart { background-position: -48px -112px; }
429
- .ui-icon-pencil { background-position: -64px -112px; }
430
- .ui-icon-clock { background-position: -80px -112px; }
431
- .ui-icon-disk { background-position: -96px -112px; }
432
- .ui-icon-calculator { background-position: -112px -112px; }
433
- .ui-icon-zoomin { background-position: -128px -112px; }
434
- .ui-icon-zoomout { background-position: -144px -112px; }
435
- .ui-icon-search { background-position: -160px -112px; }
436
- .ui-icon-wrench { background-position: -176px -112px; }
437
- .ui-icon-gear { background-position: -192px -112px; }
438
- .ui-icon-heart { background-position: -208px -112px; }
439
- .ui-icon-star { background-position: -224px -112px; }
440
- .ui-icon-link { background-position: -240px -112px; }
441
- .ui-icon-cancel { background-position: 0 -128px; }
442
- .ui-icon-plus { background-position: -16px -128px; }
443
- .ui-icon-plusthick { background-position: -32px -128px; }
444
- .ui-icon-minus { background-position: -48px -128px; }
445
- .ui-icon-minusthick { background-position: -64px -128px; }
446
- .ui-icon-close { background-position: -80px -128px; }
447
- .ui-icon-closethick { background-position: -96px -128px; }
448
- .ui-icon-key { background-position: -112px -128px; }
449
- .ui-icon-lightbulb { background-position: -128px -128px; }
450
- .ui-icon-scissors { background-position: -144px -128px; }
451
- .ui-icon-clipboard { background-position: -160px -128px; }
452
- .ui-icon-copy { background-position: -176px -128px; }
453
- .ui-icon-contact { background-position: -192px -128px; }
454
- .ui-icon-image { background-position: -208px -128px; }
455
- .ui-icon-video { background-position: -224px -128px; }
456
- .ui-icon-script { background-position: -240px -128px; }
457
- .ui-icon-alert { background-position: 0 -144px; }
458
- .ui-icon-info { background-position: -16px -144px; }
459
- .ui-icon-notice { background-position: -32px -144px; }
460
- .ui-icon-help { background-position: -48px -144px; }
461
- .ui-icon-check { background-position: -64px -144px; }
462
- .ui-icon-bullet { background-position: -80px -144px; }
463
- .ui-icon-radio-off { background-position: -96px -144px; }
464
- .ui-icon-radio-on { background-position: -112px -144px; }
465
- .ui-icon-pin-w { background-position: -128px -144px; }
466
- .ui-icon-pin-s { background-position: -144px -144px; }
467
- .ui-icon-play { background-position: 0 -160px; }
468
- .ui-icon-pause { background-position: -16px -160px; }
469
- .ui-icon-seek-next { background-position: -32px -160px; }
470
- .ui-icon-seek-prev { background-position: -48px -160px; }
471
- .ui-icon-seek-end { background-position: -64px -160px; }
472
- .ui-icon-seek-start { background-position: -80px -160px; }
473
- /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
474
- .ui-icon-seek-first { background-position: -80px -160px; }
475
- .ui-icon-stop { background-position: -96px -160px; }
476
- .ui-icon-eject { background-position: -112px -160px; }
477
- .ui-icon-volume-off { background-position: -128px -160px; }
478
- .ui-icon-volume-on { background-position: -144px -160px; }
479
- .ui-icon-power { background-position: 0 -176px; }
480
- .ui-icon-signal-diag { background-position: -16px -176px; }
481
- .ui-icon-signal { background-position: -32px -176px; }
482
- .ui-icon-battery-0 { background-position: -48px -176px; }
483
- .ui-icon-battery-1 { background-position: -64px -176px; }
484
- .ui-icon-battery-2 { background-position: -80px -176px; }
485
- .ui-icon-battery-3 { background-position: -96px -176px; }
486
- .ui-icon-circle-plus { background-position: 0 -192px; }
487
- .ui-icon-circle-minus { background-position: -16px -192px; }
488
- .ui-icon-circle-close { background-position: -32px -192px; }
489
- .ui-icon-circle-triangle-e { background-position: -48px -192px; }
490
- .ui-icon-circle-triangle-s { background-position: -64px -192px; }
491
- .ui-icon-circle-triangle-w { background-position: -80px -192px; }
492
- .ui-icon-circle-triangle-n { background-position: -96px -192px; }
493
- .ui-icon-circle-arrow-e { background-position: -112px -192px; }
494
- .ui-icon-circle-arrow-s { background-position: -128px -192px; }
495
- .ui-icon-circle-arrow-w { background-position: -144px -192px; }
496
- .ui-icon-circle-arrow-n { background-position: -160px -192px; }
497
- .ui-icon-circle-zoomin { background-position: -176px -192px; }
498
- .ui-icon-circle-zoomout { background-position: -192px -192px; }
499
- .ui-icon-circle-check { background-position: -208px -192px; }
500
- .ui-icon-circlesmall-plus { background-position: 0 -208px; }
501
- .ui-icon-circlesmall-minus { background-position: -16px -208px; }
502
- .ui-icon-circlesmall-close { background-position: -32px -208px; }
503
- .ui-icon-squaresmall-plus { background-position: -48px -208px; }
504
- .ui-icon-squaresmall-minus { background-position: -64px -208px; }
505
- .ui-icon-squaresmall-close { background-position: -80px -208px; }
506
- .ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
507
- .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
508
- .ui-icon-grip-solid-vertical { background-position: -32px -224px; }
509
- .ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
510
- .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
511
- .ui-icon-grip-diagonal-se { background-position: -80px -224px; }
512
-
513
-
514
- /* Misc visuals
515
- ----------------------------------*/
516
-
517
- /* Corner radius */
518
- .ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
519
- .ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
520
- .ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
521
- .ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
522
- .ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
523
- .ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
524
- .ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
525
- .ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
526
- .ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
527
-
528
- /* Overlays */
529
- .ui-widget-overlay { background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); }
530
- .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #aaaaaa url(images/ui-bg_flat_0_aaaaaa_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }
531
- /*
532
- ColorBox Core Style:
533
- The following CSS is consistent between example themes and should not be altered.
534
- */
535
-
536
- #colorbox, #cboxOverlay, #cboxWrapper{position:absolute; top:0; left:0; z-index:9999; overflow:hidden;}
537
- #cboxOverlay{position:fixed; width:100%; height:100%;}
538
- #cboxMiddleLeft, #cboxBottomLeft{clear:left;}
539
- #cboxContent{position:relative;}
540
- #cboxLoadedContent{overflow:auto;}
541
- #cboxTitle{margin:0;}
542
- #cboxLoadingOverlay, #cboxLoadingGraphic{position:absolute; top:0; left:0; width:100%; height:100%;}
543
- #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{cursor:pointer;}
544
- .cboxPhoto{float:left; margin:auto; border:0; display:block; max-width:none;}
545
- .cboxIframe{width:100%; height:100%; display:block; border:0;}
546
- #colorbox, #cboxContent, #cboxLoadedContent{box-sizing:content-box;}
547
-
548
- /*
549
- User Style:
550
- Change the following styles to modify the appearance of ColorBox. They are
551
- ordered & tabbed in a way that represents the nesting of the generated HTML.
552
- */
553
- #cboxOverlay{background:#000;}
554
- #colorbox{}
555
- #cboxTopLeft{width:14px; height:14px; background:url(colorbox/controls.png) no-repeat 0 0;}
556
- #cboxTopCenter{height:14px; background:url(colorbox/border.png) repeat-x top left;}
557
- #cboxTopRight{width:14px; height:14px; background:url(colorbox/controls.png) no-repeat -36px 0;}
558
- #cboxBottomLeft{width:14px; height:43px; background:url(colorbox/controls.png) no-repeat 0 -32px;}
559
- #cboxBottomCenter{height:43px; background:url(colorbox/border.png) repeat-x bottom left;}
560
- #cboxBottomRight{width:14px; height:43px; background:url(colorbox/controls.png) no-repeat -36px -32px;}
561
- #cboxMiddleLeft{width:14px; background:url(colorbox/controls.png) repeat-y -175px 0;}
562
- #cboxMiddleRight{width:14px; background:url(colorbox/controls.png) repeat-y -211px 0;}
563
- #cboxContent{background:#fff; overflow:visible;}
564
- .cboxIframe{background:#fff;}
565
- #cboxError{padding:50px; border:1px solid #ccc;}
566
- #cboxLoadedContent{margin-bottom:5px;}
567
- #cboxLoadingOverlay{background:url(colorbox/loading_background.png) no-repeat center center;}
568
- #cboxLoadingGraphic{background:url(colorbox/loading.gif) no-repeat center center;}
569
- #cboxTitle{position:absolute; bottom:-25px; left:0; text-align:center; width:100%; font-weight:bold; color:#7C7C7C;}
570
- #cboxCurrent{position:absolute; bottom:-25px; left:58px; font-weight:bold; color:#7C7C7C;}
571
-
572
- #cboxPrevious, #cboxNext, #cboxClose, #cboxSlideshow{position:absolute; bottom:-29px; background:url(colorbox/controls.png) no-repeat 0px 0px; width:23px; height:23px; text-indent:-9999px;}
573
- #cboxPrevious{left:0px; background-position: -51px -25px;}
574
- #cboxPrevious:hover{background-position:-51px 0px;}
575
- #cboxNext{left:27px; background-position:-75px -25px;}
576
- #cboxNext:hover{background-position:-75px 0px;}
577
- #cboxClose{right:0; background-position:-100px -25px;}
578
- #cboxClose:hover{background-position:-100px 0px;}
579
-
580
- .cboxSlideshow_on #cboxSlideshow{background-position:-125px 0px; right:27px;}
581
- .cboxSlideshow_on #cboxSlideshow:hover{background-position:-150px 0px;}
582
- .cboxSlideshow_off #cboxSlideshow{background-position:-150px -25px; right:27px;}
583
- .cboxSlideshow_off #cboxSlideshow:hover{background-position:-125px 0px;}
584
- #loading {
585
- position: fixed;
586
- left: 40%;
587
- top: 50%; }
588
-
589
- a {
590
- color: #333;
591
- text-decoration: none; }
592
- a:hover {
593
- color: #000;
594
- text-decoration: underline; }
595
-
596
- body {
597
- font-family: "Lucida Grande", Helvetica, "Helvetica Neue", Arial, sans-serif;
598
- padding: 12px;
599
- background-color: #333; }
600
-
601
- h1, h2, h3, h4 {
602
- color: #1C2324;
603
- margin: 0;
604
- padding: 0;
605
- margin-bottom: 12px; }
606
-
607
- table {
608
- width: 100%; }
609
-
610
- #content {
611
- clear: left;
612
- background-color: white;
613
- border: 2px solid #ddd;
614
- border-top: 8px solid #ddd;
615
- padding: 18px;
616
- -webkit-border-bottom-left-radius: 5px;
617
- -webkit-border-bottom-right-radius: 5px;
618
- -webkit-border-top-right-radius: 5px;
619
- -moz-border-radius-bottomleft: 5px;
620
- -moz-border-radius-bottomright: 5px;
621
- -moz-border-radius-topright: 5px;
622
- border-bottom-left-radius: 5px;
623
- border-bottom-right-radius: 5px;
624
- border-top-right-radius: 5px; }
625
-
626
- .dataTables_filter, .dataTables_info {
627
- padding: 2px 6px; }
628
-
629
- abbr.timeago {
630
- text-decoration: none;
631
- border: none;
632
- font-weight: bold; }
633
-
634
- .timestamp {
635
- float: right;
636
- color: #ddd; }
637
-
638
- .group_tabs {
639
- list-style: none;
640
- float: left;
641
- margin: 0;
642
- padding: 0; }
643
- .group_tabs li {
644
- display: inline;
645
- float: left; }
646
- .group_tabs li a {
647
- font-family: Helvetica, Arial, sans-serif;
648
- display: block;
649
- float: left;
650
- text-decoration: none;
651
- padding: 4px 8px;
652
- background-color: #aaa;
653
- background: -webkit-gradient(linear, 0 0, 0 bottom, from(#dddddd), to(#aaaaaa));
654
- background: -moz-linear-gradient(#dddddd, #aaaaaa);
655
- background: linear-gradient(#dddddd, #aaaaaa);
656
- text-shadow: #e5e5e5 1px 1px 0px;
657
- border-bottom: none;
658
- color: #333;
659
- font-weight: bold;
660
- margin-right: 8px;
661
- border-top: 1px solid #efefef;
662
- -webkit-border-top-left-radius: 2px;
663
- -webkit-border-top-right-radius: 2px;
664
- -moz-border-radius-topleft: 2px;
665
- -moz-border-radius-topright: 2px;
666
- border-top-left-radius: 2px;
667
- border-top-right-radius: 2px; }
668
- .group_tabs li a:hover {
669
- background-color: #ccc;
670
- background: -webkit-gradient(linear, 0 0, 0 bottom, from(#eeeeee), to(#aaaaaa));
671
- background: -moz-linear-gradient(#eeeeee, #aaaaaa);
672
- background: linear-gradient(#eeeeee, #aaaaaa); }
673
- .group_tabs li a:active {
674
- padding-top: 5px;
675
- padding-bottom: 3px; }
676
- .group_tabs li.active a {
677
- color: black;
678
- text-shadow: #fff 1px 1px 0px;
679
- background-color: #ddd;
680
- background: -webkit-gradient(linear, 0 0, 0 bottom, from(white), to(#dddddd));
681
- background: -moz-linear-gradient(white, #dddddd);
682
- background: linear-gradient(white, #dddddd); }
683
-
684
- .file_list {
685
- margin-bottom: 18px; }
686
-
687
- a.src_link {
688
- background: url("./magnify.png") no-repeat left 50%;
689
- padding-left: 18px; }
690
-
691
- tr, td {
692
- margin: 0;
693
- padding: 0; }
694
-
695
- th {
696
- white-space: nowrap; }
697
- th.ui-state-default {
698
- cursor: pointer; }
699
- th span.ui-icon {
700
- float: left; }
701
-
702
- td {
703
- padding: 4px 8px; }
704
- td.strong {
705
- font-weight: bold; }
706
-
707
- .source_table h3, .source_table h4 {
708
- padding: 0;
709
- margin: 0;
710
- margin-bottom: 4px; }
711
- .source_table .header {
712
- padding: 10px; }
713
- .source_table pre {
714
- margin: 0;
715
- padding: 0;
716
- white-space: normal;
717
- color: #000;
718
- font-family: "Monaco", "Inconsolata", "Consolas", monospace; }
719
- .source_table code {
720
- color: #000;
721
- font-family: "Monaco", "Inconsolata", "Consolas", monospace; }
722
- .source_table pre {
723
- background-color: #333; }
724
- .source_table pre ol {
725
- margin: 0px;
726
- padding: 0px;
727
- margin-left: 45px;
728
- font-size: 12px;
729
- color: white; }
730
- .source_table pre li {
731
- margin: 0px;
732
- padding: 2px 6px;
733
- border-left: 5px solid white; }
734
- .source_table pre li code {
735
- white-space: pre;
736
- white-space: pre-wrap; }
737
- .source_table pre .hits {
738
- float: right;
739
- margin-left: 10px;
740
- padding: 2px 4px;
741
- background-color: #444;
742
- background: -webkit-gradient(linear, 0 0, 0 bottom, from(#222222), to(#666666));
743
- background: -moz-linear-gradient(#222222, #666666);
744
- background: linear-gradient(#222222, #666666);
745
- color: white;
746
- font-family: Helvetica, "Helvetica Neue", Arial, sans-serif;
747
- font-size: 10px;
748
- font-weight: bold;
749
- text-align: center;
750
- border-radius: 6px; }
751
-
752
- #footer {
753
- color: #ddd;
754
- font-size: 12px;
755
- font-weight: bold;
756
- margin-top: 12px;
757
- text-align: right; }
758
- #footer a {
759
- color: #eee;
760
- text-decoration: underline; }
761
- #footer a:hover {
762
- color: #fff;
763
- text-decoration: none; }
764
-
765
- .green {
766
- color: #090; }
767
-
768
- .red {
769
- color: #900; }
770
-
771
- .yellow {
772
- color: #da0; }
773
-
774
- .blue {
775
- color: blue; }
776
-
777
- .source_table .covered {
778
- border-color: #090; }
779
- .source_table .missed {
780
- border-color: #900; }
781
- .source_table .never {
782
- border-color: black; }
783
- .source_table .skipped {
784
- border-color: #fc0; }
785
- .source_table .missed-branch {
786
- border-color: #bf0000; }
787
- .source_table .covered:nth-child(odd) {
788
- background-color: #CDF2CD; }
789
- .source_table .covered:nth-child(even) {
790
- background-color: #DBF2DB; }
791
- .source_table .missed:nth-child(odd) {
792
- background-color: #F7C0C0; }
793
- .source_table .missed:nth-child(even) {
794
- background-color: #F7CFCF; }
795
- .source_table .never:nth-child(odd) {
796
- background-color: #efefef; }
797
- .source_table .never:nth-child(even) {
798
- background-color: #f4f4f4; }
799
- .source_table .skipped:nth-child(odd) {
800
- background-color: #FBF0C0; }
801
- .source_table .skipped:nth-child(even) {
802
- background-color: #FBFfCf; }
803
- .source_table .missed-branch:nth-child(odd) {
804
- background-color: #cc8e8e; }
805
- .source_table .missed-branch:nth-child(even) {
806
- background-color: #cc6e6e; }
807
-
808
-
809
-