serverkit 0.4.2 → 0.4.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a765aaea4621162401ba0a04b6105893f183ba02
4
- data.tar.gz: a736aa5d90464963deeb5061ccc8d85fb37685ca
3
+ metadata.gz: c63fd1655ae7424f508d32cdaefa5c0e83090117
4
+ data.tar.gz: b4c5a55c88bb2e2031dd3321f26443c32bdf79a6
5
5
  SHA512:
6
- metadata.gz: a685ca9be3c3727eb55ae13fa912fcdf518386c7abcd5da0973076fb0dd1f20aecce0c1e1177b46f8dafdf21f4d0906fab0396bd047b8e4e81f6648299d74659
7
- data.tar.gz: 59f7e1872c093a64c71be1246c1c383e20130f90106379c1da15de6e5422cc3acac2f4042f2570d40d6a5b84e3641af7972a64fcafc06392830286d28083bcdc
6
+ metadata.gz: 66c44fa0c113ccbde06013a4eab9d63ec42175572e8c6dd3848e764531d404d665f8668a5367df74d8186a80522e7dac8a13e3072a36cb0d633947ac8e55f6c1
7
+ data.tar.gz: 28ae2520dc1e0805e070cff7cc4ebb7d5f4e5725d5ec27f7e4948314a38ead1442a16f7079ff0f4758296c7a5d14a129e5203815c3e963c53c0f5ef2c2ee8fc4
data/.rubocop.yml CHANGED
@@ -28,6 +28,9 @@ Metrics/MethodLength:
28
28
  Metrics/PerceivedComplexity:
29
29
  Enabled: false
30
30
 
31
+ Style/AccessorMethodName:
32
+ Enabled: false
33
+
31
34
  Style/AndOr:
32
35
  Enabled: false
33
36
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## 0.4.3
2
+ - Add directory resource
3
+ - Add file resource
4
+ - Rename the previous file resource with remote_file
5
+ - Support shell attribute on user resource
6
+ - Change some attribue names on user resource
7
+
1
8
  ## 0.4.2
2
9
  - Fix bug on apply action exit code
3
10
  - Support case-insensitive or number log-level
data/README.md CHANGED
@@ -25,12 +25,12 @@ Write a recipe, then run `serverkit` executable to validate, inspect, check, and
25
25
 
26
26
  ### serverkit validate
27
27
  Validates recipe schema, resources, and attributes.
28
- For instance, it shows validation error if `source` attributes is missing in `file` resource.
28
+ For instance, it shows validation error if `source` attributes is missing in `remote_file` resource.
29
29
  If any validation error is detected, it returns exit status 1.
30
30
 
31
31
  ```
32
32
  $ serverkit validate recipe.yml
33
- Error: source attribute is required in file resource
33
+ Error: source attribute is required in remote_file resource
34
34
  Error: path attribute can't be unreadable path in recipe resource
35
35
  ```
36
36
 
@@ -192,14 +192,16 @@ By default, all types of resource can or must have the following attributes:
192
192
  - notify - specify an Array of handler ids that should be applied after changed
193
193
 
194
194
  ### Type
195
- A resource must have a type attribute. Currently the following types are available:
195
+ A resource must have a valid type attribute like:
196
196
 
197
197
  - command
198
+ - directory
198
199
  - file
199
200
  - git
200
201
  - nothing
201
202
  - package
202
203
  - recipe
204
+ - remote_file
203
205
  - service
204
206
  - symlink
205
207
  - user
data/example/recipe.yml CHANGED
@@ -1,7 +1,15 @@
1
1
  resources:
2
+ - type: remote_file
3
+ source: README.md
4
+ destination: /tmp/README.md
5
+ - type: file
6
+ path: /tmp/README.md
7
+ content: foo
2
8
  - type: user
3
9
  name: test
4
10
  password: test
