Compare commits
250 Commits
d7bc5e6f08
...
feature/23
| Author | SHA1 | Date | |
|---|---|---|---|
|
6607474370
|
|||
| ec9b912e45 | |||
|
d53ba42a1d
|
|||
|
a99f7f7574
|
|||
|
1c8ee14bb3
|
|||
| cdedf49be3 | |||
|
5e727ec279
|
|||
|
9d928298d2
|
|||
|
1174661b46
|
|||
| 2dff7cf850 | |||
|
232360efba
|
|||
|
8b8e8f3438
|
|||
|
522c213b09
|
|||
|
80eddfbf56
|
|||
|
7e664723a1
|
|||
|
f5961af7fe
|
|||
|
d1301dad3e
|
|||
|
42c46a5645
|
|||
|
5be9081613
|
|||
|
1649d03665
|
|||
|
b9a3910364
|
|||
|
9835b85181
|
|||
|
dbccd9d2bf
|
|||
|
1a5f312699
|
|||
| f843a31e03 | |||
|
ff313525c8
|
|||
|
cfb379741e
|
|||
|
0c29fad404
|
|||
| 416935d8b5 | |||
|
2b6f81c5d6
|
|||
| 18496bb0da | |||
|
d878b4208e
|
|||
|
d31440d235
|
|||
|
6f287f14ef
|
|||
|
b77df3d0db
|
|||
| f7f5a0069d | |||
|
989185f951
|
|||
|
4cbda69a6b
|
|||
|
6931fe05d0
|
|||
|
b248ef70db
|
|||
|
45159ad4e7
|
|||
| 612cd0c55e | |||
|
83380047bb
|
|||
|
8aebb386a4
|
|||
| a8c4f0bd0e | |||
|
12b4fb37fa
|
|||
|
263eb88b72
|
|||
|
25ee38fe27
|
|||
| e701938442 | |||
| 309bc45791 | |||
|
82a4af05ef
|
|||
|
4a8ab3abe3
|
|||
|
21de964e1b
|
|||
|
b4ddfd19e3
|
|||
|
08c604962c
|
|||
| 089574d0de | |||
|
d19a8eebfb
|
|||
|
c0487d0e13
|
|||
|
023a4261cd
|
|||
|
fea65404cf
|
|||
| 5139f242a4 | |||
|
9c2aa9faaa
|
|||
|
164b974eb8
|
|||
|
6e4cc48068
|
|||
|
c2bd03dc23
|
|||
|
210a83a686
|
|||
| 49db14869d | |||
| 000a13cec4 | |||
|
5f7701c288
|
|||
|
bcaee3bb21
|
|||
|
f352901582
|
|||
|
5c1c63f94e
|
|||
|
98543f3e7d
|
|||
|
7ab83d3d82
|
|||
|
b5020efdd5
|
|||
| 2763244fdc | |||
|
e10e54c12a
|
|||
|
6114f0f799
|
|||
|
a2ec41b68a
|
|||
|
715fdbc2ba
|
|||
|
211a613e5c
|
|||
|
d3c22ea787
|
|||
| 6047ea3f84 | |||
|
7d478f0183
|
|||
|
88e96747e3
|
|||
|
4b04aa7cd9
|
|||
|
2597e211ed
|
|||
|
f96faf9fa2
|
|||
|
c32e8bc9e5
|
|||
|
|
24b22b8f91 | ||
|
456ec7a5fa
|
|||
|
daadd9374f
|
|||
|
98acd429de
|
|||
|
cfa7da2051
|
|||
|
0d3082e1c8
|
|||
|
e1007f7886
|
|||
|
292366a77f
|
|||
|
ed998fc1d3
|
|||
|
8a97ebf4f8
|
|||
|
ca3f06f831
|
|||
|
1576a8e731
|
|||
|
6e3fb80565
|
|||
|
|
295d95c048
|
||
| 789532fae9 | |||
|
|
404f492e6e
|
||
|
|
574f78f128
|
||
| f4d1009473 | |||
|
|
69af908f6b
|
||
|
|
e8880ded90
|
||
|
|
10dd3bf16e
|
||
|
|
ca580bcfe2
|
||
| 5b0cb438ba | |||
|
|
5a4cdf9c30
|
||
|
|
b3f2ca415e
|
||
|
|
05ccbcc58f
|
||
|
|
e3c4bf8969
|
||
|
|
cc6cebb8a2
|
||
|
|
4dbc960eed
|
||
| ce47072b0d | |||
|
|
7805182457
|
||
|
|
769ac4a081
|
||
|
|
b1763cd032
|
||
|
|
c746b38ebf
|
||
| 0a58cac0cf | |||
|
|
42c04538d8
|
||
|
|
c9ad3c2d18
|
||
|
|
fbad0bf896
|
||
|
|
8a7eeb1dd9
|
||
|
|
568197737a
|
||
|
|
738e96f7e4
|
||
|
|
87411274ae
|
||
|
|
ce00852bba
|
||
|
|
366c0c0d3c | ||
|
|
89d00afd1c | ||
|
|
e4abfb1b75 | ||
|
|
335a082171 | ||
|
|
9d0ff358ef | ||
|
|
495a4231fb | ||
|
|
51068e5259 | ||
|
|
fbcf1ed5e7
|
||
|
|
158a9c2fbe
|
||
|
|
1e9878d17e
|
||
|
|
3df7a386e6
|
||
| cbeddefa34 | |||
|
|
aefd01d38d
|
||
|
|
5765c08d6e
|
||
|
|
aaae90bc0d
|
||
|
|
087616b6b6
|
||
|
|
390753faa3
|
||
|
|
1a3516904d
|
||
| adafb132ee | |||
|
|
8071f44f41
|
||
|
|
05d04fe76c
|
||
| 231811f9d0 | |||
|
|
9fa7d8b28f
|
||
| 5fbc48df9a | |||
|
|
925a5da239
|
||
|
|
3d3156a031
|
||
| 2c33ee79f2 | |||
|
|
abc168ebf1
|
||
| 873c235539 | |||
|
|
65d71d6a73
|
||
|
|
832075dfb2
|
||
| 1c9e28448f | |||
|
|
3505212e92
|
||
|
|
2d3872a692
|
||
|
|
eb1303a8da
|
||
| 9af38219af | |||
|
|
08d9819fd2
|
||
|
|
f0968aae5b
|
||
| b4ce426ce9 | |||
|
|
e65c58ff6c
|
||
| cc8264432c | |||
|
|
1650e429a8
|
||
|
|
123b304dd0
|
||
|
|
bbd25ebb9c
|
||
|
|
ec43f4ee0f
|
||
|
|
eab94090e8
|
||
|
|
7f2805831c
|
||
|
|
0f12a54eab
|
||
|
|
68b56789c5
|
||
|
|
438ee4ace0
|
||
|
|
27bdc1f60d
|
||
|
|
cb0fc27134
|
||
|
|
b149264919
|
||
|
|
53c35fda51
|
||
|
|
bb2f41fdb3
|
||
|
|
027d0ed570
|
||
|
|
1362da0add
|
||
|
|
15b2ea284a
|
||
|
|
ad59913555
|
||
|
|
1bad2939de
|
||
|
|
7b5d46c813
|
||
|
|
98d423aa70
|
||
|
|
4b14297f83
|
||
|
|
1681942fb1
|
||
|
|
4d528d67ef
|
||
|
|
53abc2ec9a
|
||
|
|
543b482adb
|
||
|
|
87657db8a7
|
||
|
|
4b0b4b8d80
|
||
|
|
77c97607d5
|
||
|
|
4b08e4fc8c
|
||
| 507a812f33 | |||
|
|
fb708743cc
|
||
|
|
9568b7072d
|
||
|
|
a85bbc4a3e
|
||
| 266b17eb98 | |||
| 7d9faf40d8 | |||
|
|
149760702b
|
||
|
|
ec77e19ab0
|
||
|
|
baab02515c
|
||
|
|
c48dd4c997
|
||
|
|
e5805169f5
|
||
|
|
be072fb985 | ||
|
|
0fc388f43c | ||
|
|
27b466f30d | ||
|
|
1a19fa012d | ||
|
|
7b0313fbd4 | ||
|
|
1183f6a621 | ||
|
|
05daff9029 | ||
|
|
307ccbd561 | ||
|
|
cc91aab155 | ||
|
|
bf72367cf2 | ||
|
|
4e0bd191c3 | ||
|
|
96f45b1f63 | ||
|
|
030dbc3584 | ||
|
|
84ffb46ed5 | ||
|
|
491cd31fac | ||
|
|
2acf4c2b59 | ||
|
|
df1143525d | ||
|
|
d79dcd8e65 | ||
|
|
c1e2145ba1 | ||
|
|
d077dfdcf2 | ||
|
|
8a3c519a6c | ||
|
|
abb652cc2b | ||
|
|
b7c36d427e | ||
|
|
1bdcda0e97 | ||
|
|
0a15199364 | ||
|
|
aebf0a12e8 | ||
|
|
2950ab5bfc | ||
| 8072fafa46 | |||
|
|
2637d755af | ||
|
|
b550c1b79e | ||
|
|
1f29d8a01a | ||
|
|
462bdabf01 | ||
|
|
7683de09a2 | ||
|
|
68ce3c4834 | ||
|
|
916ae8094c | ||
|
|
05834b6013 |
@@ -26,8 +26,7 @@ knife[:automatic_attribute_whitelist] = %w[
|
||||
chef_packages
|
||||
]
|
||||
|
||||
knife[:default_attribute_whitelist] = []
|
||||
knife[:normal_attribute_whitelist] = ['knife_zero', 'kosmos_kvm', 'kosmos-ejabberd']
|
||||
knife[:override_attribute_whitelist] = []
|
||||
|
||||
knife[:allowed_normal_attributes] = ['knife_zero', 'kosmos_kvm', 'kosmos-ejabberd']
|
||||
# Added to /etc/chef/client.rb on node bootstrap
|
||||
# https://docs.chef.io/attribute_persistence/
|
||||
knife[:normal_attribute_allowlist] = ['knife_zero', 'kosmos_kvm', 'kosmos-ejabberd', 'openresty']
|
||||
knife[:allowed_normal_attributes] = ['knife_zero', 'kosmos_kvm', 'kosmos-ejabberd', 'openresty']
|
||||
|
||||
9
.gitmodules
vendored
9
.gitmodules
vendored
@@ -1,3 +1,12 @@
|
||||
[submodule "site-cookbooks/postgresql"]
|
||||
path = site-cookbooks/postgresql
|
||||
url = git@github.com:67P/postgresql.git
|
||||
[submodule "site-cookbooks/openresty"]
|
||||
path = site-cookbooks/openresty
|
||||
url = https://github.com/67P/chef-openresty.git
|
||||
[submodule "site-cookbooks/strfry"]
|
||||
path = site-cookbooks/strfry
|
||||
url = git@gitea.kosmos.org:kosmos/strfry-cookbook.git
|
||||
[submodule "site-cookbooks/deno"]
|
||||
path = site-cookbooks/deno
|
||||
url = git@gitea.kosmos.org:kosmos/deno-cookbook.git
|
||||
|
||||
82
Berksfile
82
Berksfile
@@ -2,54 +2,44 @@
|
||||
|
||||
source 'https://supermarket.chef.io'
|
||||
|
||||
cookbook 'mediawiki',
|
||||
git: 'https://github.com/67P/mediawiki-cookbook.git',
|
||||
ref: 'nginx'
|
||||
cookbook 'redisio', '~> 6.4.1'
|
||||
cookbook 'postfix', '= 5.0.2'
|
||||
cookbook 'php', '~> 8.0.0'
|
||||
cookbook 'composer', '~> 2.7.0'
|
||||
cookbook 'poise-ruby-build', '~> 1.1.0'
|
||||
cookbook 'application', '~> 5.2.0'
|
||||
cookbook 'application_javascript', '~> 1.0.0'
|
||||
cookbook 'application_git', '= 1.1.0' # 1.2.0 doesn't work with knife-solo
|
||||
cookbook 'poise', '~> 2.8.2'
|
||||
cookbook 'poise-languages', '~> 2.1.1'
|
||||
cookbook 'poise-javascript', git: 'https://github.com/67p/poise-javascript.git',
|
||||
ref: 'e5fff15'
|
||||
cookbook 'poise-archive', '~> 1.5.0'
|
||||
cookbook 'poise-service', '~> 1.5.2'
|
||||
cookbook 'users', '~> 5.3.1'
|
||||
cookbook 'hostname', '= 0.4.2'
|
||||
cookbook 'firewall', '~> 2.6.3'
|
||||
cookbook 'nginx', '= 9.0.0'
|
||||
cookbook 'fail2ban', '~> 7.0.4'
|
||||
# Remove when cookbooks stop depending on it, the build_essential resource is
|
||||
# part of Chef 14 (https://docs.chef.io/resource_build_essential.html)
|
||||
cookbook 'build-essential', '~> 8.2.1'
|
||||
cookbook 'mysql', '~> 8.7.3'
|
||||
# cookbook 'postgresql', '= 7.1.8'
|
||||
cookbook 'apt', '~> 7.3.0'
|
||||
cookbook 'git', '~> 10.0.0'
|
||||
cookbook 'hostsfile', '~> 3.0.1'
|
||||
cookbook 'ohai', '~> 5.2.5'
|
||||
cookbook 'nodejs', '~> 7.3.1'
|
||||
cookbook 'timezone_iii', '= 1.0.4'
|
||||
cookbook 'ark', '>= 5.0.0'
|
||||
cookbook 'logrotate', '= 2.2.0'
|
||||
cookbook 'openssl', '~> 8.5.5'
|
||||
cookbook 'ntp', '= 3.4.0'
|
||||
cookbook 'apache2', '= 3.3.0'
|
||||
cookbook 'chef-sugar', '= 5.1.12'
|
||||
cookbook 'compat_resource', '= 12.19.0'
|
||||
cookbook 'homebrew', '= 3.0.0'
|
||||
cookbook 'mariadb', '= 0.3.1'
|
||||
cookbook 'elasticsearch', '~> 5.1.3'
|
||||
cookbook 'firewall', '~> 6.2.16'
|
||||
cookbook 'redisio', '~> 6.4.1'
|
||||
cookbook 'ruby_build', '~> 2.5.0'
|
||||
|
||||
cookbook 'ipfs',
|
||||
git: 'https://gitea.kosmos.org/kosmos/ipfs-cookbook.git',
|
||||
ref: 'v0.7.0'
|
||||
cookbook 'elasticsearch', '= 4.3.0'
|
||||
cookbook 'java', '~> 4.3.0'
|
||||
cookbook 'ulimit', '~> 1.0.0'
|
||||
cookbook 'mediawiki',
|
||||
git: 'https://github.com/67P/mediawiki-cookbook.git',
|
||||
ref: 'nginx'
|
||||
|
||||
cookbook 'apache2', '= 3.3.0'
|
||||
cookbook 'apt', '~> 7.3.0'
|
||||
cookbook 'ark', '>= 5.0.0'
|
||||
cookbook 'composer', '~> 2.7.0'
|
||||
cookbook 'fail2ban', '~> 7.0.4'
|
||||
cookbook 'git', '~> 10.0.0'
|
||||
cookbook 'golang', '~> 5.3.1'
|
||||
cookbook 'gpg', '~> 2.0.13'
|
||||
cookbook 'hostname', '= 0.4.2'
|
||||
cookbook 'hostsfile', '~> 3.0.1'
|
||||
cookbook 'java', '~> 4.3.0'
|
||||
cookbook 'logrotate', '= 2.2.0'
|
||||
cookbook 'mysql', '~> 8.7.3'
|
||||
cookbook 'nginx', '= 9.0.0'
|
||||
cookbook 'nodejs', '~> 7.3.1'
|
||||
cookbook 'ntp', '= 3.4.0'
|
||||
cookbook 'ohai', '~> 5.2.5'
|
||||
cookbook 'openssl', '~> 8.5.5'
|
||||
cookbook 'php', '~> 8.0.0'
|
||||
cookbook 'postfix', '~> 6.0.26'
|
||||
cookbook 'timezone_iii', '= 1.0.4'
|
||||
cookbook 'ulimit', '~> 1.0.0'
|
||||
cookbook 'users', '~> 5.3.1'
|
||||
cookbook 'zerotier', '~> 1.0.7'
|
||||
cookbook 'ruby_build', '~> 2.5.0'
|
||||
cookbook 'unbound', '~> 3.0.2'
|
||||
|
||||
# openresty dependency
|
||||
cookbook 'jemalloc', '~> 0.1.7'
|
||||
cookbook 'yum'
|
||||
|
||||
@@ -1,20 +1,14 @@
|
||||
DEPENDENCIES
|
||||
apache2 (= 3.3.0)
|
||||
application (~> 5.2.0)
|
||||
application_git (= 1.1.0)
|
||||
application_javascript (~> 1.0.0)
|
||||
apt (~> 7.3.0)
|
||||
ark (>= 5.0.0)
|
||||
build-essential (~> 8.2.1)
|
||||
chef-sugar (= 5.1.12)
|
||||
compat_resource (= 12.19.0)
|
||||
composer (~> 2.7.0)
|
||||
elasticsearch (= 4.3.0)
|
||||
elasticsearch (~> 5.1.3)
|
||||
fail2ban (~> 7.0.4)
|
||||
firewall (~> 2.6.3)
|
||||
firewall (~> 6.2.16)
|
||||
git (~> 10.0.0)
|
||||
golang (~> 5.3.1)
|
||||
homebrew (= 3.0.0)
|
||||
gpg (~> 2.0.13)
|
||||
hostname (= 0.4.2)
|
||||
hostsfile (~> 3.0.1)
|
||||
ipfs
|
||||
@@ -22,8 +16,8 @@ DEPENDENCIES
|
||||
revision: d7c25b6ce5fa490b6de3529fdc163fb64f1ece8a
|
||||
ref: v0.7.0
|
||||
java (~> 4.3.0)
|
||||
jemalloc (~> 0.1.7)
|
||||
logrotate (= 2.2.0)
|
||||
mariadb (= 0.3.1)
|
||||
mediawiki
|
||||
git: https://github.com/67P/mediawiki-cookbook.git
|
||||
revision: 78641e53635ba6cbd4a2a51fd597adb8fef1e8ad
|
||||
@@ -35,63 +29,40 @@ DEPENDENCIES
|
||||
ohai (~> 5.2.5)
|
||||
openssl (~> 8.5.5)
|
||||
php (~> 8.0.0)
|
||||
poise (~> 2.8.2)
|
||||
poise-archive (~> 1.5.0)
|
||||
poise-javascript
|
||||
git: https://github.com/67p/poise-javascript.git
|
||||
revision: e5fff15098ac80c2a625b8d77d4eaf39d48f7ba7
|
||||
ref: e5fff15
|
||||
poise-languages (~> 2.1.1)
|
||||
poise-ruby-build (~> 1.1.0)
|
||||
poise-service (~> 1.5.2)
|
||||
postfix (= 5.0.2)
|
||||
postfix (~> 6.0.26)
|
||||
redisio (~> 6.4.1)
|
||||
ruby_build (~> 2.5.0)
|
||||
timezone_iii (= 1.0.4)
|
||||
ulimit (~> 1.0.0)
|
||||
unbound (~> 3.0.2)
|
||||
users (~> 5.3.1)
|
||||
yum
|
||||
zerotier (~> 1.0.7)
|
||||
|
||||
GRAPH
|
||||
apache2 (3.3.0)
|
||||
application (5.2.0)
|
||||
poise (~> 2.4)
|
||||
poise-service (~> 1.0)
|
||||
application_git (1.1.0)
|
||||
application (~> 5.0)
|
||||
git (>= 0.0.0)
|
||||
poise (~> 2.0)
|
||||
application_javascript (1.0.0)
|
||||
application (~> 5.0)
|
||||
poise (~> 2.0)
|
||||
poise-javascript (~> 1.0)
|
||||
poise-service (~> 1.0)
|
||||
apt (7.3.0)
|
||||
ark (6.0.3)
|
||||
seven_zip (>= 3.1)
|
||||
build-essential (8.2.1)
|
||||
mingw (>= 1.1)
|
||||
seven_zip (>= 0.0.0)
|
||||
chef-sugar (5.1.12)
|
||||
chocolatey (3.0.0)
|
||||
compat_resource (12.19.0)
|
||||
composer (2.7.0)
|
||||
apt (>= 0.0.0)
|
||||
php (>= 0.0.0)
|
||||
windows (>= 0.0.0)
|
||||
elasticsearch (4.3.0)
|
||||
apt (>= 0.0.0)
|
||||
elasticsearch (5.1.3)
|
||||
ark (>= 0.0.0)
|
||||
chef-sugar (>= 0.0.0)
|
||||
yum (>= 0.0.0)
|
||||
fail2ban (7.0.4)
|
||||
yum-epel (>= 0.0.0)
|
||||
firewall (2.6.5)
|
||||
chef-sugar (>= 0.0.0)
|
||||
firewall (6.2.16)
|
||||
git (10.0.0)
|
||||
golang (5.3.1)
|
||||
ark (>= 6.0)
|
||||
homebrew (3.0.0)
|
||||
gpg (2.0.13)
|
||||
yum-epel (>= 0.0.0)
|
||||
homebrew (5.4.1)
|
||||
hostname (0.4.2)
|
||||
hostsfile (>= 0.0.0)
|
||||
hostsfile (3.0.1)
|
||||
@@ -100,16 +71,14 @@ GRAPH
|
||||
java (4.3.0)
|
||||
homebrew (>= 0.0.0)
|
||||
windows (>= 0.0.0)
|
||||
jemalloc (0.1.7)
|
||||
build-essential (>= 0.0.0)
|
||||
logrotate (2.2.0)
|
||||
mariadb (0.3.1)
|
||||
apt (>= 0.0.0)
|
||||
yum (>= 0.0.0)
|
||||
yum-epel (>= 0.0.0)
|
||||
mediawiki (0.5.0)
|
||||
apache2 (>= 0.0.0)
|
||||
nginx (>= 0.0.0)
|
||||
php (>= 0.0.0)
|
||||
mingw (2.1.3)
|
||||
mingw (2.1.7)
|
||||
seven_zip (>= 0.0.0)
|
||||
mysql (8.7.4)
|
||||
nginx (9.0.0)
|
||||
@@ -124,31 +93,7 @@ GRAPH
|
||||
openssl (8.5.5)
|
||||
php (8.0.1)
|
||||
yum-epel (>= 0.0.0)
|
||||
poise (2.8.2)
|
||||
poise-archive (1.5.0)
|
||||
poise (~> 2.6)
|
||||
poise-build-essential (1.0.0)
|
||||
poise (~> 2.6)
|
||||
poise-git (1.0.0)
|
||||
poise (~> 2.6)
|
||||
poise-languages (~> 2.1)
|
||||
poise-javascript (1.2.1)
|
||||
poise (~> 2.0)
|
||||
poise-languages (~> 2.0)
|
||||
poise-languages (2.1.2)
|
||||
poise (~> 2.5)
|
||||
poise-archive (~> 1.0)
|
||||
poise-ruby (2.4.0)
|
||||
poise (~> 2.0)
|
||||
poise-languages (~> 2.0)
|
||||
poise-ruby-build (1.1.0)
|
||||
poise (~> 2.0)
|
||||
poise-build-essential (~> 1.0)
|
||||
poise-git (~> 1.0)
|
||||
poise-ruby (~> 2.1)
|
||||
poise-service (1.5.2)
|
||||
poise (~> 2.0)
|
||||
postfix (5.0.2)
|
||||
postfix (6.0.26)
|
||||
redisio (6.4.1)
|
||||
selinux (>= 0.0.0)
|
||||
ruby_build (2.5.0)
|
||||
@@ -158,9 +103,10 @@ GRAPH
|
||||
seven_zip (4.2.2)
|
||||
timezone_iii (1.0.4)
|
||||
ulimit (1.0.0)
|
||||
unbound (3.0.2)
|
||||
users (5.3.1)
|
||||
windows (7.0.2)
|
||||
yum (7.2.0)
|
||||
yum (7.4.13)
|
||||
yum-epel (4.2.3)
|
||||
zerotier (1.0.7)
|
||||
ohai (>= 0.0.0)
|
||||
|
||||
@@ -306,6 +306,7 @@ GEM
|
||||
|
||||
PLATFORMS
|
||||
x86_64-darwin-18
|
||||
x86_64-darwin-19
|
||||
x86_64-linux
|
||||
|
||||
DEPENDENCIES
|
||||
|
||||
27
Vagrantfile
vendored
27
Vagrantfile
vendored
@@ -26,7 +26,7 @@ Vagrant.configure(2) do |config|
|
||||
ldap.vm.network "private_network", ip: "192.168.56.5"
|
||||
|
||||
ldap.vm.provision :chef_zero do |chef|
|
||||
chef.version = "17.10.0"
|
||||
chef.version = "18.2.7"
|
||||
chef.node_name = "vagrant-node-ldap"
|
||||
chef.arguments = "--chef-license accept"
|
||||
chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
|
||||
@@ -49,7 +49,7 @@ Vagrant.configure(2) do |config|
|
||||
# bitcoin.vm.synced_folder "../kredits/yap/", "/opt/yap"
|
||||
|
||||
bitcoin.vm.provision :chef_zero do |chef|
|
||||
chef.version = "15.13.8"
|
||||
chef.version = "18.2.7"
|
||||
chef.node_name = "vagrant-node-bitcoin"
|
||||
chef.arguments = "--chef-license accept"
|
||||
chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
|
||||
@@ -66,4 +66,27 @@ Vagrant.configure(2) do |config|
|
||||
end
|
||||
end
|
||||
|
||||
config.vm.define "openresty" do |openresty|
|
||||
openresty.vm.box = "bento/ubuntu-20.04"
|
||||
openresty.vm.network "forwarded_port", guest: 6379, host: 6379
|
||||
openresty.vm.network "private_network", ip: "192.168.56.7"
|
||||
|
||||
openresty.vm.provision :chef_zero do |chef|
|
||||
chef.version = "18.2.7"
|
||||
chef.node_name = "vagrant-openresty"
|
||||
chef.arguments = "--chef-license accept"
|
||||
chef.cookbooks_path = ["cookbooks", "site-cookbooks"]
|
||||
chef.data_bags_path = "data_bags"
|
||||
chef.roles_path = "roles"
|
||||
chef.nodes_path = "nodes"
|
||||
chef.environments_path = "environments"
|
||||
chef.encrypted_data_bag_secret_key_path = ".chef/encrypted_data_bag_secret"
|
||||
chef.environment = "development"
|
||||
|
||||
chef.add_recipe "kosmos-base"
|
||||
chef.add_role "openresty"
|
||||
chef.add_role "openresty_proxy"
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "barnard.kosmos.org",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Rr+3giLkr0xqZPRPn9Z\ngxvmAaUo6VSs1qnMfznNNN/CGCYett0ndEJp4wI8xp2fq75b2TSm4jqhqjtgYVVD\nEeSOKTZEnoE7YSssodGTAK5YnrVIPNyWd61Ih/NkHzCjlcuVX6sJD7z/pgK+WMao\nAAxzMrefvHALFBmJIxbugakru/nvDcQeV8DOF+UjzsO5CTC0BUzCFeXBG7HD3W+6\nP2wQlMKteM9uQU6Agx7XegeWS2Lfnxg1em5TNbw1PbLofROwr1pCUPfVzQ0CAVxm\nXLzmA2xtMqCT2j83DU9WleZPYiS0rg+r9T1jsDX0TyH4NTV8gO2SJ9BMUNcX+3Ox\nmQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "centaurus.kosmos.org",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsVV0j8DQSlefAAAmafjx\nyT1j1idLQF0oltTp2p4jFEsnEdFeP4Plpluy+detra1gM9sBBBuvRKGt8NP+Yoc7\nbnn7qU13E/nWUQh9n15+jjgUirXg7CxluKfj2VvsdchJRIvzDwwZz5sqITiGG7/S\n2r2KBBBnuGlGShQJZhhcLW4P+3YgxW8DUgUsRdvreVuvF1hcnaSymldfos1CqYL8\nawtsZ2rtdZHmZxfguXl91WBCu2OxsT13i3kInnDQsFB0tYKq+TFSLAHxneKTYPRW\ngYgP9RSBZ51iQ+6R1CenYsr4SePVCmwaZGb8bmd0QLvGKlBhjX29a5bE5tjzeoBD\nuwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "discourse-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxJBhKUtTcmjP8eG4aLNF\n9UfNU9lRIFhfywjFJjtXoYdNaUatZHE3s1HKND0SjJs5BRQbZBEKLxTHCgnPZD4U\nlRgZ65JtHwi+JNM6ac4TQm5JYKA++KxX7FtOiJV6oGX6foNoFVHrGi+fhTlLE9hL\npHRQWTpM8ErpUEj3VHez+k6KT1Mr3QO5T9L5kqu1BdTYwtyfXJE0VfyDKz/rwrvc\ngPvZd167p8YCTu/rWLG9X8tag+ySUR9cmlEn5sCsBLmq56Zurf0VIe/0tuGPI8DP\nAVc4dIXHsfGuKLwBfFPSDy9YbI7F8gbaD05UnUVn60IWPmWsE19K/iIc/OnJZwRO\nkQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "ejabberd-6",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqvGOanDqJOhf0xl/TYcs\nqYhhGz4ptFzxmfxiCMWbnbDcICBLHni28dJHhP2ggfUKOGcp+OIqiy783eRUrPsf\nnH9VmvTnz4NdXIB5J45FgBtfYiF9ZseaPL+ufTSCbZj7Ih3lzTAbO5Ug+UOj852B\nnnqH2Ht2jXMp2v3NW4gAG9QyRpr6P5cyVWBrMFExjuhNWg119tJv+33oGnflrNRi\njV3yGbRFRpqAomAVCr6DAA9SX/R8J3yKTky6MdRGrXKH/7eXH0ehDi33Y9Pyy9Ci\nkQX/JRHffuJeBF3Tndiojqdx81C6oIh2s/H3JMew/DdRxjzlPP4nemYWXv1/YVcS\nCwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "ejabberd-7",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzHfqcI/6w58gLwDFCKxw\n0TeKFOf4MFBnmUGsWyi8BEskkjh4QEDc4pUFeiVuEADFyBfCnALWh004nKhiwamc\nECybfAKlJryoQQEcYZC6H4rZf3SW7xPLk12X00YySNroYM50PM5Ly/G7MI9a669g\n6HNOgn1MYIEh8unpsAHjfKpx72bNutRYKKvBDaHXNvlJ459Jr8HNpERFk8IeaGcF\n4BKqf/MNxkQHOfy7R4ETXeLUBrgD13SmLbs6mM3lXS6IgkoeFyAvAPP4ZgwgiJ6w\nqIKsX4cRt8xnJJ+MTNBX4oc0f9+Gu8bUpr2JZ8tcwq3GUgDjv+JSJpk/uDzzbQUe\nIwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/email-1.json
Normal file
4
clients/email-1.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "email-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxDRdvMYKRjejoFsOxS6s\n4gj0Gsaxk/j25A5VPHBcEhr+NOh8W/6NnTTHuFMaorEIl/2kscgrcwriDN7xIFmO\nz/C1+spDLPMGSWd+422KSS3fjVfByLlMwxh171RDZBlZVze7H7CIV/rxCG7Ri85y\nPvyp2rT4ioyVGyYK3e8CiXwQckpFC1ex9VRk/GR8zbCYUIw+qbTFRcl/mQuxKqWK\n22vrgAR+6OL8lcyhssmKiQ1r3GtxwJusgffw4/5S8sRR1z8OB4wiwgOWR1E36EbF\nhTBjFzPiKVjVjP/TQpUoYdnBhuD223M8nPWJl1HMVQPMjL6R2BBOF+iK0Wx9SiFD\nJwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "garage-3",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtRSB8/ObjvQq6WuOVS/f\nypdX/2fLsUlt5tQ8GNuSY9rSM8gdvcXUvnPlxthZO4yvcPX85wmtBZX8fRJFdkJg\nYRCJbuVKO9sLTq8OUWXYpfU1q10FUhl034zxOMslpxVB6toirnk025vyq9jbuKP+\nYO+c40KZr67mgm0hveJfylayfiKP1HGm4HrV0maFivCgC8D+MPDDv75CsqRe5WSc\nh2CoauDJwVlhKZ92yq87ugGBhJJRUGOQZcfEvkUGj/HNAS6tuHl8YmVmhO8hBdee\nNto6RF54E1zB80R9oT/qitw23miEyUcHHVxhTR4tTWflZgd8l4wDOhX3Nf20xknu\nFQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/garage-5.json
Normal file
4
clients/garage-5.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "garage-5",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnJxLFOBbml94W/GAe7nm\ntZs1Ziy8IbqXySsm8bSwWhRMQ8UuseqQLG30R3Q5X5AoJbtNfd26l63qLtP2fFtL\n5km9dV+2FoIJWFetl8Wzr7CaLYAiNzTQSFHlV7+6DKmPMDcJ63GKrFR77vkSGOG6\nOWL1bJy5BOaClp/sKL/0WQ0+mRbTP6RCQ2eI+46clAg702SenBU6Nz9HDm+teKN7\nYlP1CvzXgfgfpDOsat7wGn5+oKcmKavZxcdn8bt5jRpg8v3JezaZIjMXt7XcNS4n\n0F4XO/efnZE5B5SN68j4BpD8N79zJw4HlRIGP+RaYv2qLtBeWgLHCCs9wXQXfj6b\nLwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/garage-6.json
Normal file
4
clients/garage-6.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "garage-6",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwasYgWLM8ShvirFiKRE6\nGWqc3pMlvcrk4YnWAUW5Y/H26EnyexxWNfnwlEcq8thJ3M3hs7zkoF3Yk4uqX869\n4/niYqXwYgeE1K3gzLp4K1+w3yVupYAFVFStVEHJyuMlLJ+ulDEGvNdQDuIfw7+E\nr6DcDLa1o92Eo0wL1ihYyMilduH0LdFTixL+tEBXbbPWBa3RDJJCFsRF1+UC6hAH\nzmaWL661Gdzdabxjm/FlGUYkdbDqeInZq/1GMQqv+9/DcNRkWA9H7i4Ykrfpx4/2\nRZ8xtx/DbnJVB1zYoORygFMMAkTu5E+R8ropeI7Wi77Yq0S7laiRlYQYQml3x9ak\nzQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/garage-7.json
Normal file
4
clients/garage-7.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "garage-7",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwoAigZUSwsfbBHx2PQ6W\n38Ght6eCvbpW1lsS58hTieRmRn+pgZVjvixhsBh57rUasCjaBywXk9BpNj2Foxck\nReHeoDI0RHsgniClyMrYj80y2NhoB6J8NB+cHkhdzIKplm6AH6M5xaAedtZU639a\n1nHMtpDlJhzgIYsiq1q06Aqd1w0Z9tf1RXQ1WvMDhTY4wlE5RZ2epBb6Usnlbjo2\nSqCIGIjRLmZxdsSWoiUUTlVPdUCzTNsN5G/ZVdRswhgseDmVJCIkK2Aji/XzhIrR\nh4RvUv9dhFemOVsFctJ/dQILXz5MZLUgakKf970M5R/Zggv//pqRSsYcB2UfaBpV\nLQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/garage-8.json
Normal file
4
clients/garage-8.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "garage-8",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt4hXODzgHsIeWxXJm/F6\nSTFJ8JC89mWru7pOFzPWenOVMHgp4UpUB4rDTwQqojsWTDiq0x3ckUyOPw3Nj0jv\nxP4MMGS4SI0oRSJKzrYYss0hgUDTOBBd+Wxn0UiNEpN/PfQo9VZj9v/jak57cz7z\n5+rpl5v27fhgUIChjsHxdy+EamvCrYc+1JhyrLOlwlt8JxkZ8UPhoeZLWAbDgGLS\nEzHWSSVtBUPK+KYmVb2OK4lB56zPfek0U3gKN+04a1650jzOit8LzE6NaT180QDv\nX+gG6tk53vSXDmkBXsQ1mtB8aF+HaEG2Pra5HyihlweCPYdJT+e28wpq6+P5l3YR\ndQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "gitea-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0bp4I/f5dLL22GRHanLV\nw57sNBEWT3Vx32B24hScKNP5nYDW0dIRkt1c7SLEpe+diNgyIwk7JlI20Vl+oaVo\njdCpmHSB18yXxQT2Ub6aI8ApwFLECVA6SckekcwxLJc/oGRMB52PonI8opJOVbPa\nF+heZ5NNDiMvn3E8qODdMWSjDiJNSVLJgsCPFHAt32aJgLaXQTqG5lrmltaamscW\njGlFqiBJw/5saCkKBPdPwdX4RcDqvGX1FdE1LVB42cskv8CrnvEVFLBxKXAhAr6s\nNhOhenzLGHpy58tNoUoUw3v4WiPRtcnlNxeSVG5LKkjaK04f2oxeZx3SiSU/1naY\nkwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/her.json
Normal file
4
clients/her.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "her",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsuj7OCWX2qz/WbsjMgpi\nI4CM13Pxrj+8Enrl4IorkK6O338rhdtfXmOJt2AuDuj6u12Xtnk0LN2n01hffXNu\nU0Hwy+szavnbjiqC8jw1nyCFwYgdy8lCj3WV4t/gRWFhiHZGkhBKaksAoo8jJqZv\nXi/4ZuRov01HJgT6CJBEfR5TUaRCHM4hz2Y60mmegmUNLTRUNIDy6rg5W8JplMlJ\ny0dJc6uEp8asKhPnEfMz1kXukjnsBLXZmxglqdAQeaZ1I78QvRV3rYh0Ge2ZPF8t\nv2c+mUMbH7e80lJPgp7rwqjKrjLfaYo/1ZqTqr3ArWw3253ttLp8KX1ltX69nIHq\nMwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "jitsi-meet-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyNMD7N7s+JZM6PLlcrKN\n4jnr0jB5kU+Gr8EHtdpaBDGN5x8BahAkMuXcWfMQj4xIvUhTY4tTvDDYgcJGbrY4\ncmmt/YLX4t/OR6g2JxzIRWDBITTTlX7h5QUg10irjfPsyaU9O7lChDk4M3j5J4c2\nZFlZAar1+CeC5nwcEtNg4nL36I6bxUL5e/rEeeUGCGuqn3tAQ+GXj1G4uJYI18JQ\nhv43nIqbF+oVe5iRy58rXILd+zmbOq87cnF8O2ode44jRwtH4K0+uHTmq+83Q8Ld\n3wBZTnrQEnUDm6IuFuWfYhvNGlXAJrcmoH/wA1B5IAcuF3vhw9JY9axy+GDFszOX\nxwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "mastodon-2",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA27a8h17CCQLP8JY59n+M\nURsrbeVvRi3yIUe1IklOlRSTy0L3Z37rFuSNC3dC9rKl/pHDKtorgeukxbFADXQx\nkta2LNX8gf09jCWsUdga5lWIbfOdtlCLRDG1MVEUSA0f6Sxdqr8RbjM2ch31T6Me\n5Z6DYdggwBujcPHwZC1AugI1wJ0T5XHY9f2MDs/XjNEdw3ThYbAdbl1e09ql6Gtg\nSVCa4RlLg/KICdLJtVOLkX6049/XRxi41I6xvu9tXsqgV3+bs8dYbeGLsTWmpPIv\naAUMcf/A5t4B2DVpnlXDytPqfvZQPD3aBVyfEJRGI1yD6Vi9zL3RyIhDQ/I7PMNI\naQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "nodejs-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9L4BQgLEpQSSbSLwXOab\nfFey5VSk8ynDmj2I9sOpPMIXkXpmbONkyXqZ4CqKrMRtesXAg1F1lIwzE/WJy0wP\n9CRhEgnclHRHE3TVqWt8dC6+u5kx5o48EF8X9UWgV1098c21gcn68NZ7+l/janws\ntLYrgMynikcadaGtAkRszGG0dX+qdeRx9hRzhTNUIG4AYe6bUA6/LfOEPyRyuo3Q\ncaN5fAJSK+RRMWr1d7Mzd8k+l3xXzcUTMUL2To+Zh0Fw2SIEocM4NS1W9nAm4+Cq\nhlQUhsoHDwk7bDsIQtRNfy3bX59PSIVMcWLNkWilLzZW1yRtFGPTJfPlR4Y1XJb5\nuwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "nodejs-2",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuWyrBQXathrKzRO7HbX7\nZXqkeGo7X0q3qckO/Uh4Ht67bFb6iQDRo/gRkaVA0PM++2AhtW7wV2NYXR/3qowc\n1gGtO0zuQq56crcL7k9nVuFJ1IbYDyasEq+5nUKzEUVT0hK1/Vzh12gLFhDkBOX+\nCvISLTTQgEGljwNQLf1kZTraJcdDSN0R2k2jl+idJkeAuK5cjMEJa7Fog8scM2rR\nzGhB8gDRp+iq4HQ+yE3R1yXW9rBfWoConnXiNxholt3e2aAte2V1KnEmVLO/8ceo\nvqIp5xEcDKIAIrSqsmopRFXJ0PjS/nbS0Z2ynxpyh1BV4sqr/y4oOryrnwO+LqBB\nHwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "nodejs-3",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyqP7aGx+S9Mdt6xmaGnJ\nfNWWQsg4BvLiP1qtVt3VRrcXF2cy1bhgfnmqoBqnDk4bGlRoTzF+rSOw284+O2UQ\ntUlsBRos4TOyGfbYHehF12Re6NX51K9LHwaprr3eN5h08wLI8pjVrRJlbce8pHST\nXQ/CZvU+CBg43LE08cXr5kRmhnZrgh70g7zTO8+1E6y74r1LEh77Ar4uaaB5jXw7\n6o9TyfaA1HgyqvfYbH+9KPrJfMX/DeLrYPMI3IG/j3fzDUQQ8o9Pb5B+G1Apl+I+\nsTcgWRei5u06aZHLMMd8MMo4O1yUhbt05kxfVhlDGUDWBdi3cvsMf95t6MNdz/eq\niwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "postgres-2",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoQmrHoW5X6jpN6cJnafW\nWKz1LpT2DvOFPeRmrlSPOPIUSVPUMZI8ojdxzmri/dzC8C4quCIYaL5ssARhe17L\no16LG3z/wdPENYONBj/oH5GRvmG1/uCgzL5+QQENk3kAWVAUb7EL3EgHNx90b2oC\nDNoHcjuoi3ZkCUXxkX7BESvw1jII4hP+HyoIqGh8TZLIAQ25/mS9aNL3TbcLYp5d\npqoM0Ruc4DHVuZTamN+zBZwNRCBz6uxMmaEBD+piYTEPJOnf7yUT7d2l/QzLftfE\nkSo80KOyrPOFdIPCpqKJyPOJZgg7fSgpR0YC6BH7I/JgIsIwUsQcMS8/ELUC5+Zg\nfwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "postgres-4",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu6fPxOZeKloF/EgYvU0k\nOwv8bJjsCQcWaMTPle5//mRTszA6PM2z9RI+Mfr45qxTlsL9pQY8WJOWF6QOK31x\nszuqcr7oOjtAhrLI8f/oNDEDjcx325FqG9gNKQEAD7d4zodh+PhDe6x7GIyIS7lG\nIcD5Zre9iDwv8FGLR+5GLqS8SJOPL/wJkQ8w+N0f8YDFw81kiTta5NLhAx3fMDs0\n2kmoNlbmKlNZTtLjCfCV+/pa9oY6wycjck3GvobiFE/4cWaNkeGlPc+uAwlfmrOv\nHy0tq1XBX/BCvE5kMXmhnMT23JXjm2s2PgCLgEVGAXilXk/T597KDm+z4oBpAQma\nnQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/postgres-5.json
Normal file
4
clients/postgres-5.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "postgres-5",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXZv6Gk+dhIVkTXH9hJ1\nt2oqsMSLmTUj71uPN+4j0rxCQriXa095Nle9ifJAxfwzQyKEpWKyZd1Hpyye6bL1\nwgWATZ/u5ZS4B63NhRFyDxgPlHWBBohaZBN42zeq0Y0PNGHPVGDH/zFDrpP22Q9Q\nYScsyXTauE/Yf8a/rKR5jdnoVsVVMxk0LHxka8FcM2cqVsDAcK7GqIG6epqNFY8P\nUb1P+mVxRwnkzvf1VtG212ezV/yw9uiQcUkHS+JwZMAgbC34k9iDyRmk6l4sj/Zk\nNem20ImMqdDzsrX8zEe21K+KNvpejPH9fxaNCwR8W+woBMMzqD3I7P9PbLjc70Rx\nRwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/postgres-6.json
Normal file
4
clients/postgres-6.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "postgres-6",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVzM0fwlimmq11jTGTko\nK87LRYSar61tNF3qVWp9axNSMa6BSxVark9eYOqY4eLh/5vJVDqXDFq30/IUWg40\nH8hHWaOEvQrP2dm/XFw1RmunfbfN9gN07TuhaT3xFD5t+jFBuOSoJ4cPnFIABuVt\nFLrjgtYYjtZe5hGE9ZPmS7o2ATM5EU9mxeQ+TkgDbr8StvSPGdZ1ykhagf1pegGU\nRIfZ+4ZKzyDUAq+fYNhIbmlm5h2gP+XdtakPy43j7n0iN1vwDgBqJ2pdaVs/GcFf\nvaztoltguoknI2NPSez1N217asTTLuth0nHxVXiKCVXnqwDjxgWmuP6X2B7VYjyc\nxQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "rsk-mainnet-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtavs6RQW6af9fWuEuhI1\nQa4Ff7Z1CfZ0fHz152UqUeUKatQ/psKVs5ULWDV/b69fSuNsUzkCny9OwtwyQB/F\n2U+vbv3/3As3z6i3V3q8q4ahCHd7tkMmxMLaWcdkfWbpupWTRkCEX+PSDKS0hdfp\n3EQKVA2FrqR0sSnnT+Q66kZw4/WJrNwtSLcps4D5OubG7xr/uUn3Vyv5qXvS/7kx\nGvMONs55qh64Gtc3FSFPEdVyZXasCMEWwXyadqzf+/qJtEYlK0Uy5E/u7CTsnmcH\n9TEiYVw0/6PomQ2HJfSlZVUUO007OliBHO9bWOwZ6qI5c53pt5KES0dyy6SQ4m+8\nawIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "rsk-mainnet-2",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1cuvB3l7sBKJXqjhTih\nQloXteYOr/cQ24R5xUDnHZpCzM75khBjf9ZIX5fskManQ7MI4oFHAaKF6sCWT9QQ\nnL3ON0rCX8wDwBJpKY3iFisAK7f86GO5qkG2ovwG4wO1x69eKX52w33xGpPLPrmw\nBhFv+KfT56KZ3NCvDIQ6tew9VJ3g2V2zUtlL7xZIcdkgTXB06Ec8gbtoCAD3MVUQ\noxMCn+CK6QIAHGxpLIFEv5Y4hNRJ3+0RSuQikhhFzd7P2swnUgDSxDpbfoShroCC\neDw29sapOkQ+PwiHo2Zy8Qtr5m1ToGIhh8l1f/k2vi0Vf2xWVaTjbaeePEDMy9Fd\nKQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/rsk-mainnet-3.json
Normal file
4
clients/rsk-mainnet-3.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "rsk-mainnet-3",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwdrYfy0Spmt8VETCdUgW\nHbxV3uYA3kn2swvOdIjIR29gNO+t6wWv6FHnV/pfefIweIPaNlr9VMoUejUKX809\ngzdsiVWh1T6s4Yzbbt+O8mF3my5RXiSvizda8c6U65vofBSL2WVzE1AW9v7lXRHX\nJ4auKrpgKWkNLU52QLIP9/X5YLUHQtpTnplO31eb+jSD185aN1qoIxugunxnWSgm\n2NgUPlVbNCFrhv0PVv4Ts10eX6smRX3LKyNBtRRXM3GIrQHlAYRohIpy3lt8tKm4\nE/v9qpXQHvqEmX9FH1/Sonea849cWX3LuxUYLT2XFpaNwUxJK56Ef0HsgZESaxL+\n3QIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "rsk-testnet-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0JU46rCyLGOi5OdeeE2M\nobUUxO+Jqd9t9bP75Pyj0uH8WaxNv1PIdWZJiR+fcE+draBV86/YLxHzOFvsnMi+\nE/qgeXLKErGtTSb12mWq0gYv/wz9uqRbtcsv40gpu2BtNv9ycdXYACB/s0ipnuUO\nX/os4YHDvWV1cshwzgsQ87ad7OdT/Nldggtp4go60TkBi49VaftiJzYqVm1ey3xz\nd7+EsQWqhQHAac6POEuPjwNuM2valf/8+nI4Uday/CiFrDDV1SffRG30sd4rJF15\nh1S1Kxyetr72EmQwIGbJuDJL7eUU7blXjg6UtTxDDsl6rYUO5s/j7wZLoFhmC854\npQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "rsk-testnet-2",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzG2bgL0n5Q7bTR4WYHOB\nZNOuRem/jjarU/bL0VKKn0JqD3PPDAnhq9gRn7H8SwyGoVFN60YGzu45O4c+SqN3\nCXN+FeFabigH2tKLxBz3kNDYTT/F1ErLLi/6ydrCV3tpddR5KTqLSOntojG8KNzc\nyG4rMV9ebCE1wDVxAFdEA+YDZS8YjP0nO5sLWFacA0ZTx27t5ugqZP1acjSvKzWs\nZ+ekX5Pbws/oUHyaqEEPdz7er4MTBm0bdkCHZbM7132oBcH/huJZhmTXFEdoy4ML\nhP4MWWSvwo66HDYjnaID82a8W1RJZZu2irbPHrfVlaFAh8VQk1T1kkUu0bMovT3V\nYQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,4 +0,0 @@
|
||||
{
|
||||
"name": "rsk-testnet-3",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxbo3GccgPZp8UWhb9l2w\n+o6Qe5s4Tf/1TMOw3ppLw+IGCZhq9LEe8s8kngbBX7dMywbyDuf8vLXwvAHFKvC+\nx4XOXq0r9xDX8ujTCfqJxiSYk1KTyqM4lmi7qno7F9/Nwo7h3HuVbpkT752ojf+/\nDCSXwHL+uHlF6z3jKZ8iYBRHFrWmudh8bOm6lVsp/Iv4pQ/btZf8W5zULlk/Z6lT\nb6GS538Lnaoeu7wPCf/awL5GBg9findY3oS1lsEE+PfAu6SAHmbJcItMkrON7Esd\ng9xtwsjX1VICpJhOSkVS1nmRfYohELVJMdiKSLq+b5UskscbCjkRGY6GAPH8cVGg\nSQIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/rsk-testnet-4.json
Normal file
4
clients/rsk-testnet-4.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "rsk-testnet-4",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1NgmlPomxGRtu5oyro+m\ndQwBXwrhEuE73aLrUsqGOVSezph6LnETiEMFUIe1weoG+xdcykcUUMt7o1+nKs+E\nl8dxMIgbXAxdpI4n8gOpii70Sh30BDbh8+qZHsKBq32UmkCpz2ViVe/Vb3ViqB3e\n0GIkknPle5G4IC612O8EUkCenwcD1jSXYyug5zWI2T/TwnTuw4JdxfhkMgBM7Y2n\nR1YY6GwAMkK97wE/yBM74+Tiv/6lDy/JDbYmUVcQ55C937oodSWLAEM24EcOOtMA\nKfGumnthbdHzmHjONmLIegD3OJGYC2ulcB9qmaL/7cyIRhf6fEQrBolCH5881fxl\nxwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/rsk-testnet-5.json
Normal file
4
clients/rsk-testnet-5.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "rsk-testnet-5",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx/UHlgcSeh9Do7CTCKXC\n/4/aO2OvT+ijDVmrMYCNtE4sMeuFqKPnV1zxJZmRm4VNhkSQDkdWYD+6XvuFYW60\nyjB/N6D5lLlyjG4HD6fTkfh0K6f7t5mOYV7o4T59OoA3cBZuSROjtWmJ8jEFJ+k9\nII2kcyhPQcFN01ckzvZKRSPbVRccMoc+AKTjB3ZUfs/ERtlVoDrK4jEHluXOxUJO\nBKCcLonjJuLlpRLh7QfKrKFcR4idn5Ir43R6aSUesI/ipKwKsXnR3Bu7vXp74VF3\nMJ3EkdSBG+qJzy51fbRfQiUPAr/vSoVQZwW7FkIhIqqLkMaYCymn7qKfTGujoNU7\nlwIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
4
clients/strfry-1.json
Normal file
4
clients/strfry-1.json
Normal file
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "strfry-1",
|
||||
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzDV/RMGMXVDbvoA6PNh8\nQzhtHwYDCFcUSkbrwP6tzh6GpVunGEOdOdhj2V63T2tF1H+lujxQXh5pK7C0D6VZ\niO04ftJlo7/svyxUcwWr+znyN5sFdQRh3cBZiGSBYolizwoqgtPFlbNhmWAzV0Du\n9t8mhz70IK3B+UdwWyHtoK0NNsJGnQ9YzAvcjyDmEO/3sCjAhNnxVpmXftpcSmd9\nMonzFtIDBbRRll4AHZYRbmXCzx63+VmelvdnufnbY82liol0zzBwJaBD1wyNlG0y\ni96p3Kx03bLNlIaYVGbjZeJi+6oo2VDWJ4OloLLAYoHDSipeHT9qWfUdnE6ge4Lm\nywIDAQAB\n-----END PUBLIC KEY-----\n"
|
||||
}
|
||||
@@ -1,101 +0,0 @@
|
||||
# Application Changelog
|
||||
|
||||
## v5.2.0
|
||||
|
||||
* Add `application_directory` resource.
|
||||
* Chef 13 compatibility.
|
||||
|
||||
## v5.1.0
|
||||
|
||||
* Add `application_cookbook_file`, `application_file`, and `application_template` resources.
|
||||
|
||||
## v5.0.0
|
||||
|
||||
* Massive rewrite on top of newer Chef patterns. See the 5.0 README for details.
|
||||
|
||||
## v4.1.6
|
||||
|
||||
* Support for Chef 12.
|
||||
* Add `strict_ssh` option to enable host key checking.
|
||||
* Add `keep_releases` option to control number of releases to keep.
|
||||
* Allow passing a path to a file for `deploy_key`.
|
||||
|
||||
## v4.1.4
|
||||
|
||||
* [COOK-3343](https://tickets.opscode.com/browse/COOK-3343) - Can't parse release candidate version number.
|
||||
|
||||
## v4.1.2
|
||||
|
||||
* [COOK-3343](https://tickets.opscode.com/browse/COOK-3343) - Can't parse release candidate version number.
|
||||
|
||||
## v4.1.0
|
||||
|
||||
* [COOK-3343] - Can't parse release candidate version number.
|
||||
|
||||
## v4.0.0
|
||||
|
||||
* Removes compatability with Chef 10.
|
||||
* [COOK-3564](https://tickets.opscode.com/browse/COOK-3564) - Replace calls to `Chef::Mixin::RecipeDefinitionDSLCore`.
|
||||
|
||||
## v3.0.0
|
||||
|
||||
* [COOK-3306]: Multiple Memory Leaks in Application Cookbook.
|
||||
|
||||
## v2.0.4
|
||||
|
||||
* [COOK-2812]: application cookbook doesn't allow to specify a block as `restart_command`.
|
||||
|
||||
## v2.0.2
|
||||
|
||||
* [COOK-2537]: Provide proper `respond_to` behavior when using `method_missing`.
|
||||
* [COOK-2713]: application resource should Allow sub-resource attributes to propogate up.
|
||||
|
||||
### Improvement
|
||||
* [COOK-2597]: Allow customization for `shallow_clone` when doing a git deploy.
|
||||
|
||||
## v2.0.0
|
||||
|
||||
This release is incompatible with previous releases (hence major version change). The recipes used in older versions are deprecated and completely removed. See README.md for further detail.
|
||||
|
||||
* [COOK-1673] - `deploy_revision` in the application cookbook gives an argument error.
|
||||
* [COOK-1820] - Application cookbook: remove deprecated recipes.
|
||||
|
||||
## v1.0.4
|
||||
|
||||
* [COOK-1567] - Add git submodules to application cookbook.
|
||||
|
||||
## v1.0.2
|
||||
|
||||
* [COOK-1312] - string callbacks fail with method not found (really included this time).
|
||||
* [COOK-1332] - add `release_path` and `shared_path` methods.
|
||||
* [COOK-1333] - add example for running migrations.
|
||||
* [COOK-1360] - fix minor typos in README.
|
||||
* [COOK-1374] - use runit attributes in unicorn run script.
|
||||
|
||||
## v1.0.0
|
||||
|
||||
This release introduces the LWRP for application deployment, as well as other improvements. The recipes will be deprecated in August 2012 as indicated by their warning messages and in the README.md.
|
||||
|
||||
* [COOK-634] - Implement LWRP for application deployment.
|
||||
* [COOK-1116] - use other SCMs than git.
|
||||
* [COOK-1252] - add `:force_deploy` that maps to corresponding action of deploy resource.
|
||||
* [COOK-1253] - fix rollback error.
|
||||
* [COOK-1312] - string callbacks fail with method not found.
|
||||
* [COOK-1313] - implicit file based hooks aren't invoked.
|
||||
* [COOK-1318] - Create `to_ary` method to resolve issue in resources() lookup on "application[foo]" resources.
|
||||
|
||||
## v0.99.14
|
||||
|
||||
* [COOK-1065] - use pip in virtualenv during deploy.
|
||||
|
||||
## v0.99.12
|
||||
|
||||
* [COOK-606] application cookbook deployment recipes should use ipaddress instead of fqdn.
|
||||
|
||||
## v0.99.11
|
||||
|
||||
* make the `_default` `chef_environment` look like production rails env.
|
||||
|
||||
## v0.99.10
|
||||
|
||||
* Use Chef 0.10's `node.chef_environment` instead of `node['app_environment']`.
|
||||
@@ -1,260 +0,0 @@
|
||||
# Application cookbook
|
||||
|
||||
[](https://travis-ci.org/poise/application)
|
||||
[](https://rubygems.org/gems/poise-application)
|
||||
[](https://supermarket.chef.io/cookbooks/application)
|
||||
[](https://codeclimate.com/github/poise/application)
|
||||
[](https://gemnasium.com/poise/application)
|
||||
[](https://www.apache.org/licenses/LICENSE-2.0)
|
||||
|
||||
A [Chef](https://www.chef.io/) cookbook to deploy applications.
|
||||
|
||||
## Getting Started
|
||||
|
||||
The application cookbook provides a central framework to deploy applications
|
||||
using Chef. Generally this will be web applications using things like Rails,
|
||||
Django, or NodeJS, but the framework makes no specific assumptions. The core
|
||||
`application` resource provides DSL support and helpers, but the heavy lifting
|
||||
is all done in specific plugins detailed below. Each deployment starts with
|
||||
an `application` resource:
|
||||
|
||||
```ruby
|
||||
application '/path/to/deploy' do
|
||||
owner 'root'
|
||||
group 'root'
|
||||
|
||||
# ...
|
||||
end
|
||||
```
|
||||
|
||||
The `application` resource uses the Poise subresource system for plugins. This
|
||||
means you configure the steps of the deployment like normal recipe code inside
|
||||
the `application` resource, with a few special additions:
|
||||
|
||||
```ruby
|
||||
application '/path/to/deploy' do
|
||||
# Application resource properties.
|
||||
owner 'root'
|
||||
group 'root'
|
||||
|
||||
# Subresources, like normal recipe code.
|
||||
package 'ruby'
|
||||
git '/path/to/deploy' do
|
||||
repository 'https://github.com/example/myapp.git'
|
||||
end
|
||||
application_rails '/path/to/deploy' do
|
||||
database 'mysql://dbhost/myapp'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
When evaluating the recipe inside the `application` resource, it first checks
|
||||
for `application_#{resource}`, as well as looking for an LWRP of the same name
|
||||
in any cookbook starting with `application_`. This means that a resource named
|
||||
`application_foo` can be used as `foo` inside the `application` resource:
|
||||
|
||||
```ruby
|
||||
application '/path/to/deploy' do
|
||||
owner 'root'
|
||||
group 'root'
|
||||
|
||||
rails '/path/to/deploy' do
|
||||
database 'mysql://dbhost/myapp'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Additionally if a resource inside the `application` block doesn't have a name,
|
||||
it uses the same name as the application resource itself:
|
||||
|
||||
```ruby
|
||||
application '/path/to/deploy' do
|
||||
owner 'root'
|
||||
group 'root'
|
||||
|
||||
rails do
|
||||
database 'mysql://dbhost/myapp'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Other than those two special features, the recipe code inside the `application`
|
||||
resource is processed just like any other recipe.
|
||||
|
||||
## Available Plugins
|
||||
|
||||
* [`application_git`](https://github.com/poise/application_git) – Deploy
|
||||
application code from a git repository.
|
||||
* [`application_ruby`](https://github.com/poise/application_ruby) – Manage Ruby
|
||||
deployments, such as Rails or Sinatra applications.
|
||||
* [`application_python`](https://github.com/poise/application_python) – Manage
|
||||
Python deployments, such as Django or Flask applications.
|
||||
* [`application_javascript`](https://github.com/poise/application_javascript) –
|
||||
Manage server-side JavaScript deployments using Node.js or io.js.
|
||||
* `application_java` – *Coming soon!*
|
||||
* `application_go` – *Coming soon!*
|
||||
* `application_erlang` – *Coming soon!*
|
||||
|
||||
## Requirements
|
||||
|
||||
Chef 12 or newer is required.
|
||||
|
||||
## Resources
|
||||
|
||||
### `application`
|
||||
|
||||
The `application` resource has top-level configuration properties for each
|
||||
deployment and acts as a container for other deployment plugin resources.
|
||||
|
||||
```ruby
|
||||
application '/opt/test_sinatra' do
|
||||
git 'https://github.com/example/my_sinatra_app.git'
|
||||
bundle_install do
|
||||
deployment true
|
||||
end
|
||||
unicorn do
|
||||
port 9000
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
#### Actions
|
||||
|
||||
* `:deploy` – Deploy the application. *(default)*
|
||||
* `:start` - Run `:start` on all subresources that support it.
|
||||
* `:stop` - Run `:stop` on all subresources that support it.
|
||||
* `:restart` - Run `:restart` on all subresources that support it.
|
||||
* `:reload` - Run `:reload` on all subresources that support it.
|
||||
|
||||
#### Properties
|
||||
|
||||
* `path` – Path to deploy the application to. *(name attribute)*
|
||||
* `environment` – Environment variables for all application deployment steps.
|
||||
* `group` – System group to deploy the application as.
|
||||
* `owner` – System user to deploy the application as.
|
||||
* `action_on_update` – Action to run on the application resource when any
|
||||
subresource is updated. *(default: restart)*
|
||||
* `action_on_update_immediately` – Run the `action_on_update` notification with
|
||||
`:immediately`. *(default: false)*
|
||||
|
||||
### `application_cookbook_file`, `application_directory`, `application_file`, `application_template`
|
||||
|
||||
The `application_cookbook_file`, `application_directory`, `application_file`, and `application_template`
|
||||
resources extend the core Chef resources to take some application-level
|
||||
configuration in to account:
|
||||
|
||||
```ruby
|
||||
application '/opt/myapp' do
|
||||
template 'myapp.conf' do
|
||||
source 'myapp.conf.erb'
|
||||
end
|
||||
directory 'logs'
|
||||
end
|
||||
```
|
||||
|
||||
If the resource name is a relative path, it will be expanded relative to the
|
||||
application path. If an owner or group is declared for the application, those
|
||||
will be the default user and group for the resource.
|
||||
|
||||
All other actions and properties are the same as the similar resource in core Chef.
|
||||
|
||||
## Examples
|
||||
|
||||
Some test recipes are available as examples for common application frameworks:
|
||||
|
||||
* [Sinatra](https://github.com/poise/application_ruby/blob/master/test/cookbooks/application_ruby_test/recipes/sinatra.rb)
|
||||
* [Rails](https://github.com/poise/application_ruby/blob/master/test/cookbooks/application_ruby_test/recipes/rails.rb)
|
||||
* [Flask](https://github.com/poise/application_python/blob/master/test/cookbook/recipes/flask.rb)
|
||||
* [Django](https://github.com/poise/application_python/blob/master/test/cookbook/recipes/django.rb)
|
||||
* [Express](https://github.com/poise/application_javascript/blob/master/test/cookbook/recipes/express.rb)
|
||||
|
||||
## Upgrading From 4.x
|
||||
|
||||
While the overall design of the revamped application resource is similar to the
|
||||
4.x version, some changes will need to be made. The `name` property no longer
|
||||
exists, with the name attribute being used as the path to the deployment.
|
||||
The `packages` property has been removed as this is more easily handled via
|
||||
normal recipe code.
|
||||
|
||||
The SCM-related properties like `repository` and `revision` are now handled by
|
||||
normal plugins. If you were deploying from a private git repository you will
|
||||
likely want to use the `application_git` cookbook, otherwise just use the
|
||||
built-in `git` or `svn` resources as per normal.
|
||||
|
||||
The properties related to the `deploy` resource like `strategy` and `symlinks`
|
||||
have been removed. The `deploy` resource is no longer used so these aren't
|
||||
relevant. As a side effect of this, you'll likely want to point the upgraded
|
||||
deployment at a new folder or manually clean the `current` and `shared` folders
|
||||
from the existing folder. The pseudo-Capistrano layout used by the `deploy`
|
||||
resource has few benefits in a config-managed world and introduced a lot of
|
||||
complexity and moving pieces that are no longer required.
|
||||
|
||||
With the removal of the `deploy` resource, the callback properties and commands
|
||||
are no longer used as well. Subresources no longer use the complex
|
||||
actions-as-callbacks arrangement as existed before, instead following normal
|
||||
Chef recipe flow. Individual subresources may need to be tweaked to work with
|
||||
newer versions of the cookbooks they come from, though most have stayed similar
|
||||
in overall approach.
|
||||
|
||||
## Database Migrations and Chef
|
||||
|
||||
Several of the web application deployment plugins include optional support to
|
||||
run database migrations from Chef. For "toy" applications where the app and
|
||||
database run together on a single machine, this is fine and is a nice time
|
||||
saver. For anything more complex I highly recommend not running database
|
||||
migrations from Chef. Some initial operations like creating the database and/or
|
||||
database user are more reasonable as they tend to be done only once and by their
|
||||
nature the application does not yet have users so some level of eventual
|
||||
consistency is more acceptable. With migrations on a production application, I
|
||||
encourage using Chef and the application cookbooks to handle deploying the code
|
||||
and writing configuration files, but use something more specific to run the
|
||||
actual migration task. [Fabric](http://www.fabfile.org/),
|
||||
[Capistrano](http://capistranorb.com/), and [Rundeck](http://rundeck.org/) are
|
||||
all good choices for this orchestration tooling.
|
||||
|
||||
Migrations can generally be applied idempotently but they have unique
|
||||
constraints (pun definitely intended) that make them tricky in a Chef-like,
|
||||
convergence-based system. First and foremost is that many table alterations
|
||||
lock the table for updating for at least some period of time. That can mean that
|
||||
while staging the new code or configuration data can happen within a window, the
|
||||
migration itself needs to be run in careful lockstep with the rest of the
|
||||
deployment process (eg. moving things in and out of load balancers). Beyond
|
||||
that, while most web frameworks have internal idempotence checks for migrations,
|
||||
running the process on two servers at the same time can have unexpected effects.
|
||||
|
||||
Overall migrations are best thought of as a procedural step rather than a
|
||||
declaratively modeled piece of the system.
|
||||
|
||||
## Application Signals and Updates
|
||||
|
||||
The `application` resource exposes `start`, `stop`, `restart`, and `reload`
|
||||
actions which will dispatch to any subresources attached to the application.
|
||||
This allows for generic application-level restart or reload signals that will
|
||||
work with any type of deployment.
|
||||
|
||||
Additionally the `action_on_update` property is used to set a default
|
||||
notification so any subresource that updates will trigger an application
|
||||
restart or reload. This can be disabled by setting `action_on_update false` if
|
||||
you want to take manual control of service restarts.
|
||||
|
||||
## Sponsors
|
||||
|
||||
Development sponsored by [Chef Software](https://www.chef.io/), [Symonds & Son](http://symondsandson.com/), and [Orion](https://www.orionlabs.co/).
|
||||
|
||||
The Poise test server infrastructure is sponsored by [Rackspace](https://rackspace.com/).
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2015-2016, Noah Kantrowitz
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
autoload :AppMixin, 'poise_application/app_mixin'
|
||||
autoload :Error, 'poise_application/error'
|
||||
autoload :Resources, 'poise_application/resources'
|
||||
autoload :ServiceMixin, 'poise_application/service_mixin'
|
||||
autoload :Utils, 'poise_application/utils'
|
||||
autoload :VERSION, 'poise_application/version'
|
||||
end
|
||||
@@ -1,64 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise/utils'
|
||||
|
||||
require 'poise_application/app_mixin'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
# A helper mixin for `file`-like resources to make them take application
|
||||
# resource data. Relative paths are expanded against the application path and
|
||||
# the app owner/group are the default user/group for the resource.
|
||||
#
|
||||
# @api private
|
||||
# @since 5.1.0
|
||||
module AppFileMixin
|
||||
include Poise::Utils::ResourceProviderMixin
|
||||
|
||||
module Resource
|
||||
include PoiseApplication::AppMixin
|
||||
|
||||
def initialize(*)
|
||||
super
|
||||
# So our lazy default below can work. Not needed on 12.7+.
|
||||
remove_instance_variable(:@path) if instance_variable_defined?(:@path)
|
||||
end
|
||||
|
||||
# @!attribute path
|
||||
# Override the default path to be relative to the app path.
|
||||
# @return [String]
|
||||
attribute(:path, kind_of: String, default: lazy { parent ? ::File.expand_path(name, parent.path) : name })
|
||||
|
||||
# @!attribute group
|
||||
# Override the default group to be the app group if unspecified.
|
||||
# @return [String, Integer]
|
||||
attribute(:group, kind_of: [String, Integer, NilClass], default: lazy { parent && parent.group })
|
||||
|
||||
# @!attribute owner
|
||||
# Override the default user to be the app owner if unspecified.
|
||||
# @return [String, Integer]
|
||||
attribute(:owner, kind_of: [String, Integer, NilClass], default: lazy { parent && parent.owner })
|
||||
|
||||
# For the forgetful.
|
||||
alias_method :user, :owner
|
||||
end
|
||||
|
||||
module Provider
|
||||
include PoiseApplication::AppMixin
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,69 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'chef/mash'
|
||||
require 'poise/provider'
|
||||
require 'poise/resource'
|
||||
require 'poise/utils'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
# A helper mixin for application resources and providers. These are things
|
||||
# intended to be used as subresources of the `application` resource.
|
||||
#
|
||||
# @since 5.0.0
|
||||
module AppMixin
|
||||
include Poise::Utils::ResourceProviderMixin
|
||||
|
||||
# A helper mixin for application resources.
|
||||
module Resource
|
||||
include Poise::Resource
|
||||
|
||||
# Set the parent type and optional flag.
|
||||
poise_subresource(:application, true)
|
||||
|
||||
# @!attribute path
|
||||
# Base path for the application.
|
||||
# @return [String]
|
||||
attribute(:path, kind_of: String, name_attribute: true)
|
||||
|
||||
# A delegator for accessing the application state. If no application
|
||||
# parent is found, the state will be tracked internally within the
|
||||
# resource.
|
||||
#
|
||||
# @return [Hash<Symbol, Object>]
|
||||
def app_state
|
||||
if parent
|
||||
parent.app_state
|
||||
else
|
||||
# If there isn't a parent, just track within the resource.
|
||||
@local_app_state ||= Mash.new
|
||||
end
|
||||
end
|
||||
|
||||
# Environment variables stored in the application state.
|
||||
#
|
||||
# @return [Hash<String, String>]
|
||||
def app_state_environment
|
||||
app_state[:environment] ||= Mash.new
|
||||
end
|
||||
end
|
||||
|
||||
module Provider
|
||||
include Poise::Provider
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/resources'
|
||||
@@ -1,24 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
# Base exception class for poise-application errors.
|
||||
#
|
||||
# @since 5.0.0
|
||||
class Error < Exception
|
||||
end
|
||||
end
|
||||
@@ -1,30 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/resources/application'
|
||||
require 'poise_application/resources/application_cookbook_file'
|
||||
require 'poise_application/resources/application_directory'
|
||||
require 'poise_application/resources/application_file'
|
||||
require 'poise_application/resources/application_template'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
# Chef resources and providers for poise-application.
|
||||
#
|
||||
# @since 5.0.0
|
||||
module Resources
|
||||
end
|
||||
end
|
||||
@@ -1,259 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'chef/dsl/recipe' # On 12.4+ this will pull in chef/dsl/resources.
|
||||
require 'chef/resource'
|
||||
require 'chef/provider'
|
||||
require 'poise'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
module Resources
|
||||
# (see Application::Resource)
|
||||
# @since 5.0.0
|
||||
module Application
|
||||
# An `application` resource to manage application deployment.
|
||||
#
|
||||
# @since 5.0.0
|
||||
# @provides application
|
||||
# @action deploy
|
||||
# @action start
|
||||
# @action stop
|
||||
# @action restart
|
||||
# @action reload
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# git '...'
|
||||
# poise_service 'myapp' do
|
||||
# command '/srv/myapp/main'
|
||||
# end
|
||||
# end
|
||||
class Resource < Chef::Resource
|
||||
include Poise(container: true, container_namespace: false)
|
||||
provides(:application)
|
||||
actions(:deploy, :start, :stop, :restart, :reload)
|
||||
|
||||
# @!attribute path
|
||||
# Application base path.
|
||||
# @return [String]
|
||||
attribute(:path, kind_of: String, name_attribute: true)
|
||||
# @!attribute environment
|
||||
# Environment variables to set for the whole application.
|
||||
# @return [Hash<String, String>]
|
||||
attribute(:environment, kind_of: Hash, default: lazy { Mash.new })
|
||||
# @!attribute owner
|
||||
# System user that will own the application. This can be overriden in
|
||||
# individual subresources.
|
||||
# @return [String]
|
||||
attribute(:owner, kind_of: String)
|
||||
# @!attribute group
|
||||
# System group that will own the application. This can be overriden in
|
||||
# individual subresources.
|
||||
# @return [String]
|
||||
attribute(:group, kind_of: String)
|
||||
# @!attribute action_on_update
|
||||
# Action to run when any subresource is updated. Defaults to `:restart`.
|
||||
# @return [String, Symbol, nil, false]
|
||||
attribute(:action_on_update, kind_of: [Symbol, String, NilClass, FalseClass], default: :restart)
|
||||
# @!attribute action_on_update_immediately
|
||||
# Run the {#action_on_update} notification with `:immediately`.
|
||||
# @return [Boolean]
|
||||
attribute(:action_on_update_immediately, equal_to: [true, false], default: false)
|
||||
|
||||
# Run the DSL rewire when the resource object is created.
|
||||
# @api private
|
||||
def initialize(*args)
|
||||
super
|
||||
_rewire_dsl! if node
|
||||
end
|
||||
|
||||
# Application-specific state values used as a way to communicate between
|
||||
# subresources.
|
||||
#
|
||||
# @return [Mash]
|
||||
# @example
|
||||
# if new_resource.parent && new_resource.parent.app_state['gemfile_path']
|
||||
def app_state
|
||||
@app_state ||= Mash.new(environment: environment)
|
||||
end
|
||||
|
||||
# Override Container#register_subresource to add our action_on_update.
|
||||
#
|
||||
# @api private
|
||||
def register_subresource(resource)
|
||||
super.tap do |added|
|
||||
if added && action_on_update
|
||||
Chef::Log.debug("[#{self}] Registering #{action_on_update_immediately ? 'immediate ' : ''}#{action_on_update} notification from #{resource}")
|
||||
resource.notifies action_on_update.to_sym, self, (action_on_update_immediately ? :immediately : :delayed)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Find all resources that need to be rewired. This is anything with a
|
||||
# name starting with application_.
|
||||
#
|
||||
# @return [Array<String>]
|
||||
def _rewire_resources
|
||||
if defined?(Chef::DSL::Resources)
|
||||
# Chef >= 12.4.
|
||||
Chef::DSL::Resources.instance_methods
|
||||
else
|
||||
# Chef < 12.4 >= 12.0.
|
||||
Chef::Resource.descendants.map do |klass|
|
||||
klass.node_map.instance_variable_get(:@map).keys + if klass.dsl_name.include?('::')
|
||||
# Probably not valid.
|
||||
# :nocov:
|
||||
[]
|
||||
# :nocov:
|
||||
else
|
||||
# Needed for things that don't call provides().
|
||||
[klass.dsl_name]
|
||||
end
|
||||
end.flatten
|
||||
end.map {|name| name.to_s }.select {|name| name.start_with?('application_') }.uniq
|
||||
end
|
||||
|
||||
# Find all cookbooks that might contain LWRPs matching our name scheme.
|
||||
#
|
||||
# @return [Array<String>]
|
||||
def _rewire_cookbooks
|
||||
# Run context might be unset during test setup.
|
||||
if run_context
|
||||
run_context.cookbook_collection.keys.select {|cookbook_name| cookbook_name.start_with?('application_') }
|
||||
else
|
||||
[]
|
||||
end
|
||||
end
|
||||
|
||||
# Build the mapping of new_name => old_name for each resource to rewire.
|
||||
#
|
||||
# @return [Hash<String, String>]
|
||||
def _rewire_map
|
||||
application_cookbooks = _rewire_cookbooks
|
||||
_rewire_resources.inject({}) do |memo, name|
|
||||
# Grab the resource class to check if it is an LWRP.
|
||||
klass = Chef::Resource.resource_for_node(name.to_sym, node)
|
||||
# Find the part to trim. Check for LWRP first, then just application_.
|
||||
trim = if klass < Chef::Resource::LWRPBase
|
||||
application_cookbooks.find {|cookbook_name| name.start_with?(cookbook_name) && name != cookbook_name } || 'application'
|
||||
else
|
||||
# Non-LWRPs are assumed to have a better name.
|
||||
'application'
|
||||
end
|
||||
# Map trimmed to untrimmed.
|
||||
memo[name[trim.length+1..-1]] = name
|
||||
memo
|
||||
end
|
||||
end
|
||||
|
||||
# Build new DSL methods to implement the foo -> application_foo behavior.
|
||||
#
|
||||
# @return [void]
|
||||
def _rewire_dsl!
|
||||
# Generate stub methods for all the rewiring.
|
||||
_rewire_map.each do |new_name, old_name|
|
||||
# This is defined as a singleton method on self so it looks like
|
||||
# the DSL but is scoped to just this context.
|
||||
define_singleton_method(new_name) do |name=nil, *args, &block|
|
||||
# Store the caller to correct the source_line.
|
||||
created_at = caller[0]
|
||||
public_send(old_name, name, *args) do
|
||||
# Set the declared type to be the native name.
|
||||
self.declared_type = self.class.resource_name
|
||||
# Fix the source location. For Chef 12.4 we could do this with the
|
||||
# declared_at parameter on the initial send.
|
||||
self.source_line = created_at
|
||||
# Run the original block.
|
||||
instance_exec(&block) if block
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Provider for `application`.
|
||||
#
|
||||
# @since 5.0.0
|
||||
# @see Resource
|
||||
# @provides application
|
||||
class Provider < Chef::Provider
|
||||
include Poise
|
||||
provides(:application)
|
||||
|
||||
# `deploy` action for `application`. Creates the application base folder.
|
||||
#
|
||||
# @return [void]
|
||||
def action_deploy
|
||||
notifying_block do
|
||||
directory new_resource.path do
|
||||
owner new_resource.owner
|
||||
group new_resource.group
|
||||
mode '755'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# `start` action for `application`. Proxies to subresources.
|
||||
#
|
||||
# @return [void]
|
||||
def action_start
|
||||
proxy_action(:start)
|
||||
end
|
||||
|
||||
# `stop` action for `application`. Proxies to subresources.
|
||||
#
|
||||
# @return [void]
|
||||
def action_stop
|
||||
proxy_action(:stop)
|
||||
end
|
||||
|
||||
# `restart` action for `application`. Proxies to subresources.
|
||||
#
|
||||
# @return [void]
|
||||
def action_restart
|
||||
proxy_action(:restart)
|
||||
end
|
||||
|
||||
# `reload` action for `application`. Proxies to subresources.
|
||||
#
|
||||
# @return [void]
|
||||
def action_reload
|
||||
proxy_action(:reload)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Proxy an action to any subresources that support it.
|
||||
#
|
||||
# @param action [Symbol] Action to proxy.
|
||||
# @return [void]
|
||||
def proxy_action(action)
|
||||
Chef::Log.debug("[#{new_resource} Running proxied #{action} action")
|
||||
new_resource.subresources.each do |r|
|
||||
begin
|
||||
r.run_action(action) if r.allowed_actions.include?(action)
|
||||
rescue Chef::Exceptions::UnsupportedAction
|
||||
# Don't care, just move on.
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,54 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/app_file_mixin'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
module Resources
|
||||
# (see ApplicationCookbookFile::Resource)
|
||||
# @since 5.1.0
|
||||
module ApplicationCookbookFile
|
||||
# An `application_cookbook_file` resource to manage Chef cookbook_files inside and
|
||||
# Application cookbook deployment.
|
||||
#
|
||||
# @provides application_cookbook_file
|
||||
# @action create
|
||||
# @action create_if_missing
|
||||
# @action delete
|
||||
# @action touch
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# cookbook_file 'myapp.conf' do
|
||||
# source 'myapp.conf'
|
||||
# end
|
||||
# end
|
||||
class Resource < Chef::Resource::CookbookFile
|
||||
include PoiseApplication::AppFileMixin
|
||||
provides(:application_cookbook_file)
|
||||
actions(:create, :create_if_missing, :delete, :touch)
|
||||
subclass_providers!
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
# For older Chef.
|
||||
@resource_name = :application_cookbook_file
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,50 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/app_file_mixin'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
module Resources
|
||||
# (see ApplicationDirectory::Resource)
|
||||
# @since 5.1.0
|
||||
module ApplicationDirectory
|
||||
# An `application_directory` resource to manage Chef files inside and
|
||||
# Application cookbook deployment.
|
||||
#
|
||||
# @provides application_directory
|
||||
# @action create
|
||||
# @action delete
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# directory 'logs'
|
||||
# end
|
||||
class Resource < Chef::Resource::Directory
|
||||
include PoiseApplication::AppFileMixin
|
||||
provides(:application_directory)
|
||||
actions(:create, :delete)
|
||||
subclass_providers!
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
# For older Chef.
|
||||
@resource_name = :application_directory
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,54 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/app_file_mixin'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
module Resources
|
||||
# (see ApplicationFile::Resource)
|
||||
# @since 5.1.0
|
||||
module ApplicationFile
|
||||
# An `application_file` resource to manage Chef files inside and
|
||||
# Application cookbook deployment.
|
||||
#
|
||||
# @provides application_file
|
||||
# @action create
|
||||
# @action create_if_missing
|
||||
# @action delete
|
||||
# @action touch
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# file 'myapp.conf' do
|
||||
# source 'myapp.conf.erb'
|
||||
# end
|
||||
# end
|
||||
class Resource < Chef::Resource::File
|
||||
include PoiseApplication::AppFileMixin
|
||||
provides(:application_file)
|
||||
actions(:create, :create_if_missing, :delete, :touch)
|
||||
subclass_providers!
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
# For older Chef.
|
||||
@resource_name = :application_file
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,54 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/app_file_mixin'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
module Resources
|
||||
# (see ApplicationTemplate::Resource)
|
||||
# @since 5.1.0
|
||||
module ApplicationTemplate
|
||||
# An `application_template` resource to manage Chef templates inside and
|
||||
# Application cookbook deployment.
|
||||
#
|
||||
# @provides application_template
|
||||
# @action create
|
||||
# @action create_if_missing
|
||||
# @action delete
|
||||
# @action touch
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# template 'myapp.conf' do
|
||||
# source 'myapp.conf.erb'
|
||||
# end
|
||||
# end
|
||||
class Resource < Chef::Resource::Template
|
||||
include PoiseApplication::AppFileMixin
|
||||
provides(:application_template)
|
||||
actions(:create, :create_if_missing, :delete, :touch)
|
||||
subclass_providers!
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
# For older Chef.
|
||||
@resource_name = :application_template
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,116 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'chef/resource'
|
||||
require 'chef/provider'
|
||||
require 'poise/utils'
|
||||
require 'poise_service/service_mixin'
|
||||
require 'poise_service/utils'
|
||||
|
||||
require 'poise_application/app_mixin'
|
||||
require 'poise_application/utils'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
# Mixin for application services. This is any resource that will be part of
|
||||
# an application deployment and involves running a persistent service.
|
||||
#
|
||||
# @api public
|
||||
# @since 5.0.0
|
||||
# @example
|
||||
# module MyApp
|
||||
# class Resource < Chef::Resource
|
||||
# include Poise
|
||||
# provides(:my_app)
|
||||
# include PoiseApplication::ServiceMixin
|
||||
# end
|
||||
#
|
||||
# class Provider < Chef::Provider
|
||||
# include Poise
|
||||
# provides(:my_app)
|
||||
# include PoiseApplication::ServiceMixin
|
||||
#
|
||||
# def action_enable
|
||||
# notifying_block do
|
||||
# template '/etc/myapp.conf' do
|
||||
# # ...
|
||||
# end
|
||||
# end
|
||||
# super
|
||||
# end
|
||||
#
|
||||
# def service_options(r)
|
||||
# super
|
||||
# r.command('myapp --serve')
|
||||
# end
|
||||
# end
|
||||
# end
|
||||
module ServiceMixin
|
||||
include Poise::Utils::ResourceProviderMixin
|
||||
|
||||
# Mixin for application service resources.
|
||||
#
|
||||
# @see ServiceMixin
|
||||
module Resource
|
||||
include PoiseService::ServiceMixin::Resource
|
||||
include PoiseApplication::AppMixin::Resource
|
||||
|
||||
module ClassMethods
|
||||
# @api private
|
||||
def included(klass)
|
||||
super
|
||||
klass.extend(ClassMethods)
|
||||
klass.class_exec do
|
||||
attribute(:path, kind_of: String, name_attribute: true)
|
||||
# Redefines from the PoiseService version so we get a better default.
|
||||
attribute(:service_name, kind_of: String, default: lazy { PoiseService::Utils.parse_service_name(path) })
|
||||
attribute(:user, kind_of: [String, Integer], default: lazy { parent ? parent.owner : 'root' })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
extend ClassMethods
|
||||
end
|
||||
|
||||
# Mixin for application service providers.
|
||||
#
|
||||
# @see ServiceMixin
|
||||
module Provider
|
||||
include PoiseService::ServiceMixin::Provider
|
||||
include PoiseApplication::AppMixin::Provider
|
||||
|
||||
private
|
||||
|
||||
# Abstract hook to set parameters on {#service_resource} when it is
|
||||
# created. This is required to set at least `resource.command`.
|
||||
#
|
||||
# @api public
|
||||
# @param resource [Chef::Resource] Resource instance to set parameters on.
|
||||
# @return [void]
|
||||
# @example
|
||||
# def service_options(resource)
|
||||
# super
|
||||
# resource.command('myapp --serve')
|
||||
# end
|
||||
def service_options(resource)
|
||||
super
|
||||
resource.directory(new_resource.path)
|
||||
resource.user(new_resource.user)
|
||||
resource.environment.update(new_resource.app_state_environment) if new_resource.parent
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,51 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'etc'
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
# Utility methods for PoiseApplication.
|
||||
#
|
||||
# @api public
|
||||
# @since 5.0.0
|
||||
module Utils
|
||||
# Methods are also available as module-level methods as well as a mixin.
|
||||
extend self
|
||||
|
||||
# Try to find the primary group name for a given user.
|
||||
#
|
||||
# @param user [String, Integer] User to check, if given as an integer this
|
||||
# is used as a UID, otherwise it is the username.
|
||||
# @return [String]
|
||||
# @example
|
||||
# attribute(:group, kind_of: [String, Integer], default: lazy { PoiseApplication::Utils.primary_group_for(user) })
|
||||
def primary_group_for(user)
|
||||
# Force a reload in case any users were created earlier in the run.
|
||||
Etc.endpwent
|
||||
Etc.endgrent
|
||||
user = if user.is_a?(Integer)
|
||||
Etc.getpwuid(user)
|
||||
else
|
||||
Etc.getpwnam(user.to_s)
|
||||
end
|
||||
Etc.getgrgid(user.gid).name
|
||||
rescue ArgumentError
|
||||
# One of the get* calls exploded. ¯\_(ツ)_/¯
|
||||
user.to_s
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,20 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
module PoiseApplication
|
||||
VERSION = '5.2.0'
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
raise 'Halite is not compatible with no_lazy_load false, please set no_lazy_load true in your Chef configuration file.' unless Chef::Config[:no_lazy_load]
|
||||
$LOAD_PATH << File.expand_path('../../files/halite_gem', __FILE__)
|
||||
require "poise_application/cheftie"
|
||||
File diff suppressed because one or more lines are too long
@@ -1,10 +0,0 @@
|
||||
# Application_Git Changelog
|
||||
|
||||
## v1.1.0
|
||||
|
||||
* [#2](https://github.com/poise/application_git/issues/2) – Inherit user and group values from the parent `application` resource.
|
||||
* [#3](https://github.com/poise/application_git/issues/3) – Fix usage with users created during the current Chef run.
|
||||
|
||||
## v1.0.0
|
||||
|
||||
* Initial release.
|
||||
@@ -1,108 +0,0 @@
|
||||
# Application_Git Cookbook
|
||||
|
||||
[](https://travis-ci.org/poise/application_git)
|
||||
[](https://rubygems.org/gems/poise-application-git)
|
||||
[](https://supermarket.chef.io/cookbooks/application_git)
|
||||
[](https://codecov.io/github/poise/application_git)
|
||||
[](https://gemnasium.com/poise/application_git)
|
||||
[](https://www.apache.org/licenses/LICENSE-2.0)
|
||||
|
||||
A [Chef](https://www.chef.io/) cookbook to handle deploying code from git when
|
||||
using the [application cookbook](https://github.com/poise/application).
|
||||
|
||||
## Quick Start
|
||||
|
||||
To deploy from a private GitHub repository:
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
git 'git@github.com:example/myapp.git' do
|
||||
deploy_key chef_vault_item('deploy_keys', 'myapp')['key']
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
Chef 12 or newer is required.
|
||||
|
||||
## Resources
|
||||
|
||||
### `application_git`
|
||||
|
||||
The `application_git` resource deploys code from git. It extends the core `git`
|
||||
resource to support deploy keys and disabling strict host key verification.
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
git 'git@github.com:example/myapp.git'
|
||||
end
|
||||
```
|
||||
|
||||
#### Actions
|
||||
|
||||
All actions work the same as the core `git` resource.
|
||||
|
||||
* `:sync` – Clone and checkout the requested revision *(default)*
|
||||
* `:checkout` – Checkout the request revision. If the repository isn't already
|
||||
cloned, this action does nothing.
|
||||
* `:export` – Export the repository without the `.git` folder.
|
||||
|
||||
#### Properties
|
||||
|
||||
All properties from the core `git` resource work the same way with the following
|
||||
additions:
|
||||
|
||||
* `deploy_key` – SSH key to use with git. Can be specified either as a path to
|
||||
key file already created or as a string value containing the key directly.
|
||||
* `strict_ssh` – Enable strict SSH host key checking. *(default: false)*
|
||||
|
||||
### DSL Usage
|
||||
|
||||
The `application_git` resource can be used directly as a replacement for the
|
||||
core `git` resource:
|
||||
|
||||
```ruby
|
||||
application_git '/srv/myapp' do
|
||||
repository 'git@github.com:example/myapp.git'
|
||||
deploy_key chef_vault_item('deploy_keys', 'myapp')['key']
|
||||
end
|
||||
```
|
||||
|
||||
Within the `application` resource, a simplified DSL is available. As with other
|
||||
`application` plugins, the default name of the resource if unspecified is the
|
||||
application path. The following two examples are equivalent:
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
git do
|
||||
repository 'git@github.com:example/myapp.git'
|
||||
end
|
||||
end
|
||||
|
||||
application '/srv/myapp' do
|
||||
git 'git@github.com:example/myapp.git'
|
||||
end
|
||||
```
|
||||
|
||||
## Sponsors
|
||||
|
||||
Development sponsored by [Chef Software](https://www.chef.io/), [Symonds & Son](http://symondsandson.com/), and [Orion](https://www.orionlabs.co/).
|
||||
|
||||
The Poise test server infrastructure is sponsored by [Rackspace](https://rackspace.com/).
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2015-2016, Noah Kantrowitz
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application_git'
|
||||
@@ -1,21 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application_git/resource'
|
||||
|
||||
|
||||
module PoiseApplicationGit
|
||||
end
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application_git/resource'
|
||||
@@ -1,204 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'zlib'
|
||||
|
||||
require 'chef/provider'
|
||||
require 'chef/resource'
|
||||
require 'poise_application/app_mixin'
|
||||
require 'poise_application/resources/application'
|
||||
|
||||
require 'poise_application_git/safe_string'
|
||||
|
||||
|
||||
module PoiseApplicationGit
|
||||
# An `application_git` resource to clone application code from git.
|
||||
#
|
||||
# @since 1.0.0
|
||||
# @provides application_git
|
||||
# @action sync
|
||||
# @action checkout
|
||||
# @action export
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# git 'git@github.com:example/myapp.git' do
|
||||
# deploy_key data_bag_item('deploy_keys', 'myapp')['key']
|
||||
# end
|
||||
# end
|
||||
class Resource < Chef::Resource::Git
|
||||
include PoiseApplication::AppMixin
|
||||
provides(:application_git)
|
||||
|
||||
# @api private
|
||||
def initialize(*args)
|
||||
super
|
||||
# Because the superclass declares this, we have to as well. Should be
|
||||
# removable at some point when Chef makes everything use the provider
|
||||
# resolver system instead.
|
||||
@resource_name = :application_git
|
||||
@provider = PoiseApplicationGit::Provider
|
||||
# Clear defaults in older versions of Chef.
|
||||
remove_instance_variable(:@group) if instance_variable_defined?(:@group)
|
||||
remove_instance_variable(:@user) if instance_variable_defined?(:@user)
|
||||
end
|
||||
|
||||
# @!attribute group
|
||||
# Group to run git as. Defaults to the application group.
|
||||
# @return [String, Integer, nil, false]
|
||||
attribute(:group, kind_of: [String, Integer, NilClass, FalseClass], default: lazy { parent && parent.group })
|
||||
# @!attribute strict_ssh
|
||||
# Enable strict SSH host key checking. Defaults to false.
|
||||
# @return [Boolean]
|
||||
attribute(:strict_ssh, equal_to: [true, false], default: false)
|
||||
# @!attribute user
|
||||
# User to run git as. Defaults to the application owner.
|
||||
# @return [String, Integer, nil, false]
|
||||
attribute(:user, kind_of: [String, Integer, NilClass, FalseClass], default: lazy { parent && parent.owner })
|
||||
|
||||
# @api private
|
||||
def after_created
|
||||
# Allow using the repository as the name in an application block.
|
||||
if parent && !repository
|
||||
destination(parent.path)
|
||||
repository(name)
|
||||
end
|
||||
end
|
||||
|
||||
# @!attribute deploy_key
|
||||
# SSH deploy key as either a string value or a path to a key file.
|
||||
# @return [String]
|
||||
def deploy_key(val=nil)
|
||||
# Use a SafeString for literal deploy keys so they aren't shown.
|
||||
val = SafeString.new(val) if val && !deploy_key_is_local?(val)
|
||||
set_or_return(:deploy_key, val, kind_of: String)
|
||||
end
|
||||
|
||||
# Default SSH wrapper path.
|
||||
#
|
||||
# @api private
|
||||
# @return [String]
|
||||
def ssh_wrapper_path
|
||||
@ssh_wrapper_path ||= ::File.expand_path("~#{user}/.ssh/ssh_wrapper_#{Zlib.crc32(name)}")
|
||||
end
|
||||
|
||||
# Guess if the deploy key is a local path or literal value.
|
||||
#
|
||||
# @api private
|
||||
# @param key [String, nil] Key value to check. Defaults to self.key.
|
||||
# @return [Boolean]
|
||||
def deploy_key_is_local?(key=nil)
|
||||
key ||= deploy_key
|
||||
key && key[0] == '/'
|
||||
end
|
||||
|
||||
# Path to deploy key.
|
||||
#
|
||||
# @api private
|
||||
# @return [String]
|
||||
def deploy_key_path
|
||||
@deploy_key_path ||= if deploy_key_is_local?
|
||||
deploy_key
|
||||
else
|
||||
::File.expand_path("~#{user}/.ssh/id_deploy_#{Zlib.crc32(name)}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Provider for `application_git`.
|
||||
#
|
||||
# @since 1.0.0
|
||||
# @see Resource
|
||||
# @provides application_git
|
||||
class Provider < Chef::Provider::Git
|
||||
include PoiseApplication::AppMixin
|
||||
provides(:application_git)
|
||||
|
||||
# @api private
|
||||
def initialize(*args)
|
||||
super
|
||||
# Set the SSH wrapper path in a late-binding kind of way. This better
|
||||
# supports situations where the user doesn't exist until Chef converges.
|
||||
new_resource.ssh_wrapper(new_resource.ssh_wrapper_path) if new_resource.deploy_key
|
||||
end
|
||||
|
||||
# @api private
|
||||
def whyrun_supported?
|
||||
false # Just not dealing with this right now
|
||||
end
|
||||
|
||||
# Hack our special login in before load_current_resource runs because that
|
||||
# needs access to the git remote.
|
||||
#
|
||||
# @api private
|
||||
def load_current_resource
|
||||
include_recipe('git')
|
||||
notifying_block do
|
||||
create_dotssh
|
||||
write_deploy_key
|
||||
write_ssh_wrapper
|
||||
end if new_resource.deploy_key
|
||||
super
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Create a .ssh folder for the user.
|
||||
#
|
||||
# @return [void]
|
||||
def create_dotssh
|
||||
directory ::File.expand_path("~#{new_resource.user}/.ssh") do
|
||||
owner new_resource.user
|
||||
group new_resource.group
|
||||
mode '755'
|
||||
end
|
||||
end
|
||||
|
||||
# Copy the deploy key to a file if needed.
|
||||
#
|
||||
# @return [void]
|
||||
def write_deploy_key
|
||||
# Check if we have a local path or some actual content
|
||||
return if new_resource.deploy_key_is_local?
|
||||
file new_resource.deploy_key_path do
|
||||
owner new_resource.user
|
||||
group new_resource.group
|
||||
mode '600'
|
||||
content new_resource.deploy_key
|
||||
sensitive true
|
||||
end
|
||||
end
|
||||
|
||||
# Create the SSH wrapper script.
|
||||
#
|
||||
# @return [void]
|
||||
def write_ssh_wrapper
|
||||
# Write out the GIT_SSH script, it should already be enabled above
|
||||
file new_resource.ssh_wrapper_path do
|
||||
owner new_resource.user
|
||||
group new_resource.group
|
||||
mode '700'
|
||||
content %Q{#!/bin/sh\n/usr/bin/env ssh #{'-o "StrictHostKeyChecking=no" ' unless new_resource.strict_ssh}-i "#{new_resource.deploy_key_path}" $@\n}
|
||||
end
|
||||
end
|
||||
|
||||
# Patch back in the `#git` from the git provider. This otherwise conflicts
|
||||
# with the `#git` defined by the DSL, which gets included in such a way
|
||||
# that the DSL takes priority.
|
||||
def git(*args, &block)
|
||||
Chef::Provider::Git.instance_method(:git).bind(self).call(*args, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
module PoiseApplicationGit
|
||||
# A string that won't be shown in Chef error output
|
||||
class SafeString < String
|
||||
def to_text
|
||||
'"suppressed sensitive value"'
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,20 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
module PoiseApplicationGit
|
||||
VERSION = '1.1.0'
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
#
|
||||
# Copyright 2015-2016, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
raise 'Halite is not compatible with no_lazy_load false, please set no_lazy_load true in your Chef configuration file.' unless Chef::Config[:no_lazy_load]
|
||||
$LOAD_PATH << File.expand_path('../../files/halite_gem', __FILE__)
|
||||
require "poise_application_git/cheftie"
|
||||
@@ -1 +0,0 @@
|
||||
{"name":"application_git","version":"1.1.0","description":"A plugin for poise-application to deploy applications from git.","long_description":"# Application_Git Cookbook\n\n[](https://travis-ci.org/poise/application_git)\n[](https://rubygems.org/gems/poise-application-git)\n[](https://supermarket.chef.io/cookbooks/application_git)\n[](https://codecov.io/github/poise/application_git)\n[](https://gemnasium.com/poise/application_git)\n[](https://www.apache.org/licenses/LICENSE-2.0)\n\nA [Chef](https://www.chef.io/) cookbook to handle deploying code from git when\nusing the [application cookbook](https://github.com/poise/application).\n\n## Quick Start\n\nTo deploy from a private GitHub repository:\n\n```ruby\napplication '/srv/myapp' do\n git 'git@github.com:example/myapp.git' do\n deploy_key chef_vault_item('deploy_keys', 'myapp')['key']\n end\nend\n```\n\n## Requirements\n\nChef 12 or newer is required.\n\n## Resources\n\n### `application_git`\n\nThe `application_git` resource deploys code from git. It extends the core `git`\nresource to support deploy keys and disabling strict host key verification.\n\n```ruby\napplication '/srv/myapp' do\n git 'git@github.com:example/myapp.git'\nend\n```\n\n#### Actions\n\nAll actions work the same as the core `git` resource.\n\n* `:sync` – Clone and checkout the requested revision *(default)*\n* `:checkout` – Checkout the request revision. If the repository isn't already\n cloned, this action does nothing.\n* `:export` – Export the repository without the `.git` folder.\n\n#### Properties\n\nAll properties from the core `git` resource work the same way with the following\nadditions:\n\n* `deploy_key` – SSH key to use with git. Can be specified either as a path to\n key file already created or as a string value containing the key directly.\n* `strict_ssh` – Enable strict SSH host key checking. *(default: false)*\n\n### DSL Usage\n\nThe `application_git` resource can be used directly as a replacement for the\ncore `git` resource:\n\n```ruby\napplication_git '/srv/myapp' do\n repository 'git@github.com:example/myapp.git'\n deploy_key chef_vault_item('deploy_keys', 'myapp')['key']\nend\n```\n\nWithin the `application` resource, a simplified DSL is available. As with other\n`application` plugins, the default name of the resource if unspecified is the\napplication path. The following two examples are equivalent:\n\n```ruby\napplication '/srv/myapp' do\n git do\n repository 'git@github.com:example/myapp.git'\n end\nend\n\napplication '/srv/myapp' do\n git 'git@github.com:example/myapp.git'\nend\n```\n\n## Sponsors\n\nDevelopment sponsored by [Chef Software](https://www.chef.io/), [Symonds & Son](http://symondsandson.com/), and [Orion](https://www.orionlabs.co/).\n\nThe Poise test server infrastructure is sponsored by [Rackspace](https://rackspace.com/).\n\n## License\n\nCopyright 2015-2016, Noah Kantrowitz\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n","maintainer":"Noah Kantrowitz","maintainer_email":"noah@coderanger.net","license":"Apache 2.0","platforms":{},"dependencies":{"git":">= 0.0.0","poise":"~> 2.0","application":"~> 5.0"},"recommendations":{},"suggestions":{},"conflicting":{},"providing":{},"replacing":{},"attributes":{},"groupings":{},"recipes":{}}
|
||||
@@ -1,5 +0,0 @@
|
||||
# Application_Javascript Changelog
|
||||
|
||||
## v1.0.0
|
||||
|
||||
Initial release!
|
||||
@@ -1,132 +0,0 @@
|
||||
# Application_Javascript Cookbook
|
||||
|
||||
[](https://travis-ci.org/poise/application_javascript)
|
||||
[](https://rubygems.org/gems/poise-application-javascript)
|
||||
[](https://supermarket.chef.io/cookbooks/application_javascript)
|
||||
[](https://codecov.io/github/poise/application_javascript)
|
||||
[](https://gemnasium.com/poise/application_javascript)
|
||||
[](https://www.apache.org/licenses/LICENSE-2.0)
|
||||
|
||||
A [Chef](https://www.chef.io/) cookbook to deploy server-side JavaScript
|
||||
applications using Node.js or io.js.
|
||||
|
||||
## Quick Start
|
||||
|
||||
To deploy an Express application from git:
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
git 'https://github.com/example/myapp.git'
|
||||
npm_install
|
||||
npm_start
|
||||
end
|
||||
```
|
||||
|
||||
## Requirements
|
||||
|
||||
Chef 12 or newer is required.
|
||||
|
||||
## Resources
|
||||
|
||||
### `application_javascript`
|
||||
|
||||
The `application_javascript` resource installs a JavaScript runtime for the
|
||||
deployment.
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
javascript '3'
|
||||
end
|
||||
```
|
||||
|
||||
All actions and properties are the same as the [`javascript_runtime` resource](https://github.com/poise/poise-javascript#javascript_runtime).
|
||||
|
||||
### `application_javascript_service`
|
||||
|
||||
The `application_javascript_javascript_service` resource creates a service for a
|
||||
JavaScript command.
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
javascript_service 'main.js'
|
||||
end
|
||||
```
|
||||
|
||||
#### Actions
|
||||
|
||||
* `:enable` – Create, enable and start the service. *(default)*
|
||||
* `:disable` – Stop, disable, and destroy the service.
|
||||
* `:start` – Start the service.
|
||||
* `:stop` – Stop the service.
|
||||
* `:restart` – Stop and then start the service.
|
||||
* `:reload` – Send the configured reload signal to the service.
|
||||
|
||||
#### Properties
|
||||
|
||||
* `command` – Command to run. *(name attribute)*
|
||||
* `path` – Base path for the application. *(default: application path)*
|
||||
* `service_name` – Name of the service to create. *(default: auto-detect)*
|
||||
# `user` – User to run the service as. *(default: application owner)*
|
||||
|
||||
### `application_node_package`
|
||||
|
||||
The `application_node_package` resource installs NPM packages for the deployment.
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
node_package 'grunt-cli'
|
||||
end
|
||||
```
|
||||
|
||||
All actions and properties are the same as the [`node_package` resource](https://github.com/poise/poise-javascript#node_package),
|
||||
except that the `group` and `user` properties default to the application-level
|
||||
data if not specified.
|
||||
|
||||
### `application_npm_start`
|
||||
|
||||
The `application_npm_start` resource creates a service for a JavaScript
|
||||
application using `npm start`.
|
||||
|
||||
```ruby
|
||||
application '/srv/myapp' do
|
||||
npm_start
|
||||
end
|
||||
```
|
||||
|
||||
#### Actions
|
||||
|
||||
* `:enable` – Create, enable and start the service. *(default)*
|
||||
* `:disable` – Stop, disable, and destroy the service.
|
||||
* `:start` – Start the service.
|
||||
* `:stop` – Stop the service.
|
||||
* `:restart` – Stop and then start the service.
|
||||
* `:reload` – Send the configured reload signal to the service.
|
||||
|
||||
#### Properties
|
||||
|
||||
* `path` – Base path for the application. *(default: name attribute)*
|
||||
* `command` – NPM subcommand to run. *(default: start)*
|
||||
* `service_name` – Name of the service to create. *(default: auto-detect)*
|
||||
# `user` – User to run the service as. *(default: application owner)*
|
||||
|
||||
## Sponsors
|
||||
|
||||
Development sponsored by [Chef Software](https://www.chef.io/), [Symonds & Son](http://symondsandson.com/), and [Orion](https://www.orionlabs.co/).
|
||||
|
||||
The Poise test server infrastructure is sponsored by [Rackspace](https://rackspace.com/).
|
||||
|
||||
## License
|
||||
|
||||
Copyright 2015, Noah Kantrowitz
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -1,23 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
autoload :AppMixin, 'poise_application_javascript/app_mixin'
|
||||
autoload :Error, 'poise_application_javascript/error'
|
||||
autoload :Resources, 'poise_application_javascript/resources'
|
||||
autoload :VERSION, 'poise_application_javascript/version'
|
||||
end
|
||||
@@ -1,67 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise/backports'
|
||||
require 'poise/utils'
|
||||
require 'poise_application/app_mixin'
|
||||
require 'poise_javascript/javascript_command_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
# A helper mixin for Javascript application resources and providers.
|
||||
#
|
||||
# @since 4.0.0
|
||||
module AppMixin
|
||||
include Poise::Utils::ResourceProviderMixin
|
||||
|
||||
# A helper mixin for Javascript application resources.
|
||||
module Resource
|
||||
include PoiseApplication::AppMixin::Resource
|
||||
include PoiseJavascript::JavascriptCommandMixin::Resource
|
||||
|
||||
# @!attribute parent_javascript
|
||||
# Override the #parent_javascript from JavascriptCommandMixin to grok the
|
||||
# application level parent as a default value.
|
||||
# @return [PoiseJavascript::Resources::JavascriptRuntime::Resource, nil]
|
||||
parent_attribute(:javascript, type: :javascript_runtime, optional: true, default: lazy { app_state_javascript.equal?(self) ? nil : app_state_javascript })
|
||||
|
||||
# @attribute app_state_javascript
|
||||
# The application-level Javascript parent.
|
||||
# @return [PoiseJavascript::Resources::JavascriptRuntime::Resource, nil]
|
||||
def app_state_javascript(javascript=Poise::NOT_PASSED)
|
||||
unless javascript == Poise::NOT_PASSED
|
||||
app_state[:javascript] = javascript
|
||||
end
|
||||
app_state[:javascript]
|
||||
end
|
||||
|
||||
# A merged hash of environment variables for both the application state
|
||||
# and parent javascript.
|
||||
#
|
||||
# @return [Hash<String, String>]
|
||||
def app_state_environment_javascript
|
||||
env = app_state_environment
|
||||
env = env.merge(parent_javascript.javascript_environment) if parent_javascript
|
||||
env
|
||||
end
|
||||
end
|
||||
|
||||
# A helper mixin for Javascript application providers.
|
||||
module Provider
|
||||
include PoiseApplication::AppMixin::Provider
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,17 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application_javascript/resources'
|
||||
@@ -1,25 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application/error'
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
# Base exception class for poise-application-javascript errors.
|
||||
#
|
||||
# @since 1.0.0
|
||||
class Error < PoiseApplication::Error
|
||||
end
|
||||
end
|
||||
@@ -1,22 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_application_javascript/resources/javascript'
|
||||
require 'poise_application_javascript/resources/javascript_execute'
|
||||
require 'poise_application_javascript/resources/javascript_service'
|
||||
require 'poise_application_javascript/resources/node_package'
|
||||
require 'poise_application_javascript/resources/npm_install'
|
||||
require 'poise_application_javascript/resources/npm_start'
|
||||
@@ -1,64 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_javascript/resources/javascript_runtime'
|
||||
|
||||
require 'poise_application_javascript/app_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
module Resources
|
||||
# (see Javascript::Resource)
|
||||
# @since 1.0.0
|
||||
module Javascript
|
||||
# An `application_javascript` resource to manage Javascript runtimes
|
||||
# inside an Application cookbook deployment.
|
||||
#
|
||||
# @provides application_javascript
|
||||
# @provides application_javascript_runtime
|
||||
# @action install
|
||||
# @action uninstall
|
||||
# @example
|
||||
# application '/app' do
|
||||
# javascript '3'
|
||||
# end
|
||||
class Resource < PoiseJavascript::Resources::JavascriptRuntime::Resource
|
||||
include PoiseApplicationJavascript::AppMixin
|
||||
provides(:application_javascript)
|
||||
# Need the double javascript for application resource rewriting.
|
||||
provides(:application_javascript_runtime)
|
||||
container_default(false)
|
||||
subclass_providers!
|
||||
|
||||
# We want to run the base class version of this, not the one from the
|
||||
# mixin. HULK SMASH.
|
||||
def npm_binary
|
||||
self.class.superclass.instance_method(:npm_binary).bind(self).call
|
||||
end
|
||||
|
||||
# Set this resource as the app_state's parent javascript.
|
||||
#
|
||||
# @api private
|
||||
def after_created
|
||||
super.tap do |val|
|
||||
app_state_javascript(self)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,88 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_javascript/resources/javascript_execute'
|
||||
|
||||
require 'poise_application_javascript/app_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
module Resources
|
||||
# (see JavascriptExecute::Resource)
|
||||
# @since 1.0.0
|
||||
module JavascriptExecute
|
||||
# An `application_javascript_execute` resource to run Javascript commands inside an
|
||||
# Application cookbook deployment.
|
||||
#
|
||||
# @provides application_javascript_execute
|
||||
# @action run
|
||||
# @example
|
||||
# application '/srv/myapp' do
|
||||
# javascript_execute 'setup.py install'
|
||||
# end
|
||||
class Resource < PoiseJavascript::Resources::JavascriptExecute::Resource
|
||||
include PoiseApplicationJavascript::AppMixin
|
||||
provides(:application_javascript_execute)
|
||||
def initialize(*args)
|
||||
super
|
||||
# Clear some instance variables so my defaults work.
|
||||
remove_instance_variable(:@cwd)
|
||||
remove_instance_variable(:@group)
|
||||
remove_instance_variable(:@user)
|
||||
end
|
||||
|
||||
# #!attribute cwd
|
||||
# Override the default directory to be the app path if unspecified.
|
||||
# @return [String]
|
||||
attribute(:cwd, kind_of: [String, NilClass, FalseClass], default: lazy { parent && parent.path })
|
||||
|
||||
# #!attribute group
|
||||
# Override the default group to be the app group if unspecified.
|
||||
# @return [String, Integer]
|
||||
attribute(:group, kind_of: [String, Integer, NilClass, FalseClass], default: lazy { parent && parent.group })
|
||||
|
||||
# #!attribute user
|
||||
# Override the default user to be the app owner if unspecified.
|
||||
# @return [String, Integer]
|
||||
attribute(:user, kind_of: [String, Integer, NilClass, FalseClass], default: lazy { parent && parent.owner })
|
||||
end
|
||||
|
||||
# The default provider for `application_javascript_execute`.
|
||||
#
|
||||
# @see Resource
|
||||
# @provides application_javascript_execute
|
||||
class Provider < PoiseJavascript::Resources::JavascriptExecute::Provider
|
||||
provides(:application_javascript_execute)
|
||||
|
||||
private
|
||||
|
||||
# Override environment to add the application envivonrment instead.
|
||||
#
|
||||
# @return [Hash]
|
||||
def environment
|
||||
super.tap do |environment|
|
||||
# Don't use the app_state_environment_javascript because we already have
|
||||
# those values in place.
|
||||
environment.update(new_resource.app_state_environment)
|
||||
# Re-apply the resource environment for correct ordering.
|
||||
environment.update(new_resource.environment) if new_resource.environment
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,59 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'chef/provider'
|
||||
require 'chef/resource'
|
||||
require 'poise'
|
||||
|
||||
require 'poise_application_javascript/service_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
module Resources
|
||||
# (see JavascriptService::Resource)
|
||||
# @since 1.0.0
|
||||
module JavascriptService
|
||||
class Resource < Chef::Resource
|
||||
include PoiseApplicationJavascript::ServiceMixin
|
||||
provides(:application_javascript_service)
|
||||
|
||||
# @!attribute command
|
||||
# Command to run.
|
||||
# @return [String]
|
||||
attribute(:command, kind_of: String, name_attribute: true)
|
||||
# @!attribute path
|
||||
# Override {PoiseApplicationJavascript::ServiceMixin#path} to make it
|
||||
# not the name_attribute.
|
||||
# @return [String]
|
||||
attribute(:path, kind_of: String, default: lazy { parent && parent.path })
|
||||
end
|
||||
|
||||
class Provider < Chef::Provider
|
||||
include PoiseApplicationJavascript::ServiceMixin
|
||||
provides(:application_javascript_service)
|
||||
|
||||
private
|
||||
|
||||
# (see PoiseApplication::ServiceMixin#service_options)
|
||||
def service_options(resource)
|
||||
super
|
||||
resource.javascript_command(new_resource.command)
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,63 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_javascript/resources/node_package'
|
||||
|
||||
require 'poise_application_javascript/app_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
module Resources
|
||||
# (see NodePackage::Resource)
|
||||
# @since 1.0.0
|
||||
module NodePackage
|
||||
# An `application_node_package` resource to install NPM packages inside
|
||||
# an Application cookbook deployment.
|
||||
#
|
||||
# @provides application_node_package
|
||||
# @action install
|
||||
# @action upgrade
|
||||
# @action remove
|
||||
# @example
|
||||
# application '/app' do
|
||||
# node_package %w{grunt-cli gulp}
|
||||
# end
|
||||
class Resource < PoiseJavascript::Resources::NodePackage::Resource
|
||||
include PoiseApplicationJavascript::AppMixin
|
||||
provides(:application_node_package)
|
||||
subclass_providers!
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
# For older Chef.
|
||||
@resource_name = :application_node_package
|
||||
end
|
||||
|
||||
# #!attribute group
|
||||
# Override the default group to be the app group if unspecified.
|
||||
# @return [String, Integer]
|
||||
attribute(:group, kind_of: [String, Integer, NilClass], default: lazy { parent && parent.group })
|
||||
|
||||
# #!attribute user
|
||||
# Override the default user to be the app owner if unspecified.
|
||||
# @return [String, Integer]
|
||||
attribute(:user, kind_of: [String, Integer, NilClass], default: lazy { parent && parent.owner })
|
||||
|
||||
# @todo This should handle relative paths against parent.path.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,45 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise_javascript/resources/npm_install'
|
||||
|
||||
require 'poise_application_javascript/app_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
module Resources
|
||||
# (see NpmInstall::Resource)
|
||||
# @since 1.0.0
|
||||
module NpmInstall
|
||||
# An `application_npm_install` resource to install package
|
||||
# dependencies inside an Application cookbook deployment.
|
||||
#
|
||||
# @provides application_npm_install
|
||||
# @action install
|
||||
# @example
|
||||
# application '/app' do
|
||||
# npm_install
|
||||
# end
|
||||
class Resource < PoiseJavascript::Resources::NpmInstall::Resource
|
||||
include PoiseApplicationJavascript::AppMixin
|
||||
provides(:application_npm_install)
|
||||
subclass_providers!
|
||||
|
||||
# @todo This should handle relative paths against parent.path.
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,78 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'shellwords'
|
||||
|
||||
require 'chef/provider'
|
||||
require 'chef/resource'
|
||||
require 'poise'
|
||||
|
||||
require 'poise_application_javascript/service_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
module Resources
|
||||
# (see NpmStart::Resource)
|
||||
# @since 1.0.0
|
||||
module NpmStart
|
||||
# An `application_npm_start` resource to create a service for a Javascript
|
||||
# application using `npm start`.
|
||||
#
|
||||
# @provides application_npm_start
|
||||
# @action enable
|
||||
# @action disable
|
||||
# @action start
|
||||
# @action stop
|
||||
# @action restart
|
||||
# @action reload
|
||||
# @example
|
||||
# application '/app' do
|
||||
# npm_start
|
||||
# end
|
||||
class Resource < Chef::Resource
|
||||
include PoiseApplicationJavascript::ServiceMixin
|
||||
provides(:application_npm_start)
|
||||
|
||||
# @!attribute command
|
||||
# NPM sub-command to run. Defaults to `start`.
|
||||
# @return [String, Array<String>]
|
||||
attribute(:command, kind_of: [String, Array], default: 'start')
|
||||
end
|
||||
|
||||
# The default provider for `application_npm_start`.
|
||||
#
|
||||
# @see Resource
|
||||
# @provides application_npm_start
|
||||
class Provider < Chef::Provider
|
||||
include PoiseApplicationJavascript::ServiceMixin
|
||||
provides(:application_npm_start)
|
||||
|
||||
private
|
||||
|
||||
# (see PoiseApplication::ServiceMixin#service_options)
|
||||
def service_options(resource)
|
||||
super
|
||||
npm_cmd = [new_resource.npm_binary] + Array(new_resource.command)
|
||||
resource.javascript_command(Shellwords.join(npm_cmd))
|
||||
# Make sure node is on $PATH because grrr.
|
||||
new_path = [::File.dirname(new_resource.javascript), (new_resource.app_state_environment_javascript['PATH'] || ENV['PATH']).to_s].join(::File::PATH_SEPARATOR)
|
||||
resource.environment['PATH'] = new_path
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,57 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'poise/utils'
|
||||
require 'poise_application/service_mixin'
|
||||
require 'poise_languages/utils'
|
||||
|
||||
require 'poise_application_javascript/app_mixin'
|
||||
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
# A helper mixin for Javascript service resources and providers.
|
||||
#
|
||||
# @since 1.0.0
|
||||
module ServiceMixin
|
||||
include Poise::Utils::ResourceProviderMixin
|
||||
|
||||
# A helper mixin for Javascript service resources.
|
||||
module Resource
|
||||
include PoiseApplication::ServiceMixin::Resource
|
||||
include PoiseApplicationJavascript::AppMixin::Resource
|
||||
end
|
||||
|
||||
# A helper mixin for Javascript service providers.
|
||||
module Provider
|
||||
include PoiseApplication::ServiceMixin::Provider
|
||||
include PoiseApplicationJavascript::AppMixin::Provider
|
||||
|
||||
# Set up the service for running Javascript stuff.
|
||||
def service_options(resource)
|
||||
super
|
||||
# Closure scoping for #javascript_command below.
|
||||
self_ = self
|
||||
# Create a new singleton method that fills in `node` for you.
|
||||
resource.define_singleton_method(:javascript_command) do |val|
|
||||
resource.command("#{self_.new_resource.javascript} #{PoiseLanguages::Utils.absolute_command(val, path: self_.new_resource.app_state_environment_javascript['PATH'])}")
|
||||
end
|
||||
# Include env vars as needed.
|
||||
resource.environment.update(new_resource.parent_javascript.javascript_environment) if new_resource.parent_javascript
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
module PoiseApplicationJavascript
|
||||
VERSION = '1.0.0'
|
||||
end
|
||||
@@ -1,19 +0,0 @@
|
||||
#
|
||||
# Copyright 2015, Noah Kantrowitz
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
raise 'Halite is not compatible with no_lazy_load false, please set no_lazy_load true in your Chef configuration file.' unless Chef::Config[:no_lazy_load]
|
||||
$LOAD_PATH << File.expand_path('../../files/halite_gem', __FILE__)
|
||||
require "poise_application_javascript/cheftie"
|
||||
File diff suppressed because one or more lines are too long
26
cookbooks/chef-sugar/.gitignore
vendored
26
cookbooks/chef-sugar/.gitignore
vendored
@@ -1,26 +0,0 @@
|
||||
*~
|
||||
*#
|
||||
.#*
|
||||
\#*#
|
||||
.*.sw[a-z]
|
||||
*.un~
|
||||
*.tmp
|
||||
*.bk
|
||||
*.bkup
|
||||
.kitchen.local.yml
|
||||
Berksfile.lock
|
||||
Gemfile.lock
|
||||
|
||||
.bundle/
|
||||
.cache/
|
||||
.kitchen/
|
||||
.vagrant/
|
||||
.vagrant.d/
|
||||
.yardoc/
|
||||
bin/
|
||||
coverage/
|
||||
doc/
|
||||
pkg/
|
||||
tmp/
|
||||
vendor/
|
||||
.rspec
|
||||
@@ -1,16 +0,0 @@
|
||||
driver:
|
||||
name: vagrant
|
||||
|
||||
provisioner:
|
||||
name: chef_zero
|
||||
deprecations_as_errors: true
|
||||
|
||||
platforms:
|
||||
- name: centos-6
|
||||
- name: centos-7
|
||||
- name: ubuntu-16.04
|
||||
- name: ubuntu-18.04
|
||||
|
||||
suites:
|
||||
- name: default
|
||||
run_list: chef-sugar::default
|
||||
@@ -1,309 +0,0 @@
|
||||
# Chef Sugar Changelog
|
||||
|
||||
This file is used to list changes made in each version of the chef-sugar cookbook and gem.
|
||||
|
||||
<!-- latest_release -->
|
||||
<!-- latest_release -->
|
||||
|
||||
<!-- release_rollup -->
|
||||
<!-- release_rollup -->
|
||||
|
||||
<!-- latest_stable_release -->
|
||||
## [v5.1.12](https://github.com/chef/chef-sugar/tree/v5.1.12) (2020-11-11)
|
||||
|
||||
#### Merged Pull Requests
|
||||
- Don't define which helper on Chef 16+ to avoid conflicts [#21](https://github.com/chef/chef-sugar/pull/21) ([tas50](https://github.com/tas50))
|
||||
<!-- latest_stable_release -->
|
||||
|
||||
## [v5.1.11](https://github.com/chef/chef-sugar/tree/v5.1.11) (2020-08-14)
|
||||
|
||||
#### Merged Pull Requests
|
||||
- Fix Ruby 2.3 tests [#19](https://github.com/chef/chef-sugar/pull/19) ([tas50](https://github.com/tas50))
|
||||
- Only require libs if we haven't already loaded them [#20](https://github.com/chef/chef-sugar/pull/20) ([tas50](https://github.com/tas50))
|
||||
|
||||
## [v5.1.9](https://github.com/chef/chef-sugar/tree/v5.1.9) (2019-11-13)
|
||||
|
||||
#### Merged Pull Requests
|
||||
- Don't fail if Chef::VERSION isn't defined [#18](https://github.com/chef/chef-sugar/pull/18) ([lamont-granquist](https://github.com/lamont-granquist))
|
||||
|
||||
## [v5.1.8](https://github.com/chef/chef-sugar/tree/v5.1.8) (2019-11-13)
|
||||
|
||||
#### Merged Pull Requests
|
||||
- Wire up Expeditor and support both chef-sugar and chef-sugar-ng [#8](https://github.com/chef/chef-sugar/pull/8) ([tas50](https://github.com/tas50))
|
||||
- Add github templates and a code of conduct [#9](https://github.com/chef/chef-sugar/pull/9) ([tas50](https://github.com/tas50))
|
||||
- Beginning of chef-sugar deprecation [#10](https://github.com/chef/chef-sugar/pull/10) ([lamont-granquist](https://github.com/lamont-granquist))
|
||||
- Use Expeditor to set the version in the metadata.rb file [#11](https://github.com/chef/chef-sugar/pull/11) ([tas50](https://github.com/tas50))
|
||||
- Switch gemfile back to chef-sugar [#12](https://github.com/chef/chef-sugar/pull/12) ([tas50](https://github.com/tas50))
|
||||
- Fix metadata.rb version updatig logic and use SPDX compliant license strings [#14](https://github.com/chef/chef-sugar/pull/14) ([tas50](https://github.com/tas50))
|
||||
- Additional Chef-15 greenification [#13](https://github.com/chef/chef-sugar/pull/13) ([lamont-granquist](https://github.com/lamont-granquist))
|
||||
- Move test deps to the Gemfile [#15](https://github.com/chef/chef-sugar/pull/15) ([tas50](https://github.com/tas50))
|
||||
- Get the tests green [#17](https://github.com/chef/chef-sugar/pull/17) ([tas50](https://github.com/tas50))
|
||||
- Deprecate chef-sugar node API [#16](https://github.com/chef/chef-sugar/pull/16) ([lamont-granquist](https://github.com/lamont-granquist))
|
||||
|
||||
## v5.0.1 (2019-03-13)
|
||||
|
||||
- Modifies the behavior of `systemd?` so that it works equally well on physical/virtual
|
||||
machines as well as within containers.
|
||||
|
||||
## v5.0.0 (2018-12-26)
|
||||
|
||||
- BREAKING CHANGE: Require Chef 13 or later
|
||||
- Trim out test files and the cookbook from the gem artifact to slim install size
|
||||
|
||||
## v4.2.1 (2018-12-06)
|
||||
|
||||
- Repackaged with an older stove to remove the metadata.rb on the Supermarket for older chef-client releases
|
||||
|
||||
## v4.2.0 (2018-12-05)
|
||||
|
||||
- Added a new parallels? helper
|
||||
- Added support for the Raspberry Pi 1 and Zero to armhf? helper
|
||||
- Added a centos_final? helper
|
||||
|
||||
## v4.1.0 (2018-08-16)
|
||||
|
||||
- Improve the detection of linux hosts with the linux? helper. Amazon Linux and obscure distros will now be properly detected.
|
||||
|
||||
## v4.0.1 (2018-08-09)
|
||||
|
||||
- Add new Debian, Mint, macOS codenames
|
||||
- Add new Ubuntu codenames: artful, bionic, cosmic
|
||||
|
||||
## v4.0.0 (2018-01-26)
|
||||
|
||||
- Require Ruby 2.2 or later and Chef 12.10 or later
|
||||
- Cookbook now installs the chef-sugar gem via a metadata installation so chef-sugar::default on your runlist is no longer needed
|
||||
- Added additional metadata to the cookbook: supports, issue_url, source_url, chef_version.
|
||||
- Requirements improved in the readme
|
||||
|
||||
## v3.6.0 (2017-10-26)
|
||||
|
||||
- Add Ubuntu zesty and debian stretch detection
|
||||
- Add softlayer? helper
|
||||
- Add aarch64? helper
|
||||
|
||||
## v3.5.0 (2016-07-12)
|
||||
|
||||
- Improve the systemd check to not fail on older kernels or Windows hosts
|
||||
- Add detection of macOS 10.11 and 10.12
|
||||
|
||||
## v3.4.0 (2016-07-18)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add `virtual?` and `physical?` methods
|
||||
- Add Scaleway C1 server (arm arch) support
|
||||
- Add IMB s390x support
|
||||
- Add missing Ubuntu release names
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Drop Ruby 2.0.0 support from Travis test matrix
|
||||
- Pin to Rack 1.6 (dev dep)
|
||||
|
||||
## v3.3.0 (2016-01-11)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Break up `Chef::Sugar::Constraints` into a class and a dsl file
|
||||
- Add `platform_version` method with full constraints comparison support
|
||||
|
||||
## v3.2.0 (2015-12-10)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add platform matchers for `debian` and `fedora`
|
||||
- Add `openvz` support under virtualization
|
||||
- Add init system detection support
|
||||
- Add support for `nexus`, `ios_xr` platforms and `wrlinux` platform_family
|
||||
- Add additional `aix` helpers
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Properly expose `Architecture#i386?` in the DSL
|
||||
|
||||
## v3.1.1 (2015-06-23)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Update Intel CPU types based on existing Fauxhai data
|
||||
- Update SPARC logic and 32/64-bit logic for x86 and i386
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix 32-bit logic
|
||||
- Fix default behavior to include chef-sugar at compile time
|
||||
- Fix Chef 12.1.0 warnings for chef_gem compile time install
|
||||
- Fix `redhat_enterprise_linux?` matcher
|
||||
|
||||
## v3.0.2 (2015-03-26)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add helpers for `ppc64` and `ppc64le` architecture
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Adjustments to error message
|
||||
|
||||
## v3.0.1 (2015-03-20)
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- Rename `compile_time` `to at_compile_time` - if your recipes are affected by this breaking change, your Chef Client run will produce a verbose error message with details on how to fix the error.
|
||||
|
||||
## v3.0.0 (2015-03-17)
|
||||
|
||||
### Breaking Changes
|
||||
|
||||
- Drop support for Ruby 1.9 (it might still work, but it is no longer officially supported)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Remove accidentially committed gem source
|
||||
- Bump development dependencies
|
||||
- Add `digitalocean?` matcher
|
||||
- Expose the `rhel` platform as `el`
|
||||
- Add `ppc64le` platform
|
||||
- Add helper for determining if architecture is SPARC
|
||||
- Add helper for determining if architecture is Intel
|
||||
- Add dynamic platform/version matchers for Solaris
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Reset namespace_options when reaching top-level resources
|
||||
|
||||
## v2.5.0 (2015-01-05)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add `data_bag_item_for_environment` function
|
||||
- Add `kvm?` matcher
|
||||
- Add `virtualbox?` matcher
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Use `.key?` to check for hash key presence, raising an `AttributeDoesNotExist` error sooner
|
||||
|
||||
## v2.4.1 (2014-10-12)
|
||||
|
||||
- No changes from v2.4.0 - forced a new version upload to the Chef Supermarket
|
||||
|
||||
## v2.4.0 (2014-10-12)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add `docker?` matcher
|
||||
|
||||
## v2.3.2 (2014-10-07)
|
||||
|
||||
### Big Fixues
|
||||
|
||||
- Include `amd64` in `_64_bit?` check
|
||||
|
||||
## v2.3.1 (2014-10-07)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Check all 64-bit architectures that may be reported by Ohai
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Be more tolerant of `nil` values return from sub functions
|
||||
- Check to make sure `node['domain']` is not `nil` before calling `#include?`
|
||||
|
||||
## v2.3.0 (2014-09-24)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add `vmware?` matcher
|
||||
- Allow the attribute DSL to access parent attributes
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Return `true` or `false` from all Boolean methods (instead of `nil` or truthy values)
|
||||
|
||||
## v2.2.0 (2014-08-20)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add `smartos?` matcher
|
||||
- Add `omnios?` matcher
|
||||
|
||||
## v2.1.0 (2014-06-26)
|
||||
|
||||
### Improvements
|
||||
|
||||
- Add `solaris2?` matcher
|
||||
- Add `aix?` matcher
|
||||
- Add 'lxc?' matcher
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix a bug in namespace memoization during attribute initialization
|
||||
|
||||
## v2.0.0 (2014-06-16)
|
||||
|
||||
### Breaking
|
||||
|
||||
- Remove `not_linux?` method
|
||||
- Remove `not_windows?` method
|
||||
|
||||
### Improvements
|
||||
|
||||
- Miscellaneous spelling fixes
|
||||
- Update a failing unit test for `installed?`
|
||||
- Add Mac OS X to the list of platforms (Yosemite)
|
||||
- Upgrade to RSpec 3
|
||||
- Fix `which` (and `installed?` and `installed_at_version?`) when given an absolute path
|
||||
- Fix `linux?` check to only return true on real linuxes
|
||||
|
||||
## v1.3.0 (2014-05-05)
|
||||
|
||||
- Check both `$stdout` and `$stderr` in `version_for`
|
||||
- Add additional platform versions
|
||||
- Make `includes_recipe?` a top-level API (instead of just Node)
|
||||
- Match on the highest version number instead of direct equality checking on platform versions
|
||||
- Define `Object#blank?` as a core extension
|
||||
- Define `String#flush` as a core extension
|
||||
- Remove Stove
|
||||
|
||||
## v1.2.6 (2014-03-16)
|
||||
|
||||
- Fix a bug in `vagrant?` returning false on newer Vagrant versions
|
||||
- Remove Coveralls
|
||||
|
||||
## v1.2.4 (2014-03-13)
|
||||
|
||||
- See (1.2.2), but I botched the release
|
||||
|
||||
## v1.2.2 (2014-03-13)
|
||||
|
||||
- Fix a critical bug with `encrypted_data_bag_item` using the wrong key
|
||||
|
||||
## v1.2.0 (2014-03-09)
|
||||
|
||||
- Add `namespace` functionality for specifying attributes in a DSL
|
||||
- Add constraints helpers for comparing version strings
|
||||
- Add `require_chef_gem` to safely require and degrade if a gem is not installed
|
||||
- Add `deep_fetch` and `deep_fetch!` to fetch deeply nested keys
|
||||
- Accept an optional secret key in `encrypted_data_bag_item` helper and raise a helpful error if one is not set (NOTE: this changes the airity of the method, but it's backward-compatible because Ruby is magic)
|
||||
- Add Stove for releasing
|
||||
- Updated copyrights for 2014
|
||||
|
||||
## v1.1.0 (2013-12-10)
|
||||
|
||||
- Add `cloudstack?` helper
|
||||
- Add data bag helpers
|
||||
- Remove foodcritic checks
|
||||
- Upgrade development gem versions
|
||||
- Randomize spec order
|
||||
|
||||
## v1.0.1 (2013-10-15)
|
||||
|
||||
- Add development recipe
|
||||
- Add `compile_time`, `before`, and `after` filters
|
||||
|
||||
## v1.0.0 (2013-10-15)
|
||||
|
||||
- First public release
|
||||
@@ -1 +0,0 @@
|
||||
Please refer to the Chef Community Code of Conduct at https://www.chef.io/code-of-conduct/
|
||||
@@ -1,20 +0,0 @@
|
||||
Contributing to Chef Sugar
|
||||
===============================
|
||||
The process for contributing to Chef sugar is rather straight-forward. It is unlikely that you'll need to modify the actual Chef recipe, so it's assumed that you want to work on the Gem itself.
|
||||
|
||||
1. Fork the repository on GitHub.
|
||||
2. Clone your fork.
|
||||
3. Create a new, semantically-named branch:
|
||||
|
||||
$ git checkout -b my_feature_branch
|
||||
|
||||
4. Make any changes, ensuring you write adequate test coverage.
|
||||
5. Document your changes (YARD).
|
||||
6. Run the tests (make sure they pass).
|
||||
7. Submit a Pull Request on GitHub.
|
||||
8. (optional) Ping me on Twitter (@sethvargo)
|
||||
|
||||
Additionally, please **DO NOT**:
|
||||
- Modify the version of the cookbook or gem.
|
||||
- Update the CHANGELOG
|
||||
- Make unnecessary changes to the gemspec
|
||||
@@ -1,84 +0,0 @@
|
||||
### Chef Sugar is being deprecated, this is the internal list of the TODO tasks
|
||||
|
||||
TASKS in order:
|
||||
|
||||
* ~~pull cloud.rb into core-chef~~
|
||||
* pull data_bag.rb into core-chef
|
||||
* ~~pull run_context.rb into core-chef~~
|
||||
* ~~pull vagrant.rb into core-chef~~
|
||||
* ~~pull virtualization.rb into core-chef~~
|
||||
* deprecate ip.rb with no replacement (although maybe a new ohai attribute?)
|
||||
* deprecate kernel.rb with no replacement
|
||||
* ~~deprecate node.rb with no replacement~~
|
||||
* deprecate ruby.rb with no replacement
|
||||
* determine what to do about filters.rb
|
||||
* determine what to do about remaining platform.rb
|
||||
* determine what to do about shell.rb
|
||||
* determine what to do about core_extensions
|
||||
|
||||
NOTES on files:
|
||||
|
||||
architecture.rb is COMPLETED
|
||||
|
||||
cloud.rb is COMPLETED
|
||||
|
||||
constraint.rb / constraint_dsl.rb tasks:
|
||||
|
||||
* replace with Chef::VersionString objects
|
||||
|
||||
core_extensions
|
||||
|
||||
* pile of monkeypatches that makes my eyes twitch a little bit. how much do we want to become activerecord? counter-argument is
|
||||
that some activerecord-ish helpers are SUUUPER useful. but we should probably copy them from activerecord since those are more
|
||||
likely to get pulled directly into core-chef.
|
||||
|
||||
data_bag
|
||||
|
||||
* we should pull this into core-chef or something comparable (TBD)
|
||||
|
||||
docker.rb is COMPLETED
|
||||
|
||||
filters.rb tasks
|
||||
|
||||
* incorporate the before/after syntax into the find_resource/edit_resource API (probably renamed, with deprecation done here)
|
||||
* deprecate the at_compile_time helper in favor of moving the `compile_time true` property into Chef::Resource directly
|
||||
|
||||
init.rb is COMPLETED
|
||||
|
||||
* unless we get user complaints, runit is dead to us and this is done
|
||||
|
||||
ip.rb
|
||||
|
||||
* needs to be deprecated with no replacement (could push this into another ohai attribute -- or have we done it already?)
|
||||
|
||||
kernel.rb (the require_chef_gem trivial helper)
|
||||
|
||||
* needs to be deprecated with no replacement.
|
||||
|
||||
kitchen.rb is COMPLETED
|
||||
|
||||
node.rb (the method_missing syntax)
|
||||
|
||||
* needs to be deprecated with no replacement.
|
||||
|
||||
platform.rb tasks:
|
||||
|
||||
* decide what to do about the `debian_before_squeeze` platform version helpers.
|
||||
* decide what to do about the `platform_version` helper (can we wire this up to a Chef::VersionString object instead?)
|
||||
|
||||
platform_family.rb is COMPLETED
|
||||
|
||||
ruby.rb tasks:
|
||||
|
||||
* needs to be deprecated with no replacement (nobody has used it since ruby 2.0, so its clearly not being used)
|
||||
|
||||
run_context.rb is COMPLETED
|
||||
|
||||
shell.rb: (collection of helpers including `which`)
|
||||
|
||||
* TBD
|
||||
|
||||
vagrant.rb is COMPLETED
|
||||
|
||||
virtualization.rb is COMPLETED
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
source "https://rubygems.org"
|
||||
gemspec name: "chef-sugar"
|
||||
|
||||
group :debug do
|
||||
gem "pry"
|
||||
gem "pry-byebug" unless Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.4")
|
||||
gem "pry-stack_explorer", "~> 0.4.0" # pin until we drop ruby < 2.6
|
||||
end
|
||||
|
||||
group :test do
|
||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.5")
|
||||
gem "chefspec", "~> 7.4.0" # supports Chef 13+ aka ruby 2.3+
|
||||
gem "chef", "~> 13" # also needed to support Ruby 2.3
|
||||
elsif Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.6")
|
||||
gem "chefspec"
|
||||
gem "chef-zero", "~> 14"
|
||||
gem "chef", "~> 15" # also needed to support Ruby 2.3
|
||||
else
|
||||
gem "chefspec"
|
||||
end
|
||||
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.4")
|
||||
gem "rubyzip", "< 2"
|
||||
else
|
||||
gem "rubyzip"
|
||||
end
|
||||
gem "rake"
|
||||
gem "rspec"
|
||||
end
|
||||
|
||||
group :kitchen do
|
||||
gem "kitchen-vagrant"
|
||||
gem "license-acceptance", "~> 1.0" if Gem::Version.new(RUBY_VERSION) < Gem::Version.new("2.4")
|
||||
gem "test-kitchen"
|
||||
end
|
||||
@@ -1,201 +0,0 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright 2013-2015 Seth Vargo
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -1,546 +0,0 @@
|
||||
# Chef Sugar
|
||||
|
||||
[][gem]
|
||||
[](https://buildkite.com/chef-oss/chef-chef-sugar-master-verify)
|
||||
|
||||
# CHEF SUGAR DEPRECATION WARNING
|
||||
|
||||
Chef Sugar is in the process of being migrated into Chef Infra Client 15 and Chef Infra Client 16. The bulk of that work has already
|
||||
been completed. After it is completed there will be no need for this cookbook and gem, and it will no longer be supported. No
|
||||
issues or patches are being accepted at this time.
|
||||
|
||||
The final major version release of Chef Sugar will raise and will not be functional. Users on Chef Infra Client <= 14 or old versions of 15
|
||||
will need to have a pessimistic pin on chef-sugar, or simply upgrade.
|
||||
|
||||
## Requirements
|
||||
|
||||
### Platforms
|
||||
|
||||
- any platform
|
||||
|
||||
### Chef
|
||||
|
||||
- Chef 13.0+
|
||||
|
||||
### Cookbooks
|
||||
|
||||
- none
|
||||
|
||||
## Installation
|
||||
|
||||
If you want to develop/hack on chef-sugar, please see the CONTRIBUTING.md.
|
||||
|
||||
If you are using Berkshelf, add `chef-sugar` to your `Berksfile`:
|
||||
|
||||
```ruby
|
||||
cookbook 'chef-sugar'
|
||||
```
|
||||
|
||||
Otherwise, you can use `knife` or download the tarball directly from the community site:
|
||||
|
||||
```ruby
|
||||
knife cookbook site install chef-sugar
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
Simply depend on this cookbook in the metadata of your cookbook and the gem will be installed and required..
|
||||
|
||||
Requiring the Chef Sugar Gem will automatically extend the Recipe DSL, `Chef::Resource`, and `Chef::Provider` with helpful convenience methods.
|
||||
|
||||
### Module Method
|
||||
|
||||
If you are working outside of the Recipe DSL, you can use the module methods instead of the Recipe DSL. In general, the module methods have the same name as their Recipe-DSL counterparts, but require the node object as a parameter. For example:
|
||||
|
||||
In a Recipe:
|
||||
|
||||
```ruby
|
||||
# cookbook/recipes/default.rb
|
||||
do_something if windows?
|
||||
```
|
||||
|
||||
In a Library as a singleton:
|
||||
|
||||
```ruby
|
||||
# cookbook/libraries/default.rb
|
||||
def only_on_windows(&block)
|
||||
yield if Chef::Sugar::PlatformFamily.windows?(@node)
|
||||
end
|
||||
```
|
||||
|
||||
In a Library as a Mixin:
|
||||
|
||||
```ruby
|
||||
# cookbook/libraries/default.rb
|
||||
include Chef::Sugar::PlatformFamily
|
||||
|
||||
def only_on_windows(&block)
|
||||
yield if windows?(@node)
|
||||
end
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
**Note:** For the most extensive API documentation, please see the YARD documentation.
|
||||
|
||||
### Architecture
|
||||
|
||||
**Note:** Some of the architecture commands begin with an underscore (`_`) because Ruby does not permit methods to start with a numeric.
|
||||
|
||||
- `_64_bit?`
|
||||
- `_32_bit?`
|
||||
- `intel?`
|
||||
- `sparc?`
|
||||
- `ppc64?`
|
||||
- `ppc64le?`
|
||||
- `powerpc?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
execute 'build[my binary]' do
|
||||
command '...'
|
||||
not_if { _64_bit? }
|
||||
end
|
||||
```
|
||||
|
||||
### Cloud
|
||||
|
||||
- `azure?`
|
||||
- `cloud?`
|
||||
- `digitalocean?`
|
||||
- `ec2?`
|
||||
- `eucalyptus?`
|
||||
- `gce?`
|
||||
- `linode?`
|
||||
- `openstack?`
|
||||
- `cloudstack?`
|
||||
- `rackspace?`
|
||||
- `softlayer?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
template '/tmp/config' do
|
||||
variables(
|
||||
# See also: best_ip_for
|
||||
ipaddress: cloud? ? node['local_ipv4'] : node['public_ipv4']
|
||||
)
|
||||
end
|
||||
```
|
||||
|
||||
### Core Extensions
|
||||
|
||||
**Note:** Core extensions are **not** included by default. You must require the `chef/sugar/core_extensions` module manually to gain access to these APIs:
|
||||
|
||||
```ruby
|
||||
require 'chef/sugar/core_extensions'
|
||||
```
|
||||
|
||||
- `String#satisfies?`
|
||||
- `String#satisfied_by?`
|
||||
- `Array#satisfied_by?`
|
||||
- `Object#blank?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
# Checking version constraints
|
||||
'1.0.0'.satisfies?('~> 1.0') #=> true
|
||||
'~> 1.0'.satisfied_by?('1.0') #=> true
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Check for an object's presence
|
||||
''.blank? #=> true
|
||||
['hello'].blank? #=> false
|
||||
```
|
||||
|
||||
### Data Bag
|
||||
|
||||
- `encrypted_data_bag_item` - a handy DSL method for loading encrypted data bag items the same way you load a regular data bag item; this requires `Chef::Config[:encrypted_data_bag_secret]` is set!
|
||||
- `encrypted_data_bag_item_for_environment` - find the encrypted data bag entry for the current node's Chef environment.
|
||||
- `data_bag_item_for_environment` - find the data bag entry for the current node's Chef environment.
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
encrypted_data_bag_item('accounts', 'hipchat')
|
||||
```
|
||||
|
||||
```ruby
|
||||
encrypted_data_bag_item_for_environment('accounts', 'github')
|
||||
```
|
||||
|
||||
```ruby
|
||||
data_bag_item_for_environment('accounts', 'github')
|
||||
```
|
||||
|
||||
### Docker
|
||||
|
||||
Chef Sugar looks for hints to see if the node being converged is a Docker container. When [Ohai supports checking other nodes](https://github.com/opscode/ohai/pull/428), Chef Sugar will automatically pick up the information.
|
||||
|
||||
- `docker?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
template '/runme' do
|
||||
only_if { docker?(node) }
|
||||
end
|
||||
```
|
||||
|
||||
### Attributes
|
||||
|
||||
Chef Sugar adds more Chef-like DSL to attribute definitions. Instead of using the Ruby hash syntax, you can define attributes using nested namespaces. This DSL may be more friendly to non-Ruby developers. It can safely be mixed-and-matched with the standard syntax.
|
||||
|
||||
```ruby
|
||||
# This is functionally the same as default['apache2']['config']['root'] = '/var/www'
|
||||
namespace 'apache2' do
|
||||
namespace 'config' do
|
||||
root '/var/www'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Specify multiple keys instead of nesting namespaces
|
||||
namespace 'apache2', 'config' do
|
||||
root '/var/www'
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Specify different nested precedence levels
|
||||
namespace 'apache2', precedence: normal do
|
||||
namespace 'config', precedence: override do
|
||||
root '/var/www' #=> override['apache2']['config']['root'] = '/var/www'
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
### Constraints
|
||||
|
||||
- `constraints` - create a new constraint (or requirement) that can be used to test version validations.
|
||||
- `chef_version` - (DSL only) a wrapper for `version(Chef::VERSION)`
|
||||
- `version` - create a new version that can be used to test constraint validation.
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
# Check if a version is satisfied by a constraint
|
||||
version('1.2.3').satisfies?('~> 1.2.0')
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Check if a constraint is satisfied by a version
|
||||
constraint('~> 1.2.0').satisfied_by?('1.2.3')
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Support multiple constraints
|
||||
version('1.2.3').satisfies?('> 1.2', '< 2.0')
|
||||
constraint('> 1.2', '< 2.0').satisfied_by?('1.2.3')
|
||||
```
|
||||
|
||||
```ruby
|
||||
# Only perform an operation if Chef is at a certain version
|
||||
package 'apache2' do
|
||||
not_if { chef_version.satisfies?('~> 11.0') } # Ignore Chef 11
|
||||
end
|
||||
```
|
||||
|
||||
### Kernel
|
||||
|
||||
- `require_chef_gem` - "safely" require a gem. Loading a gem with Chef is sometimes difficult and confusing. The errors that Chef produces are also sometimes not very intuitive. In the event you require a gem to exist on the system, you can use `require_chef_gem`, which will attempt to require the gem and then produce helpful output if the gem is not installed:
|
||||
|
||||
```
|
||||
Chef could not load the gem `#{name}'! You may need to install the gem
|
||||
manually with `gem install #{name}', or include a recipe before you can
|
||||
use this resource. Please consult the documentation for this cookbook
|
||||
for proper usage.
|
||||
```
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
# LWRP
|
||||
require_chef_gem 'pry'
|
||||
```
|
||||
|
||||
```ruby
|
||||
class Chef
|
||||
class Provider
|
||||
class MyProvider > Provider
|
||||
require_chef_gem 'pry'
|
||||
end
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
### Init
|
||||
|
||||
- `systemd?` - detect if init system is systemd
|
||||
- `upstart?` - detect if init system is upstart
|
||||
- `runit?` - detect if init system is runit
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
systemd_service 'my-service' do
|
||||
description 'My Service'
|
||||
install do
|
||||
wanted_by 'multi-user.target'
|
||||
end
|
||||
service do
|
||||
exec_start '/usr/bin/myserviced'
|
||||
end
|
||||
action [:create, :enable, :start]
|
||||
only_if { systemd? }
|
||||
end
|
||||
|
||||
cookbook_file '/etc/init/my-service.conf' do
|
||||
source 'my-service.conf'
|
||||
only_if { upstart? }
|
||||
end
|
||||
```
|
||||
|
||||
### IP
|
||||
|
||||
- `best_ip_for` - determine the best IP address for the given "other" node, preferring local IP addresses over public ones.
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
redis = search('node', 'role:redis').first
|
||||
|
||||
template '/tmp/config' do
|
||||
variables(
|
||||
ipaddress: best_ip_for(redis)
|
||||
)
|
||||
end
|
||||
```
|
||||
|
||||
### Node
|
||||
|
||||
Additional methods for the `node` object
|
||||
|
||||
- `deep_fetch` - safely fetch a nested attribute.
|
||||
- `deep_fetch!` - fetch a nested attribute, raising a more semantic error if the key does not exist.
|
||||
- `in?` - determine if the node is in the given Chef environment.
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
credentials = if node.in?('production')
|
||||
Chef::EncryptedDataBag.new('...')
|
||||
else
|
||||
data_bag('...')
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
node.deep_fetch('apache2', 'config', 'root') => node['apache2']['config']['root']
|
||||
```
|
||||
|
||||
### Platform
|
||||
|
||||
- `amazon_linux?`
|
||||
- `centos?`
|
||||
- `linux_mint?`
|
||||
- `oracle_linux?`
|
||||
- `redhat_enterprise_linux?`
|
||||
- `scientific_linux?`
|
||||
- `ubuntu?`
|
||||
- `solaris2?`
|
||||
- `aix?`
|
||||
- `smartos?`
|
||||
- `omnios?`
|
||||
- `raspbian?`
|
||||
- `nexus?`
|
||||
- `ios_xr?`
|
||||
|
||||
There are also a series of dynamically defined matchers that map named operating system release versions and comparison operators in the form "#{platform}_#{operator}_#{name}?". For example:
|
||||
|
||||
- `debian_after_squeeze?`
|
||||
- `linuxmint_after_or_at_olivia?`
|
||||
- `mac_os_x_lion?`
|
||||
- `centos_final?`
|
||||
- `ubuntu_before_lucid?`
|
||||
- `ubuntu_before_or_at_maverick?`
|
||||
- `solaris_10?`
|
||||
- `solaris_11?`
|
||||
|
||||
To get a full list, run the following in IRB:
|
||||
|
||||
```ruby
|
||||
require 'chef/sugar'
|
||||
puts Chef::Sugar::Platform.instance_methods
|
||||
```
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
if ubuntu?
|
||||
execute 'apt-get update'
|
||||
end
|
||||
```
|
||||
|
||||
### Platform Family
|
||||
|
||||
- `arch_linux?`
|
||||
- `debian?`
|
||||
- `fedora?`
|
||||
- `freebsd?`
|
||||
- `gentoo?`
|
||||
- `linux?`
|
||||
- `mac_os_x?`
|
||||
- `openbsd?`
|
||||
- `rhel?`
|
||||
- `slackware?`
|
||||
- `suse?`
|
||||
- `windows?`
|
||||
- `wrlinux?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
node['attribute'] = if windows?
|
||||
'C:\Foo\BarDrive'
|
||||
else
|
||||
'/foo/bar_drive'
|
||||
end
|
||||
```
|
||||
|
||||
### Ruby
|
||||
|
||||
**Note:** The applies to the Ruby found at `node['languages']['ruby']`.
|
||||
|
||||
- `ruby_20?`
|
||||
- `ruby_19?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
log 'This has been known to fail on Ruby 2.0' if ruby_20?
|
||||
```
|
||||
|
||||
### Run Context
|
||||
|
||||
- `includes_recipe?` - determines if the current run context includes the recipe
|
||||
|
||||
```ruby
|
||||
if includes_recipe?('apache2::default')
|
||||
apache_module 'my_module' do
|
||||
# ...
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
### Shell
|
||||
|
||||
- `which`
|
||||
- `dev_null`
|
||||
- `installed?`
|
||||
- `installed_at_version?`
|
||||
- `version_for`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
log "Using `mongo` at `#{which('mongo')}`"
|
||||
|
||||
if installed?('apt')
|
||||
execute 'apt-get update'
|
||||
end
|
||||
|
||||
execute 'install[thing]' do
|
||||
command "... 2>&1 #{dev_null}"
|
||||
not_if { installed_at_version?('thing', node['thing']['version']) }
|
||||
end
|
||||
|
||||
log "Skipping git install, version is at #{version_for('mongo', '-v')}"
|
||||
```
|
||||
|
||||
### Vagrant
|
||||
|
||||
- `vagrant?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
http_request 'http://...' do
|
||||
not_if { vagrant? }
|
||||
end
|
||||
```
|
||||
|
||||
### Virtualization
|
||||
|
||||
- `kvm?`
|
||||
- `lxc?`
|
||||
- `parallels?`
|
||||
- `virtualbox?`
|
||||
- `vmware?`
|
||||
- `openvz?`
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
service 'ntpd' do
|
||||
action [:enable, :start]
|
||||
not_if { lxc? }
|
||||
end
|
||||
```
|
||||
|
||||
### Filters
|
||||
|
||||
- `at_compile_time` - accepts a block of resources to run at compile time
|
||||
- `before` - insert resource in the collection before the given resource
|
||||
- `after` - insert resource in the collection after the given resource
|
||||
|
||||
#### Examples
|
||||
|
||||
```ruby
|
||||
at_compile_time do
|
||||
package 'apache2'
|
||||
end
|
||||
|
||||
# This is equivalent to
|
||||
package 'apache2' do
|
||||
action :nothing
|
||||
end.run_action(:install)
|
||||
```
|
||||
|
||||
```ruby
|
||||
before 'service[apache2]' do
|
||||
log 'I am before the apache 2 service fires!'
|
||||
end
|
||||
```
|
||||
|
||||
```ruby
|
||||
after 'service[apache2]' do
|
||||
log 'I am after the apache 2 service fires!'
|
||||
end
|
||||
```
|
||||
|
||||
## License & Authors
|
||||
|
||||
- Author: Seth Vargo (sethvargo@gmail.com)
|
||||
|
||||
```text
|
||||
Copyright 2013-2015 Seth Vargo
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
```
|
||||
|
||||
[gem]: https://rubygems.org/gems/chef-sugar
|
||||
@@ -1,9 +0,0 @@
|
||||
require 'rspec/core/rake_task'
|
||||
RSpec::Core::RakeTask.new do |t|
|
||||
t.rspec_opts = [
|
||||
'--color',
|
||||
'--format progress',
|
||||
].join(' ')
|
||||
end
|
||||
|
||||
task default: :spec
|
||||
@@ -1 +0,0 @@
|
||||
5.1.12
|
||||
@@ -1,24 +0,0 @@
|
||||
# coding: utf-8
|
||||
lib = File.expand_path('../lib', __FILE__)
|
||||
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
||||
require 'chef/sugar/version'
|
||||
|
||||
Gem::Specification.new do |spec|
|
||||
spec.name = 'chef-sugar-ng'
|
||||
spec.version = Chef::Sugar::VERSION
|
||||
spec.authors = ['Seth Vargo']
|
||||
spec.email = ['sethvargo@gmail.com']
|
||||
spec.description = 'A series of helpful sugar of the Chef core and ' \
|
||||
'other resources to make a cleaner, more lean recipe ' \
|
||||
'DSL, enforce DRY principles, and make writing Chef ' \
|
||||
'recipes an awesome experience!'
|
||||
spec.summary = 'A collection of helper methods and modules that ' \
|
||||
'make working with Chef recipes awesome.'
|
||||
spec.homepage = 'https://github.com/chef/chef-sugar'
|
||||
spec.license = 'Apache-2.0'
|
||||
|
||||
spec.required_ruby_version = '>= 2.3'
|
||||
|
||||
spec.files = %w{LICENSE} + Dir.glob("lib/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) }
|
||||
spec.require_paths = ['lib']
|
||||
end
|
||||
@@ -1,24 +0,0 @@
|
||||
# coding: utf-8
|
||||
lib = File.expand_path('../lib', __FILE__)
|
||||
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
||||
require 'chef/sugar/version'
|
||||
|
||||
Gem::Specification.new do |spec|
|
||||
spec.name = 'chef-sugar'
|
||||
spec.version = Chef::Sugar::VERSION
|
||||
spec.authors = ['Seth Vargo']
|
||||
spec.email = ['sethvargo@gmail.com']
|
||||
spec.description = 'A series of helpful sugar of the Chef core and ' \
|
||||
'other resources to make a cleaner, more lean recipe ' \
|
||||
'DSL, enforce DRY principles, and make writing Chef ' \
|
||||
'recipes an awesome experience!'
|
||||
spec.summary = 'A collection of helper methods and modules that ' \
|
||||
'make working with Chef recipes awesome.'
|
||||
spec.homepage = 'https://github.com/chef/chef-sugar'
|
||||
spec.license = 'Apache-2.0'
|
||||
|
||||
spec.required_ruby_version = '>= 2.3'
|
||||
|
||||
spec.files = %w{LICENSE} + Dir.glob("lib/**/*", File::FNM_DOTMATCH).reject { |f| File.directory?(f) }
|
||||
spec.require_paths = ['lib']
|
||||
end
|
||||
@@ -1,51 +0,0 @@
|
||||
#
|
||||
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require 'chef/recipe'
|
||||
require 'chef/resource'
|
||||
require 'chef/provider'
|
||||
|
||||
class Chef
|
||||
module Sugar
|
||||
require_relative 'sugar/architecture'
|
||||
require_relative 'sugar/cloud'
|
||||
require_relative 'sugar/constraints'
|
||||
require_relative 'sugar/constraints_dsl'
|
||||
require_relative 'sugar/data_bag'
|
||||
require_relative 'sugar/docker'
|
||||
require_relative 'sugar/filters'
|
||||
require_relative 'sugar/init'
|
||||
require_relative 'sugar/ip'
|
||||
require_relative 'sugar/kernel'
|
||||
require_relative 'sugar/kitchen'
|
||||
require_relative 'sugar/node'
|
||||
require_relative 'sugar/platform'
|
||||
require_relative 'sugar/platform_family'
|
||||
require_relative 'sugar/ruby'
|
||||
require_relative 'sugar/run_context'
|
||||
require_relative 'sugar/shell'
|
||||
require_relative 'sugar/vagrant'
|
||||
require_relative 'sugar/version'
|
||||
require_relative 'sugar/virtualization'
|
||||
end
|
||||
end
|
||||
|
||||
Chef::Recipe.send(:include, Chef::Sugar::DSL)
|
||||
Chef::Recipe.send(:include, Chef::Sugar::RecipeDSL) # TODO: this is a hack
|
||||
Chef::Resource.send(:include, Chef::Sugar::DSL)
|
||||
Chef::Provider.send(:include, Chef::Sugar::DSL)
|
||||
|
||||
Object.send(:include, Chef::Sugar::Kernel)
|
||||
@@ -1,176 +0,0 @@
|
||||
#
|
||||
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
class Chef
|
||||
module Sugar
|
||||
module Architecture
|
||||
extend self
|
||||
|
||||
# these helpers have been moved to core-chef
|
||||
if !defined?(Chef::VERSION) || Gem::Requirement.new("< 15.4.70").satisfied_by?(Gem::Version.new(Chef::VERSION))
|
||||
#
|
||||
# Determine if the current architecture is 64-bit
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def _64_bit?(node)
|
||||
%w(amd64 x86_64 ppc64 ppc64le s390x ia64 sparc64 aarch64 arch64 arm64 sun4v sun4u s390x)
|
||||
.include?(node['kernel']['machine']) || ( node['kernel']['bits'] == '64' )
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is 32-bit
|
||||
#
|
||||
# @todo Make this more than "not 64-bit"
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def _32_bit?(node)
|
||||
!_64_bit?(node)
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is i386
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def i386?(node)
|
||||
_32_bit?(node) && intel?(node)
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is Intel.
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def intel?(node)
|
||||
%w(i86pc i386 x86_64 amd64 i686)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is SPARC.
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def sparc?(node)
|
||||
%w(sun4u sun4v)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is Powerpc64 Big Endian
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def ppc64?(node)
|
||||
%w(ppc64)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is Powerpc64 Little Endian
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def ppc64le?(node)
|
||||
%w(ppc64le)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is PowerPC
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def powerpc?(node)
|
||||
%w(powerpc)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is ARM with Hard Float
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def armhf?(node)
|
||||
# Add more arm variants as needed here
|
||||
%w(armv6l armv7l)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is AArch64
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def aarch64?(node)
|
||||
# Add more arm variants as needed here
|
||||
%w(aarch64)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the current architecture is s390x
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def s390x?(node)
|
||||
%w(s390x)
|
||||
.include?(node['kernel']['machine'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module DSL
|
||||
if !defined?(Chef::VERSION) || Gem::Requirement.new("< 15.4.70").satisfied_by?(Gem::Version.new(Chef::VERSION))
|
||||
# @see Chef::Sugar::Architecture#_64_bit?
|
||||
def _64_bit?; Chef::Sugar::Architecture._64_bit?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#_32_bit?
|
||||
def _32_bit?; Chef::Sugar::Architecture._32_bit?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#intel?
|
||||
def i386?; Chef::Sugar::Architecture.i386?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#intel?
|
||||
def intel?; Chef::Sugar::Architecture.intel?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#sparc?
|
||||
def sparc?; Chef::Sugar::Architecture.sparc?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#ppc64?
|
||||
def ppc64?; Chef::Sugar::Architecture.ppc64?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#ppc64le?
|
||||
def ppc64le?; Chef::Sugar::Architecture.ppc64le?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#powerpc?
|
||||
def powerpc?; Chef::Sugar::Architecture.powerpc?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#arm?
|
||||
def armhf?; Chef::Sugar::Architecture.armhf?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#aarch64?
|
||||
def aarch64?; Chef::Sugar::Architecture.aarch64?(node); end
|
||||
|
||||
# @see Chef::Sugar::Architecture#s390x?
|
||||
def s390x?; Chef::Sugar::Architecture.s390x?(node); end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,192 +0,0 @@
|
||||
#
|
||||
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
class Chef
|
||||
module Sugar
|
||||
module Cloud
|
||||
extend self
|
||||
|
||||
#
|
||||
# Return true if the current current node is in "the cloud".
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def cloud?(node)
|
||||
node.key?('cloud')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in EC2
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def ec2?(node)
|
||||
node.key?('ec2')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in GCE
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def gce?(node)
|
||||
node.key?('gce')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in Rackspace
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def rackspace?(node)
|
||||
node.key?('rackspace')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in Eucalyptus
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def eucalyptus?(node)
|
||||
node.key?('eucalyptus')
|
||||
end
|
||||
alias_method :euca?, :eucalyptus?
|
||||
|
||||
#
|
||||
# Return true if the current current node is in Linode
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def linode?(node)
|
||||
node.key?('linode')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in Openstack
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def openstack?(node)
|
||||
node.key?('openstack')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in Cloudstack
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def cloudstack?(node)
|
||||
node.key?('cloudstack')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in Azure
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def azure?(node)
|
||||
node.key?('azure')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in DigitalOcean
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def digitalocean?(node)
|
||||
node.key?('digital_ocean')
|
||||
end
|
||||
|
||||
#
|
||||
# Return true if the current current node is in SoftLayer
|
||||
#
|
||||
# @param [Chef::Node] node
|
||||
# the node to check
|
||||
#
|
||||
# @return [Boolean]
|
||||
#
|
||||
def softlayer?(node)
|
||||
node.key?('softlayer')
|
||||
end
|
||||
end
|
||||
|
||||
module DSL
|
||||
# @see Chef::Sugar::Cloud#cloud?
|
||||
def cloud?; Chef::Sugar::Cloud.cloud?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#ec2?
|
||||
def ec2?; Chef::Sugar::Cloud.ec2?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#gce?
|
||||
def gce?; Chef::Sugar::Cloud.gce?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#rackspace?
|
||||
def rackspace?; Chef::Sugar::Cloud.rackspace?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#eucalyptus?
|
||||
def eucalyptus?; Chef::Sugar::Cloud.eucalyptus?(node); end
|
||||
alias_method :euca?, :eucalyptus?
|
||||
|
||||
# @see Chef::Sugar::Cloud#linode?
|
||||
def linode?; Chef::Sugar::Cloud.linode?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#openstack?
|
||||
def openstack?; Chef::Sugar::Cloud.openstack?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#cloudstack?
|
||||
def cloudstack?; Chef::Sugar::Cloud.cloudstack?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#azure?
|
||||
def azure?; Chef::Sugar::Cloud.azure?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#digitalocean?
|
||||
def digitalocean?; Chef::Sugar::Cloud.digitalocean?(node); end
|
||||
|
||||
# @see Chef::Sugar::Cloud#softlayer?
|
||||
def softlayer?; Chef::Sugar::Cloud.softlayer?(node); end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,108 +0,0 @@
|
||||
#
|
||||
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
class Chef
|
||||
module Sugar
|
||||
module Constraints
|
||||
#
|
||||
# This class is a wrapper around a version requirement that adds a nice
|
||||
# DSL for comparing constraints:
|
||||
#
|
||||
# @example Comparing a single constraint
|
||||
# Constraint.new('~> 1.2.3').satisfied_by?('1.2.7')
|
||||
#
|
||||
# @example Comparing multiple constraints
|
||||
# Constraint.new('> 1.2.3', '< 2.0.0').satisfied_by?('1.2.7')
|
||||
#
|
||||
class Constraint
|
||||
#
|
||||
# Create a new constraint object.
|
||||
#
|
||||
# @param [String, Array<String>] constraints
|
||||
# the list of constraints
|
||||
#
|
||||
def initialize(*constraints)
|
||||
@requirement = Gem::Requirement.new(*constraints)
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the given version string is satisfied by this constraint
|
||||
# or group of constraints.
|
||||
#
|
||||
# @example Given a satisified constraint
|
||||
# Constraint.new('~> 1.2.0').satisfied_by?('1.2.5') #=> true
|
||||
#
|
||||
# @example Given an unsatisfied constraint
|
||||
# Constraint.new('~> 1.2.0').satisfied_by?('2.0.0') #=> false
|
||||
#
|
||||
#
|
||||
# @param [String] version
|
||||
# the version to compare
|
||||
#
|
||||
# @return [Boolean]
|
||||
# true if the constraint is satisfied, false otherwise
|
||||
#
|
||||
def satisfied_by?(version)
|
||||
@requirement.satisfied_by?(Gem::Version.new(version))
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# This class exposes a single version constraint object that wraps the
|
||||
# string representation of a version string and proved helpful comparator
|
||||
# methods.
|
||||
#
|
||||
# @example Create a new version
|
||||
# Chef::Sugar::Version('1.2.3')
|
||||
#
|
||||
# @example Compare a version with constraints
|
||||
# Chef::Sugar::Version('1.2.3').satisfies?('~> 1.3.4', '< 2.0.5')
|
||||
#
|
||||
class Version < String
|
||||
#
|
||||
# Create a new version object.
|
||||
#
|
||||
# @param [String] version
|
||||
# the version to create
|
||||
#
|
||||
def initialize(version)
|
||||
super
|
||||
@version = Gem::Version.new(version)
|
||||
end
|
||||
|
||||
#
|
||||
# Determine if the given constraint is satisfied by this version.
|
||||
#
|
||||
# @example Given a satisified version
|
||||
# Version.new('1.2.5').satisfies?('~> 1.2.0') #=> true
|
||||
#
|
||||
# @example Given an unsatisfied version
|
||||
# Version.new('2.0.0').satisfies?('~> 1.2.0') #=> false
|
||||
#
|
||||
#
|
||||
# @param [String, Array<String>] constraints
|
||||
# the constraints to satisfy
|
||||
#
|
||||
# @return [Boolean]
|
||||
# true if the version satisfies the constraints, false otherwise
|
||||
#
|
||||
def satisfies?(*constraints)
|
||||
Gem::Requirement.new(*constraints).satisfied_by?(@version)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -1,83 +0,0 @@
|
||||
#
|
||||
# Copyright 2013-2015, Seth Vargo <sethvargo@gmail.com>
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
require_relative 'constraints'
|
||||
|
||||
class Chef
|
||||
module Sugar
|
||||
#
|
||||
# The Constraints DSL methods were broken out into this separate
|
||||
# file to allow projects (such as Omnibus) to consume the
|
||||
# Chef::Sugar::Constraints classes without the DSL methods
|
||||
# stepping on existing methods of the same name.
|
||||
#
|
||||
module Constraints
|
||||
extend self
|
||||
|
||||
#
|
||||
# Shortcut method for creating a new {Version} object.
|
||||
#
|
||||
# @param [String] version
|
||||
# the version (as a string) to create
|
||||
#
|
||||
# @return [Chef::Sugar::Constraints::Version]
|
||||
# the new version object
|
||||
#
|
||||
def version(version)
|
||||
Chef::Sugar::Constraints::Version.new(version)
|
||||
end
|
||||
|
||||
#
|
||||
# Shortcut method for creating a new {Constraint} object.
|
||||
#
|
||||
# @param [String, Array<String>] constraints
|
||||
# the list of constraints to use
|
||||
#
|
||||
# @return [Chef::Sugar::Constraints::Constraint]
|
||||
# the new constraint object
|
||||
#
|
||||
def constraint(*constraints)
|
||||
Chef::Sugar::Constraints::Constraint.new(*constraints)
|
||||
end
|
||||
end
|
||||
|
||||
module DSL
|
||||
# @see Chef::Sugar::Constraints#version
|
||||
def version(version)
|
||||
Chef::Sugar::Constraints::Version.new(version)
|
||||
end
|
||||
|
||||
# @see Chef::Sugar::Constraints#constraint
|
||||
def constraint(*constraints)
|
||||
Chef::Sugar::Constraints.constraint(*constraints)
|
||||
end
|
||||
|
||||
#
|
||||
# This wrapper/convenience method is only available in the recipe DSL. It
|
||||
# creates a new version object from the {Chef::VERSION}.
|
||||
#
|
||||
# @example Check if Chef 11+
|
||||
# chef_version.satisfies?('>= 11.0.0')
|
||||
#
|
||||
# @return [Chef::Sugar::Constraints::Version]
|
||||
# a version object, wrapping the current {Chef::VERSION}
|
||||
#
|
||||
def chef_version
|
||||
version(Chef::VERSION)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user