danarchy_deploy 0.1.2 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/Gemfile.lock +9 -20
- data/README.md +10 -9
- data/Rakefile +0 -4
- data/bin/danarchy_deploy +24 -10
- data/danarchy_deploy.gemspec +4 -3
- data/lib/danarchy_deploy.rb +186 -55
- data/lib/danarchy_deploy/applicator.rb +39 -0
- data/lib/danarchy_deploy/applicator/nginx.rb +86 -0
- data/lib/danarchy_deploy/applicator/phpfpm.rb +84 -0
- data/lib/danarchy_deploy/applicator/redmine.rb +40 -0
- data/lib/danarchy_deploy/applicator/ssl.rb +14 -0
- data/lib/danarchy_deploy/applicator/wordpress.rb +146 -0
- data/lib/danarchy_deploy/applicator/wordpress/wpcli.rb +67 -0
- data/lib/danarchy_deploy/applicator/wordpress/wpcli_install.sh +36 -0
- data/lib/danarchy_deploy/applicator/wordpress/wpconfig.rb +49 -0
- data/lib/danarchy_deploy/archiver.rb +9 -7
- data/lib/danarchy_deploy/archiver/svn.rb +17 -0
- data/lib/danarchy_deploy/hash_deep_merge.rb +9 -0
- data/lib/danarchy_deploy/helpers.rb +42 -10
- data/lib/danarchy_deploy/installer.rb +2 -2
- data/lib/danarchy_deploy/services.rb +12 -25
- data/lib/danarchy_deploy/services/init.rb +52 -0
- data/lib/danarchy_deploy/services/init/openrc.rb +72 -0
- data/lib/danarchy_deploy/services/init/systemd.rb +69 -0
- data/lib/danarchy_deploy/services/mongodb.rb +162 -0
- data/lib/danarchy_deploy/services/mysql.rb +58 -0
- data/lib/danarchy_deploy/services/mysql/new_server.rb +72 -0
- data/lib/danarchy_deploy/services/mysql/privileges.rb +35 -0
- data/lib/danarchy_deploy/system.rb +86 -0
- data/lib/danarchy_deploy/system/centos.rb +17 -0
- data/lib/danarchy_deploy/system/debian.rb +61 -0
- data/lib/danarchy_deploy/system/gentoo.rb +66 -0
- data/lib/danarchy_deploy/system/opensuse.rb +22 -0
- data/lib/danarchy_deploy/templater.rb +53 -13
- data/lib/danarchy_deploy/users.rb +29 -19
- data/lib/danarchy_deploy/version.rb +1 -1
- metadata +34 -12
@@ -0,0 +1,66 @@
|
|
1
|
+
|
2
|
+
module DanarchyDeploy
|
3
|
+
module System
|
4
|
+
class Gentoo
|
5
|
+
def self.new(deployment, options)
|
6
|
+
puts "\n" + self.name
|
7
|
+
puts 'Gentoo detected! Using emerge.'
|
8
|
+
|
9
|
+
hostname = deployment[:hostname]
|
10
|
+
if check_hostname(hostname) == false
|
11
|
+
puts "Setting hostname to: #{hostname}"
|
12
|
+
set_hostname(hostname)
|
13
|
+
end
|
14
|
+
|
15
|
+
installer = 'emerge --usepkg --buildpkg --quiet --noreplace '
|
16
|
+
# This needs cpuid2cpuflags to build make.conf; don't --pretend here.
|
17
|
+
system("qlist -I cpuid2cpuflags &>/dev/null || #{installer} cpuid2cpuflags &>/dev/null")
|
18
|
+
installer += '--pretend ' if options[:pretend]
|
19
|
+
|
20
|
+
updater = 'emerge --usepkg --buildpkg --update --deep --newuse --quiet --with-bdeps=y @world'
|
21
|
+
updater += ' --pretend' if options[:pretend]
|
22
|
+
|
23
|
+
cleaner = 'emerge --depclean --quiet '
|
24
|
+
cleaner += '--pretend ' if options[:pretend]
|
25
|
+
|
26
|
+
if deployment[:portage]
|
27
|
+
if deployment[:portage][:templates]
|
28
|
+
puts "\nChecking Portage configs."
|
29
|
+
DanarchyDeploy::Templater.new(deployment[:portage][:templates], options)
|
30
|
+
end
|
31
|
+
|
32
|
+
emerge_sync(options) if deployment[:portage][:sync]
|
33
|
+
end
|
34
|
+
|
35
|
+
[installer, updater, cleaner]
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def self.emerge_sync(options)
|
41
|
+
File.open('/tmp/datetime', 'a+') do |f|
|
42
|
+
last_sync = f.getbyte ? DateTime.parse(f.read) : (DateTime.now - 2)
|
43
|
+
|
44
|
+
if (DateTime.now - last_sync).to_i != 0
|
45
|
+
puts "\nUpdating Portage repo..."
|
46
|
+
DanarchyDeploy::Helpers.run_command('emerge --sync --quiet 2>/dev/null', options)
|
47
|
+
f.truncate(0)
|
48
|
+
f.write DateTime.now
|
49
|
+
end
|
50
|
+
|
51
|
+
f.close
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def self.set_hostname(hostname)
|
56
|
+
confd_hostname = "hostname=\"#{hostname}\""
|
57
|
+
File.write('/etc/conf.d/hostname', confd_hostname)
|
58
|
+
`hostname #{hostname}`
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.check_hostname(hostname)
|
62
|
+
`hostname`.chomp == hostname
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
module DanarchyDeploy
|
3
|
+
module System
|
4
|
+
class OpenSUSE
|
5
|
+
def self.new(deployment, options)
|
6
|
+
puts "\n" + self.name
|
7
|
+
puts "#{deployment[:os].capitalize} detected! Using zypper."
|
8
|
+
|
9
|
+
puts "Updating zypper repositories..."
|
10
|
+
DanarchyDeploy::Helpers.run_command('sudo zypper refresh', options)
|
11
|
+
|
12
|
+
installer = 'zypper install '
|
13
|
+
updater = 'zypper upgrade'
|
14
|
+
cleaner = nil
|
15
|
+
zypper_refresh_repos = DanarchyDeploy::Helpers.run_command('zypper refresh', options)
|
16
|
+
# Needs package checking & testing
|
17
|
+
|
18
|
+
[installer, updater, cleaner]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -6,10 +6,17 @@ module DanarchyDeploy
|
|
6
6
|
def self.new(templates, options)
|
7
7
|
puts "\n" + self.name
|
8
8
|
|
9
|
+
if templates.map(&:keys).flatten.include?(:remove)
|
10
|
+
puts ' > Removing templates tagged for removal.'
|
11
|
+
templates = remove_templates(templates, options)
|
12
|
+
end
|
13
|
+
|
9
14
|
templates.each do |template|
|
15
|
+
next if template[:remove]
|
10
16
|
abort("No target destination set for template: #{template[:source]}!") if !template[:target]
|
11
17
|
abort("No source or data for template: #{template[:target]}") if !template[:source] && !template[:data]
|
12
|
-
|
18
|
+
abort("Source file does not exist at: #{template[:source]}") if ! File.exist?(template[:source])
|
19
|
+
|
13
20
|
target = template[:target]
|
14
21
|
source = template[:source] || '-- encoded data --'
|
15
22
|
dir_perms = template[:dir_perms]
|
@@ -19,12 +26,13 @@ module DanarchyDeploy
|
|
19
26
|
puts " Source: #{source}"
|
20
27
|
puts " |> Dir Permissions: #{dir_perms || '--undefined--'}"
|
21
28
|
puts " |> File Permissions: #{file_perms || '--undefined--'}"
|
22
|
-
|
29
|
+
if options[:vars_verbose] && @variables
|
30
|
+
puts ' |> Variables: '
|
31
|
+
var = DanarchyDeploy::Helpers.hash_except(@variables, '^pass')
|
32
|
+
puts var
|
33
|
+
end
|
23
34
|
|
24
|
-
targetdir = File.dirname(target)
|
25
35
|
tmpdir = options[:deploy_dir] + '/' + File.basename(File.dirname(target))
|
26
|
-
p tmpdir
|
27
|
-
Dir.exist?(targetdir) || FileUtils.mkdir_p(targetdir, mode: 0755)
|
28
36
|
Dir.exist?(tmpdir) || FileUtils.mkdir_p(tmpdir, mode: 0755)
|
29
37
|
tmpfile = tmpdir + '/' + File.basename(target) + '.tmp'
|
30
38
|
|
@@ -35,25 +43,25 @@ module DanarchyDeploy
|
|
35
43
|
end
|
36
44
|
|
37
45
|
File.open(tmpfile, 'w') do |f|
|
38
|
-
result = ERB.new(File.read(source)).result(binding)
|
46
|
+
result = ERB.new(File.read(source), nil, '-').result(binding)
|
39
47
|
f.write(result)
|
40
48
|
f.close
|
41
49
|
end
|
42
50
|
|
43
51
|
result = { write_erb: [], verify_permissions: {} }
|
44
52
|
if options[:pretend]
|
45
|
-
diff(target, tmpfile)
|
46
|
-
puts "\n
|
53
|
+
diff(target, tmpfile) if options[:vars_verbose]
|
54
|
+
puts "\n - Fake Run: Not changing '#{target}'."
|
47
55
|
result[:verify_permissions][File.dirname(tmpfile)] = verify_permissions(File.dirname(tmpfile), dir_perms, options)
|
48
56
|
result[:verify_permissions][tmpfile] = verify_permissions(tmpfile, file_perms, options)
|
49
57
|
elsif md5sum(target,tmpfile) == true
|
50
|
-
puts "\n
|
58
|
+
puts "\n - No change in '#{target}': Nothing to update here."
|
51
59
|
result[:verify_permissions][File.dirname(target)] = verify_permissions(File.dirname(target), dir_perms, options)
|
52
60
|
result[:verify_permissions][target] = verify_permissions(target, file_perms, options)
|
53
61
|
else
|
54
|
-
diff(target, tmpfile)
|
62
|
+
diff(target, tmpfile) if options[:vars_verbose]
|
55
63
|
result[:write_erb] = enable_erb(target, tmpfile)
|
56
|
-
puts "
|
64
|
+
puts " |+ #{target} was updated!"
|
57
65
|
result[:verify_permissions][File.dirname(target)] = verify_permissions(File.dirname(target), dir_perms, options)
|
58
66
|
result[:verify_permissions][target] = verify_permissions(target, file_perms, options)
|
59
67
|
end
|
@@ -69,6 +77,7 @@ module DanarchyDeploy
|
|
69
77
|
chmod = nil
|
70
78
|
puts "\n > Verifying ownership and permissions for '#{target}'"
|
71
79
|
if perms
|
80
|
+
puts " |+ Setting file mode to: #{perms[:mode]}"
|
72
81
|
(owner, group, mode) = perms[:owner], perms[:group], perms[:mode]
|
73
82
|
else
|
74
83
|
if File.stat(target).mode & 07777 == '0777'.to_i(8)
|
@@ -142,11 +151,11 @@ module DanarchyDeploy
|
|
142
151
|
|
143
152
|
def self.diff(target, tmpfile)
|
144
153
|
if File.exist?(target) && File.exist?(tmpfile)
|
145
|
-
puts "\n
|
154
|
+
puts "\n!! Diff between #{target} <=> #{tmpfile}"
|
146
155
|
IO.popen("diff -Naur #{target} #{tmpfile}") do |o|
|
147
156
|
puts o.read
|
148
157
|
end
|
149
|
-
puts "\n
|
158
|
+
puts "\n!! End Diff \n\n"
|
150
159
|
elsif File.exist?(target) && !File.exist?(tmpfile)
|
151
160
|
return false
|
152
161
|
end
|
@@ -154,11 +163,42 @@ module DanarchyDeploy
|
|
154
163
|
|
155
164
|
def self.enable_erb(target, tmpfile)
|
156
165
|
puts "\n |+ Moving #{tmpfile} => #{target}"
|
166
|
+
targetdir = File.dirname(target)
|
167
|
+
Dir.exist?(targetdir) || FileUtils.mkdir_p(targetdir, mode: 0755)
|
157
168
|
system("mv #{tmpfile} #{target}")
|
158
169
|
end
|
159
170
|
|
160
171
|
def self.write_tmpfile(source, data)
|
161
172
|
File.write(source, data)
|
162
173
|
end
|
174
|
+
|
175
|
+
def self.remove_templates(templates, options)
|
176
|
+
templates.delete_if do |template|
|
177
|
+
if template.keys.include?(:remove)
|
178
|
+
if options[:pretend]
|
179
|
+
puts " - Fake Run - Would have removed: '#{template[:target]}'."
|
180
|
+
false
|
181
|
+
elsif File.exist?(template[:target])
|
182
|
+
puts " |- Removing: #{template[:target]}"
|
183
|
+
File.delete(template[:target])
|
184
|
+
|
185
|
+
dirname = File.dirname(template[:target])
|
186
|
+
if Dir.exist?(dirname) && Dir.empty?(dirname)
|
187
|
+
puts " |- Removing empty directory: #{dirname}"
|
188
|
+
Dir.rmdir(dirname)
|
189
|
+
if Dir.exist?(dirname)
|
190
|
+
puts " ! Failed to remove directory!"
|
191
|
+
else
|
192
|
+
puts " - Removed directory."
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
true
|
197
|
+
end
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
templates
|
202
|
+
end
|
163
203
|
end
|
164
204
|
end
|
@@ -5,8 +5,9 @@ module DanarchyDeploy
|
|
5
5
|
puts "\n" + self.name
|
6
6
|
(useradd_result, userdel_result, archives_result) = nil
|
7
7
|
|
8
|
-
deployment[:users].each do |user|
|
9
|
-
|
8
|
+
deployment[:users].each do |username, user|
|
9
|
+
user[:username] = username.to_s
|
10
|
+
puts "\n > Checking if user '#{user[:username]}' already exists."
|
10
11
|
usercheck_result = usercheck(user, options)
|
11
12
|
|
12
13
|
if usercheck_result[:stdout]
|
@@ -24,6 +25,7 @@ module DanarchyDeploy
|
|
24
25
|
|
25
26
|
puts " |+ Adding user: #{user[:username]}"
|
26
27
|
useradd_result = useradd(user, options)
|
28
|
+
File.chmod(0750, user[:home]) if Dir.exist?(user[:home])
|
27
29
|
end
|
28
30
|
|
29
31
|
if !options[:pretend]
|
@@ -46,10 +48,12 @@ module DanarchyDeploy
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
|
-
if user[:
|
50
|
-
puts " >
|
51
|
-
DanarchyDeploy::
|
51
|
+
if user[:applications]
|
52
|
+
puts "\n > Checking #{user[:username]}'s applications."
|
53
|
+
user = DanarchyDeploy::Applicator.new(deployment[:os], user, options)
|
52
54
|
end
|
55
|
+
|
56
|
+
user.delete(:username)
|
53
57
|
end
|
54
58
|
|
55
59
|
# [useradd_result, userdel_result]
|
@@ -60,16 +64,13 @@ module DanarchyDeploy
|
|
60
64
|
def self.useradd(user, options)
|
61
65
|
useradd_cmd = "useradd #{user[:username]} "
|
62
66
|
useradd_cmd += "--home-dir #{user[:home]} " if user[:home]
|
67
|
+
useradd_cmd += "--create-home " if !Dir.exist?(user[:home])
|
63
68
|
useradd_cmd += "--uid #{user[:uid]} " if user[:uid]
|
64
69
|
useradd_cmd += "--gid #{user[:gid]} " if user[:gid]
|
65
70
|
useradd_cmd += "--groups #{user[:groups].join(',')} " if user[:groups]
|
66
71
|
useradd_cmd += "--shell /sbin/nologin " if user[:nologin]
|
67
72
|
useradd_cmd += "--system " if user[:system]
|
68
|
-
|
69
|
-
puts "\tFake run: #{useradd_cmd}"
|
70
|
-
else
|
71
|
-
DanarchyDeploy::Helpers.run_command(useradd_cmd, options)
|
72
|
-
end
|
73
|
+
DanarchyDeploy::Helpers.run_command(useradd_cmd, options)
|
73
74
|
end
|
74
75
|
|
75
76
|
def self.userdel(user, options)
|
@@ -95,11 +96,19 @@ module DanarchyDeploy
|
|
95
96
|
def self.updategroups(user, options)
|
96
97
|
groups = user[:groups].join(',')
|
97
98
|
groupupdate_cmd = "usermod #{user[:username]} --groups #{groups}"
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
99
|
+
DanarchyDeploy::Helpers.run_command(groupupdate_cmd, options)
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.add_to_group(user, options)
|
103
|
+
groups = user[:groups].join(',')
|
104
|
+
groupadd_cmd = "usermod #{user[:username]} --groups #{groups} --append"
|
105
|
+
DanarchyDeploy::Helpers.run_command(groupadd_cmd, options)
|
106
|
+
end
|
107
|
+
|
108
|
+
def self.remove_from_group(user, group, options)
|
109
|
+
groups = user[:groups].join(',')
|
110
|
+
removegroup_cmd = "gpasswd --remove #{user[:username]} #{group}"
|
111
|
+
DanarchyDeploy::Helpers.run_command(removegroup_cmd, options)
|
103
112
|
end
|
104
113
|
|
105
114
|
def self.authorized_keys(user)
|
@@ -109,15 +118,17 @@ module DanarchyDeploy
|
|
109
118
|
Dir.exist?(ssh_path) || Dir.mkdir(ssh_path, 0700)
|
110
119
|
File.chown(user[:uid], user[:gid], ssh_path)
|
111
120
|
File.open(authkeys, 'a+') do |f|
|
121
|
+
contents = f.read
|
112
122
|
user[:authorized_keys].each do |authkey|
|
113
|
-
if
|
123
|
+
if contents.include?(authkey)
|
124
|
+
puts " - Key already in place: #{authkey}"
|
125
|
+
else
|
114
126
|
puts " + Adding authorized_key: #{authkey}"
|
115
127
|
f.puts authkey
|
116
|
-
else
|
117
|
-
puts ' - No change needed'
|
118
128
|
end
|
119
129
|
end
|
120
130
|
|
131
|
+
f.chown(user[:uid], user[:gid])
|
121
132
|
f.close
|
122
133
|
end
|
123
134
|
end
|
@@ -132,7 +143,6 @@ module DanarchyDeploy
|
|
132
143
|
puts ' - No change needed'
|
133
144
|
end
|
134
145
|
|
135
|
-
f.chown(user[:uid], user[:gid])
|
136
146
|
f.close
|
137
147
|
end
|
138
148
|
end
|
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.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan James
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: danarchy_couchdb
|
@@ -30,42 +30,42 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1
|
33
|
+
version: '2.1'
|
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: '1
|
40
|
+
version: '2.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
47
|
+
version: '13.0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
54
|
+
version: '13.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: mongo
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
62
|
-
type: :
|
61
|
+
version: '2.13'
|
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: '
|
68
|
+
version: '2.13'
|
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:
|
@@ -90,11 +90,34 @@ files:
|
|
90
90
|
- bin/setup
|
91
91
|
- danarchy_deploy.gemspec
|
92
92
|
- lib/danarchy_deploy.rb
|
93
|
+
- lib/danarchy_deploy/applicator.rb
|
94
|
+
- lib/danarchy_deploy/applicator/nginx.rb
|
95
|
+
- lib/danarchy_deploy/applicator/phpfpm.rb
|
96
|
+
- lib/danarchy_deploy/applicator/redmine.rb
|
97
|
+
- lib/danarchy_deploy/applicator/ssl.rb
|
98
|
+
- lib/danarchy_deploy/applicator/wordpress.rb
|
99
|
+
- lib/danarchy_deploy/applicator/wordpress/wpcli.rb
|
100
|
+
- lib/danarchy_deploy/applicator/wordpress/wpcli_install.sh
|
101
|
+
- lib/danarchy_deploy/applicator/wordpress/wpconfig.rb
|
93
102
|
- lib/danarchy_deploy/archiver.rb
|
103
|
+
- lib/danarchy_deploy/archiver/svn.rb
|
94
104
|
- lib/danarchy_deploy/groups.rb
|
105
|
+
- lib/danarchy_deploy/hash_deep_merge.rb
|
95
106
|
- lib/danarchy_deploy/helpers.rb
|
96
107
|
- lib/danarchy_deploy/installer.rb
|
97
108
|
- lib/danarchy_deploy/services.rb
|
109
|
+
- lib/danarchy_deploy/services/init.rb
|
110
|
+
- lib/danarchy_deploy/services/init/openrc.rb
|
111
|
+
- lib/danarchy_deploy/services/init/systemd.rb
|
112
|
+
- lib/danarchy_deploy/services/mongodb.rb
|
113
|
+
- lib/danarchy_deploy/services/mysql.rb
|
114
|
+
- lib/danarchy_deploy/services/mysql/new_server.rb
|
115
|
+
- lib/danarchy_deploy/services/mysql/privileges.rb
|
116
|
+
- lib/danarchy_deploy/system.rb
|
117
|
+
- lib/danarchy_deploy/system/centos.rb
|
118
|
+
- lib/danarchy_deploy/system/debian.rb
|
119
|
+
- lib/danarchy_deploy/system/gentoo.rb
|
120
|
+
- lib/danarchy_deploy/system/opensuse.rb
|
98
121
|
- lib/danarchy_deploy/templater.rb
|
99
122
|
- lib/danarchy_deploy/users.rb
|
100
123
|
- lib/danarchy_deploy/version.rb
|
@@ -119,8 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
142
|
- !ruby/object:Gem::Version
|
120
143
|
version: '0'
|
121
144
|
requirements: []
|
122
|
-
|
123
|
-
rubygems_version: 2.6.14
|
145
|
+
rubygems_version: 3.0.3
|
124
146
|
signing_key:
|
125
147
|
specification_version: 4
|
126
148
|
summary: Pushes deployments locally or remotely based on a JSON/YAML/CouchDB template.
|