5
- handlers:
6
- - id: handler_test
7
- type: nothing
11
+ home: /Users/test
12
+ shell: /bin/bash
13
+ - type: directory
14
+ path: /Users/test
15
+ owner: test
@@ -57,6 +57,11 @@ module Serverkit
57
57
  run_command(get_command_from_identifier(*args))
58
58
  end
59
59
 
60
+ def send_file(from, to)
61
+ logger.debug("Sending file #{from} to #{to}")
62
+ specinfra_backend.send_file(from, to)
63
+ end
64
+
60
65
  private
61
66
 
62
67
  # @note Override me
@@ -1,11 +1,13 @@
1
1
  require "active_support/core_ext/string/inflections"
2
2
  require "serverkit/resources/command"
3
+ require "serverkit/resources/directory"
3
4
  require "serverkit/resources/file"
4
5
  require "serverkit/resources/git"
5
6
  require "serverkit/resources/missing"
6
7
  require "serverkit/resources/nothing"
7
8
  require "serverkit/resources/package"
8
9
  require "serverkit/resources/recipe"
10
+ require "serverkit/resources/remote_file"
9
11
  require "serverkit/resources/service"
10
12
  require "serverkit/resources/symlink"
11
13
  require "serverkit/resources/unknown"
@@ -0,0 +1,69 @@
1
+ require "serverkit/resources/base"
2
+
3
+ module Serverkit
4
+ module Resources
5
+ class Directory < Base
6
+ attribute :group, type: String
7
+ attribute :mode, type: [Integer, String]
8
+ attribute :owner, type: String
9
+ attribute :path, required: true, type: String
10
+
11
+ # @note Override
12
+ def apply
13
+ create_directory unless has_correct_directory?
14
+ update_group unless has_correct_group?
15
+ update_mode unless has_correct_mode?
16
+ update_owner unless has_correct_owner?
17
+ end
18
+
19
+ # @note Override
20
+ def check
21
+ has_correct_directory? && has_correct_group? && has_correct_mode? && has_correct_owner?
22
+ end
23
+
24
+ private
25
+
26
+ def create_directory
27
+ run_command_from_identifier(:create_file_as_directory, path)
28
+ end
29
+
30
+ def has_correct_directory?
31
+ check_command_from_identifier(:check_file_is_directory, path)
32
+ end
33
+
34
+ def has_correct_group?
35
+ group.nil? || check_command_from_identifier(:check_file_is_grouped, path, group)
36
+ end
37
+
38
+ def has_correct_mode?
39
+ mode.nil? || check_command_from_identifier(:check_file_has_mode, path, mode_in_octal_notation)
40
+ end
41
+
42
+ def has_correct_owner?
43
+ owner.nil? || check_command_from_identifier(:check_file_is_owned_by, path, owner)
44
+ end
45
+
46
+ # @return [String]
47
+ # @example "755" # for 0755
48
+ def mode_in_octal_notation
49
+ if mode.is_a?(Integer)
50
+ mode.to_s(8)
51
+ else
52
+ mode
53
+ end
54
+ end
55
+
56
+ def update_group
57
+ run_command_from_identifier(:change_file_group, path, group)
58
+ end
59
+
60
+ def update_mode
61
+ run_command_from_identifier(:change_file_mode, path, mode_in_octal_notation)
62
+ end
63
+
64
+ def update_owner
65
+ run_command_from_identifier(:change_file_owner, path, owner)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1,68 +1,93 @@
1
1
  require "digest"
2
2
  require "serverkit/resources/base"
3
+ require "tempfile"
3
4
 
4
5
  module Serverkit
5
6
  module Resources
6
7
  class File < Base
7
- attribute :destination, required: true, type: String
8
+ attribute :content, type: String
8
9
  attribute :group, type: String
10
+ attribute :mode, type: [Integer, String]
9
11
  attribute :owner, type: String
10
- attribute :source, readable: true, required: true, type: String
12
+ attribute :path, required: true, type: String
11
13
 
