Skip to content

Commit 2d7bd83

Browse files
committed
v8.0.4
1 parent 623ca07 commit 2d7bd83

File tree

17 files changed

+170
-116
lines changed

17 files changed

+170
-116
lines changed

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Change Log
22

3+
## v8.0.4
4+
5+
* [CHANGE] Update initial images on a fresh install.
6+
* [FIX] Don't cache dns results when validating lets encrypt domains.
7+
* [FIX] Custom load balancer images were failing to deploy properly.
8+
9+
***
10+
311
## v8.0.3
412

513
* [FIX] If phpMyAdmin was selected during an order, an error would prevent the order from being successful.

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
8.0.3
1+
8.0.4

app/models/audit.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
# @!attribute rel_uuid
1111
# @return [String] UUID of model (if applicable)
1212
#
13-
# @!attribute raw_text
13+
# @!attribute raw_data
1414
# @return [String] Raw details about this audit. Generally not used as we prefer to store data in Events.
1515
#
1616
# @!attribute ip_addr

app/models/concerns/nodes/node_metrics.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def can_accept_package?(package)
2828
if (metric_cpu_cores[:cpu].to_f - allocated_resources[:cpu]) < package.cpu
2929
add_context! no_overcommit_cpu: {
3030
total_node_cpu: metric_cpu_cores[:cpu].to_f,
31-
cpu_allocated: allocated_resources[:cpu],
31+
cpu_allocated: allocated_resources[:cpu].to_f,
3232
requested_cpu: package.cpu.to_f
3333
}
3434
proceed = false

app/models/subscription_product.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ def prorate_usage!
313313
event: 'updated',
314314
rel_id: item.id,
315315
rel_model: item.class.to_s,
316-
raw_text: "Adjust usage due to SubscriptionProduct (#{id}) change."
316+
raw_data: "Adjust usage due to SubscriptionProduct (#{id}) change."
317317
)
318318
updated_total = BillingResourcePrice.prorated_total(hourly_rate, 4, item.period_start, Time.now.utc, item.qty)
319319
if item.update(period_end: Time.now.utc, total: updated_total)

app/services/container_services/variant_migration_service.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ def can_perform?
220220
data: "Unable to locate running container, aborting.",
221221
event_code: '5c2183886cefdf90'
222222
)
223-
event.fail! 'No online containers'
223+
event.cancel! 'No online containers'
224224
rollback!
225225
return false
226226
end

