Skip to content

Commit 274ecdb

Browse files
authored
Merge pull request #156 from nginxinc/pem-file-writing
Write a pem file atomically
2 parents 94da608 + 251f855 commit 274ecdb

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

nginx-controller/nginx/nginx.go

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package nginx
33
import (
44
"bytes"
55
"fmt"
6+
"io/ioutil"
67
"os"
78
"os/exec"
89
"path"
@@ -174,25 +175,34 @@ func (nginx *NginxController) AddOrUpdateCertAndKey(name string, cert string, ke
174175
pemFileName := nginx.nginxCertsPath + "/" + name + ".pem"
175176

176177
if !nginx.local {
177-
pem, err := os.Create(pemFileName)
178+
pem, err := ioutil.TempFile(nginx.nginxCertsPath, name)
178179
if err != nil {
179-
glog.Fatalf("Couldn't create pem file %v: %v", pemFileName, err)
180+
glog.Fatalf("Couldn't create a temp file for the pem file %v: %v", name, err)
180181
}
181-
defer pem.Close()
182182

183183
_, err = pem.WriteString(key)
184184
if err != nil {
185-
glog.Fatalf("Couldn't write to pem file %v: %v", pemFileName, err)
185+
glog.Fatalf("Couldn't write to the temp pem file %v: %v", pem.Name(), err)
186186
}
187187

188188
_, err = pem.WriteString("\n")
189189
if err != nil {
190-
glog.Fatalf("Couldn't write to pem file %v: %v", pemFileName, err)
190+
glog.Fatalf("Couldn't write to the temp pem file %v: %v", pem.Name(), err)
191191
}
192192

193193
_, err = pem.WriteString(cert)
194194
if err != nil {
195-
glog.Fatalf("Couldn't write to pem file %v: %v", pemFileName, err)
195+
glog.Fatalf("Couldn't write to the temp pem file %v: %v", pem.Name(), err)
196+
}
197+
198+
err = pem.Close()
199+
if err != nil {
200+
glog.Fatalf("Couldn't close the temp pem file %v: %v", pem.Name(), err)
201+
}
202+
203+
err = os.Rename(pem.Name(), pemFileName)
204+
if err != nil {
205+
glog.Fatalf("Fail to rename the temp pem file %v to %v: %v", pem.Name(), pemFileName, err)
196206
}
197207
}
198208

0 commit comments

Comments
 (0)