12
14
  # @note Override
13
15
  def apply
14
- send_file if file_sendable?
15
- change_group unless has_valid_group?
16
- change_owner unless has_valid_owner?
16
+ update_file unless has_correct_file?
17
+ update_group unless has_correct_group?
18
+ update_mode unless has_correct_mode?
19
+ update_owner unless has_correct_owner?
17
20
  end
18
21
 
19
22
  # @note Override
20
23
  def check
21
- has_file? && has_same_content? && has_valid_group? && has_valid_owner?
24
+ has_correct_file? && has_correct_group? && has_correct_mode? && has_correct_owner?
22
25
  end
23
26
 
24
27
  private
25
28
 
26
- def change_group
27
- run_command_from_identifier(:change_file_group, destination, group)
29
+ # @return [String]
30
+ def content_sha256sum
31
+ ::Digest::SHA256.hexdigest(content)
28
32
  end
29
33
 
30
- def change_owner
31
- run_command_from_identifier(:change_file_owner, destination, owner)
34
+ # @return [String]
35
+ def file_sha256sum
36
+ run_command_from_identifier(:get_file_sha256sum, path).stdout.rstrip
32
37
  end
33
38
 
34
- def file_sendable?
35
- !has_file? || !has_same_content?
39
+ def has_file?
40
+ check_command_from_identifier(:check_file_is_file, path)
36
41
  end
37
42
 
38
- def has_file?
39
- check_command_from_identifier(:check_file_is_file, destination)
43
+ def has_correct_content?
44
+ content.nil? || file_sha256sum == content_sha256sum
40
45
  end
41
46
 
42
- def has_same_content?
43
- remote_file_sha256sum == local_file_sha256sum
47
+ def has_correct_file?
48
+ has_file? && has_correct_content?
44
49
  end
45
50
 
46
- def has_valid_group?
47
- group.nil? || check_command_from_identifier(:check_file_is_grouped, destination, group)
51
+ def has_correct_group?
52
+ group.nil? || check_command_from_identifier(:check_file_is_grouped, path, group)
48
53
  end
49
54
 
50
- def has_valid_owner?
51
- owner.nil? || check_command_from_identifier(:check_file_is_owned_by, destination, owner)
55
+ def has_correct_mode?
56
+ mode.nil? || check_command_from_identifier(:check_file_has_mode, path, mode_in_octal_notation)
52
57
  end
53
58
 
54
- # @return [String]
55
- def local_file_sha256sum
56
- ::Digest::SHA256.hexdigest(::File.read(source))
59
+ def has_correct_owner?
60
+ owner.nil? || check_command_from_identifier(:check_file_is_owned_by, path, owner)
57
61
  end
58
62
 
59
63
  # @return [String]
60
- def remote_file_sha256sum
61
- run_command_from_identifier(:get_file_sha256sum, destination).stdout.rstrip
64
+ # @example "755" # for 0755
65
+ def mode_in_octal_notation
66
+ if mode.is_a?(Integer)
67
+ mode.to_s(8)
68
+ else
69
+ mode
70
+ end
71
+ end
72
+
73
+ def update_file
74
+ ::Tempfile.open("") do |file|
75
+ file.write(content || "")
76
+ file.close
77
+ backend.send_file(file.path, path)
78
+ end
79
+ end
80
+
81
+ def update_group
82
+ run_command_from_identifier(:change_file_group, path, group)
83
+ end
84
+
85
+ def update_mode
86
+ run_command_from_identifier(:change_file_mode, path, mode_in_octal_notation)
62
87
  end
63
88
 
64
- def send_file
65
- run_command_from_identifier(:send_file, source, destination)
89
+ def update_owner
90
+ run_command_from_identifier(:change_file_owner, path, owner)
66
91
  end
67
92
  end
68
93
  end
