producer-stdlib 0.0.2
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 +7 -0
- data/lib/producer/stdlib/base.rb +6 -0
- data/lib/producer/stdlib/freebsd/ports.rb +29 -0
- data/lib/producer/stdlib/freebsd.rb +133 -0
- data/lib/producer/stdlib/fs.rb +29 -0
- data/lib/producer/stdlib/git.rb +22 -0
- data/lib/producer/stdlib/ssh.rb +34 -0
- data/lib/producer/stdlib/version.rb +5 -0
- data/lib/producer/stdlib.rb +20 -0
- data/producer-stdlib.gemspec +18 -0
- metadata +73 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ea82d4f4915bf9bd656fa07766375552ccf585e7
|
4
|
+
data.tar.gz: eb3788bc0b1424ffa775a23d03707b8ac7509290
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4b7e43a56e4e614bc3989d39fb1a32c785b9b5ca5b8bceb6956d3c16eeb8348e95df5518097966f1e37f4585be520065cf2db3cbb08a1b4be9782b24ddbee782
|
7
|
+
data.tar.gz: c7b0c32596fdee2224d97057793bf9e37ed759a362d5d3a0667b66542f46e8ef524e44f5e73bbe57d8e310ba5900dd9d59d7c01d0e4f8e8605cdbfe1db6bbf52
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Producer
|
2
|
+
module STDLib
|
3
|
+
module FreeBSD
|
4
|
+
module Ports
|
5
|
+
STDLib.define_macro :port_install do |port, options = {}|
|
6
|
+
make_args = []
|
7
|
+
|
8
|
+
condition { no_pkg? port }
|
9
|
+
|
10
|
+
make_args << '-DBATCH'
|
11
|
+
|
12
|
+
%w[with without].each do |e|
|
13
|
+
if options[e.to_sym]
|
14
|
+
make_args << "#{e.upcase}='%s'" % options[e.to_sym].map(&:upcase).join(' ')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
sh "cd /usr/ports/#{port} && make #{make_args.join ' '} install clean"
|
19
|
+
end
|
20
|
+
|
21
|
+
STDLib.define_macro :portmaster do |port|
|
22
|
+
condition { no_pkg? port }
|
23
|
+
|
24
|
+
sh "portmaster -bDG --no-confirm #{port}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
module Producer
|
2
|
+
module STDLib
|
3
|
+
module FreeBSD
|
4
|
+
require 'shellwords'
|
5
|
+
|
6
|
+
LOADER_CONF_PATH = '/boot/loader.conf'.freeze
|
7
|
+
RC_CONF_PATH = '/etc/rc.conf'.freeze
|
8
|
+
SYSCTL_CONF_PATH = '/etc/sysctl.conf'.freeze
|
9
|
+
PERIODIC_CONF_PATH = '/etc/periodic.conf'.freeze
|
10
|
+
MAKE_CONF_PATH = '/etc/make.conf'.freeze
|
11
|
+
|
12
|
+
|
13
|
+
STDLib.define_test(:rc_enabled?) do |service|
|
14
|
+
sh "service #{service} enabled > /dev/null"
|
15
|
+
end
|
16
|
+
|
17
|
+
STDLib.define_macro :rc_enable do |service|
|
18
|
+
condition { no_rc_enabled? service }
|
19
|
+
|
20
|
+
file_append RC_CONF_PATH, %{\n#{service}_enable=\"YES\"\n}
|
21
|
+
sh "service #{service} start"
|
22
|
+
end
|
23
|
+
|
24
|
+
STDLib.define_macro :hostname do |hostname|
|
25
|
+
rc_conf_value = "hostname=#{hostname}"
|
26
|
+
|
27
|
+
condition { no_file_contains RC_CONF_PATH, rc_conf_value }
|
28
|
+
|
29
|
+
file_replace_content RC_CONF_PATH, /^hostname=.+$/, rc_conf_value
|
30
|
+
end
|
31
|
+
|
32
|
+
# FIXME: refactor with file_add macro?
|
33
|
+
STDLib.define_macro :loader_conf do |conf|
|
34
|
+
condition { no_file_contains LOADER_CONF_PATH, conf }
|
35
|
+
|
36
|
+
file_append LOADER_CONF_PATH, "\n%s" % conf
|
37
|
+
end
|
38
|
+
|
39
|
+
# FIXME: refactor with file_add macro?
|
40
|
+
STDLib.define_macro :rc_conf do |conf|
|
41
|
+
condition { no_file_contains RC_CONF_PATH, conf }
|
42
|
+
|
43
|
+
file_append RC_CONF_PATH, "\n%s" % conf
|
44
|
+
end
|
45
|
+
|
46
|
+
# FIXME: refactor with file_add macro?
|
47
|
+
STDLib.define_macro :sysctl_conf do |conf|
|
48
|
+
condition { no_file_contains SYSCTL_CONF_PATH, conf }
|
49
|
+
|
50
|
+
file_append SYSCTL_CONF_PATH, "\n%s" % conf
|
51
|
+
end
|
52
|
+
|
53
|
+
# FIXME: refactor with file_add macro?
|
54
|
+
STDLib.define_macro :periodic_conf do |conf|
|
55
|
+
condition { no_file_contains PERIODIC_CONF_PATH, conf }
|
56
|
+
|
57
|
+
file_append PERIODIC_CONF_PATH, "\n%s" % conf
|
58
|
+
end
|
59
|
+
|
60
|
+
# FIXME: refactor with file_add macro?
|
61
|
+
STDLib.define_macro :ports_config do |config|
|
62
|
+
condition { no_file_contains MAKE_CONF_PATH, config }
|
63
|
+
|
64
|
+
file_write MAKE_CONF_PATH, config
|
65
|
+
end
|
66
|
+
|
67
|
+
STDLib.define_macro :chsh do |shell|
|
68
|
+
condition { no_env? :shell, shell }
|
69
|
+
|
70
|
+
sh "chsh -s #{shell}"
|
71
|
+
end
|
72
|
+
|
73
|
+
STDLib.define_macro :group_add do |group, gid = nil|
|
74
|
+
condition do
|
75
|
+
no_sh "getent group #{group}"
|
76
|
+
no_sh "getent group #{gid}" if gid
|
77
|
+
end
|
78
|
+
|
79
|
+
cmd = "pw group add #{group}"
|
80
|
+
cmd << " -g #{gid}" if gid
|
81
|
+
|
82
|
+
sh cmd
|
83
|
+
end
|
84
|
+
|
85
|
+
STDLib.define_macro :user_add do |user, opts = {}|
|
86
|
+
options = {
|
87
|
+
mask: '0700',
|
88
|
+
skel: '/var/empty',
|
89
|
+
shell: '/bin/sh',
|
90
|
+
pass: 'random'
|
91
|
+
}.merge opts
|
92
|
+
switches = {
|
93
|
+
uid: ?u,
|
94
|
+
name: ?c,
|
95
|
+
group: ?g,
|
96
|
+
groups: ?G,
|
97
|
+
mask: ?M,
|
98
|
+
skel: ?k,
|
99
|
+
shell: ?s,
|
100
|
+
pass: ?w
|
101
|
+
}
|
102
|
+
|
103
|
+
condition do
|
104
|
+
no_sh "getent passwd #{user}"
|
105
|
+
no_sh "getent passwd #{options[:uid]}" if options[:uid]
|
106
|
+
end
|
107
|
+
|
108
|
+
cmd = switches.inject("pw user add #{user} -m") do |m, (k, v)|
|
109
|
+
m << " -#{v} #{::Shellwords.escape(options[k])}" if options[k]
|
110
|
+
m
|
111
|
+
end
|
112
|
+
|
113
|
+
sh cmd
|
114
|
+
end
|
115
|
+
|
116
|
+
STDLib.define_test(:pkg?) { |pkg| sh "pkg info -eO #{pkg}" }
|
117
|
+
|
118
|
+
STDLib.define_macro :pkg_bootstrap do |repo_uri|
|
119
|
+
condition { no_sh 'pkg -N' }
|
120
|
+
|
121
|
+
# FIXME: must not disable signature
|
122
|
+
sh "PACKAGESITE=#{repo_uri} SIGNATURE_TYPE=NONE ASSUME_ALWAYS_YES=YES pkg bootstrap"
|
123
|
+
sh "PACKAGESITE=#{repo_uri} pkg update"
|
124
|
+
end
|
125
|
+
|
126
|
+
STDLib.define_macro :pkg_install do |pkg|
|
127
|
+
condition { no_pkg? pkg }
|
128
|
+
|
129
|
+
sh 'ASSUME_ALWAYS_YES=YES pkg install %s' % pkg
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Producer
|
2
|
+
module STDLib
|
3
|
+
module FS
|
4
|
+
STDLib.define_macro :ensure_dir do |path, mode|
|
5
|
+
mode ||= 0700
|
6
|
+
|
7
|
+
condition { no_dir? path }
|
8
|
+
|
9
|
+
mkdir path, mode
|
10
|
+
end
|
11
|
+
|
12
|
+
STDLib.define_macro :file_append_once do |path, content|
|
13
|
+
condition { no_file_contains path, content }
|
14
|
+
|
15
|
+
file_append path, content
|
16
|
+
end
|
17
|
+
|
18
|
+
STDLib.define_macro :file_write do |path, content|
|
19
|
+
file_write path, content
|
20
|
+
end
|
21
|
+
|
22
|
+
STDLib.define_macro :file_write_once do |path, content|
|
23
|
+
condition { no_file_eq path, content }
|
24
|
+
|
25
|
+
file_write path, content
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Producer
|
2
|
+
module STDLib
|
3
|
+
module Git
|
4
|
+
STDLib.define_test :git? do |path|
|
5
|
+
dir? "#{path}/.git"
|
6
|
+
end
|
7
|
+
|
8
|
+
STDLib.define_macro :git_clone do |repository, destination|
|
9
|
+
condition { no_git? destination }
|
10
|
+
|
11
|
+
sh "git clone --depth 1 #{repository} #{destination}"
|
12
|
+
end
|
13
|
+
|
14
|
+
STDLib.define_macro :git_update do |path|
|
15
|
+
git = "git -C #{path}"
|
16
|
+
|
17
|
+
sh "#{git} fetch origin"
|
18
|
+
sh "#{git} reset --hard origin"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Producer
|
2
|
+
module STDLib
|
3
|
+
module SSH
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
SSH_AUTHORIZED_KEYS_PATH = '.ssh/authorized_keys'.freeze
|
7
|
+
|
8
|
+
|
9
|
+
STDLib.define_macro :ssh_dir do
|
10
|
+
condition { no_dir? '.ssh' }
|
11
|
+
|
12
|
+
mkdir '.ssh', 0700
|
13
|
+
end
|
14
|
+
|
15
|
+
STDLib.define_macro :ssh_copy_id do |path = SSH_AUTHORIZED_KEYS_PATH|
|
16
|
+
condition { no_file? path }
|
17
|
+
|
18
|
+
# FIXME: remove this hack, should have proper keyword or another way
|
19
|
+
if !!condition
|
20
|
+
agent = Net::SSH::Authentication::Agent.connect
|
21
|
+
choices = agent.identities.map { |e| [e, e.comment] }
|
22
|
+
key = ask 'Which key do you want to copy?', choices
|
23
|
+
|
24
|
+
line = [
|
25
|
+
key.ssh_type,
|
26
|
+
::Base64.encode64(key.to_blob).gsub("\n", '')
|
27
|
+
].join ' '
|
28
|
+
|
29
|
+
file_write path, "#{line}\n", 0600
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Producer
|
2
|
+
module STDLib
|
3
|
+
class << self
|
4
|
+
def define_macro(name, &block)
|
5
|
+
::Producer::Core::Recipe::DSL.define_macro(name, block)
|
6
|
+
end
|
7
|
+
|
8
|
+
def define_test(name, &block)
|
9
|
+
::Producer::Core::Condition::DSL.define_test(name, block)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'producer/stdlib/fs'
|
14
|
+
require 'producer/stdlib/freebsd'
|
15
|
+
require 'producer/stdlib/freebsd/ports'
|
16
|
+
require 'producer/stdlib/git'
|
17
|
+
require 'producer/stdlib/ssh'
|
18
|
+
require 'producer/stdlib/version'
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.expand_path('../lib/producer/stdlib/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'producer-stdlib'
|
5
|
+
s.version = Producer::STDLib::VERSION.dup
|
6
|
+
s.summary = 'Provisioning tool'
|
7
|
+
s.description = <<-eoh.gsub(/^ +/, '')
|
8
|
+
Standard library for producer (gem: producer-core).
|
9
|
+
eoh
|
10
|
+
s.homepage = 'https://rubygems.org/gems/producer-stdlib'
|
11
|
+
|
12
|
+
s.authors = 'Thibault Jouan'
|
13
|
+
s.email = 'tj@a13.fr'
|
14
|
+
|
15
|
+
s.files = `git ls-files`.split $/
|
16
|
+
|
17
|
+
s.add_dependency 'producer-core', '~> 0.2', '>= 0.2.13'
|
18
|
+
end
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: producer-stdlib
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Thibault Jouan
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: producer-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.2'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.2.13
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.2'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.2.13
|
33
|
+
description: |
|
34
|
+
Standard library for producer (gem: producer-core).
|
35
|
+
email: tj@a13.fr
|
36
|
+
executables: []
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files: []
|
39
|
+
files:
|
40
|
+
- lib/producer/stdlib.rb
|
41
|
+
- lib/producer/stdlib/base.rb
|
42
|
+
- lib/producer/stdlib/freebsd.rb
|
43
|
+
- lib/producer/stdlib/freebsd/ports.rb
|
44
|
+
- lib/producer/stdlib/fs.rb
|
45
|
+
- lib/producer/stdlib/git.rb
|
46
|
+
- lib/producer/stdlib/ssh.rb
|
47
|
+
- lib/producer/stdlib/version.rb
|
48
|
+
- producer-stdlib.gemspec
|
49
|
+
homepage: https://rubygems.org/gems/producer-stdlib
|
50
|
+
licenses: []
|
51
|
+
metadata: {}
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 2.2.2
|
69
|
+
signing_key:
|
70
|
+
specification_version: 4
|
71
|
+
summary: Provisioning tool
|
72
|
+
test_files: []
|
73
|
+
has_rdoc:
|