summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2018-03-23 17:17:55 -0600
committerChad Smith <chad.smith@canonical.com>2018-03-23 17:17:55 -0600
commite0f644b7c8c76bd63d242558685722cc70d9c51d (patch)
treece2e0609efb2bd3a1b3bfe3b8eb558bdb74038ca /tools
parent68d798bb793052f589a7e48c508aca9031c7e271 (diff)
downloadvyos-cloud-init-e0f644b7c8c76bd63d242558685722cc70d9c51d.tar.gz
vyos-cloud-init-e0f644b7c8c76bd63d242558685722cc70d9c51d.zip
IBMCloud: Initial IBM Cloud datasource.
This adds a specific IBM Cloud datasource. IBM Cloud is identified by: a.) running on xen b.) one of a LABEL=METADATA disk or a LABEL=config-2 disk with UUID=9796-932E The datasource contains its own config-drive reader that reads only the currently supported portion of config-drive needed for ibm cloud. During the provisioning boot, cloud-init is disabled. See the docstring in DataSourceIBMCloud.py for more more information.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/ds-identify65
1 files changed, 56 insertions, 9 deletions
diff --git a/tools/ds-identify b/tools/ds-identify
index e2552c8b..9a2db5c4 100755
--- a/tools/ds-identify
+++ b/tools/ds-identify
@@ -92,6 +92,7 @@ DI_DMI_SYS_VENDOR=""
DI_DMI_PRODUCT_SERIAL=""
DI_DMI_PRODUCT_UUID=""
DI_FS_LABELS=""
+DI_FS_UUIDS=""
DI_ISO9660_DEVS=""
DI_KERNEL_CMDLINE=""
DI_VIRT=""
@@ -114,7 +115,7 @@ DI_DSNAME=""
# be searched if there is no setting found in config.
DI_DSLIST_DEFAULT="MAAS ConfigDrive NoCloud AltCloud Azure Bigstep \
CloudSigma CloudStack DigitalOcean AliYun Ec2 GCE OpenNebula OpenStack \
-OVF SmartOS Scaleway Hetzner"
+OVF SmartOS Scaleway Hetzner IBMCloud"
DI_DSLIST=""
DI_MODE=""
DI_ON_FOUND=""
@@ -123,6 +124,8 @@ DI_ON_NOTFOUND=""
DI_EC2_STRICT_ID_DEFAULT="true"
+_IS_IBM_CLOUD=""
+
error() {
set -- "ERROR:" "$@";
debug 0 "$@"
@@ -196,7 +199,7 @@ read_fs_info() {
return
fi
local oifs="$IFS" line="" delim=","
- local ret=0 out="" labels="" dev="" label="" ftype="" isodevs=""
+ local ret=0 out="" labels="" dev="" label="" ftype="" isodevs="" uuids=""
out=$(blkid -c /dev/null -o export) || {
ret=$?
error "failed running [$ret]: blkid -c /dev/null -o export"
@@ -219,12 +222,14 @@ read_fs_info() {
LABEL=*) label="${line#LABEL=}";
labels="${labels}${line#LABEL=}${delim}";;
TYPE=*) ftype=${line#TYPE=};;
+ UUID=*) uuids="${uuids}${line#UUID=}$delim";;
esac
done
[ -n "$dev" -a "$ftype" = "iso9660" ] &&
isodevs="${isodevs} ${dev}=$label"
DI_FS_LABELS="${labels%${delim}}"
+ DI_FS_UUIDS="${uuids%${delim}}"
DI_ISO9660_DEVS="${isodevs# }"
}
@@ -437,14 +442,25 @@ dmi_sys_vendor_is() {
[ "${DI_DMI_SYS_VENDOR}" = "$1" ]
}
-has_fs_with_label() {
- local label="$1"
- case ",${DI_FS_LABELS}," in
- *,$label,*) return 0;;
+has_fs_with_uuid() {
+ case ",${DI_FS_UUIDS}," in
+ *,$1,*) return 0;;
esac
return 1
}
+has_fs_with_label() {
+ # has_fs_with_label(label1[ ,label2 ..])
+ # return 0 if a there is a filesystem that matches any of the labels.
+ local label=""
+ for label in "$@"; do
+ case ",${DI_FS_LABELS}," in
+ *,$label,*) return 0;;
+ esac
+ done
+ return 1
+}
+
nocase_equal() {
# nocase_equal(a, b)
# return 0 if case insenstive comparision a.lower() == b.lower()
@@ -583,6 +599,8 @@ dscheck_NoCloud() {
case " ${DI_DMI_PRODUCT_SERIAL} " in
*\ ds=nocloud*) return ${DS_FOUND};;
esac
+
+ is_ibm_cloud && return ${DS_NOT_FOUND}
for d in nocloud nocloud-net; do
check_seed_dir "$d" meta-data user-data && return ${DS_FOUND}
check_writable_seed_dir "$d" meta-data user-data && return ${DS_FOUND}
@@ -594,9 +612,8 @@ dscheck_NoCloud() {
}
check_configdrive_v2() {
- if has_fs_with_label "config-2"; then
- return ${DS_FOUND}
- elif has_fs_with_label "CONFIG-2"; then
+ is_ibm_cloud && return ${DS_NOT_FOUND}
+ if has_fs_with_label CONFIG-2 config-2; then
return ${DS_FOUND}
fi
# look in /config-drive <vlc>/seed/config_drive for a directory
@@ -988,6 +1005,36 @@ dscheck_Hetzner() {
return ${DS_NOT_FOUND}
}
+is_ibm_provisioning() {
+ [ -f "${PATH_ROOT}/root/provisioningConfiguration.cfg" ]
+}
+
+is_ibm_cloud() {
+ cached "${_IS_IBM_CLOUD}" && return ${_IS_IBM_CLOUD}
+ local ret=1
+ if [ "$DI_VIRT" = "xen" ]; then
+ if is_ibm_provisioning; then
+ ret=0
+ elif has_fs_with_label METADATA metadata; then
+ ret=0
+ elif has_fs_with_uuid 9796-932E &&
+ has_fs_with_label CONFIG-2 config-2; then
+ ret=0
+ fi
+ fi
+ _IS_IBM_CLOUD=$ret
+ return $ret
+}
+
+dscheck_IBMCloud() {
+ if is_ibm_provisioning; then
+ debug 1 "cloud-init disabled during provisioning on IBMCloud"
+ return ${DS_NOT_FOUND}
+ fi
+ is_ibm_cloud && return ${DS_FOUND}
+ return ${DS_NOT_FOUND}
+}
+
collect_info() {
read_virt
read_pid1_product_name