@@ -0,0 +1,69 @@
1
+ require "digest"
2
+ require "serverkit/resources/base"
3
+
4
+ module Serverkit
5
+ module Resources
6
+ class RemoteFile < Base
7
+ attribute :destination, required: true, type: String
8
+ attribute :group, type: String
9
+ attribute :owner, type: String
10
+ attribute :source, readable: true, required: true, type: String
11
+
12
+ # @note Override
13
+ def apply
14
+ send_file_from_source_to_destination if file_sendable?
15
+ change_group unless has_valid_group?
16
+ change_owner unless has_valid_owner?
17
+ end
18
+
19
+ # @note Override
20
+ def check
21
+ has_file? && has_same_content? && has_valid_group? && has_valid_owner?
22
+ end
23
+
24
+ private
25
+
26
+ def change_group
27
+ run_command_from_identifier(:change_file_group, destination, group)
28
+ end
29
+
30
+ def change_owner
31
+ run_command_from_identifier(:change_file_owner, destination, owner)
32
+ end
33
+
34
+ def file_sendable?
35
+ !has_file? || !has_same_content?
36
+ end
37
+
38
+ def has_file?
39
+ check_command_from_identifier(:check_file_is_file, destination)
40
+ end
41
+
42
+ def has_same_content?
43
+ remote_file_sha256sum == local_file_sha256sum
44
+ end
45
+
46
+ def has_valid_group?
47
+ group.nil? || check_command_from_identifier(:check_file_is_grouped, destination, group)
48
+ end
49
+
50
+ def has_valid_owner?
51
+ owner.nil? || check_command_from_identifier(:check_file_is_owned_by, destination, owner)
52
+ end
53
+
54
+ # @return [String]
55
+ def local_file_sha256sum
56
+ ::Digest::SHA256.hexdigest(::File.read(source))
57
+ end
58
+
59
+ # @return [String]
60
+ def remote_file_sha256sum
61
+ run_command_from_identifier(:get_file_sha256sum, destination).stdout.rstrip
62
+ end
63
+
64
+ def send_file_from_source_to_destination
65
+ send_file(source, destination)
66
+ end
67
+ end
68
+ end
69
+ end
@@ -5,10 +5,11 @@ module Serverkit
5
5
  module Resources
6
6
  class User < Base
7
7
  attribute :gid, type: [Integer, String]
8
- attribute :home_directory, type: String
8
+ attribute :home, type: String
9
9
  attribute :name, type: String, required: true
10
10
  attribute :password, type: String
11
- attribute :system_user, type: [FalseClass, TrueClass]
11
+ attribute :shell, type: String
12
+ attribute :system, type: [FalseClass, TrueClass]
12
13
  attribute :uid, type: Integer
13
14
 
14
15
  # @note Override
@@ -17,6 +18,7 @@ module Serverkit
17
18
  update_user_encrypted_password unless has_correct_password?
18
19
  update_user_gid unless has_correct_gid?
19
20
  update_user_home_directory unless has_correct_home_directory?
21
+ update_user_login_shell unless has_correct_login_shell?
20
22
  update_user_uid unless has_correct_uid?
21
23
  else
22
24
  add_user
@@ -28,13 +30,15 @@ module Serverkit
28
30
  case
29
31
  when !has_correct_user?
30
32
  false
31
- when gid && !has_correct_gid?
33
+ when !has_correct_gid?
32
34
  false
33
- when home_directory && !has_correct_home_directory?
35
+ when !has_correct_home_directory?
34
36
  false
35
- when password && !has_correct_password?
37
+ when !has_correct_password?
36
38
  false
37
- when uid && !has_correct_uid?
39
+ when !has_correct_login_shell?
40
+ false
41
+ when !has_correct_uid?
38
42
  false
39
43
  else
40
44
  true
@@ -48,9 +52,10 @@ module Serverkit
48
52
  :add_user,
49
53
  name,
50
54
  gid: gid,
