Skip to content

Instantly share code, notes, and snippets.

@smoser
Last active July 10, 2018 16:23
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save smoser/6391b854e6a80475aac473bba4ef0310 to your computer and use it in GitHub Desktop.
Save smoser/6391b854e6a80475aac473bba4ef0310 to your computer and use it in GitHub Desktop.
cloud-init git things

cloud-init git related things

importing ubuntu branches

the file import-ubuntu-to-trunk shows the script that I used to create the ubuntu branches so that we can see ubuntu/precise, ubuntu/trusty branches here. Going forward, the plan is to maintain ubuntu/devel and then create branches to track releases after the become stable from that development branch.

For development, we will maintain ubuntu/devel, and when taking a new upstream snapshot, we'll use debian/new-upstream-snapshot. That tool merges master into ubuntu/devel and populates debian/changelog ready for commit.

bzr mapping to git commits

After moving from bzr to git, sometimes it is useful to have access to bzr revision numbers and map to git commit.

#!/bin/bash
# https://gist.github.com/smoser/6391b854e6a80475aac473bba4ef0310
VERBOSITY=0
TEMP_D=""
START_D="$PWD"
cleanup(){
[ ! -d "$TEMP_D" ] || rm -Rf "$TEMP_D";
git worktree prune
}
error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
Usage() {
cat <<EOF
Usage: ${0##*/} [ options ] <<ARGUMENTS>>
build a package, put output in ../out
options:
--ref R what to build from [default to current branch].
-o | --output D put output in D. [default ../out]
EOF
}
bad_Usage() { Usage 1>&2; [ $# -eq 0 ] || error "$@"; return 1; }
debug() {
local level=${1}; shift;
[ "${level}" -gt "${VERBOSITY}" ] && return
error "${@}"
}
get_genchanges_version() {
local pkg_name="$1" suite="$2" collapsed_args="$3" devel=""
# if args already had a '-v' in it, then do nothing.
_RET=""
[ "${collapsed_args#* -v}" = "${collapsed_args}" ] ||
{ debug 1 "-v already present in args"; return 0; }
devel=$(distro-info --devel)
[ "$suite" = "$devel" ] &&
{ debug 1 "-v not relevant for devel suite ($suite)"; return 0; }
if ! command -v rmadison >/dev/null 2>&1; then
debug 1 "rmadison not available."
return 0
fi
local ga_suite="" ga_version="" updates_suite="" updates_version=""
case "$suite" in
*-proposed|*-updates)
updates_suite=${suite%-*}-updates
ga_suite=${suite%-*};;
*)
updates_suite="$suite-updates";
ga_suite=${suite};;
esac
updates_version=$(
rmadison --url=ubuntu --suite="${updates_suite}" $pkg_name |
awk '-F|' '{gsub(/ /, ""); print $2}')
ga_version=$(
rmadison --url=ubuntu --suite="${ga_suite}" $pkg_name |
awk '-F|' '{gsub(/ /, ""); print $2}')
debug 1 "$pkg_name versions updates=${updates_version} ga=${ga_version}"
if [ -n "$updates_version" ]; then
_RET="-v${updates_version}"
elif [ -n "$ga_version" ]; then
_RET="-v${ga_version}"
else
error "Failed to get version info for $pkg_name in " \
"$updates_suite or $ga_suite."
return 1
fi
}
main() {
local short_opts="ho:v"
local long_opts="help,output:,ref:,verbose"
local getopt_out=""
getopt_out=$(getopt --name "${0##*/}" \
--options "${short_opts}" --long "${long_opts}" -- "$@") &&
eval set -- "${getopt_out}" ||
{ bad_Usage; return; }
local cur="" next="" out_d="../out" ref="" offset="0"
while [ $# -ne 0 ]; do
cur="$1"; next="$2";
case "$cur" in
-h|--help) Usage ; exit 0;;
-o|--output) out_d=$next; shift;;
-v|--verbose) VERBOSITY=$((${VERBOSITY}+1));;
--ref) ref=$next; shift;;
--) shift; break;;
esac
shift;
done
if [ -z "$ref" ]; then
cur_branch=$(git rev-parse --abbrev-ref HEAD) ||
fail "failed to get current branch"
ref="$cur_branch"
fi
TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX") ||
fail "failed to make tempdir"
trap cleanup EXIT
local wtd="${TEMP_D}/wtd" pkg_ver pkg_name upstream_ver upstream_hash
local orig_tarball orig_tarball_fp
git worktree add --force "$wtd" "$ref" ||
fail "failed worktree add $wtd $ref"
pkg_ver=$( cd "$wtd" && dpkg-parsechangelog --show-field Version) ||
fail "failed reading package version"
pkg_name=$(cd "$wtd" && dpkg-parsechangelog --show-field Source) ||
fail "failed to read Source from changelog"
suite=$(cd "$wtd" && dpkg-parsechangelog --show-field Distribution) ||
fail "failed to read Distribution from changelog"
upstream_ver=${pkg_ver%-*}
# turn 0.7.7-10-gbc2c326-0ubuntu1 into 'bc2c326'
upstream_hash=${upstream_ver##*-g}
local native=false
case "${pkg_ver}" in
*-*) :;;
*) error "Native package assumed."; native=true;;
esac
if [ "$native" = "true" ]; then
error "Native package format."
else
orig_tarball="${pkg_name}_${upstream_ver}.orig.tar.gz"
error "pkg_name=$pkg_name pkg_ver=$pkg_ver upstream_ver=$upstream_ver orig_tarball=$orig_tarball"
orig_tarball_fp=""
for p in .. ../dl; do
[ -e "$p/$orig_tarball" ] &&
orig_tarball_fp="$p/$orig_tarball" && break
done
if [ -n "$orig_tarball_fp" ]; then
error "Using existing orig tarball in $orig_tarball_fp"
elif [ -x tools/make-tarball ]; then
if [ ! -d "../dl" ]; then
mkdir ../dl ||
fail "failed to create ../dl from $PWD"
error "created ../dl from $PWD for orig tarballs."
fi
orig_tarball_fp="../dl/$orig_tarball"
error "creating $orig_tarball_fp using" \
"make-tarball --output=$orig_tarball_fp $upstream_hash"
./tools/make-tarball "--output=$orig_tarball_fp" "$upstream_hash" ||
fail "failed to make tarball"
else
get-orig-tarball -v ${offset:+--offset=${offset}} ||
fail "failed to get orig tarball for $pkg_name at $pkg_ver"
orig_tarball_fp=$(for f in \
../${pkg_name}_${upstream_ver}.orig.*; do [ -f "$f" ] &&
echo "$f"; done)
[ -n "$orig_tarball_fp" ] ||
fail "did not get a tarball with get-orig-tarball"
[ -f "$orig_tarball_fp" ] ||
fail "orig tarball not a file: $orig_tarball_fp"
error "using orig tarball $orig_tarball_fp"
fi
orig_tarball_fp=$(readlink -f "$orig_tarball_fp")
ln -s "$orig_tarball_fp" "$TEMP_D/${orig_tarball_fp##*/}"
fi
# try to magically add '-v' if its not present.
local genchanges_v=""
get_genchanges_version "$pkg_name" "$suite" " $* " ||
fail "Failed to get genchanges version for $pkg_name $suite ' $* '"
genchanges_v="$_RET"
if [ $# -eq 0 ]; then
set -- -d -S ${genchanges_v}
elif [ -n "${genchanges_v}" ]; then
set -- "$@" ${genchanges_v}
fi
( cd "$wtd" && rm -Rf .git ) || fail "failed removing .git from work dir."
( cd "$wtd" && debuild "$@" ) || fail "FAILED: debuild $*"
( for f in "$TEMP_D/"*; do echo "$f"; done )
mkdir -p "$out_d"
for f in "${TEMP_D}/"*; do
[ -f "$f" ] || continue
cp "$f" "$out_d/" && echo "wrote ${out_d}/${f##*/}" ||
fail "failed to copy $f to $out_d"
done
return 0
}
main "$@"
# vi: ts=4 expandtab
$ git log --first-parent --oneline | tac |
sh -c 'i=1; while read line; do printf "%s %s\n" "$i" "$line";
i=$((i+1)); done' > out
1 d61ffd7 Initial release (LP: #269434).
2 b7d4c2c * debian/init: Run fetch-credentials before anything else. (LP: #308533) * Add ec2-set-hostname.py: Queries ec2 metdada for public-hostname and then sets it (LP: #316201)
3 2be0869 ec2-run-user-data: Fix python error when writing a file to the disk.
4 db066b9 * debian/dir: Install /var/ec2 to save user-data scripts. * debian/rules: Start ec2-init after ssh. * ec2-run-user-data.py: Save run-user-data script with ami-id.
5 40bc760 * debian/init: - Remove already ran detection - Log the running of ec2-run-user-data to /var/log/ec2-user-data.log * ec2-set-hostname.py: - set hostname to the Ec2 local-hostname - Update the /etc/hosts to change the ubuntu hostname to the public hostname. * ec2-fetch-credentials: - Copy the ssh keys to the ubuntu user. - Setup authorized keys for root to tell the user to login as the ubuntu user when they try to connect. * ec2-run-user-data: - Create an .already-ran file to check to see if ec2-run-user-data already ran. - Save the ec2-run-user-data script in /var/ec2.
6 4685dd2 * ec2-set-apt-sources.py - Determine the zone that the user is in and generate a /etc/apt/sources.list.d/ based on that. * debian/init: - Check to see if there is an /var/run/ec2 and create it if it doesnt exist. - Start ec2-set-apt-sources at first bootup. * debian/rules: - Install ec2-set-apt-sources. * debian/control: - Add python-configobj as a dependency. * debian/{install,dirs} - Create an /etc/ec2-init to read the configuration file and install it.
7 440f328 debian/init: Fix init script.
8 ecc2046 * debian/ec2-set-apt-sources.py: - Use the ec2 mirrors. (LP: #317065, #333897) - Update the /etc/apt/sources.list (LP: #333904) * debian/ec2-fetch-credentials.py: - Better error checking (LP: #325067)
9 2d667f5 * ec2-fetch-credentials.py: - Allow user to choose which user they wish to configure for. - Allow user to disable root user if they wish to. * ec2-set-defaults.py: - Set default timezone to UTC. - Set locale depending on zone. * debian/init: - Removed nash plugin. - Add ec2-set-defaults.
10 58f82c2 * debian/ec2-config.cfg: - Add disable root option. * debian/ec2-init.rightscale-init.init: - Add rightscale detection script. * ec2-get-info.py: - Display the information about an AMI instance.
11 e606fe4 * Set the configuration file to jaunty. * ec2-fetch-credentials: Fix typo. * ec2-set-defaults.py: - Remove timezone change when booting the instance. - Redirect output to /dev/null. * ec2-set-apt-sources.py: - Run apt-get update after the /etc/apt/sources.list and redirect the output to /dev/null. * rightscale-init: Updated rightscale-init
12 93cbb9a debian/rules: Fix typo.
13 c680ae1 * ec2-set-apt-sources.py: - Add the ubuntu-on-ec2 ppa.
14 406eb2f * ec2-set-apt-sources.py: - Use a template to generate the sources.list and generate it based on the lsb_release.
15 6dddf16 * ec2-set-hostname.py: - Use template for /etc/hosts creation. - Dont use public_hostname in /etc/hosts. (LP: #352745) * debian/control: - Add python-cheetah as a depends. * templates/sources.list.tmpl: - Update template. * debian/init: - Run the ec2-user-data script last so that the users get a stable system before running the user scripts.
16 c3ba031 * debian/control: - Add python-cheetah and python-apt as a dependency. * debian/ec2-config.cfg: - Remove distro due to the change in ec2-set-apt-sources.py * debian/inistall - Install the templates in the right place. * ec2-set-apt-sources.py: - Use python-apt to update the sources.list.
17 c8edc98 ec2-run-user-data.py: Fix error.
18 e6fc34b Fake the package-import tree and the current trunk.
19 332828b * ec2-run-user-data.py: Fix error.
20 ac53fe3 * ec2-run-user-data.py: Fix error.
21 322bf4c * Add more smarts to ec2 instance bring up. (LP: #371936)
22 dd112c3 * Really change the locale when setting up an instance. (LP: #341066) * Run ec2-run-user-data script last. (LP: #373055) * Minor comment tweaks. (LP:373057)
23 ebfb2ed * debian/init: Move init script to run before ssh and regenerate the ssh host kes in the init script rather than /etc/rc.local (LP: #370628) * ec2-set-apt-sources.py: - Move sources.list to /var/ec2 so it doesnt get removed after user reboots. * ec2-set-defaults.py: - Move locale to /var/ec2/ so it doesnt get remove after user reboots. * ec2-set-hostname.py - Create an /etc/hostname as well.
24 bb57116 * debian/init: Run update-motd regardless whether its a firstboot or not. * debian/init: Fix comments (LP: #373057) * debian/control: Add update-motd as a depends. * ec2-set-defaults.py: Wait for network to become available. (LP: #308530)
25 b098228 * Distutils added * New ec2init python module introduced * Lots and lots of stuff cleaned up and moved to ec2init python module. * Started the move to Boto
26 14c431c Update license to GPLv3 (dropping the "or later" bit). Update copyright years. Add copyright and license information to setup.py. Add myself as author of the relevant files.
27 07a9ad9 Clean out unused imports
28 dd38fbc Add the "run_once" handling to the init script. Unify init script indentation style.
29 7622399 Make the paths constants.
30 78186f4 Rely on the lockfile handling in the init script, and let ec2-run-user-data just do its thing.
31 157e808 ec2-init does not have any arch specific code at all, so go arch:all
32 19023c5 Add new script: ec2-wait-for-meta-data-service.py
33 e1d7413 Use urllib2 instead of urllib so that HTTP errors appear as exceptions.
34 d7efdba Remove .py extension from scripts installed in /usr/bin
35 e7ed58f Reset the umask once we're done creating the authorized_keys.
36 343ee6f Added a runtime dependency on python-boto.
37 da2dd7e Move python-disutils.mk before debhelper.mk to make sure the python module is fully installed by dh_pycentral before the init script is run in postinst.
38 fd8c56a Update copyright to reflect current copyright and license.
39 e822aba Replace calls to ec2-get-data (which was a figment of my imagination) with calls to ec2-get-info.
40 fb6561d Moved mappings from ec2-set-sources-list to ec2init. Moved everything else from ec2-set-sources-list to ec2-set-defaults. Removed call to ec2-set-sources-list from init script. Removed ec2-set-sources-list.
41 1cac841 Stop mangling /etc/hosts. EC2 provides a functional DNS. Replace use of os.system with a call to subprocess.Popen.
42 1f33a10 Move ec2 init script from debian/ out into top-level. Install init-script using distutils. Add -o to dh_installinit call to let it find the init script.
43 b75cbea Import current changelog.
44 bdf5195 Move ec2-config file to top-level.
45 b09aad3 Remove debian/ directory in preparation for upstream/ubuntu split.
46 e1af541 Tag 0.4.9 release, working towards 0.5.
47 1999a6e run_once_per_ami() and run_once_per_instance() are equivalent, so nuke run_once_per_instance().
48 ce4d0c0 Rerun the setting up of authorized keys if te AMI is rebundled.
49 d85c3f2 Only return the first part of local-hostname.
50 6103a0b Remove call to update-motd from the init script. It is Ubuntu specific (and is possibly not even needed there)
51 01b36de Remove bzr-builddeb configuration.
52 52cf836 Tag 0.4.99 release.
53 fbe0de0 Extend config API to allow for default values. Handle undefined config values gracefully.
54 3c598ec Set ownership of user's .ssh directory correctly. Disable root by default. Fail more gracefully if ssh keys could not be fetched.
55 56326b2 Fix ec2-get-info to work with simple testing environment (i.e. don't append a slash to every single URL)
56 c21874b Consolidate on the use of urllib2 (rather than both urllib and urllib2)
57 5ae04f1 Update /etc/default/locale with locale setting derived from locality.
58 41d05bf Merge lp:~smoser/ec2-init/bugfix-412143
59 d15a210 Merge decorator based content_type mappings from lp:~soren/ec2-init/decorator
60 5dfb04f Merge with lp:~soren/ec2-init/appliancexml
61 08bb4a5 Don't advertise a force-stop option to the init script that we don't actually offer.
62 2dfaecd Use /var/run/ec2 for mounting EBS volumes.
63 b554bb6 Tag 0.4.999 release
64 2fd7a07 Add a unittest for veriyfing that shell scripts passed in user-data get called.
65 2e5e426 replace multiple '| logger' in regenerate_ssh_host_keys with a single one
66 7bc6bbe sync karmic and trunk
67 4be7677 add ec2init.conf upstart job
68 cf74dcf fix typo in ec2init.conf
69 038a9bf add current working ec2init.conf, save ec2init.conf.goal, add disabler
70 256dc91 add ec2-is-compat-env as it is in lucid/karmic now
71 11cce76 fix but that required 'ec2init=X' to be last thing on the cmdline
72 684303e ec2-init-user-data is not present, remove it from setup.py
73 48acacc add hacked 'install.sh' for installing to a directory
74 e6cb87f initial re-org, ec2 data source successfully reads from cache if present
75 d9451ac add initctl_emit and defines for different data locations
76 857dab6 support compressed user data, use cPickle instead of pickle
77 42f6a1f add general flow of ec2-init.py
78 86b6aad add semaphore utilities to ec2init module
79 ca3cafb add cloud-init-run-module and ec2init/execute.py
80 6f58655 put upstart files in upstart/, minor other changes
81 baf4948 add cloud-run-user-script upstart job to run rc.local style scripts
82 a280ac3 add tools/ directory and 'write-mime-multipart'
83 3b0d26f mention where it came from
84 ec712e7 add UserDataHandler.py, it handles includes and normalizing of userdata
85 44e69ea get usage of cloud-init-run-module correct
86 49d3df4 functional state now in kvm tests
87 399f9ed support getting public ssh keys from ec2 metadata service
88 495b58a add setting of default locale and apt-sources
89 938ba37 support setting hostname
90 41268c9 remove dead/unused code, call this 0.5.0
91 b11e97a (tag: 0.5.0) remove old 'tests.py'
92 bddf1df fix ec2init.conf upstart job to have correct start on
93 788a3bf fixes found testing in ec2
94 a94b81b read cached user-data without pickling -- its just a string
95 a6581a3 add boto_utils
96 57ed1d5 change DataSourceEc2 to use the local boto_utils
97 db341c8 run later in boot, but more reliably
98 0c79e64 pull in chuck's repo at rev 75 bzr+ssh://bazaar.launchpad.net/~zulcss/ec2-init/ec2-init-config/
99 d67120b make sure all user-scripts get run, and only once-per-instance
100 062080f mark cloud-config-cat-debug upstart job as debug
101 cc01225 2 changes to cloud-run-user-script 1. arguments to run-parts came before run-parts 2. explicitly state that we dont want this script to run until cloud-config is done
102 7bde8d9 correctly mark content type of simple files
103 d29998f clean out 'build' directory in install.sh
104 969cbd1 refactor the config class and jobs to run through cloud-init-cfg
105 86d8955 work around differences in uec and ec2 metadata services
106 1376ffe moving towards getting apt-update-upgrade working
107 5656387 add swap devices if there are any found
108 89bff8f functional cloud-config-ssh.conf now
109 272bdb4 lots of shuffling around. more fully support old ec2-init.cfg and, add new preferred config file /etc/cloud/cloud.cfg.
110 8ac7379 add util library
111 9dacf61 support 'packages' in cloud-config
112 d32830e remove some debug statements
113 025a7f4 typo fixes to ec2-get-info (LP: #510773)
114 3d7d469 whitespace cleanup in ec2-get-info.py. consistent 4 space indentation
115 a177947 re-work generation of keys. be more sure that ssh service will be running
116 1108a51 fix reading of cloudconfig
117 9645203 only run setting of default locale and apt sources once-per-instance
118 3c0b959 function ec2 metadata service removal. also fix issues with empty cloud-config
119 8c66ea2 Add support for ssh keys in cloud-config. move write_file to util.
120 23eabb0 add job to disable metadata
121 f545a75 move from ec2init/ec2-config.cfg to cloud/cloud.cfg
122 350fde4 (tag: 0.5.1) rename cloud-config-cat so it wont be packaged
123 8938982 comment out unusable call to boto.log.exception in boto_utils.py
124 1252e1a no longer stop and restart ssh, rely on normal ssh service
125 262479d add cloud config support for apt_sources
126 930328b support reading keys from ssh_authorized_keys field of cloud-config
127 af39438 if datasource is already defined do not re-load it (even from cache)
128 63ba097 move writing sources.list to CloudConfig. add 'apt_preserve_sources_list'
129 5b70be8 add 'starts_with' mapping for upstart-job
130 e7fcf1d in #include type, allow comment lines
131 ea56eab add examples of user data
132 4f38980 improve write-mime-multipart to support 'starts_with'
133 eb74cd6 add doc/userdata.txt, move examples to doc/.
134 f8eb406 Add support for user defined mount points
135 124d9e1 add examples and userdata.txt to doc
136 e6e30d8 add the part-handler plugin
137 511448c make disable-ec2-metadata persistent across boots
138 fddec92 tighten permissions on cloud-config and user-data to protect it
139 0f2d829 move etc/ec2-init/templates to etc/cloud/templates
140 df2da98 add the cloud-config-mounts upstart job
141 994a9a7 remove ec2-is-compat-env and minor changes to setup.py
142 cfb7cda (tag: 0.5.2) add 'make-dist-tarball' just for making a clean tarfile from a tag
143 ff52279 make up a 'hostname' if there is a ip in local-hostname LP: #513842
144 aed1c1e globally remove ec2init and rename to cloudinit
145 3f7bb3e rename ec2-init to cloudinit
146 ef8789d more removal of 'ec2init' string, replacement with cloud-init
147 4dfd08e more removal of 'ec2init' string, replacement with cloud-init
148 a84c4a7 more removal of 'ec2init' string, replacement with cloud-init [again]
149 41cface (tag: 0.5.3) rename cloudinit.conf to cloud-init.conf
150 fbe3e44 add copyright information
151 0435087 only set hostname once per instance. (LP: #514492)
152 c2039de rename EC2Init class to CloudInit
153 2fc34ff fix bug where caused apt update to fail
154 0a07a16 merge mathiaz work for cloud-config-puppet
155 c623b93 merge mathiaz work for cloud-config-puppet
156 878ba5b (tag: 0.5.4) fix broken user-data scripts
157 87224b5 add updates-check support using uec-query-builds
158 f0e16fe (tag: 0.5.5) update to 0.5.5
159 b545534 fix 'time not defined' bug (LP: #523832)
160 7c77c9a run cloud-config-puppet later (LP: #523625)
161 829ad69 fix motd-hook in case of more than 4 fields in BUILD_FILE
162 433db02 add the cloud-config-misc upstart job
163 d24e246 add "runcmd" support in CloudConfig
164 0b16a38 typo in warning
165 e771ad9 force ru-user-script to wait on cloud-config-misc
166 7ddf958 (tag: 0.5.6) make sure items are strings (not ints)
167 112cb9d add info on how to delete null route
168 ee9c84a ensure that cache dir is present if not created, and tighten permissions on object cache stored there.
169 385802b fix format of cron.d/cloudinit-updates
170 91e423a purge cache in cloud-init so it doesn't end up persisting across instances
171 86ea121 replace another 'EC2' string with 'cloud'
172 c2b0068 update upstart/* files to be in sync with 0.5.7-0ubuntu4
173 6931fb8 (tag: 0.5.8) move setup.py to 0.5.8
174 2fed827 cloudinit/CloudConfig.py whitespace changes (remove tabs)
175 128f3a7 cloudinit/CloudConfig.py: bug fix, 'ephemeral' in cloud-config would not be converted to 'ephemeral0'
176 10d9978 in ebs root instances, ephemeral0 will have a full path. In instance store I was used to block-device-mapping: {'ami': 'sda1', 'ephemeral0': 'sda2', 'root': '/dev/sda1', 'swap': 'sda3'},
177 ee291ed replace 'cloudconfig' entries in fstab rather than appending (LP: #524562)
178 7ce3e12 rename apt lists files to match newly selected mirror (LP: #513060)
179 8e3dac3 move version to 0.5.9
180 6d30829 better 'Caught exception reading instance data' error
181 b05d623 [packaging] change make-dist-tarball to use the tag given to it
182 93c4ba8 ec2-get-info.py: fix bad indentation
183 fb6d13a This runs could-config-mounts on 'filesystem' event rather than on cloud-config. Doing so means the collision that was occuring with upstart/mountall will not occur. However, it also means any mounts configured will not be mounted until later. LP: #527825
184 94ab32f (tag: 0.5.10) move to 0.5.10
185 bc0a5f2 util.py: allow for case-insensitive "true" values in get_cfg_option_bool. LP: 507709
186 bec9d09 wait considerably longer (1050 seconds) for metadata service to come up
187 1be9cf3 remove ec2-get-info.py.
188 a9f600c add vi modelines to python files
189 afb5f8d add initial logging support
190 367e4c4 remove debug printfs from __init__
191 ceff5f0 remove use of cloudinit constants from util.py in get_base_cfg use get_base_cfg from CloudInit:read_cfg
192 245ec19 cloud-init: remove additional new line in log message
193 257da18 cloud.cfg: remove accidently commited 'cloud_config_modules' section
194 22184b7 make cloud-config modules configurable by cloud-config
195 9d83b3e fix cloud-config.conf upstart job
196 6cdd4bf move suggested rsyslogd config file to tools
197 17fabe4 add 'cloud-boothook' type
198 9b1f260 add the instance-id to the environment as INSTANCE_ID for boothooks
199 122903f change debug messages in DataSourceEc2
200 ce74a2b (tag: 0.5.11) doc: add mention of cloud-boothook to documentation
201 df7da11 add debug log message for 'running' config module
202 da22979 prefix config 'sem' entries with semaphores with 'config-'
203 09d34f8 remove trailing whitespace in previous commit
204 6b0bb7b improve the cloud-init-run-module code a bit, fix LP:#568139
205 789fdb0 add util.get_cfg_option_list_or_str
206 da0b927 fix trace due to lack of 'import traceback'. change error message to be debug (with traceback). The exception is still raised, but no reason for the whole traceback to be on error
207 271e40c change syntax of cloud-init-cfg to allow for specifying freq for module
208 b9d39a8 add ssh_import_id cloud-config module
209 7c9d41b add suport for setting debconf selections through debconf-set-selections
210 e5404c4 move version to 0.5.12
211 8078694 add copyright header to all of cloudinit/CloudConfig/cc_*
212 5dbdf0d remove some debug code
213 d28c263 (tag: 0.5.12) add cloud-config hooks for enabling byobu by default.
214 f3dfa62 fix bug with apt_update_upgrade config, missing import
215 08925d1 mention nobootwait in mount configuration
216 1dc7a0b on bad cloud-config syntax (failure to yaml.load) continue on
217 e3152a8 remove incorrect docstring in write-mime-multipart
218 f5b9a73 fix removal of '#cloud-boothook' inside a boothook
219 5b03431 fix invalid log string when reading from preseeded ec2 cache
220 422f554 resort to "starts with" to find mime type only on plain/text (LP: #600799)
221 d76fbab manage hostname setting better (LP: #596993)
222 93fc41e warn on failed 'mount -a'
223 d96186b fix bug where nfs/network mounts could not be specified (LP: #603329)
224 b5c3659 add 'nobootwait' to the default options for fstab entries
225 9d683e8 change default 'pass' entry to '2' rather than 0
226 e10e24c extend list of possible metadata names with 'ebs[0-9]'
227 9df86b0 fix bad/un-removed code in cd_mounts.py
228 ed3f86d use debug rather than error on cloud-init-run-module "already ran"
229 5c4e458 make cloud-config an upstart task
230 1dfeede add better comments to the part-handler example
231 944c1d1 invoke apt so dpkg non-interactively takes old conf files (LP: #607642)
232 0f9d5a7 (tag: 0.5.13) setup.py: move to 0.5.13
233 81d7b9f fix bad format error in cloud-init-run-module.py
234 449239e merged
235 6f2f34b cloud-init-cfg: log warning with traceback on failure of a config module
236 01ac0f1 cc_mounts: improve comment strings
237 a433574 DataSourceEc2.py: remap dev names when metadata service disagress with kernel
238 54346d3 initial dump of "sans-cloud" code (DataSourceNoCloud)
239 9f09192 mention disable_root setting in examples
240 2d23c3a mention important metadata fields in doc
241 1667516 util: add read_optional_seed function
242 6ffc964 use read_optional_seed, change 'parse_cmdline_data' to return boolean
243 29c52b1 setup.py: move to version 0.5.14
244 000580b DataSourceNoCloud: fix issue with seeded files
245 f0ec102 DataSourceNoCloud: record where seeds were read from
246 84d8c2a cc_disable_ec2_metadata.py: fix broken disable_ec2_metadata
247 c7dab87 update documentation for seed data
248 6ddbae5 doc/examples/cloud-config.txt: fix names in cloud_config_modules
249 1bb3d72 (tag: 0.5.14) fix setup.py to handle directories in doc
250 515b25b fix 'seedfrom' in DataSourceNoCloud (LP: #617400)
251 aa88711 uncloud-init: move marker file into /var/lib/cloud/sem
252 3842213 add support for '%s' in base of seed.
253 db5425f fix syntax error in util.py
254 f55324a add commented out entries for partner, backports, and multiverse
255 961b1a5 get '##' comment lines through to /etc/apt/sources.list (LP: #627439)
256 3cfdf65 append to apt_sources filenames rather than truncating.
257 da283d5 fix cc_puppet.py missing imports
258 e4b3cdd remove broken (syntax) try/catch in UserDataHandler.py
259 06b6b31 change default for ephemeral0 device to use 'nobootwait'
260 473f51c device_name_to_device: return the md's device string even if no device
261 45a73d8 fix bad format of log message.
262 b710264 cc_mounts.py: convert user input from int to string
263 35cf9fb improve warning message in DataSourceEc2
264 be147b8 set grub-pc values based on user input or automatically
265 3540d84 grub-dpkg cloud-config, move convert inline shell to python
266 1a29c3d (tag: 0.5.15) setup.py: move version to 0.5.15 prior to near release
267 0de2a67 If instance is in EC2 VPC, then do not use ec2 ubuntu archive (LP: #615545)
268 8644b57 move write-mime-multipart into cloud-utils package
269 1843c84 ssh-import-lp-id was renamed to ssh-import-id
270 1a35587 add support for specifying ssh-import-id on the kernel command line
271 e40a1c8 remove 'biultin' config, separate cloud.cfg
272 c11b93c support reading cloud_config from kernel command line
273 6b0a162 revert previous commit that special cased 'ssh_import_id' on cmdline
274 e3f3759 move setting of default locale out of cloud-init, into cloud-config
275 3f95319 remove 'get_locale' from DataSourceEc2.
276 d7accdd remove debug print statement
277 37b6389 make timestamps get recorded to /var/log/cloud-init.log when no syslog
278 0681e21 add handling of rsyslog in cloud-config
279 ad5dba4 remove write-mime-multipart from setup.py
280 8fbafbd move writing of ssh key fingerprints to a separate tool
281 bfbda79 make 'do not login as root' message more clear.
282 548f5b3 add 'cloud-init-query' tool, to query fields from cloud data
283 b85106a move user scripts ('#!' and runcmd) to be per-instance (LP: #675711)
284 7387667 support $MIRROR and $RELEASE in apt-source cloud-config lines (LP: #693292)
285 7a18786 pull in the rework of /var/lib/cloud.
286 5bc0d38 do not use 'str' as a variable name
287 c5bfd0c add cloud-config-archive input type.
288 2c3a585 add TODO and ChangeLog
289 fe3ece4 add caching of parsed configs to util.get_base_cfg
290 39f3129 support configuration of what is the default log file
291 ab88130 update changelog (/var/log rework)
292 2e2a4fe remove updates check, as its no longer really necessary (LP: #653220)
293 05230a3 TODO: add need to rewrite cloud-init-quer
294 a685809 add 'resize_rootfs' cloud-config option.
295 154722c cc_locale: fix copy paste code error if args are given
296 7e2e87f add function to cloud-init to run cloud-config style modules add 'hostname' cloud-config option for setting hostname make rsyslog and resizefs run at cloud-init time
297 be61755 fix cloud-run-user-script for directory change, make it invoke other scripts
298 f57d002 make the module list that cloud-config selects specified via cmdline
299 9ebce73 add CloudConfig.per-once definition
300 b9b0a79 merge in fixes to get to functioning point
301 0ef850f move cloud-run-user-script.conf to cloud-final, use cloud-cfg for invoking
302 2b94f44 add support for redirecting output of cloud-init, cloud-config and cloud-final minor change to timestamps to all use gmtime()
303 a501b88 add support for reading rightscale style userdata LP: #668400
304 fb2d477 add missing urllib import in util
305 608d00c fix bad variable name in readurl
306 0c8f22b (tag: 0.5.16pre1) add 'phone_home' to cloud-config
307 abaa3b9 make rightscale config default to once-per-instance, not once-ever
308 aa7b7c8 make final_message run 'per_always' rather than per-instance
309 8bdb49e initial import of ovf code
310 9fe2d93 remove redundant ProductSection in environment.xml
311 1fda22c add initial ovf data source class
312 0b87783 add a stubbed OVF Transport implementation for vmware-guestd
313 d55727c - change Properties expected in example environment file. - add ubuntu-server.ovf that passes validation via: xmllint --nonet --path open-ovf/mainline/schemas/ --noout --schema open-ovf/mainline/schemas/ovf-envelope.xsd doc/ovf/ubuntu-server.ovf and via ovftool --schemaValidate doc/ovf/ubuntu-server.ovf where ovftool is 'VMware ovftool 2.0.1 (build-260188)
314 7d89aae drop the suggested support of urlencoded 'userdata' Property
315 8edefff add get_config_obj to a DataSource object.
316 eeddaa5 fix typo in doc/ovf/environment.xml
317 59030fa add mostly untested but possibly functional DataSourceOVF code
318 6fca516 change version to 0.5.16
319 03cfadb add mention of OVF to changelog
320 f69109b add get_public_ssh_keys and get_hostname methods to DataSourceOVF.py
321 be11324 change 'except' syntax to python 3 style.
322 8001d7e remove needless import and defines in util.py
323 fcbdfd5 merge in work form ds-rework
324 a8f7776 add timezone to cloud-config (LP: #645458)
325 a23c234 cc_ssh: if a private key is supplied, do not require public.
326 d2ca9fd update the changelog with other items from development branch
327 c880c92 make the next target release 0.6.0, not 0.5.16
328 36bf96c improve language in cloud.cfg comment
329 e06ff3e remove debug statement
330 e07de49 if output entry is a scalar, send stdout and stderr same place
331 120a1a1 (tag: 0.6.0) make cloud-init's warning more obviously a warning (prepend WARN)
332 6ea51dc fix bug in fixing permission on default log file
333 fdc7a9c take correct action if def_log_file and syslog_fix_perms are empty
334 aa63184 improve comment strings in rsyslog config file tools/21-cloudinit.conf
335 ad6655c do not install cloud-init-query, it isn't really functional
336 d0da58f fix the filename of the processed userdata
337 8038c24 add previous-instance-id and previous-datasource files to cloud/data add 'datasource' file to instance dir
338 7d26b49 add support for setting passwords and managing PasswordAuthentication
339 0b0a684 allow 'ds=nocloud' to appear at end or beginning kernel cmdline
340 9e520d4 close file descriptors given to cPickle.load and cPickle.dump
341 85444c6 replace DataSource's self.log
342 15f9ebe make write_to_cache raise errors if it fails rather than surpressing
343 ac273a2 Fixes issue puppet configuration option values in quotes.
344 a3f0bf2 fix the path for user scripts.
345 167da21 remove double slash returned by get_ipath_cur
346 c436e12 update TODO
347 3781fa2 change default of resize_rootfs to True
348 02de945 update changelog
349 a91f183 First try to read from cdrom device before mounting
350 0fe565c update changelog
351 bafe47b resizefs didn't work, as 'blkid' would return error status 2
352 38b21ce fix logging in DataSource modules
353 7077e14 add a debian.trunk dir and tools/bddeb to easily build a deb from here
354 8ba08be add config option 'manual_cache_clean'.
355 c0e2f8d add utility function get_cfg_by_path
356 0bb0a6a add sys_cfg option to DataSource:__init__ , populate ds_cfg from it
357 5317390 call DataSource classes with sys_cfg argument
358 48564dc make DataSourceEc2 configurable (timeout, retries), lower default retries
359 af2eb02 update TODO, ChangeLog
360 6e5094d rename 'datadir' key to 'data' in pathmap
361 e2045d8 add 'run_per_instance' to CloudConfig
362 00ac0cf add apt helper routeins to CloudConfig, and use them in apt and puppet
363 e285b16 add 'bootcmd' like 'runcmd' to cloud-config syntax for running things early
364 6fe51bb change from yaml+'#include' to yaml + config.d format for cloud.cfg
365 a7a908e update /etc/hosts hosts.tmpl to if 'manage_etc_hosts' is set in cloud-config
366 260ef34 change 0.6.0 -> 0.6.1
367 b364099 improve startup if no eth0 is available (LP: #714807)
368 6a5af45 Update puppet to replace rather than append, add mcollective [Marc Cluet]
369 98b7f2e update changelog for Marc's contributions
370 3c22860 cloud-init-nonet.conf: redirect grep to /dev/null, so it doesn't go to console on missing file
371 78aad09 fix syntax erorr in cc_puppet.py
372 96a656d fix bug if ovf had empty seedfrom
373 cf616d3 fix the base64 encoded value for user-data.
374 3e8114e add carriage return to cc_final_message.py output
375 bd6994b in nonet wait, print how long wait will be.
376 8ff88d5 handle no datasource better cloud-init-cfg
377 01b30d2 minor updates to ovf documentation
378 7a268fc (tag: 0.6.1) add examples of kernel command line cloud-config
379 44cd0ff merge mcollective fixes from Marc. Changes to indentation and added comments
380 26c031c fix bug preventing early exit of cloud-init on 'no-net' path
381 616b0b2 in subp, put output and stderr into the raised error
382 a23be74 cc_resizefs.py: log output of failed resizefs or blkid commands
383 f885aaf make update of sources not prevent installation attempt (LP: #728167)
384 cf0c6b0 add 'timezone' cloud-config module to cloud.cfg
385 1e02db2 add mcollective to cloud.cfg
386 a3d13c4 fix issue where apt-update was not done unless explicitly set
387 de41d1f mention sources.list.tmpl in sources.list.tmpl so user knows what to change
388 46631c6 fix bug in part-handler code, that broke working part-handlers (LP: #739694)
389 b2c3eff fix bug with resizefs module
390 f613aba update version strings 0.6.1 to 0.6.2
391 a2b7907 remove debug printout in cloudinit/UserDataHandler.py
392 ca98e0b cloudinit/CloudConfig/cc_timezone.py: remove debug print out
393 4579418 documentation update: fix paths for seed dir in examples/seed/README
394 3715617 convert some user input from dos to unix (LP: #744965)
395 80301e1 fix bug seeding grub dpkg config when devices are named xvdX (LP: #752361)
396 5864b79 support configurable urls for metadata service
397 309c3eb Support disabling of byobu.
398 00b1528 run cc_ssh as a cloud-init module so it is guaranteed to run before ssh starts (LP: #781101)
399 2cec6a2 fix broken ec2 metadata service (incorrect variable name)
400 94a1a2f change, and make configurable the prefix for entries in root authorized_keys
401 a8cd782 mention previous commit in ChangeLog
402 0380462 make the "cloud-config ready" command configurable (LP: #785551)
403 971b587 make the default "fill in" mount entries configurable. (LP: #785542)
404 7017bf0 read authorized_keys location from sshd_config (LP: #731849)
405 9a79219 fix cloud-init in ubuntu lxc containers (LP: #800824) [Clint Byrum]
406 ff3a564 [Marc Cluet] sanitize hosts file for system hostname (LP: #802637)
407 e7899aa add chef [Avishai Ish-Shalom]
408 20a0cf9 do not complain if attempt to resizefs in an lxc container fails
409 6d25c04 improve the updating of /etc/hosts with correct fqdn when possible
410 be623b7 increase timeout on read_seed when a seedfrom was explicitly given
411 936132c special case handling of mapping for ephemeral0
412 ae7b3a4 update changelog
413 53f1977 fix syntax error in cc_chef.py
414 36d464d add chef module to cloud.cfg so it runs as cloud-config
415 a3dcbac add bug number for chef bug to Changelog
416 10edc78 add support for 'include-once' and public and private keys to mcollective
417 fb0150d avoid a race condition if there were multiple networking devices LP: #810044
418 9d4a9dc This fixes LP: #819507, to make consume_userdata run 'always'
419 ac88bd8 add example part-handler implementing the version 2 part-handler
420 96edbdc improve update_etc_hosts method in cc_update_etc_hosts
421 eec6618 add get_hostname_fqdn method to 'util' and use it for getting hostname
422 e7ca2cf cloudinit/util.py: fix syntax error
423 0b0a561 remove debug statement
424 f1489a4 fix incorrect logic when 'manage_etc_hosts' has a value
425 4b8d710 update ChangeLog
426 4aceeea minor fixes to doc
427 91cf9a3 add awareness of ecdsa keys.
428 3e417ab merge from Adam, fixes LP: #831505
429 0b2656d fix for syntax error around ecdsa changes
430 a3373fb util.subp: do not attach stdin cloud-init's stdin to subprocesses (LP: 831505)
431 5e0edd8 Add some network debug info printed to the console
432 c7123a7 improve updating of .ssh/authorized_keys
433 ca72374 cloudinit/DataSource.py: for default instance id, use 'iid-datasource'
434 a5ea0c5 cloud-init-nonet.conf: wait for all network interfaces to be up
435 c90df6b remove a default 'local-hostname' value from DataSourceNoCloud
436 8a42512 improve DataSource's get_hostname function
437 3197810 warn on failure of the hostname command when setting hostname
438 db2db4a DataSourceOVF do not provide a default static hostname
439 fa58566 DataSourceOVF: change the default instance id from nocloud to iid-dsovf
440 eba3c61 upstart/cloud-init-nonet.conf: update comment/description
441 bd42e16 cloud-init-nonet.conf: just allow for the possibility that /var/run != /run
442 abd8188 Fix cc_chef issues (LP: #845161)
443 83ca15c Fix minor issue with multiple runlist items not written in the correct format.
444 a50943c accept that public-keys keys in the metadata service might be a string
445 d888231 return a list, not a string
446 cee5b23 Chef support fixes, and support for environment and initial attr (LP: #845208)
447 5c520f4 [doc] add 'preseed' string to cloud-config for debconf-set-selections
448 a826e7b try a little harder to get a fqdn rather than defaulting to localdomain
449 93f4198 cloud-init-nonet.conf: redirect 'start networking' output to /dev/null
450 9644491 add LICENSE file
451 03d5e6a cloudinit/DataSource.py: fix bad usage of get_fqdn_from_hosts
452 de77931 add retrying to read_seeded. have it use read_url.
453 0c52ea4 make read_seeded return OSError for a file not found
454 70bf826 remove local copy of boto.utils
455 3402607 wrap-and-sort
456 78e7bce mention dependency on python-boto
457 f911966 DataSourceOVF: specify timeout=None in read_seeded call
458 bad89c1 increase cloud-init-nonet timeout to 130 seconds from 70 LP: #861866
459 3468479 DataSourceEc2: catch a socket timeout in wait-for-md-service code
460 215b68d fix updates.tar function in uncloud-init LP: #871297
461 869f6d5 Improve OVF documentation and provide functional demo.
462 6fc4766 do not run run-parts if directory has no items
463 c6b33ab Replace static dict mapping version to packages with a method (LP: #848932)
464 2a84a26 (tag: 0.6.2) make-dist-tarball: make output not be debian-like
465 6d9f6df Add sample/example systemd config files
466 25824d2 Restore created files' selinux contexts
467 f616a9a Make locale file location configurable
468 9033696 Write timezone data to /etc/sysconfig/clock
469 ed672bb Make enabling puppet service work on Fedora
470 ea569ed add a warning if there is no known way to enable puppet service.
471 a2aa480 Make the types of SSH keys to generate configurable
472 7fc73a8 make ssh host key deletion configurable
473 6045bcc make ssh service name configurable
474 f7152b4 add documentation of new config options
475 1cfa72f Mention in Changelog integration of Fedora packages (LP: #883286)
476 2ba7c95 fix bug in netinfo.debug_info if no network devices available
477 8536494 use hashlib rather than md5 module to avoid deprecation warning.
478 0c49b06 fix doc for ec2 datasource
479 9909bfd do not convert 'None' to a string in cloud-config mounts input.
480 01e5b4f doc/ovf/README: documentation fix [David Medberry] LP: #900537
481 0c6228a move logic of "is this an ipv4 address" to a function is_ipv4
482 88837d5 bddeb: improve 'bddeb' to read version and add bzr revno
483 a2970b0 setup.py: move version to 0.6.3
484 11f4051 DataSource: fix is_ipv4 usage
485 1f292d2 tools/bddeb: add a symlink to created deb
486 5c84e59 add support for reading configuration of mirror and proxy
487 6b799f1 cloudinit/DataSourceEc2: use util.is_resolvable_url
488 fba08a5 make DataSourceEc2 more resilliant to slow metadata service (LP: #894279)
489 02c2e02 update changelog for DataSourceEc2 changes
490 4ee4212 make stdin read from /dev/null for all cloud-init programs (LP: #903993)
491 bf26b04 revert default handling of /etc/hosts to 0.6.1 style (Ubuntu 11.04)
492 7411271 fix missing import for use of close_stdin
493 13015ef output public ssh host keys to console on boot (LP: #893400)
494 b17a271 add INSTANCE_ID to env of bootcmd, add cloud-init-per
495 7b6da69 debian.trunk/ transition to dh_python2 from pycentral
496 354854c support configuration of landscape-client via cloud-config (LP: #857366)
497 7292e8a fix issue with part-handlers and base64 encoding (LP: #874342)
498 43b9a01 run resizefs module on every boot
499 4026713 fix invalid variable name in cloudinit/CloudConfig/cc_resizefs.py
500 ad3a229 fix selection of ec2 mirrors when inside ec2.
501 9828565 add unit test framework (LP: #890851)
502 1d00c09 fix pylint warnings (LP: #914739) [Juerg Haefliger] LP: #914739
503 2f7227c fix pylint warnings (LP: #914739) [Juerg Haefliger]
504 15e3241 [PATCH] PEP8 coding style fixes. From: Juerg Haefliger <juerg.haefliger@hp.com>
505 d4c5cfd remove some pylint line disablings
506 1e746f0 miscellaneous cleanups, and add tools/run-pylint
507 530d8f9 add support for add/remove CA Certificates via cloud-config (LP: #915232)
508 2465470 Add HP to Copyright, and Juerg Haefliger Authors.
509 3e323d8 in netinfo output (ci-info:), fill in empty fields with a "."
510 a204d0e comment fix to cloud-config-chef.txt [Lorin Hochstein]
511 81ca0bc netinfo.py: minor pylint complaint on unused 'devname'
512 fb2fb2f support empty lines in '#include' files (LP: #923043)
513 53bef29 Support salt minions via cloud-config [Jeff Bauer] (LP: #927795)
514 fcefeb4 fix update-etc-hosts, 'manage_etc_hosts' is not a boolean, but a string
515 4213f7c DataSourceOVF: only search for OVF data on ISO9660 filesystems
516 00c36df incorrect name for salt minion cloud_config
517 3027a0d DataSourceConfigDrive: support getting data from openstack config drive
518 9f17151 DataSourceNoCloud: allow reading user-data and meta-data from simple files
519 45becc7 update changelog
520 fb43a1c fix pylint warnings
521 45bff1e DataSourceConfigDrive: change 'interfaces' to 'network-interfaces'
522 979bee2 DataSourceConfigDrive: update interfaces (and ifup) only on local
523 02aea23 support reading network interface config from DataSourceNoCloud
524 9c37781 cloud-init.py: exit success if no data sources found
525 1e0e6c6 add doc for configdrive
526 316f9ee more documentation on configdrive
527 3b3386d ConfigDrive: better support public-keys in meta flags
528 b3522f1 Catch exceptions from part-handlers and log the error before continuing.
529 dd628f0 address change in name of lxc-is-container to running-in-container
530 f7eba5c DataSourceNoCloud: fix local cloud sources other than from devices
531 a805702 fix docstring for is_container
532 1676825 return public-keys as a list if it is a list
533 54b593a use builtin runparts rather than system run-parts utility
534 db695dc Add DataSourceMaaS, a Data Source for Ubuntu Machine as a Service LP: #942061
535 e40c7c0 DataSourceMaaS: some fixes found in testing
536 1e588f0 add option apt_pipelining to cloud-config to address s3 mirrors (LP: #948461)
537 bff1590 fix spelling error in apt pipeline filename
538 0d4fedc If the user has chosen to remove default ca-certs, prevent package upgrade of ca-certificates from adding new trusted certs.
539 462b3de fix copyright and author on cloudinit/DataSourceMaaS.py
540 6b8df95 import CloudStack data source [Cosmin Luta]
541 1826920 fix pylint/pep8 issues in DataSourceCloudStack
542 430f0fc wrap Changelog to < 80 chars
543 eefca80 Warn in user-data processing on non-multipart, non-handled data
544 9f1077a add python-oauth to dependencies [Cosmin Luță] LP: #953915
545 aa9b2a8 fix pylint warnings in test_userdata
546 3522b7b rename DataSourceMaaS to DataSourceMAAS, generally use MAAS everywhere
547 6d8f796 add supprot for reading public-keys from DataSourcMAAS
548 aa6726e DataSource: if public-keys is a string, split it on newline
549 6e1547d cc_resizefs: run resizefs in the background during boot.
550 a088694 allow cloud-config to control if resizefs is blocking or not
551 ebb0642 fix bad variable if blocking cc_resizefs
552 d168dc6 cc_chef: fix bug when validation_key was present, but validation_cert was not
553 b39abf5 Provide informative message when user logs in with unsupported locale
554 c2a4447 Allow a url to cloud-config data to be specified on kernel config line
555 6d9d10a fix chef documentation (LP: #960564)
556 d911554 pep8: fix white space
557 4d9722b (tag: 0.6.3) cc_landscape.py: if /etc/landscape does not exist, then create it
558 663989d support relative path in AuthorizedKeysFile
559 a0d7802 remove usage of subprocess.check_output
560 e99cf80 Use --quiet when running apt-get
561 142fad2 cc_salt_minion: install package salt-minion rather than salt
562 74f09aa use yaml.safe_load rather than yaml.load
563 646384c remove warning message to console on empty user-data
564 b2a21ed Merge rework branch in [Joshua Harlow]
565 f1b72be fix tools/run-pylint to just check all python fines
566 972c4e0 DataSourceEc2: only do dns check in mirror selection
567 285e127 fix 'make pylint' warnings
568 492dc74 Update chownbyname to catch the key error when users/groups that are not known are provided and rethrow it as a OSError (which seems reasonable) and adjust its usage in the log file touching/permission modification stage to catch this error and log it.
569 7cd3e34 rework packaging tools to find the right cloud-init topdir
570 cf1fa72 get 'brpm' working again. update make-tarball to have a top level dir.
571 a7e13e1 include ~bzr in make-tarball output tarball and top level dir
572 0ed44de Get the debian package building working again.
573 9d47fb9 brpm: Add printouts which match the 'bddeb' package builder.
574 18dc2a9 add python-setuptools to debian build-depends
575 b869b76 Makefile: change deb and rpm targets to not change working dir
576 50b9e8b Adjust the sysvinit local script to provide 'cloud-init-local' and have the cloud-config script depend on that as well.
577 75af023 Revert back to using cheetah + adjust resultant code + templates
578 b807b8b add header/explanation to templates/chef_client.rb.tmpl
579 1febd1a update Changelog
580 114b869 url_helper.py, cc_rightscale_userdata.py: reduce WARN to DEBUG
581 39e038a cc_final_message: fix pylint issue
582 48ec119 fix bddeb and brpm: by renaming packaging files that are templates
583 ac84c96 cloud-init: do not warn on failure to find local datasource
584 4b8d66b do not warn to stderr if one of the logging configs works.
585 a837272 Add more information about why we are returning early and why we don't convert a string that is a filename to a string buffer/io like object.
586 c07c5f6 debian/control.in: accept software-properties-common (LP: #1021418)
587 ac867b4 Add a comment/todo for the future, that instead of having distro specific modules in cloudinit, that maybe we should encourage a 'config' website or something similar, and let people host common modules they find useful there, and keep the ones built-in to cloud-init completly distribution agnostic.
588 e43d91b Return a more useful name for the file lock
589 fa644f5 util.close_stdin(): Use the common 'is_false' routine for testing false
590 040b1c2 cc_resizefs: show more specific time.
591 ee7deec debian packaging: use X.Y.Z~bzrREVNO rather than X.Y.Z~REVNO
592 fa09651 fix regression in logging code
593 e119877 send welcome message after logging has been applied
594 02fe9d1 re-setup logging to address cloud-config changes input via user-data
595 86f0d70 Remove the usage of set,list,dict and use the collections iterable which performs the same, but can handle iterator types beyond those three.
596 c2443ed Change the welcome message to be slightly different when running in local mode vs non-local mode, which is useful when tracking what is happening in the console and in the logs that are written out later.
597 3ad8859 Tweaks to sysvinit so that cloud-init-local will run before cloud-init, but there will not be a strong dependency between them if cloud-init-local is missing.
598 e90670e add write-files module for "injecting" files (LP: #1012854)
599 29303d3 do not capture runparts output
600 f12b490 DataSourceOVF: do not log exception on failed mount
601 a2ba359 fix bad variable. should be 'LOG', not 'log'
602 5e29681 DataSourceOVF: again fix broken commit
603 265f2c7 load_yaml: if conversion fails, but string is empty, return default
604 dd183f1 walker_callback: fix traceback on empty payload.
605 a6893e0 packages/bddeb: fix pep8 warnings. no other changes.
606 8069296 packages/bddeb: support building source package
607 1bac4c2 DataSourceEc2: fix bad usage of log that caused trace
608 a37d2ee improve debug via _CLOUD_INIT_SAVE_STDIN and _CLOUD_INIT_SAVE_STDOUT
609 cd80da7 add an upstart init job that logs shutdowns and reboots.
610 a7dd398 emit the cloud-config event again
611 659bb07 mention that upstart job cloud-config emits cloud-config
612 903b086 do not search for mirror named '<distro>-mirror' in dns by default
613 dd6b8d3 add uptime to the output of cloud-log-shutdown
614 a7ab005 use get_cfg_option_bool for apt_mirror_search_dns
615 8991867 re-add the 'main' routine to DataSourceMAAS.py
616 1bb67be add protection against dns-redirection to is_resolvable
617 0243c5d fix pylint in all files used by ./tools/run-pylint
618 cfd72f2 move cloud-config event to a config module
619 9dabd3e Add RHEVm and vSphere support as datasource AltCloud
620 4540821 doc: move datasource documentation to doc/sources
621 c54ba02 add ssh-authkey-fingerprint config module, to print fingerprints to console
622 74d688e mark bug 1010582 as fixed.
623 a2ebfe8 fix config for proper spelling of 'authkey'
624 9892520 Add the "None" datasource
625 abf3d80 authkey_fingerprints: Fix columns headers, do not print empty lines
626 e65604c remove duplicate printing of authorized keys to the console
627 e60058c remove committed conflicts in previous merge
628 49242c2 fix pylint in cc_ssh_authkey_fingerprints.py
629 451e487 fix pep8 complaints.
630 43c55ac rework package mirror selection
631 7b71527 add apt_reboot_if_required to reboot if required
632 56979d2 Fix the userdata population in DataSourceNone
633 55f6e4c add support for creating initial users and groups
634 e345c95 add support for the config-drive-v2 datasource
635 b81d5ed DataSourceEc2: require 'instance-data' as top level domain
636 e0179ea fix bug preventing public_keys from being imported for to-be-created users
637 64b14ee move user-groups section from cloud-config.txt to its own file.
638 88908ac distros/ubuntu.py: remove unused import (pylint)
639 09cec08 fix busted cc_ssh_import_id
640 53f276c update systemd unit files
641 c6e4c64 usergroup related fixes
642 27118e7 support launch index specific user-data
643 47a6432 remove 'admin' group for ubuntu user, fix change password
644 3a35daa improvements for launch index, one fix for cloud-archive
645 1d239f9 add 'RUN=1' to /etc/default/landscape-client
646 75bec16 do not convert type None to string in cfgmnt.
647 31a1450 remove 'start networking' from cloud-init-nonet
648 ccea891 fix hostname based on IP generation.
649 bc103ae only write landscape config if user-data provided
650 c558334 Fill in basic info for the Fedora distro
651 62450b5 fix incorrect ubuntu mirror locations for 'ports'
652 9c0cffe Add support for 'selinux_user' key to useradd cloud-config syntax
653 91f1fc5 write trailing newlines on generated files
654 b2be60e do not write a comment in /etc/hostname.
655 b15088c Add the translation from the ubuntu format for nameservers and dns search
656 a2508f6 fix 'update_package_sources' on rhel to only update package sources
657 89f54bb add general signal handlers
658 3912209 doc: document 'tags' as comma delimited strings
659 94b9647 if a logged message fails, fallback to logging to stdout
660 6c8b9db fix permissions on /etc/sudoers.d file to be 0440 not 0644
661 0a4f91c send stderr from write-ssh-key-fingerprints to stdout
662 54e1141 do not create 'sems' directory. 'sem' is proper instance/ path
663 ad22d40 write-ssh-key-fingerprints: do not send HOST KEYS through logger
664 cde52cc fix make pep8
665 e3b2965 fix pylint
666 70cc753 DataSourceMAAS: if a oauth request fails due to 403 try updating local time
667 314530b handle ifup on RH distros by iterating over 'ifup devname'
668 67e7d9c cleanups for rhel network config
669 317f442 add tests for netcfg code
670 ec91056 cleanup the user/group lists
671 dfa62e7 restart salt-minion instead of start.
672 92cbc3a rpm spec and rpm build, better handle case with no package_mirrors
673 a7a9de1 add 'safeyaml' to cloudinit
674 f1e3ae3 fix pep8 and pylint
675 d285a04 make DataSourceMAAS 'main()' use load_yaml
676 a28d7fe [pylint]: remove unused import
677 4979722 rework the rest of the users of old single 'user' to support lists
678 f8b23b3 fix oauth time skew. actual implementation was returning 401 not 403.
679 df00a64 (tag: 0.7.0) fix tools/make-dist-tarball
680 223e101 config-drive: map hostname to local-hostname
681 b2ba61b sysvinit: fix cloud-init job for RHEL 5.6
682 4c7de62 update ChangeLog for previous 2 commits.
683 f73abb1 bump version to 0.7.1
684 cb30e7e Merged brpm changelog fixes
685 8ff6ba4 Bring in the config drive fixes so that it adjusts the fstab correctly and adds tests in that verify the actions that should happen (also tested on a real system).
686 4a3eab9 Merge rpm subrelease branch.
687 bdaa57b cc_landscape: do nothing if config not give. install landscape-client.
688 605c107 move default user info out of code and into config
689 923f5c7 fix pep8/pylint
690 182bf60 tweak default ubuntu user
691 d6ecf35 Make sure that /etc/sudoers.d is used by /etc/sudoers
692 0421d50 restart landscape after config or install
693 43d46a3 multipart or cloud-config-archive, do not fail on unknown headers
694 2953d9d No need for the get default users groups function when its provided by the get user function.
695 cb5893c Add helpers for wrapping file operations
696 71b4108 use only util methods for reading/loading/appending/peeking
697 c508fa0 tools/Z99-cloud-locale-test.sh: avoid warning when shell is zsh
698 ce5a554 support unicode in user-data input of unknown types
699 e6d4b76 Add a more generic package install mechansim
700 21a3cf3 test and path cleanups.
701 1e6fc27 remove dead code from DataSourceEc2
702 6240367 improve zsh support in tools/Z99-cloud-locale-test.sh
703 2199cf2 Merge fix for distro config not being reflected when running in the init stage after user-data has been loaded.
704 a0f5926 Fix the fqdn/hostname case for rhel and ubuntu where rhel uses the fqdn for its config while ubuntu uses the short hostname.
705 8c00668 Fix pep8 warnings.
706 0bd9737 Merge the yaml/cloud config examples checking tool.
707 2c79c14 Fix the merging of group configuration.
708 a17a69c Sudoers.d creation cleanups + tests.
709 efa2dfa update ChangeLog LP: #1076811
710 cec1547 Add 'migrator' for handling config name changes and consistency
711 d7a4277 1 pep8 and 1 pylint fix
712 6a3bd56 add yum_add_repo configuration module
713 3248ac9 whitespace / indentation cleanups
714 71ba367 config-drive-v2: populate metadata['public-keys'] from 'public_keys'
715 7446280 wrap boto.utils.get_instance_metadata to ensure non-lazy loading
716 2fabf39 REVERT revno 714: config-drive-v2: populate metadata['public-keys'] from 'public_keys'
717 8730e14 pep8 and pylint fixups
718 7ba7537 config-drive-v2: support public keys
719 5a084e6 mark changelog entry for lp:1075980
720 fe68049 stages.py: fix issue that resulted in broken data source searching
721 4944bc2 test_handler_yum_add_repo: fix broken test
722 90af128 change the "null datasource" for stages.py to None
723 afd5df4 Update changelog for previous commits.
724 9c64c5d pylint and pep8 fixes
725 8d5e1e1 Remove dup and un-needed entries.
726 c26b067 Use a set of helper/parsing classes to perform system configuration
727 8cd2b2a fix bad dependency added during the boto fix
728 7ea93af 'name' for default user must be all lower case.
729 b503a68 Even when using boto < 2.6 force the unlazying to occur
730 f6e9946 support 'power_state' cloud-config for specifying shutdown
731 bf3c3bb make migrator walk the "cloud" path also
732 e016e7c check for a marker file by the normal name also
733 8ae9c57 Only attempt to read the previous hostname file if it exists.
734 37a4eb0 (tag: 0.7.1) Create a utility testcase class that fixes some of the 2.6 missing pieces
735 c94c94b set shell for default ubuntu user to /bin/bash
736 5ce32eb open 0.7.2
737 f97befb add debian watch
738 e0b30aa Bump the version to 0.7.2
739 024cd9f Add a check on the changelog version comparing to the code version.
740 2808d70 Strings are iterable...
741 7a7cf33 add 'sudo' entry for default user in default config/cloud.cfg
742 3cb9a6e pep8 and pylint
743 d324a2c fix "resize_root: noblock"
744 974e76e make sure no blank lines before cloud-init entry in ca-certificates.conf
745 1e7b967 ChangeLog: mention fix of lp:1079002
746 375995c write-ssh-key-fingerprints: use logger -s rather than --stderr
747 5c50413 cloudinit/stages.py: separate _read_base_cfg() into static function
748 2235c05 Provide a mechanism for puppet to be conditionally installed.
749 3b37e40 Add 'omnibus' install mode for chef
750 c196afc ensure a datasource's 'distro' and sys_cfg are updated
751 5021c3f tell upstart to reload configuration after writing an upstart job
752 6f96b92 cloudinit/handlers/upstart_job.py: pep8 / trailing whitespace
753 8abbeae DataSourceCloudStack: use virtual router rather than default route
754 3569e71 add ChangeLog entry for previous commit
755 de7442b fix redaction of password field in log (LP: #1096417)
756 573d2b6 fix 'lock_password' for cloud-config user setup
757 4fde399 DataSourceCloudStack: fallback to default route if no virtual router found
758 bf7bdf2 Allow 'sr0' to be specified as a device for mounts
759 0c38be4 tests: Add a context manager function in test helpers.
760 e561742 DataSourceConfigDrive: consider CD rom as valid config-drive source.
761 079a670 Add support for operating system families
762 6f0756e Add in a tool to help make mime multipart messages.
763 6fb6fe2 Add docs which can be used on readthedocs.org
764 352316f Merge the old user style with the distro provided config.
765 465994f Make the logo better.
766 eedc6fb Fix the release variable.
767 e9d7cae Remove the release for now.
768 7694195 Add a HACKING file (in rst format).
769 d9fe11c Adding a resolv.conf configuration module (LP: #1100434)
770 3ed65a8 Integreate HACKING into the rtd site.
771 cabd965 Don't forget the hacking 'inclusion' file.
772 7656c36 add entries to ChangeLog
773 b602d13 config/cc_resolv_conf: run PER_INSTANCE rather than PER_ONCE
774 62f0f17 Include the resolv.conf example.
775 7537cec Fix broken cc_update_etc_hosts
776 9df0a78 Adding package versioning logic to package installation.
777 50222a4 doc: fix example in cloud-config-write-files.txt
778 c26f0e0 Changelog: reformat to limit to 80 chars wide
779 1bb7207 upstart/cloud-init-container.conf: ensure /run/network exists
780 b768972 Add initial docs about datasources.
781 174bc39 DataSourceNoCloud: allow setting user-data and meta-data in config
782 d4886b6 Few patches to make life on Debian 6 stable happier:
783 6a72a86 do not reload upstart configuration on upstart jobs
784 ddda1ca Support resizing btrfs filesystems.
785 e71071a skip unit test due to LP: #1124384
786 ac83536 fix regression on expected label of filesystem for DataSourceNone
787 7ec5f0f fix an issue where keys were not being parsed correctly
788 2a64b4e upstart/cloud-init-nonet.conf: handle SIGTERM gracefully
789 b4fa42f fix ChangeLog entries incorrectly added as 0.6.0
790 90ed3de add 'growpart' config module.
791 dca9b6c pep8 and pylint fixes
792 6586b35 allow customization of apt-get command, add --force-unsafe-io
793 be8953b fix a pylint complaint in test_handler_growpart
794 8013c28 pep8
795 973747b support different and user-suppliable merging algorithms for cloud-config
796 73cba9d Enable the merging.txt to be in .rst format for public viewing
797 cad3125 skip unit test due to LP: #1124384
798 fd938d2 refactor get_mount_info and add tests
799 ae0f94c fix / workaround potential for socket.getaddrinfo to raise socket.error
800 f8318f8 pylint fixes
801 4119044 use 'requests' rather than urllib2.
802 a2113a7 fix brpm and bddeb by knowing about 'python-requests'
803 be0041e cloud-init-nonet.conf: handle case where sleep died
804 19b11d7 handle errors in cc_reizefs better
805 7dac7bb Fix the default string used for merging.
806 3ed5f78 invoke dist-upgrade instead of upgrade for apt upgrades
807 0d3c21c add merge debug tool
808 1c2adfa tools: fix [some] shell quoting problems
809 b9c6f19 improvments to systemd/fedora 18 support
810 66ea1ae add debug output to ccfg-merge-debug
811 8e97ca8 Handle namespacing issues in merger.
812 4697c1a Fix issue in readurl with requests, support passing through headers_cb
813 638cc13 Fixed merging capabilities.
814 0716acc Fix how python 2.6 was broken due to new dict syntax.
815 1b58359 Fix how the 'dist' is incorrectly returned when patching the os functions.
816 59100eb (tag: 0.7.2) mention new merge format in ChageLog
817 812b111 remove executable on logo.svg
818 4231e5d open 0.7.3
819 e98380c Fix chef omnibus installation support.
820 233761a DataSourceOVF: small fix for iso9660 transport
821 812f82e ConfigDrive, Nocloud: Apply the "poke /dev/sr0" approach to /dev/sr1 also
822 8529683 fix and tidy up logexc usage
823 4afa528 fix test_nocloud testcase
824 6cb13e5 handlers/upstart_job.py: invoke reload-configuration if we can.
825 1c76b49 re-enable test case because 1124384 is fixed
826 cbfc6f6 add Azure datasource
827 078f0fc upstart_job.py: fix pylint and bad bad variable in _has_suitable_upstart
828 299af1d test_builtin_handlers.py: fix pylint
829 8c15320 DataSourceAzure.py: allow 'customdata' to be the name for userdata
830 7b9b49e DataSourceAzure: fix inverted logic on DisablesshPasswordAuthentication
831 8f70bb7 Azure: make /var/lib/waagent with 0700 perms
832 1edfb2a adds support for SLES plus some basic unittests.
833 1072010 Fix password setting for rhel5.
834 365cb4f bump version in cloudinit/version.py
835 d66973b allow individual MIME segments to be gzip compressed
836 a8d2b2f finalize handlers even when another handler fails.
837 838d6c7 use constants for startswith in handlers. add strip_prefix_suffix.
838 ccbdf8c alias 'availability_zone' to availability-zone in metadata service.
839 a4310ee on azure datasource, grab use Deployment as the instance-id
840 a5a5e81 add SmartOS datasource supporting Joyent cloud
841 0891f66 DataSourceSmartOS: fix issue if dmidecode is not present
842 2939f49 Add support for merging via jsonp patch format.
843 851906b Fix small prefix bug + jsonp tests.
844 724ff70 add test case for mime gzipped message segments
845 ca24df7 tests: fix pep8 issue
846 8f3bfd9 update dependencies for jsonpatch
847 3d10b8d azure: support bouncing interfaces to publish new hostname
848 4d9668d minor azure cleanup
849 f8114e5 add debian init scripts
850 9da084b azure: fix bouncing of interface
851 e9f1190 DataSourceAzure: do not capture output of bounce command
852 5db4e4c add dependency on 'serial' used by SmartOS datasource
853 88b2a8e add 'pyserial' to bddeb and bdrpm
854 2191916 add util.log_time helper
855 2703415 reduce finding time zone file to top level distro
856 2e4d57b fix pep8 and pylint warnings
857 dbb2dc5 add options for apt_ftp_proxy, apt_https_proxy and apt_config
858 c09cb99 cc_growpart: prefer growpart over parted 'resizepart'
859 e23861e pylint fix
860 b2ee096 fix setting of password for a user on azure.
861 7af11ba fix bad arguments to subp inside of apply_hostname_bounce
862 1d27cd7 support base64 encoded data in the smart os datasource.
863 0843952 tools/read-dependencies, read-version: cleanups, and use sed not grep
864 50e9019 log_time: Ensure that udelta is valid before including it as a float.
865 0f84bfe Use the same method for registering custom or default handlers.
866 2a07fcd Add support for reading 'random_seed' from data source.
867 d210dab Add OpenNebula datasource.
868 6b12298 better checking and portability in read-dependencies and read-version
869 479b0e3 fix read-version
870 266d12c upstart/cloud-init-nonet.conf: fix indentation
871 35469c1 add support for partitioning and creating filesystems
872 3bebad6 Fix usage of libselinux-python when selinux is disabled.
873 9e5fd84 multi_log: only write to /dev/console if it exists.
874 c674737 add 'n' to no key fingerprint warning
875 6437d67 bddeb: depend on cloud-utils or cloud-guest-utils
876 d8ad6d5 update ChangeLog
877 4063358 fix spelling in ChangeLog
878 cafa32e Enable filesystem creation on Azure, many disk_setup cleanups
879 0232653 pep8 fix
880 adbc9e7 add default user to 'sudo' group.
881 ed8cb66 examples/cloud-config-user-groups.txt doc fix, fix pep8
882 26d2c9a cc_growpart: respect /etc/growroot-disabled
883 54da96b fix failure to create disks on azure, create new 'dev.part' notation
884 12f2fbf DataSourceSmartOS: remove unnecessary availability_zone attribute
885 4a5d0f5 (tag: 0.7.3) trim trailing whitespace on smartos hostname when it came from dmidecode.
886 5ae7773 open 0.7.4
887 16a2bff fix bug mounting first partition of a alias'd name.
888 85d4fff fix DataSourceAzure incompatibility with 2.6
889 b27fab8 fix power_state_change config module so that example works, improve doc
890 f7d51c7 support calling add-apt-repository on cloud-archive: entries
891 29e3415 Change SmartOS verb for availability zone
892 aafb9b5 Documentation: fix name of 'cloud-init-per' command
893 18eba15 fix issue with get_mount_info on older kernels
894 8582f39 pep8 fix
895 2e8b274 (tag: 0.7.4) fix 'make rpm' by removing 0.6.4 entry from ChangeLog (LP: #1241834)
896 ee9fbaf open 0.7.5
897 84df36d Add a log message around import failures.
898 fb759ab add 'debug' module for printing debug output.
899 9a922bf fix 'make yaml'.
900 4f57b69 packages/bddeb: accept python-json-patch or python-jsonpatch
901 6af4aef packages/debian/control.in: remove 'python:Depends'
902 923a7d0 support calling apt with eatmydata, enable by default if available.
903 3a4bf79 SeLinuxGuard: Cast file path to string.
904 b9314a1 Azure: minor changes for filename as strings and logging.
905 08b50a6 provide default 'output' setting to log to /var/log/cloud-init-output.log
906 92aa725 DataSourceOpenNebula:parse_shell_config skip 'SECONDS' var if seen
907 6f8904c fix pep8 (trailing ';')
908 98fd17c remove support for resizing via 'parted resizepart'
909 605335f initial vendordata support
910 9a0d6158 drop requirement on boto for its boto.utils.get_instance_metadata()
911 006f3e7 Add 'Requires' or 'Recommends' on sudo in packaging files.
912 cbc5af7 more boto removal. move httpretty from 'Requires'
913 b2ebae6 merge requirement changes
914 5007614 cloud-config-landscape.txt: improve documentation
915 e26ac6b tools/read-dependencies tools/read-version: rewrite in python
916 84514cd cc_resizefs: figure out what /dev/root means via kernel cmdline
917 131ff5e Split net-parsing into own module
918 814b32b Consider partitions as sources for configdrive if labelled correctly
919 c833a84 pep8
920 8e035f8 Initial Freebsd support
921 b7eae0a Add freebsd sysvinit scripts
922 5aa7d4c fix util.which if PATH is not in environment
923 8308758 Skip retry and continued fetch of userdata when NOT_FOUND
924 b37125d url_helper: call exception_cb with the UrlError exception
925 c92cd05 pep8/pylint fixes
926 6d47434 add --dummy-variables-rgx= param when calling pylint
927 4919cd1 pylint and long line fixes.
928 eb1cc91 Freebsd cleanups
929 d32091e Log failure to restore backup locale file
930 62f6ce9 Fixes for SmartOS datasource
931 8c7aecb Fix logexc usage in freebsd distro
932 15ebe2a Don't try to create members if group creation fails
933 0be4922 read_file_or_url: raise UrlError with 404 on ENOENT
934 06c80d8 util.is_ipv4: realize that 0 is a valid number in a ipv4 address.
935 3cfe9b3 DataSourceNoCloud: support reading vendor-data
936 fe77394 Azure: fix issue with stale data in /var/lib/waagent
937 9ad88e0 rpm build fixes
938 7010580 DataSourceEc2: Fix incorrect return in _get_url_settings
939 4d80411 doc/examples/cloud-config-landscape.txt: fix invalid example
940 7204a82 Add 'unverified_modules' config option and skip unverified modules
941 5d2a31b Add support for the CloudSigma server context.
942 f7ac086 initial Gentoo and Arch linux support
943 18b8d40 cloudsigma: change default dsmode to 'net'
944 322e404 Add initial GCE datasource
945 9be5a7a Add a openstack specific datasource
946 0536676 GCE: add some tests, some small fixes
947 12672e7 re-work vendor-data and smartos
948 08a4c6b smartos: fix bug in previous commit
949 b812776 DataSourceOpenStack: allow vendor-data to be a dict with 'cloud-init' inside
950 5e5c805 DataSourceGCE: fix 'is_resolvable', remove unnecessary WARN
951 474a72c CloudSigma: remove 'WARN' in not found case
952 a866815 NoCloud: fix broken seed from external image
953 82c659d test_smartos: remove bad test case
954 38ed9ef DataSourceOpenStack: debug, not warn on non-ideal version. do not use latest.
955 6c5a804 ConfigDrive: trim trailing newlines in previous-instance-id
956 5acc369 netinfo.py: fix regression causing ubuntu to show 'addr:v.x.y.z'
957 0fa8bfa SmartOS: do not run on arm as dmidecode causes problems
958 21fc25f pep8 and pylint
959 53794c0 AltCloud: to not run dmidecode on arm systems.
960 20098e0 test_altcloud: fix altcloud tests when running on arm
961 91770eb tools/make-tarball: add ability to include uncommited changes
962 acfd6c5 distros/freebsd.py: fix regression due to previous pylint cleanup
963 2b35f6b seed_random: support a 'command' to seed /dev/random
964 3fa4022 write status to /run/cloud-init/ for external consumption
965 5c95d68 CloudSigma: support user-data being base64 encoded
966 3997ae9 seed_random: do not capture command output, provide env RANDOM_SEED_FILE
967 d9661a8 final_message: allow replacement of capital name keys.
968 baf72e9 Azure: re-format ephemeral disk if necessary
969 2fe4788 Azure: pep8 and pylint cleanups from previous commit.
970 11d6dbf NoCloud: fix broken seedfrom on the kernel command line
971 2f9b47b OpenNebula: support base64 encoded user-data
972 5d97267 (tag: 0.7.5) pyflakes cleanups
973 910128e open 0.7.6
974 e065025 add vendordata support to cloudsigma datasource
975 5067b44 CloudSigma: only poll on serial device after dmidecode check.
976 2bb2287 SmartOS test: do not require existance of /dev/ttyS1.
977 9a61ab1 doc: fix user-groups doc to reference plural ssh-authorized-keys
978 8546c80 move TODO to TODO.rst
979 e11e7c2 Less noisy logs, and improve some log messages.
980 6a4976e fix 'make test' in python 2.6
981 e9f9c1e Allow the usage of jinja2 templates
982 e921336 fix httpretty based test cases if http_proxy is set.
983 d85a03d change default path of systemd files to /lib/sysemd/system.
984 27ce1e1 bddeb: do not sign by default
985 f7e63d6 change trunk packaging to be more modern.
986 986ee27 test: make selinux test skipped if selinux not available.
987 4b8397a SeLinuxGuard: remove invalid check for sanity around restorecon, fix test
988 67428ad do not put comments in /etc/timezone
989 e99f956 cc_power_state_change: improve TypeError messages
990 36067bc add ubuntu-init-switch module for testing systemd.
991 a4e49a2 ubuntu-init-switch: fix for determining if systemd
992 b5b8ba8 ubuntu-init-switch: support disabling of reboot, minor tweeks.
993 e8536d7 remove un-used 'end' in result.json and status.json
994 a59eba6 use url_helper to combine url
995 bf89def systemd: make cloud-init block ssh service startup to guarantee keys exist
996 d8c8a87 settings: fix typo resulting in OpenStack and GCE not running.
997 589f740 fix rendering resolv.conf if no 'options' are provided
998 bbe4b99 docs: fix disk-setup to reference 'table_type'
999 d723c17 ec2_utils.py: get_instance_metadata explicitly add trailing /
1000 190cacc ssh_authkey_fingerprints: fix bug that prevented disabling the module
1001 31f9129 Fix pep8 issues, drop pylint.
1002 e39abc7 Openstack: do not load urls twice
1003 128fd80 FreeBsd: fix initscripts and add working config file
1004 141a832 Datasource: fix to provide local-hostname if not available in datasource
1005 9eddc07 improved logging of errors around module loading/searching
1006 fa0cfde freebsd: fixes for sudo and build-on-freebsd
1007 e17823e resizefs: first check if device is writable before attempting
1008 91a5bf5 pyflakes fixes.
1009 67f198c openstack: fix bug referencing undefined variable, revert some changes
1010 4a03c61 ConfigDrive: support reading vendor_data similar to OpenStack MD reader
1011 2755274 OpenStack: search less urls to determine if MD service is there.
1012 26c1cf9 cloud-init-local depends on /run. reflect that in upstart job.
1013 3ac5151 OpenStack: fix consumption of vendor-data to allow namespacing
1014 78dd5e2 netinfo: log error on failure of route info
1015 32be9ac upstart: add blocknet which blocks net until after cloud-init-local
1016 f5be74d upstart/cloud-init-nonet.conf: only mention wait if larger than 5 seconds
1017 6093b8b cloud-init-blocknet: remove debug code going to /run/cloud-init-blocknet
1018 5d51578 resizefs: fix backgrounded resizing
1019 d8aa66f cc_grub_dpkg consider /dev/xvda as a candidate for grub installation
1020 b76866a MetadataMaterializer support custom leaf decoder
1021 a429725 FreeBSD: Support ConfigDrive
1022 dc626ee cc_mounts: add ability to create swap file
1023 15e5dbf freebsd: Use the proper virtio FreeBSD network interface name.
1024 735c3d9 freebsd: enable correct behavior on Ec2.
1025 797de39 (tag: 0.7.6) update url in config drive documentation
1026 cff60d5 open 0.7.7
1027 dff72e0 fix 'make test' failure.
1028 96c4093 Add Digital Ocean Datasource.
1029 dd1853b fix for rhel7 by using 'uses_systemd' to detect upstart/systemd
1030 d3efeef fix bad logic resulting in failure to honor 'output' config.
1031 c634d32 ChangeLog: update for last commit
1032 9eed0fe Start adding cloud config module docs.
1033 3efc714 retain trailing newline from template files when using jinja2
1034 97869ce Only use datafiles and initsys addon outside virtualenvs
1035 6fac0f6 Fix the digital ocean test on py2.6
1036 e0db600 Increase the robustness/configurability of the chef module...
1037 94565bc Ensure the cc_chef doc links to the cc_chef code
1038 61882a0 Fix parse_ssh_config failing in ssh_util.py
1039 ad49270 Pretty up the debug module
1040 e4d3fdb Be more tolerant of 'ssh_authorized_keys' types
1041 17fef56 Update to use a newer and better OMNIBUS_URL
1042 033eb26 IPv6 support for rhel distro
1043 1db41a6 Use assertNotEqual which exists on python2.6
1044 26af82a Fixes rpm spec file build issues (its not currently building).
1045 9c2933d Cleanups for netinfo.py
1046 fa5ce8c tools/ccfg-merge-debug: fix for updated user-data/vendor-data
1047 38c851e tools/run-pep8: remove leading ',' fed to --ignore
1048 62e9e73 Enable user-data encoding support for GCE.
1049 a61ec07 Use the GCE short hostname.
1050 64f2718 systemd: run cloud-init before systemd-user-sessions.service
1051 ae2f512 pep8 fixes
1052 8d453d2 hostname: apply hostname same as is written
1053 78915c9 remove dependency on dmidecode on linux
1054 cd632b2 python3 support.
1055 35dd98c some python3 fixes
1056 dcd1590 mount_cb: fix scoping of an exception in python3
1057 9dde8e6 tests/unittests/test_util.py: pep8
1058 32959f9 support for managing GPT partitions
1059 9c224b8 fix usage of python2 'print'
1060 14d7525 Fix for ascii decode in DataSourceAzure (LP: #1422993).
1061 3165ab2 Make parameter list for get_hostname method consistent
1062 a37b3e0 CloudStack: support fetching password from virtual router
1063 d12d8cf tox: set LC_ALL=en_US.utf-8 rather than C
1064 9170dbc Azure: Fix consumption of user-data
1065 4770c61 move recently added test_udprocess tests to test_data, improve a bit
1066 e2fea56 further fixing of non-text user-data.
1067 c9c811b readurl, read_file_or_url returns bytes, user must convert as necessary
1068 f0388cf pep8
1069 086fd97 url_helper.py: fix undefined variable
1070 b2af44f util.py: remove 'print' debug statement
1071 b11401a MAAS: fix oauth imports and reading of command line seed.
1072 48297d2 packages/debian: move software-properties-common to recommends, add eatmydata
1073 c808b84 Convert dmidecode values to sysfs names before looking for them.
1074 068ee3d pull in 'snappy' support
1075 56a594c Add util.message_from_string to wrap email.message_from_string.
1076 978991f Fix hang caused by HTTPretty on Python 3.4.2.
1077 5938747 DataSourceMAAS: adjust local timestamp in case of clock skew
1078 c3f5fb9 snappy: disable by default
1079 ec23db8 DataSourceMAAS: remove debug statement
1080 5f2b73c DataSourceMAAS: fix timestamp error in oauthlib
1081 31a8aab userdata-handlers: python3-related fixes on do-not-process-this-part path
1082 516af9b emit_upstart: fix use of undeclared variable
1083 ad820a9 SmartOS: fixes for python3 reading from serial device.
1084 ccdf4ff systemd: update config and final to run even if init jobs fail
1085 24fdc71 Update SmartOS data source to use v2 metadata.
1086 bf52085 NoCloud: the local portion of NoCloud incorrectly claimed datasources
1087 25e57d4 fix snappy package installation.
1088 8165000 adjust cc_snappy for snappy install package with config.
1089 f478963 systemd: use network-online instead of network.target (LP: #1440180)
1090 dcd4b2b pep8 fixes
1091 341a805 fix cloud-config-archive handling
1092 ab04d7a Add functionality to fixate the uid of a newly added user.
1093 b7ce7a2 Don't overwrite the hostname if the user has changed it after we set it
1094 d55770f Update changelog with previously merged branches
1095 6a46989 Add start of/improved CloudStack documentation
1096 cc7a338 Fix +tests for GCE datasource not handling per-instance SSH keys
1097 1c9c670 sysvinit: make cloud-init-local run before networking is brought up
1098 5ab9a13 Azure: if user has set hostname, do not overwrite it
1099 96854d7 fix 'Make pyflakes'
1100 e232b4c Update is_disk_used for changed enumerate_disk output.
1101 6d7ac1c Fix exception when running with no arguments on Python 3 LP: #1424277
1102 7402396 read_seeded: fix reed_seeded after regression
1103 02da849 detect that CentOS 7 uses systemd, write previous-hostname in that case.
1104 b811fdd Azure: remove dependency on walinux-agent
1105 33db529 pep8 fixes
1106 2dc69f0 temporarily disasble test if no bin/cloud-init
1107 eb2fe76 packages/brpm: fix for oauth library name
1108 151ece4 EC2: be aware of eu-central-1 availability zone
1109 12e739d Azure: Redact on-disk user password in /var/lib/ovf-env.xml
1110 5a8f6c8 Doc: include information on vendor-data in OpenStack
1111 0f3736a packages/debian/control.in: mention recommends of gdisk
1112 162ce6a check for systemd using sd_booted() semantics
1113 1489a6a Add a cloud-init plugin for helping users register and subscribe their RHEL-based systems.
1114 e6d4bfd Add ChangeLog entry for last merge.
1115 ad403f2 cc_rh_subscription: fixes for python3
1116 66c13ab apt_configure: fix importing of apt gpg keys under in python3
1117 6e06aff growpart: fix specification of 'devices' list.
1118 7aa2648 Use wget to fetch CloudStack passwords.
1119 8711d6a Fix regressed logic causing rightscale userdata to no longer work.
1120 22186f7 CloudSigma: encode/decode data before communicating over the serial channel
1121 f73991b Return a sensible value for DataSourceGCE.availability_zone.
1122 0db6078 tests: fix TestHandlerHandlePart tests
1123 b5230bc fix 'make pyflakes'
1124 201cc6d packages/debian/control.in: add depends on iproute2
1125 8f37f27 fixes bug: https://launchpad.net/bugs/1461242 ssh: generate ed25519 host keys if supported
1126 de18aa6 provide data source to mirror selection code for region-specific mirrors.
1127 d68b340 mounts: support reliably detecting and using Azure ephemeral disks
1128 3a59cf0 _read_dmi_syspath: fix bad log message causing unintended exception
1129 db07b4b rsyslog: add new format of config
1130 55472eb rsyslog: skip empty or None in remotes format
1131 f2f7660 status_wrapper in main: fix use of print_exc when handling exception
1132 0d85766 status_wrapper in main: correct fix use of print_exc when handling exception
1133 328cc7f pep8 fixes
1134 9975e06 Add initial reporting module and events
1135 b390707 reporting: fix logging reproter and tests
1136 a9c1e3f reporting: remove unused variable, actually print in PrintHandler
1137 827b7b9 swap: create swap with fallocate if possible
1138 60a9eba MAAS: fixes to data source and OauthUrlHelper
1139 deb6cff Handle symlink mount points in mount_cb.
1140 9cd6d8a sync curtin reporting changes back to cloud-init
1141 f5de3d5 reporting/events: catch a final remaining incorrect use of 'reporting'
1142 3c39c3f NoCloud: fix consumption of vendor-data
1143 ba3e59c power_state: support 'condition' argument
1144 b417d53 snappy: enable ssh on snappy if ssh keys are provided or password auth
1145 03b5cac Change Snappy SSH enabled default from false to 'auto' (LP: #1494816)
1146 4558922 webhook: report with json data
1147 e9e8616 MAAS: fix issues with url_helper and oauth module
1148 7dab50a support configuring and installing the Ubuntu fan driver
1149 4968547 azure: support extracting SSH key values from ovf-env.xml
1150 5d9a56f AltCloud: Remove --quiet option from udevadm call
1151 e567bc7 Enable backports source pockets for Ubuntu archives (LP: #1177432).
1152 7abe33a Fixed per MP review
1153 ee2e480 Ubuntu templates: make sources.list consistent with ISO installs.
1154 74fe2d2 ubuntu templates: enable backports
1155 0e0e590 cc_mounts: use 'nofail' if system uses systemd. (LP: #1514485)
1156 97fbe6e Azure: get instance id from dmi instead of SharedConfig
1157 f512c01 systemd/power_state: fix power_state when cloud-final exited failure
1158 8de3497 tox: use test-requirements.txt and requirements.txt
1159 7d7861c SmartOS: Add support for Joyent LX-Brand Zones
1160 6b29428 systemd: support using systemd-detect-virt to detect container
1161 333f17d Correct lock_passwd in docs
1162 df6af3e Handle escaped quotes in WALinuxAgentShim.find_endpoint
1163 3b773f7 lxd: add support for setting up lxd using 'lxd init'
1164 b7a6e92 tox.ini: only specify py3 not specific py34
1165 1491552 lxd: general fix after testing
1166 f0e26ab Add Image Customization Parser for VMware vSphere Hypervisor Support.
1167 97efb9d timezone: use a symlink when updating /etc/localtime
1168 42d3efe fix pyflakes reported issues, and run it during package build and tox.
1169 b1046db lxd fix bug and only run if enabled.
1170 2231c45 packages/debian: make trunk packaging closer to ubuntu
1171 3400f83 systemd: support disabling cloud-init via file or kernel cmdline
1172 8092805 Apply pep8, pyflakes fixes for python2 and 3
1173 d4aa1ab Add a kill switch for customization on VMware platform.
1174 ac7a4f3 Enable password changing via a hashed string
1175 6aa82c9 Added Bigstep datasource
1176 5db46cf pep8: update formatting to pass pep8 1.4.6 (trusty) and 1.6.2 (xenial)
1177 13fa076 BigStep: enable datasource in default settings
1178 93e553d No longer run pollinate by default in seed_random
1179 0865e51 add default user to 'lxd' group and create groups when necessary.
1180 41470d2 dmi data: fix failure of reading dmi data for unset dmi values
1181 97f81cb change return value for dmi data of all xff to be ""
1182 8a929e6 some systemd cleanups
1183 8c9714f doc: document that volume label must be 'cidata' NocCloud datasource.
1184 72f826b doc/ add new logo to rtd (read the docs) docs.
1185 a27abb8 fix ssh_pwauth behavior to function as documented.
1186 56402e9 Send proper SUCCESS / FAILED events to the underlying VMware hypervisor.
1187 1b91b7c debian packaging: adjust build-depends for xenial
1188 4f2065a quickly check to see if the previous instance id is still valid
1189 18bf614 support network configuration in cloud-init --local
1190 78c9de8 improve how cloud-init-wait waits
1191 f6ad06d apply_network_config improvements
1192 210b041 Misc fixes for VMware Support.
1193 0982415 FreeBSD: improvements for packages, setting password and timezone
1194 3b69f41 DataSource: set ds_cfg to be a dictionary
1195 e313828 locale: list unsupported environment settings in warning
1196 3de6300 disk_setup: correctly send --force to mkfs on block devices
1197 cc77a52 chef: fix chef installation from gems
1198 35802e8 systemd: do not specify After of obsolete syslog.target (LP: #1536964)
1199 6a660b4 write_files: fix decompression of content
1200 d75a912 fix adding of users when no group is specified
1201 822ac18 Ensure that a resolve conf object is written as a string.
1202 763be4e lxd: adds basic support for dpkg based lxd-bridge configuration.
1203 cc54935 DataSourceNoCloud: fix check_instance_id when upgraded
1204 5cfe3d6 SmartOS, CloudSigma: fix error when dmi data is not availble
1205 03c81fd rh_subscription: only check subscription if configured
1206 96cc385 skip bridges when generating fallback networking
1207 ac50733 chef: straighten out validation_cert and validation_key
1208 a551cb0 phone_home: allow usage of fqdn
1209 e660c36 fallback net config: do not consider devices starting with 'veth'
1210 f7d6eae networking: no longer delete eth0.cfg on debian/ubuntu
1211 53f0351 apply networking less often
1212 b029dce network: do not write interface as 'auto' from ip= on command line.
1213 0aa443a cloudstack: Only use DHCPv4 lease files as a datasource
1214 c92f020 Config Drive: fix check_instance_id signature.
1215 0780b3a Paths: fix instance path if datasource's id has a '/'.
1216 690bdce fix timestamp in reporting events.
1217 78cbc76 Enable flake8 and fix a large amount of reported issues
1218 ea4bc2c Document improvements for runcmd/bootcmd
1219 fdede20 fix up tests that take too long due to retries and timeouts
1220 6115bea fix logic error in ec2 get_instance_userdata and slow tests
1221 63501f4 kernel command line: override all local settings
1222 0dbe69a packages/bddeb: update to know package mappings for flake8 and hacking
1223 710590d Improve merging documentation
1224 e513fc3 Apt sources configuration improvements
1225 bc9bd58 improve network configuration
1226 6c0fc6d tests: fix apt tests to run inside ubuntu build environment
1227 2268993 skip test_apt_source_list_debian_mirrorfail for now
1228 b01cbc0 make networking config provided in system config override datasource.
1229 9cb2af1 Change missing Cheetah log warning to debug [Andrew Jorgensen]
1230 8da73fb Fix apt configure unittests to run in more environments
1231 a3720fe clean up temp files made in tests
1232 a8de234 Refactor a large part of the networking code.
1233 cf7ba5b Fix the broken import and 'parse_net_config_data' function usage
1234 d4e9f5d Remove trailing dot from GCE metadata URL (LP: #1581200) [Phil Roche] LP: #1581200
1235 780f88f [Revert] Remove trailing dot from GCE metadata URL
1236 632d56a fix pep8 failure introduced in recent commit.
1237 946b0f5 Re-apply "Remove trailing dot from GCE metadata URL (LP: #1581200) [Phil Roche]"
1238 8311e8f move 'main' into cloudinit/cmd/ for easier testing
1239 d4b587e fix some errors reported by pylint
1240 b2fd5b6 fix usage of OSError.message that will not work in python3
1241 d598cee DataSourceNoCloud: fix stack trace on reboot, default to dsmode=net
1242 776b0cf support network rendering to sysconfig (for centos and RHEL)
1243 e6b594b do not render systemd.link files
1244 a919f6e write_files: if no permissions are given, just use default without warn.
1245 9f7ce5f user_data: fix error when user-data is not utf-8 decodable
1246 6a20a7f fix restoring from a datasource that did not have dsmode
1247 b3193a4 distros/debian.py: fix calling of eni renderer to not render link files
1248 a246451 Dict comprehensions don't work in 2.6
1249 a30eebe Fixes missing/unpacked rpm files
1250 78a8524 Remove another stray dict comprehension
1251 f5ea273 Another stray occurence of a dict comprehension being removed
1252 ba55775 String format requires positions on python 2.6
1253 333eea5 Fix SmartOS datasource usage of dict comprehensions
1254 660e04e Fix mcollective module with python3
1255 74e4dff ConfigDrive: fix writing of 'injected' files and legacy networking
1256 d86e753 improvements to eni rendering
1257 6764452 Avoid depending on argparse in 2.7 or greater
1258 4264783 mcollective: add tests, cleanups and bug fix when no config in /etc.
1259 eed7fcc fix pep8 errors in mcollective unit tests
1260 72d6adc Update build tools to work with git
1261 10f82bd adjust tools and version information.
1262 42bed11 drop modification of version during make-tarball, tools changes.
1263 78ec0f0 revert unintended change to ubuntu sources list
1264 d0b2863 adjust signal_handler for version changes.
1265 48ec60a For upstream snapshot versions do not modify git-describe output.
1266 b56d7a1 (harlowja/fix-gce) Newer requests have strong type validation
1267 5374773 read-version: do not attempt git-describe if no git.
1268 3973223 make-tarball: older versions of git with --format=tar.
1269 3aa094b (tag: 0.7.7) release 0.7.7
1270 1e85ba0 tools/read-version: update to address change in version
1271 c52b8eb SmartOS: more improvements for network configuration
1272 b455902 add ntp config module
1273 4a1c0df ChangeLog: update changelog for previous commit.
1274 db72092 Add distro tags on config modules that should have it
1275 cdcac86 (smoser/nocloud-interfaces) NoCloud: fix bug providing network-interfaces via meta-data.
1276 8028c92 ConfigDrive: recognize 'tap' as a link type.
1277 80db6eb (harlowja/newer-configobj) Upgrade to a configobj package new enough to work
1278 d9537aa MAAS: add vendor-data support
1279 bc2c326 (smoser/master) DigitalOcean: use the v1.json endpoint
1280 648dbbf (origin/master, origin/HEAD, master, azure-dhcp) Get Azure endpoint server from DHCP client
1281 dbb8f0a Generate a dummy bond name for OpenStack
1282 e19b372 add a vlan test case
1283 2dee860 read_sys_net catch a errno.ENOTDIR error as ENOENT
1284 dcb9605 (HEAD -> bond_name, smoser/bond_name) make bond interfaces auto, get hwaddress of nic if part of bond.
#!/bin/sh
#
# run this like gen-ChangeLog 0.7.8..
# it spits out stuff to add to ChangeLog.
error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
CR='
'
Usage() {
cat <<EOF
${0##*/} from[..to]
generate ChangeLog entries for the log from..to
EOF
}
print_commit() {
local subject="$1" author="$2" bugs="$3" aname="" abit="" bbit=""
aname=${author% <*}
case "${aname}" in
Scott\ Moser|Josh*\ Harlow) abit="";;
*) abit=" [${aname}]";;
esac
bbit=${bugs:+ (LP: ${bugs})}
local msg=" - ${subject}" maxlen=79
if [ $((${#msg}+${#abit}+${#bbit})) -gt $maxlen ]; then
if [ $((${#msg}+${#abit})) -gt $maxlen ]; then
msg="${msg}${CR} ${abit}${bbit}"
else
msg="${msg}${abit}${CR} ${bbit}"
fi
else
msg="${msg}${abit}${bbit}"
fi
echo "${msg}"
}
git_log_to_dch() {
local line="" commit="" lcommit="" bugs=""
while :; do
read line || break
case "$line" in
commit\ *)
if [ -n "$commit" ]; then
print_commit "$subject" "$author" "$bugs"
fi
commit=${line#*: }
bugs=""
author=""
subject=""
;;
Author:*) author="${line#Author: }";;
LP:*) bugs="${bugs:+${bugs}, }${line#*: }";;
"") [ -z "$subject" ] && read subject;;
esac
done
if [ -n "$commit" ]; then
print_commit "$subject" "$author" "$bugs"
fi
}
git log --first-parent --no-decorate --format=full "$@" |
git_log_to_dch
#!/bin/bash
# originally modified from git-dsc-commit
MYNAME=git-import-dsc
VERBOSITY=0
TEMP_D=""
CLEANUP_DEL_TAG=""
CLEANUP_RESET_HASH=""
error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
Usage() {
cat <<EOF
Usage: ${0##*/} [dsc | [package version]]
Given a dsc, commit that.
Given a package and a version, use pull-lp-source to download
and then commit the resultant dsc.
version can be an ubuntu release (xenial, trusty)
or a package version (1.0-0ubuntu1).
EOF
}
bad_Usage() { Usage 1>&2; [ $# -eq 0 ] || error "$@"; return 1; }
cleanup() {
[ -z "${TEMP_D}" -o ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
if [ "${CLEANUP_RESET_HASH:-_unset}" != "_unset" ]; then
debug 1 "Resetting to ${CLEANUP_RESET_HASH}"
git reset --hard "${CLEANUP_RESET_HASH}" && git clean -fxd
fi
if [ -n "${CLEANUP_DEL_TAG}" ]; then
debug 1 "removing '${CLEANUP_DEL_TAG}'"
git tag --delete "${CLEANUP_DEL_TAG}"
fi
}
debug() {
local level=${1}; shift;
[ "${level}" -gt "${VERBOSITY}" ] && return
error "${@}"
}
tag_for_version() {
# given a debian version, return the tag for that.
echo "${2}$1" | sed 's/:/_/g;s/~/_/g'
}
read_debian_version() {
local out="" clog="${1:-debian/changelog}"
[ -f "$clog" ] ||
{ error "$clog: not a file"; return 1; }
out=$(dpkg-parsechangelog --count 1) ||
{ error "dpkg-parsechagelog failed"; return 1; }
echo "$out" | grep-dctrl -nsVersion .
}
read_clog_field() {
local field="$1" version="$2" clog=${3:-debian/changelog}
if [ -z "$version" ]; then
version=$(read_debian_version)
fi
local cfield="$field"
case "$field" in
changes) cfield="Changes";;
bugs_fixed) cfield="Launchpad-Bugs-Fixed";;
esac
local bcmd="" out=""
bcmd=( dpkg-parsechangelog -l "$clog" "--from=$version" "--to=$version"
"--show-field=$cfield" )
debug 1 "bcmd: ${bcmd[*]}"
out=$("${bcmd[@]}") || {
error "Failed to get field $field with: ${bcmd[*]}"
return 1;
}
case "$field" in
changes) _RET=$(echo "$out" | sed '1,3d');;
bugs_fixed)
_RET=$(set +f; for b in ${out}; do echo "LP: #$b"; done);;
*) _RET="$out";;
esac
return 0
}
git_commit_version() {
local version="$1" wdir="${2:-$PWD}"
local clog="$wdir/debian/changelog"
if [ -z "$version" ]; then
version=$(read_debian_version "$clog")
fi
local changes="" bug_lines="" author="" date=""
read_clog_field changes "$version" "$clog" &&
changes="$_RET" || return 1
read_clog_field bugs_fixed "$version" "$clog" &&
bug_lines="$_RET" || return 1
read_clog_field Maintainer "$version" "$clog" &&
author="$_RET" || return 1
read_clog_field Date "$version" "$clog" &&
date="$_RET" || return 1
local msg=""
msg=$(
echo "Import version ${version} with $MYNAME"
echo ""
echo "$changes"
if [ -n "${bug_lines}" ]; then
echo ""
echo "${bug_lines}"
fi
)
local cmd=""
cmd=( git commit -q --author="$author" "--date=$date" "--message=$msg")
debug 1 "${cmd[*]}"
"${cmd[@]}" || {
error "commit failed. Command was: $cmd"
return 1
}
return 0
}
get_dsc() {
local dsc_in="$1" dir="${2:-$PWD}" dsc=""
case "$dsc_in" in
http://*|https://*) :;;
*)
dsc=${dsc_in#file://}
if [ ! -f "$dsc" ]; then
error "Do not know how to get '$dsc'"
return 1
fi
dsc=$(readlink -f "$dsc") ||
{ error "failed to get full path to $dsc"; return 1; }
_RET="$dsc"
esac
local startd="$PWD" cmd=""
cd "$dir"
cmd=( dget --download-only --allow-unauthenticated "$dsc_in" )
debug 1 "downloading $dsc_in with: ${cmd[*]}"
if [ ${VERBOSITY} -gt 2 ]; then
"${cmd[@]}" ||
{ error "failed to dget $dsc_in"; cd "$startd"; return 1; }
else
out=$("${cmd[@]}" 2>&1) ||
{ error "failed to get $dsc_in: $out"; cd "$startd"; return 1; }
fi
cd "$startd"
local i=""
for i in "${dir}/"*.dsc; do
[ -f "$i" ] || continue
[ -z "$dsc" ] || {
error "found multiple dsc files ($i $dsc). confused."
return 1
}
dsc="$i"
done
[ -f "$dsc" ] || {
error "the command below did not produce any .dsc files"
error "${cmd[*]}"
return 1;
}
_RET=$(readlink -f "$dsc") || {
error "failed to get full path to $dsc"
return 1
}
}
main() {
local short_opts="h:v"
local long_opts="help,no-tag,replace-equal-tag,verbose"
local getopt_out=""
getopt_out=$(getopt --name "${0##*/}" \
--options "${short_opts}" --long "${long_opts}" -- "$@") &&
eval set -- "${getopt_out}" ||
{ bad_Usage; return; }
local cur="" next="" out="" start_hash="" replace_eq_tag="false"
local no_tag="false"
while [ $# -ne 0 ]; do
cur="$1"; next="$2";
case "$cur" in
-h|--help) Usage ; exit 0;;
-v|--verbose) VERBOSITY=$((${VERBOSITY}+1));;
--replace-equal-tag) replace_eq_tag=true;;
--no-tag) no_tag=true;;
--) shift; break;;
esac
shift;
done
[ $# -eq 1 -o $# -eq 2 ] ||
{ bad_Usage "expected 1 or 2 args, got $# ($*)"; return; }
TEMP_D=$(mktemp -d "${TMPDIR:-/tmp}/${0##*/}.XXXXXX") ||
fail "failed to make tempdir"
trap cleanup EXIT
# .git is a file in a worktree
if [ ! -d ".git" -a ! -f ".git" ]; then
error "Must be run from top level git dir (no .git here)"
return 1
fi
out=$(git status --porcelain) ||
{ error "git status --porcelain returned $?"; return 1; }
if [ -n "$out" ]; then
error "Working directory is not clean (git status --porcelain)"
error "fix with: git clean --force -xd"
return 1;
fi
out=$(git rev-parse HEAD 2>/dev/null)
ret=$?
if [ $ret -eq 0 ]; then
start_hash="$out"
else
if [ "$out" = "HEAD" -a $ret -eq 128 ]; then
start_hash="_unset"
error "seems no current head yet, assuming new repo"
else
git rev-parse HEAD
error "Failed to get commit for current HEAD"
return $ret
fi
fi
if [ $# -eq 1 ]; then
local dsc_in="$1"
get_dsc "$dsc_in" "${TEMP_D}" || return
dsc="$_RET"
debug 1 "using input dsc file '${dsc_in}'"
else
pkg="$1"
version="$2"
debug 1 "pulling source for $pkg at $version"
( cd "${TEMP_D}" &&
pull-lp-source --download-only "$pkg" "$version") || {
error "Failed to pull-lp-source --download-only '$pkg' '$version'"
return 1;
}
dsc=""
for i in "${TEMP_D}/${pkg}_"*.dsc; do
[ -f "$i" ] || continue
[ -z "$dsc" ] ||
fail "found multiple dsc files ($i $dsc). confused."
dsc="$i"
done
[ -f "$dsc" ] || {
error "pull-lp-source did not produce dsc file '$dsc'";
return 1;
}
fi
local pkgdir="" exdir="${TEMP_D}/extract" out=""
local debian_version="" last_debian_version=""
local commit_msg="${TEMP_D}/commit_msg" tag_msg="${TEMP_D}/tag_msg"
mkdir "$exdir" ||
{ error "failed to create '$exdir'"; return 1; }
debug 1 "extracting source from $dsc"
out=$(cd "$exdir" && dpkg-source -x --skip-patches "$dsc" 2>&1) ||
{ error "failed dpkg-source"; error "$out"; return 1; }
pkgdir=$(find "$exdir" -mindepth 1 -maxdepth 1 -type d) &&
[ -d "$pkgdir" ] || {
error "no directory extracted from dpkg-source -x"
return 1;
}
debug 2 "extracted source produced dir ${pkgdir##*/}"
debian_version=$(cd "$pkgdir" && read_debian_version) ||
{ error "failed to get debian version"; return 1; }
tag=$(tag_for_version "$debian_version" ubuntu/) || return
debug 1 "debian_version=$debian_version tag=$tag"
out=$(git tag -l "$tag") ||
{ echo "failed to check for '$tag'"; exit 1; }
if [ -n "$n" ]; then
if ! ${replace_eq_tag}; then
error "tag $tag exists already."
return 1;
fi
fi
if [ -e debian/changelog ]; then
p_debian_version=$(read_debian_version) ||
{ error "failed reading debian version in $PWD"; return 1; }
if dpkg --compare-versions $debian_version lt $p_debian_version; then
error "Version '$debian_version' < '$p_debian_version'"
return 1
fi
fi
CLEANUP_RESET_HASH="${start_hash}"
debug 1 "on failure, will reset to start hash ${start_hash}"
local changes=""
GIT_WORK_TREE="$pkgdir" git add -fA ||
{ error "failed adding files in $exdir"; return 1; }
changes=$(GIT_WORK_TREE="$pkgdir" git status --porcelain) ||
{ error "failed git status --porcelain"; return 1; }
[ -n "$changes" ] || {
error "No changes to import."
return 1;
}
git_commit_version "${debian_version}" "$pkgdir" || {
error "failed to commit version ${debian_version}";
return 1;
}
local newhash=""
newhash=$(git rev-parse HEAD)
error "${debian_version} imported as $newhash"
if ${replace_eq_tag}; then
if [ -n "$(git tag -l $tag)" ]; then
if ! git diff HEAD "$tag"; then
error "existing tag '$tag' differed from imported";
exit 1;
fi
debug 1 "existing tag $tag had same contents, removing it."
git tag --delete "$tag" ||
{ error "failed to delete '$tag'"; return 1; }
else
debug 1 "no existing tag $tag"
fi
fi
if $no_tag; then
error "not tagging as $tag. would have used $tag."
else
echo "Tagged using $MYNAME." > "${tag_msg}" || return 1
git tag -a -F "${tag_msg}" "$tag" && CLEANUP_DEL_TAG=$tag ||
{ error "failed tag"; return 1; }
fi
git reset --hard && git clean -fxd ||
{ error "failed reset and clean"; return 1; }
CLEANUP_DEL_TAG=""
CLEANUP_RESET_HASH=""
return 0
}
main "$@"
# vi: ts=4 expandtab
#!/bin/bash
# also in https://gist.github.com/smoser/6391b854e6a80475aac473bba4ef0310
VERBOSITY=0
LP_USER_NONE="NONE"
Usage() {
cat <<EOF
Usage: ${0##*/} [user [user ... ]]
if user starts with a '+' add the +git variety:
given smoser:
git://git.launchpad.net/~smoser/<project>
given +smoser:
git://git.launchpad.net/~smoser/<project>/+git/<project>
-p | --project P use project 'project' rather than as guessed
from 'git remote'
--proto P use protocol 'P' (default git)
-w | --write use git+ssh.
EOF
}
error() { echo "$@" 1>&2; }
fail() { [ $# -eq 0 ] || error "$@"; exit 1; }
bad_Usage() { Usage 1>&2; [ $# -eq 0 ] || error "$@"; return 1; }
cleanup() {
[ -z "${TEMP_D}" -o ! -d "${TEMP_D}" ] || rm -Rf "${TEMP_D}"
}
debug() {
local level=${1}; shift;
[ "${level}" -gt "${VERBOSITY}" ] && return
error "${@}"
}
find_lp_user() {
# find a launchpad user.
# return 1 on error, 2 on "just didn't find anything"
local user_in="$1" out="" url="" user="" cr=$'\n'
[ -n "$user_in" ] && echo "$user_in" && return
local regm='^(url.*(git\+|)ssh://(.*)@git.launchpad.*).insteadof.*'
out=$(git config --get-regexp "$regm")
# git config --get-regexp returns 1 on "nothing there"
if [ -n "$out" ]; then
# pick the first match
url=${out%%${cr}*}
fi
if [ -n "$url" ]; then
# url is like: url.git+ssh://smoser@git.launchpad.net/.insteadof
# or url.ssh://smoser@git.launchpad.net/.insteadof
user=${url#*://}
user=${user%%@*}
debug 2 "found user '$user' in '$url'"
fi
if [ -n "$user" ]; then
echo "$user"
return 0
else
debug 1 "Unable to find a launchpad user in git config."
return 2
fi
}
prompt_for_lpuser() {
local user="" add="" cmd="" url="" none="$LP_USER_NONE"
if [ ! -t 0 -o ! -t 1 ]; then
error "Input not a terminal, assuming user=$none"
_RET="$none"
return 0;
fi
read -p "What is your launchpad username? [Enter to skip] " user
if [ -z "$user" ]; then
error "pass --no-launchpad-user to avoid this prompt."
_RET="$none"
return 0
fi
url="git+ssh://$user@git.launchpad.net/"
cmd=( git config --global "url.$url.insteadof" lp: )
error "I can store this answer for next time by adding a git config"
error "alias of 'lp:' to 'git+ssh://$user@git.launchpad.net/'"
error "Command to do that is:"
error " " "${cmd[@]}"
read -p "Shall I do that now? [Y/n] " add
case "${add:-Y}" in
y|Y|yes|Yes) add="y";;
n|N|no|No) add="n";;
*) add="n"; error "Assuming '$add' meant no."
esac
if [ "$add" = "y" ]; then
"${cmd[@]}" || {
error "failed to configure git with ${cmd[*]}"
return 1
}
fi
_RET="$user"
return 0
}
main() {
local short_opts="hp:vw:"
local long_opts="help,project:,proto:,verbose,write:"
local getopt_out=""
getopt_out=$(getopt --name "${0##*/}" \
--options "${short_opts}" --long "${long_opts}" -- "$@") &&
eval set -- "${getopt_out}" ||
{ bad_Usage; return; }
local cur="" next="" write=false
local proto="git" proto_in="" lpuser=""
while [ $# -ne 0 ]; do
cur="$1"; next="$2";
case "$cur" in
-h|--help) Usage ; exit 0;;
-o|--output) output=$next; shift;;
-v|--verbose) VERBOSITY=$((${VERBOSITY}+1));;
--proto) proto_in="$next";;
-w|--write) proto_in="git+ssh";;
--) shift; break;;
esac
shift;
done
[ $# -ne 0 ] || { bad_Usage "must provide users"; return; }
proto="${proto_in:-git}"
lpuser=$(find_lp_user "$lpuser")
ret=$?
if [ $ret -ne 0 ]; then
if [ $ret -eq 2 ]; then
prompt_for_lpuser || return
lpuser="$_RET"
elif [ "$proto" = "git+ssh" ]; then
error "Determining your launchpad user id failed."
error "Cannot use git+ssh without launchpad user."
return $ret
fi
fi
if [ -z "$project" ]; then
for remote in origin upstream; do
url=$(git remote -v |
awk '$1 == o || $1 == u { print $2; exit 0; }' \
o=origin u=upstream) &&
[ -n "$url" ] && project=${url##*/} && break
done
fi
if [ -z "$project" ]; then
error "could not figure out project (--project)" 1>&2;
return 1
fi
lpuser=${lpuser:-$LP_USER_NONE}
remotes="$(git remote)" ||
{ error "failed to read existing remotes"; return 1; }
remotes=" "$(set -f; for r in $remotes; do echo -n "$r "; done)
for user in "$@"; do
user=${user#~} # just allow for ~foo
if [ "${remotes# *${user} }" != "$remotes" ]; then
error "skipping existing remote '$user' already exists."
continue
fi
case "$user" in
+*) user=${user#+}; path="/$project/+git/$project";;
*) path="/$project";;
esac
if [ "$user" = "$lpuser" -a -z "${proto_in}" ]; then
debug 1 "using git+ssh for launchpad user '$lpuser'"
url="git+ssh://$lpuser@git.launchpad.net/~${user}${path}"
else
url="${proto}://git.launchpad.net/~${user}${path}"
fi
debug 1 "git remote add $user $url"
git remote add "$user" "$url" && git fetch "$user" || {
error "failed add and fetch $user at $url. removing."
git remote remove "$user" >/dev/null 2>&1;
return 1
}
remotes="${remotes} $user"
done
return 0
}
main "$@"
# vi: ts=4 expandtab
#!/bin/sh
set -e
set -f
fail() { echo "$@" 1>&2; exit 1; }
## use git-dsc-commit to import them
# git-dsc-commit is from https://github.com/basak/ubuntu-git-tools
# modified locally to tag with 'ubuntu/<version>' rather than just
# 'version'
git_dsc_commit="$HOME/src/ubuntu-git-tools/ubuntu-git-tools/git-dsc-commit"
# these are all the versions of released trusty
# 0.7.5-0ubuntu1 ... 0.7.5-0ubuntu1.19
me=$(readlink -f "$0")
MY_DIR="${me%/*}"
BZR_2_GIT="$MY_DIR/bzr2git.txt"
git_origin="lp:~cloud-init-dev/cloud-init"
#git_origin="$HOME/pubsrc/cloud-init/cloud-init"
dldir="$PWD/dl"
pkg="cloud-init"
gitdir="$PWD/$pkg"
get_versions() {
local rel="$1" versions=""
case "$rel" in
trusty)
versions="
0.7.5-0ubuntu1
0.7.5-0ubuntu1.1
0.7.5-0ubuntu1.2
0.7.5-0ubuntu1.3
0.7.5-0ubuntu1.4
0.7.5-0ubuntu1.5
0.7.5-0ubuntu1.6
0.7.5-0ubuntu1.7
0.7.5-0ubuntu1.8
0.7.5-0ubuntu1.9
0.7.5-0ubuntu1.10
0.7.5-0ubuntu1.11
0.7.5-0ubuntu1.12
0.7.5-0ubuntu1.13
0.7.5-0ubuntu1.14
0.7.5-0ubuntu1.15
0.7.5-0ubuntu1.16
0.7.5-0ubuntu1.17
0.7.5-0ubuntu1.18
0.7.5-0ubuntu1.19
0.7.5-0ubuntu1.20
";;
xenial)
versions="
0.7.7~bzr1256-0ubuntu1~16.04.1
0.7.7~bzr1246-0ubuntu1~16.04.1
0.7.7~bzr1245-0ubuntu1~16.04.1
0.7.7~bzr1212-0ubuntu1
0.7.7~bzr1209-0ubuntu1
0.7.7~bzr1208-0ubuntu1
0.7.7~bzr1200-0ubuntu1
0.7.7~bzr1192-0ubuntu2
0.7.7~bzr1192-0ubuntu1
0.7.7~bzr1189-0ubuntu1
0.7.7~bzr1182-0ubuntu1
0.7.7~bzr1176-0ubuntu1
0.7.7~bzr1160-0ubuntu1
0.7.7~bzr1156-0ubuntu2
0.7.7~bzr1156-0ubuntu1
0.7.7~bzr1155-0ubuntu1
0.7.7~bzr1154-0ubuntu1
";;
precise)
versions="
0.6.3-0ubuntu1.25
0.6.3-0ubuntu1.24
0.6.3-0ubuntu1.23
0.6.3-0ubuntu1.22
0.6.3-0ubuntu1.21
0.6.3-0ubuntu1.20
0.6.3-0ubuntu1.19
0.6.3-0ubuntu1.18
0.6.3-0ubuntu1.17
0.6.3-0ubuntu1.16
0.6.3-0ubuntu1.15
0.6.3-0ubuntu1.14
0.6.3-0ubuntu1.13
0.6.3-0ubuntu1.12
0.6.3-0ubuntu1.11
0.6.3-0ubuntu1.10
0.6.3-0ubuntu1.9
0.6.3-0ubuntu1.8
0.6.3-0ubuntu1.7
0.6.3-0ubuntu1.6
0.6.3-0ubuntu1.5
0.6.3-0ubuntu1.4
0.6.3-0ubuntu1.3
0.6.3-0ubuntu1.2
0.6.3-0ubuntu1.1
0.6.3-0ubuntu1
0.6.3~bzr554-0ubuntu1
0.6.3~bzr551-0ubuntu1
0.6.3~bzr548-0ubuntu1
0.6.3~bzr547-0ubuntu1
0.6.3~bzr539-0ubuntu3
0.6.3~bzr539-0ubuntu2
0.6.3~bzr539-0ubuntu1
0.6.3~bzr530-0ubuntu1
0.6.3~bzr527-0ubuntu1
0.6.3~bzr519-0ubuntu1
0.6.3~bzr502-0ubuntu1
0.6.3~bzr497-0ubuntu1
0.6.2-0ubuntu2
0.6.2-0ubuntu1
";;
esac
local v=""
# just sort them in ascending order
for v in $versions; do echo $v; done | tac
}
get_hash_for_bzr_revno() {
local revno="$1" out=""
out=$(awk '$1 == revno { print $2 ; exit(0); }' \
revno=$revno "$BZR_2_GIT") &&
[ -n "$out" ] && _RET="$out" || fail "no revno $revno"
}
if [ ! -d "$gitdir" ]; then
git clone "$git_origin" "$gitdir" ||
fail "failed clone $git_origin to $gitdir"
fi
mkdir -p "$dldir" || fail "failed mkdir $dldir"
pkg="cloud-init"
for rel in precise xenial trusty; do
versions=$(get_versions "$rel")
for ver in $versions; do
dsc="$dldir/${pkg}_${ver}.dsc"
if [ ! -e "$dsc" ]; then
echo "no '$dsc'. pulling $pkg at $ver"
( cd "$dldir" && pull-lp-source --download-only "$pkg" "$ver") ||
fail "failed download $pkg at $ver"
fi
done
first=true
last_upver=""
for ver in $versions; do
dsc="$dldir/${pkg}_${ver}.dsc"
up_ver=${ver%-*}
pkg_ver=${ver##*-}
case "$up_ver" in
*~bzr*) revno=${up_ver#*~bzr}
get_hash_for_bzr_revno "$revno" && ref="$_RET" ||
fail "no hash for $revno";;
*) ref=${up_ver};;
esac
echo "== $rel pkg=$pkg up_ver=$up_ver pkg_ver=$pkg_ver ref=$ref =="
if $first; then
branch="ubuntu/$rel"
( cd "$gitdir" && git branch | grep -q "$branch" || exit 0
git branch -D "$branch" ) ||
fail "failed removing $branch"
( cd "$gitdir" && git branch "$branch" "$ref" &&
git checkout "$branch") ||
fail "failed branching and checking out $branch at $ref"
elif [ "$last_upver" != "$up_ver" ]; then
( cd "$gitdir" && git merge -m "merge trunk at $up_ver" "$ref") ||
fail "failed merge -m"
fi
out=$( cd "$gitdir" && $git_dsc_commit "$dsc" 2>&1) || {
error "$out"
fail "failed $git_dsc_commit $dsc"
}
first=false
last_upver=$up_ver
done
done

cloud-init stable releases

Frequency and Numbering

Cloud-init aims to release a new version on the order of 4 times per year.

Upstream cloud-init will follow a versioning number system based on the year and the number of releases thus far in the current year. For example, the first release of 2018 will be named 18.1 and the second will be named 18.2.

Stable release maintenance

There is not currently a plan to maintain stable micro releases (ie 18.1.1). Such a plan can be put into place at a later date.

Process

Around 7 days prior to a release, a mail will be sent to cloud-init mailing list announcing the pending release.

Each release will:

  • be tagged in git with an annotated tag.
  • have a "upstream tarball" uploaded to launchpad.

After each release:

  • bugs fixed in that release will be changed from fix-committed to fix-release.

Details

A release commit will change the version seen in cloudinit/version.py. The ChangeLog will be updated to contain a list of changes in from the previous release. This changelog is mostly generated from the subject lines of commit messages, but includes Authors that are not primary contributors and bug references.

cloud-init ubuntu packaging

This document covers making an upload to Ubuntu of cloud-init. It generally covers releases xenial+.

Ubuntu packaging branches

Ubuntu packaging is stored as branches in the upstream cloud-init repo. For example, see the ubuntu/devel, ubuntu/xenial ... branches in the upstream git repo. Note that changes to the development release are always done in ubuntu/devel, not ubuntu/.

Note, that there is also the git-ubuntu cloud-init repo (aka "ubuntu server dev importer") at lp:~usd-import-team/ubuntu/+source/cloud-init.

Uploading

We have high level paths for uploading:

  • new upstream release/snapshot
  • cherry-picked changes

new upstream release/snapshot

This is the only mechanism for development release uploads, and the heavily preferred mechanism for stable release updates (SRU).

Our goal is (and trunk integration tests show) that cloud-init works with xenial and beyond.

Things that need to be considered:

  • backwards incompatible changes. Any backwards incompatible changes in upstream must be reverted in a stable release. Such changes are allowed in the Ubuntu development release, but cannot be SRU'd. As an example of such a change see debian/patches/azure-use-walinux-agent.patch in the ubuntu/xenial branch. Patches here should be in dep-8 format.

Process

The tool used to do this is qa-scripts/scripts/new-upstream-snapshot. It does almost everything needed with a few issues listed below.

new-upstream-release does:

  • merges master into the packaging branch so that history is maintained.

  • strip out coroe contributors from attribution in the debian changelog entries.

  • makes changes to debian/patches/series and drops any cherry-picks in that directory.

  • refreshes any patches in debian/patches/

  • opens $EDITOR with an option to edit debian/changelog. In SRU, I will generally strip out commits that are not related to ubuntu, and also strip out or join any fix/revert/fixup commits into one. Note this is a ubuntu changelog, so it makes sense that it only have Ubuntu specific things listed.

The process goes like this:

$ git clone ssh://git.launchpad.net/cloud-init -o upstream
# if you do not have ssh access, use http://git.launchpad.net/cloud-init

# create a branch tracking upstream/ubuntu/devel
# for SRU substitute release name 'xenial' for 'devel'
$ git checkout -b ubuntu/devel upstream/ubuntu/devel

# if you already had a branch and did not have local changes:
#   git checkout ubuntu/devel; git reset --hard upstream/ubuntu/devel

## just make a tag, so you can easily revert.
## to do so, just git reset --hard xx-current
$ git tag --delete xx-current >/dev/null 2>&1; git tag xx-current

## 'master' can be left off as it is the default.
$ new-upstream-snapshot master

## Your '$EDITOR' will be opened with the chance to change the
## changelog entry.
##   FIXME: If this is a a SRU, then you should ideally edit the packaging
##   portion of the version string to contain ~XX.YY.N
##   For example: 0.7.9-233-ge586fe35-0ubuntu1~16.04.1
##   It will **not** automatically add the '~16.04.1' portion.
##
## Exit from your editor and it will prompt you to commit the change.

## output then looks like:
[ubuntu/devel aa945427a] update changelog (new upstream snapshot 0.7.9-242-gdc2bd7994).
1 file changed, 26 insertions(+)
wrote new-upstream-changes.txt for curtin version 18.1-1-g45564eef-0ubuntu1~16.04.1.
release with:
dch --release --distribution=xenial
git commit -m "releasing curtin version 18.1-1-g45564eef-0ubuntu1~16.04.1" debian/changelog
git tag ubuntu/18.1-1-g45564eef-0ubuntu1_16.04.1

## You can follow its instructions to release and tag.

At this point, you have git in the state we want it in, but we still have to do two things:

The tool that I use to do this is build-package.

$ build-package
...
wrote ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1.debian.tar.xz
wrote ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1.dsc
wrote ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1_source.build
wrote ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1_source.buildinfo
wrote ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1_source.changes
wrote ../out/cloud-init_0.7.9-242-gdc2bd7994.orig.tar.gz

I then will sbuild the binary and then dput the result.

$ sbuild --dist=artful --arch=amd64  --arch-all ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1.dsc
$ dput ../out/cloud-init_0.7.9-242-gdc2bd7994-0ubuntu1.dsc

Last, we need to push our tag above.

$ git push upstream HEAD ubuntu/0.7.9-242-gdc2bd7994-0ubuntu1

cherry-picked changes

This is generally not the mechanism that is preferred for any release supported by trunk. It may be used in order to get a upload in really quickly for a hot fix.

Note: Doing this will break the daily packaging recipes until the cherry-picks are reverted from the packaging branch. This is because the recipe will try to build from trunk, and will fail to apply your cherry-picked patch. This makes sense... it will grab trunk and then try to apply patches, but the cherry-picked patch will already exist.

Process

The tool for doing this is in debian/cherry-pick. It takes as import a commit-ish that it will create a cherry-pick from.

## just tag current so you have a revert point.
$ git tag --delete xx-current >/dev/null 2>&1; git tag xx-current
$ git checkout ubuntu/xenial
$ ./debian/cherry-pick dc2bd79949

The tool will:

  • add a new file to debian/patches/ named cpick--topic that is dep-8 compatible
  • add that patch to debian/patches/series
  • verify that the patch applies (quilt push -a)
  • give you a chance to edit formatted the debian/changelog entry
  • prompt you to commit the change.

From here you follow along with the snapshot upload process from dch --release and beyond.

Note: After doing uploading, in order to keep the daily builds working, we will then have to revert change. See an example in commit 9f159f3a5

Outside Uploads

Any core-dev of ubuntu can upload to cloud-init in an SRU or development release and skip the process above. In order to keep sanity, we have to support the ability to have the packaging branches keep up with uploads that are done by members of other teams.

If someone uploads to ubuntu and does not use this process, we wont have "rich history" of those commits. So we will just take the dsc file and orig tarball and put it into the branch and tag appropriately. The tool to do this is git-import-dsc.

Its usage is fairly simple. Assuming a upload of cloud-init to xenial-proposed, just run it as:

$ git checkout ubuntu/xenial
$ git-import-dsc cloud-init xenial-proposed

That will download the dsc that is in xenial-proposed, and commit it. If there were a number of releases that were missed you could do

$ git checkout ubuntu/xenial
$ versions="0.7.9-233-ge586fe35-0ubuntu1~16.04.1 0.7.9-233-ge586fe35-0ubuntu1~16.04.2"
$ for ver in $versions; do git-import-dsc cloud-init $ver; done

Daily packaging recipes and ppa

We have daily packaging recipes that upload to the daily ppa. These build Ubuntu packaging on top of trunk. This differs from trunk built for the given Ubuntu release because the Ubuntu release may have patches applied.

Links

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment