@@ -8,7 +8,21 @@ import (
8
8
apiv1 "k8s.io/api/core/v1"
9
9
)
10
10
11
- var CertFolder = filepath .FromSlash ("/etc/caddy/certs" )
11
+ var certFolder = ""
12
+
13
+ // GetCertFolder returns the staging path for storing certificates as files.
14
+ func GetCertFolder () string {
15
+ if certFolder == "" {
16
+ // Use the systemd cache directory if possible.
17
+ runtimeDir := os .Getenv ("RUNTIME_DIRECTORY" )
18
+ if runtimeDir != "" {
19
+ certFolder = filepath .Join (runtimeDir , "certs" )
20
+ } else {
21
+ certFolder = filepath .FromSlash ("/etc/caddy/certs" )
22
+ }
23
+ }
24
+ return certFolder
25
+ }
12
26
13
27
// SecretAddedAction provides an implementation of the action interface.
14
28
type SecretAddedAction struct {
@@ -60,7 +74,7 @@ func writeFile(s *apiv1.Secret) error {
60
74
content = append (content , cert ... )
61
75
}
62
76
63
- err := os .WriteFile (filepath .Join (CertFolder , s .Name + ".pem" ), content , 0644 )
77
+ err := os .WriteFile (filepath .Join (GetCertFolder () , s .Name + ".pem" ), content , 0644 )
64
78
if err != nil {
65
79
return err
66
80
}
@@ -80,13 +94,17 @@ func (r SecretUpdatedAction) handle(c *CaddyController) error {
80
94
81
95
func (r SecretDeletedAction ) handle (c * CaddyController ) error {
82
96
c .logger .Infof ("TLS secret deleted (%s/%s)" , r .resource .Namespace , r .resource .Name )
83
- return os .Remove (filepath .Join (CertFolder , r .resource .Name + ".pem" ))
97
+ return os .Remove (filepath .Join (GetCertFolder () , r .resource .Name + ".pem" ))
84
98
}
85
99
86
100
// watchTLSSecrets Start listening to TLS secrets if at least one ingress needs it.
87
101
// It will sync the CertFolder with TLS secrets
88
102
func (c * CaddyController ) watchTLSSecrets () error {
89
103
if c .informers .TLSSecret == nil && c .resourceStore .HasManagedTLS () {
104
+ if err := os .MkdirAll (GetCertFolder (), 0755 ); err != nil && ! os .IsExist (err ) {
105
+ return err
106
+ }
107
+
90
108
// Init informers
91
109
params := k8s.TLSSecretParams {
92
110
InformerFactory : c .factories .WatchedNamespace ,
@@ -106,13 +124,6 @@ func (c *CaddyController) watchTLSSecrets() error {
106
124
return err
107
125
}
108
126
109
- if _ , err := os .Stat (CertFolder ); os .IsNotExist (err ) {
110
- err = os .MkdirAll (CertFolder , 0755 )
111
- if err != nil {
112
- return err
113
- }
114
- }
115
-
116
127
for _ , secret := range secrets {
117
128
if err := writeFile (secret ); err != nil {
118
129
return err
0 commit comments