51
- home_directory: home_directory,
55
+ home_directory: home,
52
56
  password: encrypted_password,
53
- system_user: system_user,
57
+ shell: shell,
58
+ system_user: system,
54
59
  uid: uid,
55
60
  )
56
61
  end
@@ -64,19 +69,23 @@ module Serverkit
64
69
  end
65
70
 
66
71
  def has_correct_gid?
67
- check_command_from_identifier(:check_user_belongs_to_group, name, gid)
72
+ gid.nil? || check_command_from_identifier(:check_user_belongs_to_group, name, gid)
68
73
  end
69
74
 
70
75
  def has_correct_home_directory?
71
- check_command_from_identifier(:check_user_has_home_directory, name, home_directory)
76
+ home.nil? || check_command_from_identifier(:check_user_has_home_directory, name, home)
77
+ end
78
+
79
+ def has_correct_login_shell?
80
+ shell.nil? || check_command_from_identifier(:check_user_has_login_shell, name, shell)
72
81
  end
73
82
 
74
83
  def has_correct_password?
75
- ::UnixCrypt.valid?(password, get_remote_encrypted_password)
84
+ password.nil? || ::UnixCrypt.valid?(password, get_remote_encrypted_password)
76
85
  end
77
86
 
78
87
  def has_correct_uid?
79
- check_command_from_identifier(:check_user_has_uid, name, uid)
88
+ uid.nil? || check_command_from_identifier(:check_user_has_uid, name, uid)
80
89
  end
81
90
 
82
91
  def has_correct_user?
@@ -92,7 +101,11 @@ module Serverkit
92
101
  end
93
102
 
94
103
  def update_user_home_directory
95
- run_command_from_identifier(:update_user_home_directory, name, home_directory)
104
+ run_command_from_identifier(:update_user_home_directory, name, home)
105
+ end
106
+
107
+ def update_user_login_shell
108
+ run_command_from_identifier(:update_user_login_shell, name, shell)
96
109
  end
97
110
 
98
111
  def update_user_uid
@@ -1,3 +1,3 @@
1
1
  module Serverkit
2
- VERSION = "0.4.2"
2
+ VERSION = "0.4.3"
3
3
  end
data/serverkit.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_runtime_dependency "highline"
24
24
  spec.add_runtime_dependency "rainbow"
25
25
  spec.add_runtime_dependency "slop", "~> 3.4"
26
- spec.add_runtime_dependency "specinfra"
26
+ spec.add_runtime_dependency "specinfra", ">= 2.29.0"
27
27
  spec.add_runtime_dependency "unix-crypt"
28
28
  spec.add_development_dependency "pry", "0.10.1"
29
29
  spec.add_development_dependency "rake", "~> 10.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: serverkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
@@ -114,14 +114,14 @@ dependencies:
114
114
  requirements:
115
115
  - - ">="
116
116
  - !ruby/object:Gem::Version
117
- version: '0'
117
+ version: 2.29.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - ">="
123
123
  - !ruby/object:Gem::Version
124
- version: '0'
124
+ version: 2.29.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: unix-crypt
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -242,12 +242,14 @@ files:
242
242
  - lib/serverkit/resource_builder.rb
243
243
  - lib/serverkit/resources/base.rb
244
244
  - lib/serverkit/resources/command.rb
245
+ - lib/serverkit/resources/directory.rb
245
246
  - lib/serverkit/resources/file.rb
246
247
  - lib/serverkit/resources/git.rb
247
248
  - lib/serverkit/resources/missing.rb
248
249
  - lib/serverkit/resources/nothing.rb
249
250
  - lib/serverkit/resources/package.rb
250
251
  - lib/serverkit/resources/recipe.rb
252
+ - lib/serverkit/resources/remote_file.rb
251
253
  - lib/serverkit/resources/service.rb
252
254
  - lib/serverkit/resources/symlink.rb
253
255
  - lib/serverkit/resources/unknown.rb