app/services/container_services/wordpress_services/user_service.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ def users
3333
return []
3434
end
3535
c = if container.is_a?(Deployment::Container)
36-
%W(sudo -u www-data wp user list --role=administrator --json --path=/var/www/html/wordpress)
36+
%W(sudo -u www-data wp user list --skip-plugins --skip-themes --quiet --role=administrator --json --path=/var/www/html/wordpress)
3737
else
38-
%W(sudo -u sftpuser wp user list --role=administrator --json --path=#{container.service_files_path(service)}/wordpress/html/wordpress)
38+
%W(sudo -u sftpuser wp user list --skip-plugins --skip-themes --quiet --role=administrator --json --path=#{container.service_files_path(service)}/wordpress/html/wordpress)
3939
end
4040
data = container.container_exec!(c, nil, 20)
4141

app/services/lets_encrypt_services/validate_domain_service.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,12 @@ def initialize(obj, event)
2323
self.container_domain = nil
2424
end
2525
self.event = event
26-
@dns = Dnsruby::Resolver.new( { nameserver: NS_LIST } )
27-
@dns.retry_delay = 1
28-
@dns.retry_times = 3
26+
@dns = Dnsruby::Resolver.new( {
27+
nameserver: NS_LIST,
28+
do_caching: false,
29+
retry_delay: 1,
30+
retry_times: 3
31+
} )
2932
end
3033

3134
# @return [Boolean]

app/services/provision_services/ingress_controller_provisioner.rb

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,17 @@ def perform
4545

4646
def provision_load_balancer(image)
4747
lb_name = NamesGenerator.name project.id
48+
variant = image.image_variants.default.first
49+
if variant.nil?
50+
errors << "Missing image variant for image #{image.id}"
51+
return
52+
end
4853
lb_service = project.services.new(
49-
container_image: image,
54+
image_variant: variant,
5055
is_load_balancer: true,
5156
name: lb_name,
5257
label: lb_name,
53-
cpu: 1, # TODO: Manage Ingress Controller resources
58+
cpu: 1,
5459
memory: 1024,
5560
region: service.region,
5661
command: image.command,
@@ -77,6 +82,7 @@ def provision_load_balancer(image)
7782
errors << i
7883
end
7984
end
85+
NetworkWorkers::ServicePolicyWorker.perform_async lb_service.id
8086
end
8187

8288
def valid?

app/views/api/stacks/load_balancers/haproxy/_frontend-http.erb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ frontend https
77
option httplog
88
option http-server-close
99
option forwardfor if-none
10+
http-request set-var(txn.host) hdr(Host)
1011
<% if load_balancer.proxy_ipaddrs.empty? %>
1112
http-request del-header X-Forwarded-For
1213
http-request set-header X-Forwarded-Proto https
@@ -27,12 +28,12 @@ frontend https
2728
<% next if service.containers.empty? %>
2829
<% service.ingress_rules.where(external_access: true, proto: 'http').each do |ingress| %>
2930
<% ingress.global_container_domains.each do |domain| %>
30-
acl host_rule_<%= index %> hdr(host) -i <%= domain.domain %>
31+
acl host_rule_<%= index %> var(txn.host) -m str <%= domain.domain %>
3132
<% if ingress.restrict_cf %>
32-
acl restricted_url hdr(host) -i <%= domain.domain %>
33+
acl restricted_url var(txn.host) -m str <%= domain.domain %>
3334
<% end %>
3435
<% if domain.enable_hsts_header? %>
35-
http-response set-header Strict-Transport-Security "max-age=16000000; includeSubDomains; preload;" if { var(txn.domain) -i <%= domain.domain %> }
36+
http-response set-header Strict-Transport-Security "max-age=16000000; preload;" if host_rule_<%= index %>
3637
<% end %>
3738
use_backend <%= Digest::MD5.hexdigest("#{service.name}#{ingress.id}") %> if host_rule_<%= index %>
3839
<% index += 1 %>

app/views/api/stacks/load_balancers/haproxy/_stats.erb

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
frontend stats
22
bind <%= load_balancer.stats_bind %>
33
mode http
4-
option http-use-htx
54
http-request use-service prometheus-exporter if { path /metrics }
65
stats enable
76
stats uri /stats
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<% if @active_events.zero? %>
22
<%= @last_event.nil? ? t('common.never') : link_to(distance_of_time_in_words_to_now(@last_event, include_seconds: true), "/deployments/#{@deployment.token}/events") %>
33
<% else %>
4-
<%= link_to "#{icon('fa-regular', 'circle-notch', class: 'fa-spin')} #{pluralize(@active_events, 'active event', 'active events')}".html_safe, "/deployments/#{@deployment.token}/events" %>
4+
<%= link_to "#{icon('fa-solid fa-spin', 'rotate')} #{pluralize(@active_events, 'active event', 'active events')}".html_safe, "/deployments/#{@deployment.token}/events" %>
55
<% end %>

app/workers/node_workers/health_check_worker.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ def perform(node_id = nil)
5757
obj = LoadBalancer.find_by(name: i) if obj.nil?
5858

5959
if obj.nil?
60-
trash_container! i, node
60+
trash_container!(i, node) if Rails.env.production?
6161
next
6262
else
6363
next if obj.respond_to?(:status) && %w(building migrating).include?(obj.status)

lib/dev/vagrant_provision.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://
2222
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
2323
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
2424

25+
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to /usr/local/bin
26+
2527
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
2628
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
2729

Lines changed: 125 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,89 +1,130 @@
1-
#docker run --rm -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.12.1
2-
31
namespace :containers do
4-
desc "Install elasticsearch"
2+
desc "Install elasticsearch container"
53
task elasticsearch: :environment do
6-
unless ContainerImage.where(name: "elasticsearch").exists?
7-
dhprovider = ContainerImageProvider.find_by(name: "DockerHub")
8-
elasticsearch = ContainerImage.create!(
9-
name: 'elasticsearch',
10-
label: 'ElasticSearch',
11-
description: "ElasticSearch is a powerful search server. Add it to your site to improve speed and accuracy of your search results.",
12-
role: 'elasticsearch',
13-
category: 'misc',
14-
can_scale: false,
15-
container_image_provider: dhprovider,
16-
registry_image_path: "elasticsearch",
17-
min_cpu: 1,
18-
min_memory: 1024,
19-
skip_variant_setup: true
20-
)
21-
elasticsearch.image_variants.create!(
22-
label: "8.4.3",
23-
registry_image_tag: "8.4.3",
24-
validated_tag: true,
25-
validated_tag_updated: Time.now,
26-
version: 0,
27-
is_default: true,
28-
skip_tag_validation: true
29-
)
30-
elasticsearch.image_variants.create!(
31-
label: "7.17.6",
32-
registry_image_tag: "7.17.6",
33-
validated_tag: true,
34-
validated_tag_updated: Time.now,
35-
version: 1,
36-
skip_tag_validation: true
37-
)
38-
elasticsearch.image_variants.create!(
39-
label: "6.8.23",
40-
registry_image_tag: "6.8.23",
41-
validated_tag: true,
42-
validated_tag_updated: Time.now,
43-
version: 2,
44-
skip_tag_validation: true
45-
)
46-
elasticsearch.env_params.create!(
47-
name: "cluster.name",
48-
label: "Cluster Name",
49-
param_type: "variable",
50-
env_value: "build.self.service_name"
51-
)
52-
elasticsearch.env_params.create!(
53-
name: "discovery.type",
54-
label: "Discovery Type",
55-
param_type: "static",
56-
static_value: "single-node"
57-
)
58-
elasticsearch.env_params.create!(
59-
name: "ES_JAVA_OPTS",
60-
label: "ES_JAVA_OPTS",
61-
param_type: "static",
62-
static_value: "-Xms416m -Xmx416m"
63-
)
4+
ghprovider = ContainerImageProvider.find_by(name: "Github")
5+
es_lb = ContainerImage.where("labels @> ?", { system_image_name: "es-loadbalancer-v1" }.to_json).first
6+
if es_lb.nil?
7+
es_lb = ContainerImage.create!(
8+
name: 'es-nginx-lb',
9+
label: 'ElasticSearch LoadBalancer',
10+
role: 'loadbalancer',
11+
category: "other",
12+
is_load_balancer: true,
13+
can_scale: true,
14+
container_image_provider: ghprovider,
15+
registry_image_path: "computestacks/es-nginx-lb",
16+
registry_image_tag: "v1",
17+
is_free: true,
18+
labels: {
19+
system_image_name: "es-loadbalancer-v1"
20+
},
21+
skip_variant_setup: true
22+
)
23+
es_lb.image_variants.create!(
24+
label: "v1",
25+
is_default: true,
26+
registry_image_tag: "v1",
27+
version: 0,
28+
skip_tag_validation: true,
29+
validated_tag: true,
30+
validated_tag_updated: Time.now
31+
)
32+
es_lb.setting_params.create!(
33+
name: 'password',
34+
label: 'Password',
35+
param_type: 'password'
36+
)
37+
es_lb.env_params.create!(
38+
name: 'HTTPASS',
39+
param_type: 'variable',
40+
env_value: 'build.settings.password'
41+
)
42+
es_lb.ingress_params.create!(
43+
port: 80,
44+
external_access: true,
45+
proto: 'http'
46+
)
47+
end
48+
49+
lb_rule = es_lb.ingress_params.first
50+
51+
return false if lb_rule.nil?
52+
53+
unless ContainerImage.where("labels @> ?", { system_image_name: "elasticsearch-6.4" }.to_json).exists?
54+
elasticsearch = ContainerImage.create!(
55+
name: 'elasticsearch-64',
56+
label: "ElasticSearch for Wordpress",
57+
description: "<div>ElasticSearch is a powerful search server. Add it to your site to improve speed and accuracy of your search results.</div>",
58+
role: 'elasticsearch',
59+
category: 'other',
60+
can_scale: false,
61+
container_image_provider: ghprovider,
62+
registry_image_path: "computestacks/cs-docker-es-for-wp",
63+
registry_image_tag: "6.4.3",
64+
min_cpu: 1,
65+
min_memory: 1024,
66+
labels: {
67+
system_image_name: "elasticsearch-6.4"
68+
},
69+
skip_variant_setup: true
70+
)
71+
elasticsearch.image_variants.create!(
72+
label: "v6",
73+
is_default: true,
74+
version: 0,
75+
registry_image_tag: "v6",
76+
validated_tag: true,
77+
validated_tag_updated: Time.now,
78+
skip_tag_validation: true
79+
)
80+
elasticsearch.env_params.create!(
81+
name: "cluster.name",
82+
label: "Cluster Name",
83+
param_type: "variable",
84+
env_value: "build.self.service_name"
85+
)
86+
elasticsearch.env_params.create!(
87+
name: "discovery.type",
88+
label: "Discovery Type",
89+
param_type: "static",
90+
static_value: "single-node"
91+
)
92+
elasticsearch.env_params.create!(
93+
name: "ES_JAVA_OPTS",
94+
label: "ES_JAVA_OPTS",
95+
param_type: "static",
96+
static_value: "-Xms416m -Xmx416m"
97+
)
98+
elasticsearch.env_params.create!(
99+
name: "xpack.security.enabled",
100+
label: "xpack",
101+
param_type: "static",
102+
static_value: "false"
103+
)
64104

65-
elasticsearch.ingress_params.create!(
66-
port: 9200,
67-
external_access: false,
68-
proto: 'http'
69-
)
70-
elasticsearch.ingress_params.create!(
71-
port: 9300,
72-
external_access: false,
73-
proto: 'tcp'
74-
)
75-
elasticsearch.volumes.create!(
76-
label: 'esdata',
77-
mount_path: "/usr/share/elasticsearch/data",
78-
enable_sftp: false,
79-
borg_enabled: true,
80-
borg_freq: '@daily',
81-
borg_strategy: 'file',
82-
borg_keep_hourly: 1,
83-
borg_keep_daily: 7,
84-
borg_keep_weekly: 4,
85-
borg_keep_monthly: 0
86-
)
87-
end
105+
elasticsearch.ingress_params.create!(
106+
port: 9200,
107+
external_access: true,
108+
proto: 'http',
109+
load_balancer_rule: lb_rule
110+
)
111+
elasticsearch.ingress_params.create!(
112+
port: 9300,
113+
external_access: false,
114+
proto: 'tcp'
115+
)
116+
elasticsearch.volumes.create!(
117+
label: 'esdata',
118+
mount_path: "/usr/share/elasticsearch/data",
119+
enable_sftp: false,
120+
borg_enabled: true,
121+
borg_freq: '@daily',
122+
borg_strategy: 'file',
123+
borg_keep_hourly: 1,
124+
borg_keep_daily: 7,
125+
borg_keep_weekly: 4,
126+
borg_keep_monthly: 0
127+
)
128+
end
88129
end
89130
end

0 commit comments

Comments
 (0)