-
Notifications
You must be signed in to change notification settings - Fork 0
/
helpers_install.rb
214 lines (190 loc) · 5.96 KB
/
helpers_install.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# SPDX-License-Identifier: Apache-2.0
# Copyright:: (c) 2020 Begley Brothers Inc.
#
# See details in LICENSE.
# Copyright(c) 2020 Begley Brothers Inc.
module ::IgniteCookbook
module IgniteHelpers
module Install
#######################
# Common Helper Methods
#######################
require_relative 'helpers_common'
include IgniteHelpers::Common
#########################
# Action helper methods
#########################
def setup_host
setup_host_kernel
setup_host_environment_variables
setup_docker
setup_packages
setup_cni
end
def setup_host_kernel
setup_host_kernel_modules
setup_host_kernel_parameters
end
def setup_host_environment_variables
append_if_no_line 'Set CONFIG_VIRTIO_BLK' do
path '/etc/environment'
line 'export CONFIG_VIRTIO_BLK=y'
end
append_if_no_line 'Set CONFIG_VIRTIO_NET' do
path '/etc/environment'
line 'export CONFIG_VIRTIO_NET=y'
end
append_if_no_line 'Set CONFIG_KEYBOARD_ATKBD' do
path '/etc/environment'
line "export CONFIG_KEYBOARD_ATKBD=#{new_resource.keyboard_atkbd}"
end
append_if_no_line 'Set CONFIG_SERIO_I8042' do
path '/etc/environment'
line "export CONFIG_SERIO_I8042=#{new_resource.serio_i8042}"
end
end
def setup_host_kernel_modules
# https://github.com/weaveworks/weave/issues/2789#issuecomment-433329349
kernel_module 'br_netfilter'
end
# See: https://ignite.readthedocs.io/en/stable/dependencies.html
def setup_host_kernel_parameters
sysctl 'net.ipv6.conf.all.forwarding' do
value 1
end
sysctl 'net.ipv4.ip_forward' do
value 1
end
sysctl 'net.bridge.bridge-nf-call-iptables' do
value 0
end
end
def setup_docker
if new_resource.install_docker
install_docker
else
mimic_docker
end
end
def install_docker
setup_docker_repo
setup_docker_package
end
# Mimic docker per Slack converstion:
# https://weave-community.slack.com/archives/CL1A4S5UJ/p1580745314038700
def mimic_docker
file '/usr/bin/docker' do
content 'echo mimic-docker'
owner 'root'
group 'root'
mode '0755'
action :create
end
end
def setup_docker_repo
case node['platform_family']
when 'rhel', 'fedora'
include_recipe 'chef-yum-docker'
when 'debian', 'ubuntu'
include_recipe 'chef-apt-docker'
end
end
def setup_docker_package
# Ignite installs default to using containerd & CNI rather than docker
# Eventually this docker install must be removed from this resource.
docker_installation_package 'ignite' do
version node['docker']['version'] if node['docker'] && !node['docker']['version'].nil?
action :create
not_if '[ ! -z $(docker info) ]'
end
end
def setup_packages
case node['platform_family']
when 'rhel', 'fedora'
setup_rhel_packages
when 'debian', 'ubuntu'
setup_debian_packages
end
end
def setup_debian_packages
apt_update 'update'
package %w(binutils dmsetup e2fsprogs git mount openssh-client tar jq wget)
package 'containerd' do
not_if { node['packages'].keys.include? 'containerd' }
end
end
def setup_rhel_packages
package %w(binutils device-mapper e2fsprogs git openssh-clients tar util-linux wget)
package 'containerd.io' do
not_if { node['packages'].keys.include? 'containerd.io' }
end
end
def setup_cni
cni_script = Tempfile.new('cni-install').path
cookbook_file 'Create CNI install script' do
source 'scripts/cni-install.sh'
path cni_script
mode '00755'
cookbook 'ignite'
not_if { ::File.exist?('/opt/cni/bin/bridge') }
end
execute 'CNI installation script' do
command cni_script
creates '/opt/cni/bin/bridge'
end
end
# given a Ignite URI return a Ignite URL (https) for new_resource.filename.
# @param [String] uri the Ignite file to be installed.
#
# @return [String] full HTTPS URL to the binary file `filename`
def build_ignite_url(uri)
# https://github.com/weaveworks/ignite/releases/download/v0.6.3/ignite-arm64"
"https://#{ignite_url_host(uri)}#{ignite_url_path(uri)}#{ignite_url_version(uri)}/#{ignite_url_file(uri)}-#{ignite_url_arch(uri)}"
end
def ignite_url_file(uri)
::CGI.parse(uri.query)['file'][0]
end
def ignite_url_host(uri)
case uri.host
when 'weaveworks'
'github.com'
else
uri.host
end
end
def ignite_url_path(uri)
case uri.host
when 'weaveworks'
'/weaveworks/ignite/releases/download/'
else
uri.path
end
end
# determine if the repository URI is for Weaveworks
# @param [String] url the url of the repository
#
# @return [Boolean] is the repo URL a PPA
def ignite_uri?(uri)
uri.scheme == 'ignt'
end
def architectures
%w(amd64 arm64)
end
# determine the Ignite architecture:
# - "arch" property if defined
# - Ignite URI `fragment` value if "arch" not defined.
# - otherwise nothing
#
# @return [String] the Ignite binary architecture value. One of amd64 or arm64.
def ignite_url_arch(uri)
arch = uri.fragment
case arch
when *architectures
arch
else
raise "Expected #{new_resource.uri} to have as fragment one of: amd64 or arm64"
end
end
end
end
end