danarchy_deploy 0.2.1 → 0.2.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7282c6d5655d36a9f4fe2685df951a4faf1abdc1df283d997b74d56ce11cfc9e
4
- data.tar.gz: 65ed14f1a804481aa53358439db88eed24654770ef253223ff607caf8b6e608d
3
+ metadata.gz: f00a848b7b3326a27f07e661d2a0f79593cd8bb4140664e7fd86de1429a428a5
4
+ data.tar.gz: 91d62fdeff9560e8178bfe00b214c15740d53f785003f33a38d10c22878e5be5
5
5
  SHA512:
6
- metadata.gz: 92582f2b1ae3b019c0add4a6eacad943929cf499f5c572bc01b7cd84a018366edb5a4f78b2638ae905688960f88003a5827fe059713a180f373f853cd36b62b3
7
- data.tar.gz: 8c23cd79d331bc93519eefc7e8e862534ce2bc83bd6a260b3bdd29437f4a6b965b87dc2f3f4ce34da39442a29bb643ea628f436bfef235f3b88bc794a33f405a
6
+ metadata.gz: afb687e9d4df549f12bb3d14d6acf235020d288617ceba418eee50d7806da84d002491b1beb62056484a71e047aa91cac02b40d60afe7b8a073980550dc52af9
7
+ data.tar.gz: 8db9fa38eaedc05cc48074a690176764be983cdf9b18538773ee63d55de1c039a835f3c962df23d6970b725a0299cee9ea81f3aaee0e02c3244451caf46d6552
data/Gemfile.lock CHANGED
@@ -1,26 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- danarchy_deploy (0.2.0)
5
- danarchy_couchdb (~> 0.1.0)
6
- mongo (~> 2.13)
4
+ danarchy_deploy (0.2.5)
5
+ danarchy_couchdb (~> 0.1)
6
+ mongo (~> 2.17)
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- bson (4.10.1)
12
- danarchy_couchdb (0.1.2)
13
- mongo (2.13.1)
11
+ bson (4.14.0)
12
+ danarchy_couchdb (0.1.3)
13
+ mongo (2.17.0)
14
14
  bson (>= 4.8.2, < 5.0.0)
15
- rake (13.0.1)
15
+ rake (13.0.6)
16
16
 
17
17
  PLATFORMS
18
- ruby
18
+ x86_64-linux
19
19
 
20
20
  DEPENDENCIES
21
- bundler (~> 2.1)
21
+ bundler (~> 2.3)
22
22
  danarchy_deploy!
23
23
  rake (~> 13.0)
24
24
 
25
25
  BUNDLED WITH
26
- 2.1.4
26
+ 2.3.3
data/bin/danarchy_deploy CHANGED
@@ -5,7 +5,7 @@ require 'date'
5
5
  require 'optparse'
6
6
 
7
7
  deployment = nil
