From f94b16cea578062c8abf3dd3a1ada234fa671cd3 Mon Sep 17 00:00:00 2001
From: Robert Schweikert <rjschwei@suse.com>
Date: Thu, 15 Sep 2016 14:27:55 -0400
Subject: dmidecode: run dmidecode only on i?86 or x86_64 arch.

Dmidecode is not going to run successfully on anything other than an
x86 or x86_64, just avoid running it anywhere else.
---
 cloudinit/util.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/cloudinit/util.py b/cloudinit/util.py
index 7c37eb8f..6c5cf741 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -2337,7 +2337,8 @@ def read_dmi_data(key):
 
     # running dmidecode can be problematic on some arches (LP: #1243287)
     uname_arch = os.uname()[4]
-    if uname_arch.startswith("arm") or uname_arch == "aarch64":
+    if not (uname_arch == "x86_64" or
+            (uname_arch.startswith("i") and uname_arch[2:] == "86")):
         LOG.debug("dmidata is not supported on %s", uname_arch)
         return None
 
-- 
cgit v1.2.3


From 80f5ec4be0f781b26eca51d90d51abfab396b3f6 Mon Sep 17 00:00:00 2001
From: Scott Moser <smoser@brickies.net>
Date: Mon, 19 Sep 2016 11:48:54 -0400
Subject: Adjust mounts and disk configuration for systemd.

The end result of all of these changes is to get mounts managed by
cloud-init to occur only after cloud-init.service is done.  We need to do
that so that filesystems that are set up by cloud-init (in disk_setup)
do not get mounted by stale entries in /etc/fstab before
the setup occurs.

This can occur in 2 ways:
 a.) new instance with old /etc/fstab
 b.) same instance where disk needs adjusting (Azure resize will re-format
     the ephemeral disk).

The list of changes here is:
 - move mounts and disk_setup module to cloud-init.service rather
   than config.  cloud-init.service runs earlier in boot so it
   can get those mount points done earlier.
 - on systemd add 'x-systemd.requires=cloud-init.service' to fstab options
 - cloud-init-local.service: add Before=basic.target
 - cloud-init.service:
   - extend After, Before, and Wants to multiple lines rather than one
     long line.
   - sort consistently with cloud-init-local.service
   - add DefaultDependencies=no
   - add Before=default.target
   - add Conflicts=shutdown.target

LP: #1611074
---
 cloudinit/config/cc_mounts.py        |  4 ++--
 cloudinit/sources/DataSourceAzure.py |  7 +++++--
 config/cloud.cfg                     |  4 ++--
 systemd/cloud-init-local.service     |  3 ++-
 systemd/cloud-init.service           | 16 +++++++++++++---
 5 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py
index 2b981935..4084118b 100644
--- a/cloudinit/config/cc_mounts.py
+++ b/cloudinit/config/cc_mounts.py
@@ -265,7 +265,7 @@ def handle(_name, cfg, cloud, log, _args):
     # fs_spec, fs_file, fs_vfstype, fs_mntops, fs-freq, fs_passno
     def_mnt_opts = "defaults,nobootwait"
     if cloud.distro.uses_systemd():
-        def_mnt_opts = "defaults,nofail"
+        def_mnt_opts = "defaults,nofail,x-systemd.requires=cloud-init.service"
 
     defvals = [None, None, "auto", def_mnt_opts, "0", "2"]
     defvals = cfg.get("mount_default_fields", defvals)
@@ -401,5 +401,5 @@ def handle(_name, cfg, cloud, log, _args):
 
     try:
         util.subp(("mount", "-a"))
-    except Exception:
+    except util.ProcessExecutionError:
         util.logexc(log, "Activating mounts via 'mount -a' failed")
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py
index dbc2bb68..b802b03e 100644
--- a/cloudinit/sources/DataSourceAzure.py
+++ b/cloudinit/sources/DataSourceAzure.py
@@ -252,7 +252,7 @@ class DataSourceAzureNet(sources.DataSource):
 
         cc_modules_override = support_new_ephemeral(self.sys_cfg)
         if cc_modules_override:
-            self.cfg['cloud_config_modules'] = cc_modules_override
+            self.cfg['cloud_init_modules'] = cc_modules_override
 
         return True
 
@@ -283,11 +283,14 @@ def find_fabric_formatted_ephemeral_part():
             device_location = potential_location
             break
     if device_location is None:
+        LOG.debug("no azure resource disk partition path found")
         return None
     ntfs_devices = util.find_devs_with("TYPE=ntfs")
     real_device = os.path.realpath(device_location)
     if real_device in ntfs_devices:
         return device_location
+    LOG.debug("'%s' existed (%s) but was not ntfs formated",
+              device_location, real_device)
     return None
 
 
@@ -342,7 +345,7 @@ def support_new_ephemeral(cfg):
     LOG.debug("cloud-init will format ephemeral0.1 this boot.")
     LOG.debug("setting disk_setup and mounts modules 'always' for this boot")
 
-    cc_modules = cfg.get('cloud_config_modules')
+    cc_modules = cfg.get('cloud_init_modules')
     if not cc_modules:
         return None
 
diff --git a/config/cloud.cfg b/config/cloud.cfg
index 7c94ec5c..3b4c5383 100644
--- a/config/cloud.cfg
+++ b/config/cloud.cfg
@@ -30,6 +30,8 @@ cloud_init_modules:
  - write-files
  - growpart
  - resizefs
+ - disk_setup
+ - mounts
  - set_hostname
  - update_hostname
  - update_etc_hosts
@@ -43,8 +45,6 @@ cloud_config_modules:
 # Emit the cloud config ready event
 # this can be used by upstart jobs for 'start on cloud-config'.
  - emit_upstart
- - disk_setup
- - mounts
  - ntp
  - ssh-import-id
  - locale
diff --git a/systemd/cloud-init-local.service b/systemd/cloud-init-local.service
index b19eeaee..bc2db60e 100644
--- a/systemd/cloud-init-local.service
+++ b/systemd/cloud-init-local.service
@@ -4,9 +4,10 @@ DefaultDependencies=no
 Wants=local-fs.target
 Wants=network-pre.target
 After=local-fs.target
-Conflicts=shutdown.target
+Before=basic.target
 Before=network-pre.target
 Before=shutdown.target
+Conflicts=shutdown.target
 
 [Service]
 Type=oneshot
diff --git a/systemd/cloud-init.service b/systemd/cloud-init.service
index 6fb655e6..1e392a39 100644
--- a/systemd/cloud-init.service
+++ b/systemd/cloud-init.service
@@ -1,9 +1,19 @@
 [Unit]
 Description=Initial cloud-init job (metadata service crawler)
-After=cloud-init-local.service networking.service
-Before=network-online.target sshd.service sshd-keygen.service systemd-user-sessions.service
+DefaultDependencies=no
+Wants=cloud-init-local.service
+Wants=local-fs.target
+Wants=sshd-keygen.service
+Wants=sshd.service
+After=cloud-init-local.service
+After=networking.service
 Requires=networking.service
-Wants=local-fs.target cloud-init-local.service sshd.service sshd-keygen.service
+Before=basic.target
+Before=network-online.target
+Before=sshd-keygen.service
+Before=sshd.service
+Before=systemd-user-sessions.service
+Conflicts=shutdown.target
 
 [Service]
 Type=oneshot
-- 
cgit v1.2.3