← Back to team overview

cloud-init-dev team mailing list archive

[Merge] ~chad.smith/cloud-init:docs/dont-use-tmp-during-boot into cloud-init:master

 

Chad Smith has proposed merging ~chad.smith/cloud-init:docs/dont-use-tmp-during-boot into cloud-init:master.

Commit message:
docs: note in rtd about avoiding /tmp when writing files

Requested reviews:
  cloud-init commiters (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~chad.smith/cloud-init/+git/cloud-init/+merge/349209
-- 
Your team cloud-init commiters is requested to review the proposed merge of ~chad.smith/cloud-init:docs/dont-use-tmp-during-boot into cloud-init:master.
diff --git a/cloudinit/config/cc_bootcmd.py b/cloudinit/config/cc_bootcmd.py
index db64f0a..6813f53 100644
--- a/cloudinit/config/cc_bootcmd.py
+++ b/cloudinit/config/cc_bootcmd.py
@@ -42,7 +42,13 @@ schema = {
 
         .. note::
             bootcmd should only be used for things that could not be done later
-            in the boot process."""),
+            in the boot process.
+
+        .. note::
+
+          when writing files, do not use /tmp dir as it races with
+          systemd-tmpfiles-clean LP: #1707222. Use /run/somedir instead.
+    """),
     'distros': distros,
     'examples': [dedent("""\
         bootcmd:
diff --git a/cloudinit/config/cc_runcmd.py b/cloudinit/config/cc_runcmd.py
index b6f6c80..1f75d6c 100644
--- a/cloudinit/config/cc_runcmd.py
+++ b/cloudinit/config/cc_runcmd.py
@@ -42,6 +42,11 @@ schema = {
 
           all commands must be proper yaml, so you have to quote any characters
           yaml would eat (':' can be problematic)
+
+        .. note::
+
+          when writing files, do not use /tmp dir as it races with
+          systemd-tmpfiles-clean LP: #1707222. Use /run/somedir instead.
     """),
     'distros': distros,
     'examples': [dedent("""\
diff --git a/cloudinit/config/cc_write_files.py b/cloudinit/config/cc_write_files.py
index 1b7e7e3..31d1db6 100644
--- a/cloudinit/config/cc_write_files.py
+++ b/cloudinit/config/cc_write_files.py
@@ -18,6 +18,11 @@ binary gzip data can be specified and will be decoded before being written.
     follows yaml formatting standards. to specify binary data, use the yaml
     option ``!!binary``
 
+.. note::
+    Do not write files under /tmp during boot because of a race with
+    systemd-tmpfiles-clean that can cause temp files to get cleaned during
+    the early boot process. Use /run/somedir instead to avoid race LP:1707222.
+
 **Internal name:** ``cc_write_files``
 
 **Module frequency:** per instance
diff --git a/doc/examples/cloud-config-run-cmds.txt b/doc/examples/cloud-config-run-cmds.txt
index 3bb0686..002398f 100644
--- a/doc/examples/cloud-config-run-cmds.txt
+++ b/doc/examples/cloud-config-run-cmds.txt
@@ -18,5 +18,8 @@ runcmd:
  - [ sh, -xc, "echo $(date) ': hello world!'" ]
  - [ sh, -c, echo "=========hello world'=========" ]
  - ls -l /root
- - [ wget, "http://slashdot.org";, -O, /tmp/index.html ]
+ # Note: Don't write files to /tmp from cloud-init use /run/somedir instead.
+ # Early boot environments can race systemd-tmpfiles-clean LP: #1707222.
+ - mkdir /run/mydir
+ - [ wget, "http://slashdot.org";, -O, /run/mydir/index.html ]
 
diff --git a/doc/examples/cloud-config.txt b/doc/examples/cloud-config.txt
index bd84c64..774f66b 100644
--- a/doc/examples/cloud-config.txt
+++ b/doc/examples/cloud-config.txt
@@ -127,7 +127,10 @@ runcmd:
  - [ sh, -xc, "echo $(date) ': hello world!'" ]
  - [ sh, -c, echo "=========hello world'=========" ]
  - ls -l /root
- - [ wget, "http://slashdot.org";, -O, /tmp/index.html ]
+ # Note: Don't write files to /tmp from cloud-init use /run/somedir instead.
+ # Early boot environments can race systemd-tmpfiles-clean LP: #1707222.
+ - mkdir /run/mydir
+ - [ wget, "http://slashdot.org";, -O, /run/mydir/index.html ]
 
 
 # boot commands

Follow ups