Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

Commit 91f1d2b

Browse files
committed
chore: migrate Caddy module
1 parent f90c2e5 commit 91f1d2b

File tree

5 files changed

+57
-104
lines changed

5 files changed

+57
-104
lines changed

modules/proxy/caddy/caddy.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,5 @@ func (Module) GetConfig() system.ModuleConfig {
2020
return system.ModuleConfig{
2121
Name: "caddy",
2222
Type: "proxy",
23-
Terraform: system.ModuleTerraformConfig{
24-
Provider: system.ModuleTerraformConfigProvider{
25-
Vendor: "getstackhead",
26-
Name: "caddy",
27-
Version: "1.0.1",
28-
ResourceName: "caddy_server_block",
29-
},
30-
},
3123
}
3224
}

modules/proxy/caddy/deploy.go

Lines changed: 16 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -2,71 +2,35 @@ package proxy_caddy
22

33
import (
44
"fmt"
5-
"strings"
65

76
xfs "github.com/saitho/golang-extended-fs/v2"
87

98
"github.com/getstackhead/stackhead/modules/proxy"
10-
"github.com/getstackhead/stackhead/project"
119
"github.com/getstackhead/stackhead/system"
1210
)
1311

14-
type Data struct {
15-
Project *project.Project
16-
AllPortsTfString string
17-
DependentContainers string
18-
}
19-
2012
func (Module) Deploy(modulesSettings interface{}) error {
21-
22-
// - name: Include OS-specific variables.
23-
// include_vars: "{{ ansible_os_family }}.yml"
24-
// ignore_errors: yes
25-
//
26-
//- name: Check if authentications are defined
27-
// set_fact:
28-
// auths_basic: "{{ auths_basic|default([]) + item.security.authentication }}"
29-
// when: item.security is defined and item.security.authentication is defined
30-
// with_items: "{{ app_config.domains }}"
31-
//
32-
//- name: Generate Caddy Terraform file
33-
// include_tasks: "{{ module_role_path|default(role_path) }}/tasks/steps/generate-serverconfig-tf.yml"
34-
35-
var DependentContainers []string
36-
for _, domain := range system.Context.Project.Domains {
37-
for i, expose := range domain.Expose {
38-
ContainerResourceName := "docker_container.stackhead-" + system.Context.Project.Name + "-" + expose.Service
39-
if expose.ExternalPort != 443 {
40-
DependentContainers = append(DependentContainers, ContainerResourceName)
41-
}
42-
//expose.Service
43-
proxy.Context.AllPorts = append(proxy.Context.AllPorts, proxy.PortService{
44-
Expose: expose,
45-
ContainerResourceName: ContainerResourceName,
46-
Index: i,
47-
})
48-
}
13+
caddyDirectives, err := system.RenderModuleTemplate(
14+
templates,
15+
"Caddyfile_project.tmpl",
16+
nil,
17+
proxy.FuncMap)
18+
if err != nil {
19+
return err
4920
}
5021

51-
var AllPortsTfStrings []string
52-
for _, port := range proxy.Context.AllPorts {
53-
AllPortsTfStrings = append(AllPortsTfStrings, port.GetTfString())
22+
projectCaddyLocation := system.Context.Project.GetDirectoryPath() + "/Caddyfile"
23+
if err := xfs.WriteFile("ssh://"+projectCaddyLocation, caddyDirectives); err != nil {
24+
return err
5425
}
5526

56-
fmt.Println("Deploy step")
57-
58-
data := map[string]interface{}{
59-
"AllPortsTfString": strings.Join(AllPortsTfStrings, ","),
60-
"DependentContainers": strings.Join(DependentContainers, ","),
27+
if _, err := system.SimpleRemoteRun("ln", system.RemoteRunOpts{Args: []string{"-sf " + projectCaddyLocation + " /etc/caddy/conf.d/stackhead_" + system.Context.Project.Name + ".conf"}}); err != nil {
28+
return fmt.Errorf("Unable to symlink project Caddyfile: " + err.Error())
6129
}
6230

63-
caddyDirectives, err := system.RenderModuleTemplate(
64-
templates,
65-
"caddy.tf.tmpl",
66-
data,
67-
proxy.FuncMap)
68-
if err != nil {
69-
return err
31+
if _, err := system.SimpleRemoteRun("systemctl", system.RemoteRunOpts{Args: []string{"reload", "caddy"}, Sudo: true}); err != nil {
32+
return fmt.Errorf("Unable to reload Caddy service: " + err.Error())
7033
}
71-
return xfs.WriteFile("ssh://"+system.Context.Project.GetTerraformDirectoryPath()+"/caddy.tf", caddyDirectives)
34+
35+
return nil
7236
}

modules/proxy/caddy/destroy.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package proxy_caddy
2+
3+
import (
4+
"fmt"
5+
xfs "github.com/saitho/golang-extended-fs/v2"
6+
7+
"github.com/getstackhead/stackhead/system"
8+
)
9+
10+
func (m Module) Destroy(modulesSettings interface{}) error {
11+
filePath := "ssh:///etc/caddy/conf.d/stackhead_" + system.Context.Project.Name + ".conf"
12+
if fileExists, _ := xfs.HasFile(filePath); !fileExists {
13+
return nil
14+
}
15+
if err := xfs.DeleteFile("ssh:///etc/caddy/conf.d/stackhead_" + system.Context.Project.Name + ".conf"); err != nil {
16+
return fmt.Errorf("Unable to remove symlinked project Caddyfile: " + err.Error())
17+
}
18+
if _, err := system.SimpleRemoteRun("systemctl", system.RemoteRunOpts{Args: []string{"reload", "caddy"}, Sudo: true}); err != nil {
19+
return fmt.Errorf("Unable to reload Caddy service: " + err.Error())
20+
}
21+
return nil
22+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{{ range $index, $domainConfig := $.Project.Domains }}
2+
{{ range $index2, $expose := $domainConfig.Expose }}
3+
{{ if ne $expose.ExternalPort 443 }}
4+
5+
{{ $domainConfig.Domain }}{{ if ne $expose.ExternalPort 80 }}:{{ $expose.ExternalPort }}{{ end }} {
6+
reverse_proxy localhost:{{ getExternalPort $expose.Service $expose.InternalPort }}
7+
8+
{{ $basicAuths := getBasicAuths $domainConfig.Security.Authentication }}
9+
{{ if $basicAuths }}
10+
basicauth * {
11+
{{ range $index3, $item := $basicAuths }}
12+
{{ $item.Username }} {{ b64enc ($item.Password | crypto.Bcrypt) }}
13+
{{ end }}
14+
}
15+
{{ end }}
16+
}
17+
{{ end }}
18+
{{ end }}
19+
{{ end }}

modules/proxy/caddy/templates/caddy.tf.tmpl

Lines changed: 0 additions & 44 deletions
This file was deleted.

0 commit comments

Comments
 (0)