8
- options = { couchdb: "#{ENV['HOME']}/.danarchy/danarchy_deploy/danarchy_deploy.json",
8
+ options = { couchdb: "#{ENV['HOME']}/.danarchy/danarchy_deploy/danarchy_couchdb.json",
9
9
  deploy_dir: '/danarchy/deploy',
10
10
  deploy_file: nil,
11
11
  first_run: false,
@@ -15,7 +15,8 @@ options = { couchdb: "#{ENV['HOME']}/.danarchy/danarchy_deploy/danarchy_deploy.j
15
15
 
16
16
  ARGV.push('--help') if ARGV.empty?
17
17
  optparse = OptionParser.new do |opts|
18
- opts.banner = "Usage: sudo #{$PROGRAM_NAME} (local|remote) --json /path/to/deployment.json [options]"
18
+ opts.banner = "Usage: danarchy_deploy (local|remote) --json #{options[:deploy_dir]}/<HOSTNAME>/<HOSTNAME>.json [options]"
19
+ opts.banner += "\n Local deployments require danarchy_deploy to be run as sudo/root.\n\n"
19
20
 
20
21
  opts.on('-j=file', '--json=file', 'Read configuration from JSON file.') do |file|
21
22
  require 'json'
@@ -65,7 +66,7 @@ optparse = OptionParser.new do |opts|
65
66
  end.parse!
66
67
 
67
68
  puts "DanarchyDeploy: #{DanarchyDeploy::VERSION}"
68
- location = ARGV.delete('remote') || ARGV.delete('local') || abort("ERROR: Need an option 'local' or 'remote' to know what to do!")
69
+ location = ARGV.delete('remote') || ARGV.delete('local') || abort("ERROR: Need a deployment type: 'local' or 'remote'!")
69
70
  cdb_config = File.exist?(options[:couchdb]) ? JSON.parse(File.read(options[:couchdb]), symbolize_names: true)[:couchdb] : nil
70
71
  cdb = DanarchyCouchDB::Connection.new(cdb_config) if cdb_config
71
72
 
@@ -94,7 +95,7 @@ end
94
95
  if location == 'remote'
95
96
  deployment = DanarchyDeploy::RemoteDeploy.new(deployment, options)
96
97
  elsif location == 'local'
97
- abort('Exiting! Must be run with sudo!') if Process.uid != 0
98
+ abort('Exiting! Local deployment be run with sudo!') if Process.uid != 0
98
99
  puts "Deploying #{deployment[:hostname]} locally to #{`hostname`.chomp}."
99
100
 
100
101
  if !options[:pretend]
@@ -113,6 +114,7 @@ end
113
114
 
114
115
  if deployment && cdb && !options[:pretend] && options[:deploy_file] !~ /.*(json|yaml)$/
115
116
  puts "Saving deployment to CouchDB."
117
+ deployment[:_attachments].values.map { |v| v.delete(:data) } if deployment[:_attachments]
116
118
  old_rev = cdb.get(cdb_config[:database], deployment_name)[:_rev]
117
119
  save = cdb.put(cdb_config[:database], deployment[:_id], deployment)
118
120
 
@@ -28,10 +28,10 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_dependency "danarchy_couchdb", "~> 0.1.0"
31
+ spec.add_dependency "danarchy_couchdb", "~> 0.1"
32
32
 
33
- spec.add_development_dependency "bundler", "~> 2.1"
33
+ spec.add_development_dependency "bundler", "~> 2.3"
34
34
  spec.add_development_dependency "rake", "~> 13.0"
35
35
 
36
- spec.add_runtime_dependency "mongo", "~> 2.13"
36
+ spec.add_runtime_dependency "mongo", "~> 2.17"
37
37
  end
@@ -48,9 +48,7 @@ module DanarchyDeploy
48
48
  private
49
49
  def self.load_mongodb_conf
50
50
  updated_conf = false
51
- @mongodb[:mongodb_conf] = @mongodb[:mongodb_conf] ?
52
- @mongodb[:mongodb_conf] :
53
- '/etc/mongodb.conf'
51
+ @mongodb[:mongodb_conf] ||= '/etc/mongodb.conf'
54
52
  mongodb_conf = File.exist?(@mongodb[:mongodb_conf]) ? YAML.load_file(@mongodb[:mongodb_conf]) : Hash.new
55
53
 
56
54
  generated_mongodb_conf = self.generate_mongodb_conf
@@ -59,13 +57,15 @@ module DanarchyDeploy
59
57
  end
60
58
 
61
59
  def self.generate_mongodb_conf
62
- if ! File.readlines('/etc/security/limits.conf').grep(/mongodb/)
63
- entry = 'mongodb soft nofile 32000'
64
- entry += 'mongodb hard nofile 64000'
65
- File.open('/etc/security/limits.conf', 'a+') do |f|
66
- f.write entry
67
- end
68
- end
60
+ security_limits = '/etc/security/limits.d/mongodb.conf'
61
+ limits = <<~EOF
62
+ mongodb soft nofile 64000
63
+ mongodb hard nofile 64000
64
+ mongodb soft nproc 64000
65
+ mongodb hard nproc 64000
66
+ EOF
67
+
68
+ File.write(security_limits, limits) if !File.exist?(security_limits)
69
69
 
70
70
  mongodb_conf = {
71
71
  'net' => { 'port' => 27017, 'bindIp' => '127.0.0.1' },
@@ -0,0 +1,140 @@
1
+
2
+ module DanarchyDeploy
3
+ module System
4
+ class Cryptsetup
5
+ def self.new(os, cryptsetup, options)
6
+ return false if cryptsetup.nil?
7
+ puts "\n" + self.name
8
+
9
+ # expects object: { "cryptsetup": { "source": "/danarchy/deploy/templates/system/cryptsetup.erb", (optional)
10
+ # "volumes": { "vg_name:vg0:/dev/vdb": { "target": "dm-vg0-mongodb",
11
+ # "source": "/dev/mapper/vg0-mongodb",
12
+ # "key": "/root/vdb_mongodb.key" } } } }
13
+
14
+ if os == 'gentoo'
15
+ DanarchyDeploy::Services::Init.init_manager(os, 'lvmetad', 'enable', options)
16
+ DanarchyDeploy::Services::Init.init_manager(os, 'lvmetad', 'start', options)
17
+ end
18
+
19
+ service, target, source = set_config(cryptsetup, options)
20
+ lvm_result, crypt_result = nil
21
+ cryptsetup[:volumes].each do |device, volume|
22
+ lvm_result = lvm_setup(device, volume, options)
23
+ crypt_result = encrypt_volume(volume, options)
24
+ end
25
+
26
+ deploy_template(target, source, cryptsetup[:volumes], options)
27
+ if os == 'gentoo'
28
+ DanarchyDeploy::Services::Init.init_manager(os, service, 'enable', options)
29
+ DanarchyDeploy::Services::Init.init_manager(os, service, 'start', options)
30
+ end
31
+ end
32
+
33
+ private
34
+ def self.set_config(cryptsetup, options)
35
+ service, target = File.exist?('/etc/conf.d/dmcrypt') ?
36
+ ['dmcrypt','/etc/conf.d/dmcrypt'] :
37
+ ['cryptsetup','/etc/crypttab']
38
+
39
+ source = if cryptsetup[:source]
40
+ cryptsetup[:source]
41
+ elsif target == '/etc/conf.d/dmcrypt'
42
+ options[:deploy_dir] + '/templates/system/dmcrypt.erb'
43
+ elsif target == '/etc/crypttab'
44
+ options[:deploy_dir] + '/templates/system/crypttab.erb'
45
+ else
46
+ nil
47
+ end
48
+
49
+ [service, target, source]
50
+ end
51
+
52
+ def self.lvm_setup(device, volume, options)
53
+ puts "\n > Configuring LVM"
54
+ name, vg, pv = device.to_s.split(/:/)
55
+
56
+ # Create physical volume
57
+ pvdisplay = DanarchyDeploy::Helpers.run_command("pvdisplay #{pv}", options)
58
+ if pvdisplay[:stderr]
59
+ puts "Creating physical volume: #{pv}"
60
+ pvcreate = DanarchyDeploy::Helpers.run_command("pvcreate -f #{pv}", options)
61
+ abort(" ! Failed to run pvcreate: #{pvcreate[:stderr]}") if pvcreate[:stderr]
62
+ puts pvcreate[:stdout]
63
+ pvdisplay = DanarchyDeploy::Helpers.run_command("pvdisplay #{pv}", options)
64
+ end
65
+ puts pvdisplay[:stderr] || pvdisplay[:stdout]
66
+
67
+ # Create volume group
68
+ vgdisplay = DanarchyDeploy::Helpers.run_command("vgdisplay #{vg}", options)
69
+ if vgdisplay[:stderr]
70
+ puts "Creating volume group: #{vg} with #{pv}"
71
+ vgcreate = DanarchyDeploy::Helpers.run_command("vgcreate #{vg} #{pv}", options)
72
+ abort(" ! Failed to run vgcreate: #{vgcreate[:stderr]}") if vgcreate[:stderr]
73
+ puts vgcreate[:stdout]
74
+ vgdisplay = DanarchyDeploy::Helpers.run_command("vgdisplay #{vg}", options)
75
+ end
76
+ puts vgdisplay[:stderr] || vgdisplay[:stdout]
77
+
78
+ # Create logical volume
79
+ lvdisplay = DanarchyDeploy::Helpers.run_command("lvdisplay #{vg}/#{name}", options)
80
+ if lvdisplay[:stderr]
81
+ puts "Creating volume group: #{vg}/#{name} with #{pv}"
82
+ lvcreate = DanarchyDeploy::Helpers.run_command("lvcreate -y -l 100%FREE -n #{name} #{vg}", options)
83
+ abort(" ! Failed to run lvcreate: #{lvcreate[:stderr]}") if lvcreate[:stderr]
84
+ puts lvcreate[:stdout]
85
+ lvdisplay = DanarchyDeploy::Helpers.run_command("lvdisplay #{vg}/#{name}", options)
86
+ end
87
+ puts lvdisplay[:stderr] || lvdisplay[:stdout]
88
+
89
+ [pvdisplay, vgdisplay, lvdisplay]
90
+ end
91
+
92
+ def self.encrypt_volume(volume, options)
93
+ puts "\n > Configuring Cryptsetup"
94
+ deploy_key(volume, options)
95
+ target = volume[:variables][:target]
96
+ source = volume[:variables][:source]
97
+ key = volume[:variables][:key]
98
+ abort(" ! Failed to find key: #{key}") if !File.exist?(key) && !options[:pretend]
99
+
100
+ # Encrypt logical volume with key
101
+ luksdump = DanarchyDeploy::Helpers.run_command("cryptsetup luksDump #{source}", options)
102
+ if luksdump[:stderr]
103
+ puts "\n > Encrypting volume: #{source}"
104
+ luksformat = DanarchyDeploy::Helpers.run_command("cryptsetup luksFormat #{source} #{key}", options)
105
+ abort(" ! Failed to run luksFormat: #{luksformat[:stderr]}") if luksformat[:stderr]
106
+ puts luksformat[:stdout]
107
+ luksdump = DanarchyDeploy::Helpers.run_command("cryptsetup luksDump #{source}", options)
108
+ end
109
+ puts luksdump[:stderr] || luksdump[:stdout]
110
+
111
+ # Open luks target
112
+ luksopen = { stderr: nil }
113
+ if !File.exist?("/dev/mapper/#{target}")
114
+ puts "\n > Opening volume: #{source}"
115
+ luksopen = DanarchyDeploy::Helpers.run_command("cryptsetup luksOpen -d #{key} #{source} #{target}", options)
116
+ abort(" ! Failed to run luksOpen: #{luksopen[:stderr]}") if luksopen[:stderr]
117
+ puts luksopen[:stdout]
118
+ end
119
+
120
+ [luksdump, luksopen]
121
+ end
122
+
123
+ def self.deploy_key(volume, options)
124
+ templates = [{ source: volume[:key_file],
125
+ target: volume[:variables][:key],
126
+ file_perms: {
127
+ owner: 'root',
128
+ group: 'root',
129
+ mode: '0400' } }]
130
+
131
+ DanarchyDeploy::Templater.new(templates, options)
132
+ end
133
+
134
+ def self.deploy_template(target, source, volumes, options)
135
+ templates = [{ target: target, source: source, variables: volumes }]
136
+ DanarchyDeploy::Templater.new(templates, options)
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,60 @@
1
+
2
+ module DanarchyDeploy
3
+ module System
4
+ class Fstab
5
+ def self.new(os, fstab, options)
6
+ puts "\n" + self.name
7
+ target, source = set_config(fstab, options)
8
+ deploy_template(target, source, fstab[:mounts], options)
9
+ format_mountpoints(fstab, options)
10
+ mount_all(options)
11
+ end
12
+
13
+ private
14
+ def self.set_config(fstab, options)
15
+ target = '/etc/fstab'
16
+ source = fstab[:source] ?
17
+ fstab[:source] :
18
+ '/danarchy/deploy/templates/system/fstab.erb'
19
+
20
+ [target, source]
21
+ end
22
+
23
+ def self.deploy_template(target, source, mounts, options)
24
+ templates = [{ target: target,
25
+ source: source,
26
+ variables: mounts }]
27
+
28
+ DanarchyDeploy::Templater.new(templates, options)
29
+ end
30
+
31
+ def self.format_mountpoints(fstab, options)
32
+ return false if fstab.nil?
33
+ puts "\n > Formatting mountpoints"
34
+
35
+ fstab[:mounts].each do |mount|
36
+ fs_check = DanarchyDeploy::Helpers.run_command(
37
+ "file -sL #{mount[:filesystem]}", options
38
+ )
39
+
40
+ if fs_check[:stdout] && fs_check[:stdout] =~ /.*data$/
41
+ puts "\n > Formatting #{mount[:filesystem]}"
42
+ mkfs = DanarchyDeploy::Helpers.run_command(
43
+ "mkfs -t #{mount[:type]} #{mount[:filesystem]}", options
44
+ )
45
+ abort(" ! Failed to run mkfs: #{mkfs[:stderr]}") if mkfs[:stderr]
46
+ end
47
+
48
+ FileUtils.mkdir_p(mount[:mountpoint]) if !options[:pretend] &&
49
+ !Dir.exist?(mount[:mountpoint])
50
+ end
51
+ end
52
+
53
+ def self.mount_all(options)
54
+ puts "\n > Mounting Filesystems"
55
+ mount_result = DanarchyDeploy::Helpers.run_command('mount -a', options)
56
+ abort(' ! Failed to mount filesystems!') if mount_result[:stderr]
57
+ end
58
+ end
59
+ end
60
+ end
@@ -3,6 +3,9 @@ require_relative 'system/debian'
3
3
  require_relative 'system/gentoo'
4
4
  require_relative 'system/opensuse'
5
5
 
6
+ require_relative 'system/cryptsetup'
7
+ require_relative 'system/fstab'
8
+
6
9
  module DanarchyDeploy
7
10
  module System
8
11
  def self.new(deployment, options)
@@ -29,6 +32,8 @@ module DanarchyDeploy
29
32
  puts cleanup_result[:stdout] if cleanup_result[:stdout]
30
33
  end
31
34
 
35
+ DanarchyDeploy::System::Cryptsetup.new(deployment[:os], deployment[:system][:cryptsetup], options)
36
+ DanarchyDeploy::System::Fstab.new(deployment[:os], deployment[:system][:fstab], options)
32
37
  deployment
33
38
  end
34
39
 
@@ -46,28 +51,9 @@ module DanarchyDeploy
46
51
  if deployment[:system][:templates]
47
52
  puts "\n > Configuring system templates for #{deployment[:os]}"
48
53
  DanarchyDeploy::Templater.new(deployment[:system][:templates], options)
49
-
50
- # Add deployment[:system][:dmcrypt], deployment[:system][:lvm], and deployment[:system][:fstab] here
51
- deployment[:system][:templates].each do |t|
52
- if t[:target] == '/etc/fstab'
53
- t[:variables].each do |v|
54
- if !Dir.exist?(v[:mountpoint])
55
- puts "Creating mountpoint: #{v[:mountpoint]}"
56
- FileUtils.mkdir_p(v[:mountpoint]) if !options[:pretend]
57
- end
58
- end
59
- end
60
- end
61
-
62
54
  end
63
55
  end
64
56
 
65
- puts "\n > Mounting Filesystems"
66
- if !options[:pretend]
67
- mount_result = DanarchyDeploy::Helpers.run_command('mount -a', options)
68
- abort(' |! Failed to mount filesystems!') if mount_result[:stderr]
69
- end
70
-
71
57
  if os.downcase == 'gentoo'
72
58
  (installer, updater, cleaner) = DanarchyDeploy::System::Gentoo.new(deployment, options)
73
59
  elsif %w[debian ubuntu].include?(os.downcase)
@@ -82,5 +68,23 @@ module DanarchyDeploy
82
68
 
83
69
  [installer, updater, cleaner]
84
70
  end
71
+
72
+ def self.fstab_mount(deployment, options)
73
+ fstab = deployment[:system][:templates].collect { |t| t if t[:target] == '/etc/fstab' }.compact
74
+ fstab.each do |t|
75
+ t[:variables].each do |v|
76
+ if !Dir.exist?(v[:mountpoint])
77
+ puts "Creating mountpoint: #{v[:mountpoint]}"
78
+ FileUtils.mkdir_p(v[:mountpoint]) if !options[:pretend]
79
+ end
80
+ end
81
+ end
82
+
83
+ puts "\n > Mounting Filesystems"
84
+ if !options[:pretend]
85
+ mount_result = DanarchyDeploy::Helpers.run_command('mount -a', options)
86
+ abort(' |! Failed to mount filesystems!') if mount_result[:stderr]
87
+ end
88
+ end
85
89
  end
86
90
  end
@@ -1,3 +1,3 @@
1
1
  module DanarchyDeploy
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -79,10 +79,10 @@ module DanarchyDeploy
79
79
  private
80
80
  def self.remote_mkdir(connector, options)
81
81
  puts "\n > Creating directory: #{options[:working_dir]}"
82
- mkdir_cmd = _ssh_command(connector, "test -d #{options[:working_dir]} || sudo mkdir -vp #{options[:working_dir]}")
82
+ mkdir_cmd = _ssh_command(connector, "test -d #{options[:working_dir]} && echo 'Directory exists!' || sudo mkdir -vp #{options[:working_dir]}")
83
83
  mkdir_result = DanarchyDeploy::Helpers.run_command(mkdir_cmd, options)
84
84
 
85
- if mkdir_result[:stderr]
85
+ if mkdir_result[:stderr] && ! mkdir_result[:stdout]
86
86
  abort(' ! Directory creation failed!')
87
87
  else
88
88
  puts " |+ Created directory: '#{options[:deploy_dir]}'"
@@ -37,8 +37,8 @@
37
37
  ],
38
38
  "groups": [
39
39
  {
40
- "groupname": "groupname",
41
- "gid": int,
40
+ "groupname": "groupname",
41
+ "gid": int
42
42
  }
43
43
  ],
44
44
  "services": {
@@ -48,7 +48,7 @@
48
48
  "enable",
49
49
  "restart"
50
50
  ]
51
- }
51
+ },
52
52
  "archives": [
53
53
  {
54
54
  "target": "/path/to/extract/to/",
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: danarchy_deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan James
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-17 00:00:00.000000000 Z
11
+ date: 2022-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: danarchy_couchdb
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.1.0
19
+ version: '0.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.1.0
26
+ version: '0.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '2.1'
33
+ version: '2.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '2.1'
40
+ version: '2.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,14 +58,14 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.13'
61
+ version: '2.17'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.13'
68
+ version: '2.17'
69
69
  description: DanarchyDeploy intends to simplify Gentoo Linux (and other distro) deployments
70
70
  down to a single template from an input JSON or YAML file, or from a CouchDB file.
71
71
  email:
@@ -115,7 +115,9 @@ files:
115
115
  - lib/danarchy_deploy/services/mysql/privileges.rb
116
116
  - lib/danarchy_deploy/system.rb
117
117
  - lib/danarchy_deploy/system/centos.rb
118
+ - lib/danarchy_deploy/system/cryptsetup.rb
118
119
  - lib/danarchy_deploy/system/debian.rb
120
+ - lib/danarchy_deploy/system/fstab.rb
119
121
  - lib/danarchy_deploy/system/gentoo.rb
120
122
  - lib/danarchy_deploy/system/opensuse.rb
121
123
  - lib/danarchy_deploy/templater.rb
@@ -127,7 +129,7 @@ licenses:
127
129
  - MIT
128
130
  metadata:
129
131
  allowed_push_host: https://rubygems.org
130
- post_install_message:
132
+ post_install_message:
131
133
  rdoc_options: []
132
134
  require_paths:
133
135
  - lib
@@ -142,8 +144,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
144
  - !ruby/object:Gem::Version
143
145
  version: '0'
144
146
  requirements: []
145
- rubygems_version: 3.0.3
146
- signing_key:
147
+ rubygems_version: 3.2.33
148
+ signing_key:
147
149
  specification_version: 4
148
150
  summary: Pushes deployments locally or remotely based on a JSON/YAML/CouchDB template.
149
151
  test_files: []