Merge ~smoser/cloud-init:bug/1570325-chpasswd-hashed-passwds into ~tore.lonoy/cloud-init:hashed-chpasswd-support
- Git
- lp:~smoser/cloud-init
- bug/1570325-chpasswd-hashed-passwds
- Merge into hashed-chpasswd-support
Proposed by
Scott Moser
Status: | Merged | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Merge reported by: | Scott Moser | ||||||||||||||||||||
Merged at revision: | not available | ||||||||||||||||||||
Proposed branch: | ~smoser/cloud-init:bug/1570325-chpasswd-hashed-passwds | ||||||||||||||||||||
Merge into: | ~tore.lonoy/cloud-init:hashed-chpasswd-support | ||||||||||||||||||||
Diff against target: |
27550 lines (+14914/-4663) (has conflicts) 465 files modified
.gitignore (+1/-0) .pylintrc (+39/-0) ChangeLog (+97/-0) HACKING.rst (+8/-7) LICENSE (+22/-674) LICENSE-Apache2.0 (+202/-0) LICENSE-GPLv3 (+674/-0) Makefile (+9/-5) cloudinit/__init__.py (+0/-21) cloudinit/atomic_helper.py (+3/-2) cloudinit/cloud.py (+6/-20) cloudinit/cmd/__init__.py (+0/-21) cloudinit/cmd/main.py (+177/-38) cloudinit/config/__init__.py (+7/-18) cloudinit/config/cc_apt_configure.py (+10/-20) cloudinit/config/cc_apt_pipelining.py (+5/-15) cloudinit/config/cc_bootcmd.py (+8/-18) cloudinit/config/cc_byobu.py (+7/-17) cloudinit/config/cc_ca_certs.py (+7/-17) cloudinit/config/cc_chef.py (+8/-18) cloudinit/config/cc_debug.py (+4/-14) cloudinit/config/cc_disable_ec2_metadata.py (+7/-17) cloudinit/config/cc_disk_setup.py (+14/-24) cloudinit/config/cc_emit_upstart.py (+7/-17) cloudinit/config/cc_fan.py (+5/-15) cloudinit/config/cc_final_message.py (+7/-17) cloudinit/config/cc_foo.py (+7/-17) cloudinit/config/cc_growpart.py (+8/-17) cloudinit/config/cc_grub_dpkg.py (+7/-17) cloudinit/config/cc_keys_to_console.py (+7/-17) cloudinit/config/cc_landscape.py (+7/-17) cloudinit/config/cc_locale.py (+7/-17) cloudinit/config/cc_lxd.py (+5/-15) cloudinit/config/cc_mcollective.py (+8/-18) cloudinit/config/cc_migrator.py (+5/-15) cloudinit/config/cc_mounts.py (+52/-32) cloudinit/config/cc_ntp.py (+5/-15) cloudinit/config/cc_package_update_upgrade_install.py (+5/-15) cloudinit/config/cc_phone_home.py (+7/-17) cloudinit/config/cc_power_state_change.py (+5/-15) cloudinit/config/cc_puppet.py (+7/-17) cloudinit/config/cc_resizefs.py (+8/-17) cloudinit/config/cc_resolv_conf.py (+7/-17) cloudinit/config/cc_rh_subscription.py (+8/-17) cloudinit/config/cc_rightscale_userdata.py (+7/-17) cloudinit/config/cc_rsyslog.py (+8/-17) cloudinit/config/cc_runcmd.py (+7/-17) cloudinit/config/cc_salt_minion.py (+4/-14) cloudinit/config/cc_scripts_per_boot.py (+7/-17) cloudinit/config/cc_scripts_per_instance.py (+7/-17) cloudinit/config/cc_scripts_per_once.py (+7/-17) cloudinit/config/cc_scripts_user.py (+7/-17) cloudinit/config/cc_scripts_vendor.py (+6/-16) cloudinit/config/cc_seed_random.py (+8/-18) cloudinit/config/cc_set_hostname.py (+8/-18) cloudinit/config/cc_set_passwords.py (+52/-19) cloudinit/config/cc_snap_config.py (+5/-15) cloudinit/config/cc_snappy.py (+3/-13) cloudinit/config/cc_spacewalk.py (+3/-13) cloudinit/config/cc_ssh.py (+7/-17) cloudinit/config/cc_ssh_authkey_fingerprints.py (+5/-15) cloudinit/config/cc_ssh_import_id.py (+7/-17) cloudinit/config/cc_timezone.py (+7/-17) cloudinit/config/cc_ubuntu_init_switch.py (+5/-15) cloudinit/config/cc_update_etc_hosts.py (+7/-17) cloudinit/config/cc_update_hostname.py (+7/-17) cloudinit/config/cc_users_groups.py (+5/-15) cloudinit/config/cc_write_files.py (+5/-15) cloudinit/config/cc_yum_add_repo.py (+5/-15) cloudinit/cs_utils.py (+6/-15) cloudinit/dhclient_hook.py (+3/-2) cloudinit/distros/__init__.py (+35/-28) cloudinit/distros/arch.py (+5/-15) cloudinit/distros/debian.py (+25/-32) cloudinit/distros/fedora.py (+9/-19) cloudinit/distros/freebsd.py (+5/-15) cloudinit/distros/gentoo.py (+7/-17) cloudinit/distros/net_util.py (+9/-19) cloudinit/distros/parsers/__init__.py (+5/-15) cloudinit/distros/parsers/hostname.py (+5/-15) cloudinit/distros/parsers/hosts.py (+5/-15) cloudinit/distros/parsers/resolv_conf.py (+12/-19) cloudinit/distros/parsers/sys_conf.py (+5/-15) cloudinit/distros/rhel.py (+22/-32) cloudinit/distros/rhel_util.py (+9/-20) cloudinit/distros/sles.py (+5/-17) cloudinit/distros/ubuntu.py (+10/-20) cloudinit/distros/ug_util.py (+10/-20) cloudinit/ec2_utils.py (+11/-18) cloudinit/filters/__init__.py (+0/-21) cloudinit/filters/launch_index.py (+9/-19) cloudinit/gpg.py (+8/-17) cloudinit/handlers/__init__.py (+9/-19) cloudinit/handlers/boot_hook.py (+9/-19) cloudinit/handlers/cloud_config.py (+9/-19) cloudinit/handlers/shell_script.py (+9/-19) cloudinit/handlers/upstart_job.py (+10/-20) cloudinit/helpers.py (+11/-19) cloudinit/importer.py (+9/-19) cloudinit/log.py (+9/-19) cloudinit/mergers/__init__.py (+5/-15) cloudinit/mergers/m_dict.py (+5/-15) cloudinit/mergers/m_list.py (+5/-15) cloudinit/mergers/m_str.py (+3/-14) cloudinit/net/__init__.py (+94/-98) cloudinit/net/cmdline.py (+27/-26) cloudinit/net/eni.py (+42/-38) cloudinit/net/netplan.py (+373/-0) cloudinit/net/network_state.py (+312/-22) cloudinit/net/renderer.py (+16/-15) cloudinit/net/renderers.py (+53/-0) cloudinit/net/sysconfig.py (+69/-35) cloudinit/net/udev.py (+3/-14) cloudinit/netinfo.py (+9/-19) cloudinit/patcher.py (+7/-17) cloudinit/registry.py (+5/-3) cloudinit/reporting/__init__.py (+3/-2) cloudinit/reporting/events.py (+4/-3) cloudinit/reporting/handlers.py (+3/-1) cloudinit/safeyaml.py (+6/-15) cloudinit/serial.py (+3/-14) cloudinit/settings.py (+12/-19) cloudinit/signal_handler.py (+7/-17) cloudinit/sources/DataSourceAliYun.py (+8/-1) cloudinit/sources/DataSourceAltCloud.py (+10/-20) cloudinit/sources/DataSourceAzure.py (+158/-144) cloudinit/sources/DataSourceBigstep.py (+7/-4) cloudinit/sources/DataSourceCloudSigma.py (+7/-16) cloudinit/sources/DataSourceCloudStack.py (+13/-23) cloudinit/sources/DataSourceConfigDrive.py (+15/-22) cloudinit/sources/DataSourceDigitalOcean.py (+5/-15) cloudinit/sources/DataSourceEc2.py (+159/-21) cloudinit/sources/DataSourceGCE.py (+5/-15) cloudinit/sources/DataSourceMAAS.py (+7/-17) cloudinit/sources/DataSourceNoCloud.py (+9/-19) cloudinit/sources/DataSourceNone.py (+5/-15) cloudinit/sources/DataSourceOVF.py (+42/-23) cloudinit/sources/DataSourceOpenNebula.py (+15/-25) cloudinit/sources/DataSourceOpenStack.py (+17/-18) cloudinit/sources/DataSourceSmartOS.py (+6/-17) cloudinit/sources/__init__.py (+25/-21) cloudinit/sources/helpers/__init__.py (+0/-13) cloudinit/sources/helpers/azure.py (+4/-0) cloudinit/sources/helpers/digitalocean.py (+4/-14) cloudinit/sources/helpers/openstack.py (+21/-19) cloudinit/sources/helpers/vmware/__init__.py (+0/-13) cloudinit/sources/helpers/vmware/imc/__init__.py (+0/-13) cloudinit/sources/helpers/vmware/imc/boot_proto.py (+6/-16) cloudinit/sources/helpers/vmware/imc/config.py (+6/-16) cloudinit/sources/helpers/vmware/imc/config_file.py (+6/-16) cloudinit/sources/helpers/vmware/imc/config_namespace.py (+6/-16) cloudinit/sources/helpers/vmware/imc/config_nic.py (+12/-34) cloudinit/sources/helpers/vmware/imc/config_source.py (+6/-16) cloudinit/sources/helpers/vmware/imc/guestcust_error.py (+6/-16) cloudinit/sources/helpers/vmware/imc/guestcust_event.py (+6/-16) cloudinit/sources/helpers/vmware/imc/guestcust_state.py (+6/-16) cloudinit/sources/helpers/vmware/imc/guestcust_util.py (+6/-16) cloudinit/sources/helpers/vmware/imc/ipv4_mode.py (+6/-16) cloudinit/sources/helpers/vmware/imc/nic.py (+6/-16) cloudinit/sources/helpers/vmware/imc/nic_base.py (+6/-16) cloudinit/ssh_util.py (+26/-24) cloudinit/stages.py (+40/-38) cloudinit/templater.py (+11/-21) cloudinit/type_utils.py (+9/-19) cloudinit/url_helper.py (+10/-20) cloudinit/user_data.py (+9/-19) cloudinit/util.py (+89/-93) cloudinit/version.py (+13/-16) cloudinit/warnings.py (+139/-0) config/cloud.cfg.d/05_logging.cfg (+10/-5) dev/null (+0/-53) doc/examples/cloud-config-apt.txt (+2/-2) doc/examples/cloud-config-boot-cmds.txt (+2/-2) doc/examples/cloud-config-gluster.txt (+2/-2) doc/examples/cloud-config-mount-points.txt (+4/-4) doc/examples/cloud-config.txt (+4/-4) doc/merging.rst (+42/-35) doc/rtd/index.rst (+32/-17) doc/rtd/topics/availability.rst (+4/-3) doc/rtd/topics/boot.rst (+128/-0) doc/rtd/topics/capabilities.rst (+31/-6) doc/rtd/topics/datasources.rst (+38/-140) doc/rtd/topics/datasources/altcloud.rst (+91/-0) doc/rtd/topics/datasources/azure.rst (+155/-0) doc/rtd/topics/datasources/cloudsigma.rst (+40/-0) doc/rtd/topics/datasources/cloudstack.rst (+34/-0) doc/rtd/topics/datasources/configdrive.rst (+129/-0) doc/rtd/topics/datasources/digitalocean.rst (+28/-0) doc/rtd/topics/datasources/ec2.rst (+61/-0) doc/rtd/topics/datasources/fallback.rst (+16/-0) doc/rtd/topics/datasources/maas.rst (+8/-0) doc/rtd/topics/datasources/nocloud.rst (+75/-0) doc/rtd/topics/datasources/opennebula.rst (+146/-0) doc/rtd/topics/datasources/openstack.rst (+62/-0) doc/rtd/topics/datasources/ovf.rst (+12/-0) doc/rtd/topics/datasources/smartos.rst (+164/-0) doc/rtd/topics/dir_layout.rst (+3/-2) doc/rtd/topics/examples.rst (+22/-21) doc/rtd/topics/format.rst (+22/-20) doc/rtd/topics/hacking.rst (+1/-0) doc/rtd/topics/logging.rst (+20/-19) doc/rtd/topics/merging.rst (+3/-2) doc/rtd/topics/modules.rst (+3/-2) doc/rtd/topics/moreinfo.rst (+4/-3) doc/rtd/topics/tests.rst (+289/-0) doc/rtd/topics/vendordata.rst (+71/-0) packages/debian/copyright (+16/-0) packages/debian/rules.in (+2/-0) packages/redhat/cloud-init.spec.in (+4/-3) packages/suse/cloud-init.spec.in (+1/-1) setup.py (+12/-21) systemd/cloud-init-generator (+37/-2) systemd/cloud-init-local.service (+3/-3) systemd/cloud-init.service (+2/-4) sysvinit/redhat/cloud-config (+3/-16) sysvinit/redhat/cloud-final (+3/-16) sysvinit/redhat/cloud-init (+3/-16) sysvinit/redhat/cloud-init-local (+3/-16) tests/cloud_tests/__init__.py (+31/-0) tests/cloud_tests/__main__.py (+93/-0) tests/cloud_tests/args.py (+221/-0) tests/cloud_tests/collect.py (+161/-0) tests/cloud_tests/config.py (+113/-0) tests/cloud_tests/configs/bugs/README.md (+13/-0) tests/cloud_tests/configs/bugs/lp1511485.yaml (+11/-0) tests/cloud_tests/configs/bugs/lp1611074.yaml (+8/-0) tests/cloud_tests/configs/bugs/lp1628337.yaml (+20/-0) tests/cloud_tests/configs/examples/README.md (+12/-0) tests/cloud_tests/configs/examples/TODO.md (+15/-0) tests/cloud_tests/configs/examples/add_apt_repositories.yaml (+21/-0) tests/cloud_tests/configs/examples/alter_completion_message.yaml (+16/-0) tests/cloud_tests/configs/examples/configure_instance_trusted_ca_certificates.yaml (+41/-0) tests/cloud_tests/configs/examples/configure_instances_ssh_keys.yaml (+63/-0) tests/cloud_tests/configs/examples/including_user_groups.yaml (+53/-0) tests/cloud_tests/configs/examples/install_arbitrary_packages.yaml (+20/-0) tests/cloud_tests/configs/examples/install_run_chef_recipes.yaml (+94/-0) tests/cloud_tests/configs/examples/run_apt_upgrade.yaml (+11/-0) tests/cloud_tests/configs/examples/run_commands.yaml (+16/-0) tests/cloud_tests/configs/examples/run_commands_first_boot.yaml (+16/-0) tests/cloud_tests/configs/examples/setup_run_puppet.yaml (+55/-0) tests/cloud_tests/configs/examples/writing_out_arbitrary_files.yaml (+45/-0) tests/cloud_tests/configs/main/README.md (+11/-0) tests/cloud_tests/configs/main/command_output_simple.yaml (+13/-0) tests/cloud_tests/configs/modules/README.md (+12/-0) tests/cloud_tests/configs/modules/TODO.md (+100/-0) tests/cloud_tests/configs/modules/apt_configure_conf.yaml (+19/-0) tests/cloud_tests/configs/modules/apt_configure_disable_suites.yaml (+17/-0) tests/cloud_tests/configs/modules/apt_configure_primary.yaml (+19/-0) tests/cloud_tests/configs/modules/apt_configure_proxy.yaml (+16/-0) tests/cloud_tests/configs/modules/apt_configure_security.yaml (+15/-0) tests/cloud_tests/configs/modules/apt_configure_sources_key.yaml (+47/-0) tests/cloud_tests/configs/modules/apt_configure_sources_keyserver.yaml (+20/-0) tests/cloud_tests/configs/modules/apt_configure_sources_list.yaml (+19/-0) tests/cloud_tests/configs/modules/apt_configure_sources_ppa.yaml (+20/-0) tests/cloud_tests/configs/modules/apt_pipelining_disable.yaml (+13/-0) tests/cloud_tests/configs/modules/apt_pipelining_os.yaml (+13/-0) tests/cloud_tests/configs/modules/bootcmd.yaml (+13/-0) tests/cloud_tests/configs/modules/byobu.yaml (+18/-0) tests/cloud_tests/configs/modules/ca_certs.yaml (+52/-0) tests/cloud_tests/configs/modules/debug_disable.yaml (+9/-0) tests/cloud_tests/configs/modules/debug_enable.yaml (+9/-0) tests/cloud_tests/configs/modules/final_message.yaml (+13/-0) tests/cloud_tests/configs/modules/keys_to_console.yaml (+13/-0) tests/cloud_tests/configs/modules/landscape.yaml (+26/-0) tests/cloud_tests/configs/modules/locale.yaml (+19/-0) tests/cloud_tests/configs/modules/lxd_bridge.yaml (+30/-0) tests/cloud_tests/configs/modules/lxd_dir.yaml (+17/-0) tests/cloud_tests/configs/modules/ntp.yaml (+20/-0) tests/cloud_tests/configs/modules/ntp_pools.yaml (+23/-0) tests/cloud_tests/configs/modules/ntp_servers.yaml (+20/-0) tests/cloud_tests/configs/modules/package_update_upgrade_install.yaml (+22/-0) tests/cloud_tests/configs/modules/runcmd.yaml (+13/-0) tests/cloud_tests/configs/modules/salt_minion.yaml (+34/-0) tests/cloud_tests/configs/modules/seed_random_command.yaml (+18/-0) tests/cloud_tests/configs/modules/seed_random_data.yaml (+15/-0) tests/cloud_tests/configs/modules/set_hostname.yaml (+18/-0) tests/cloud_tests/configs/modules/set_hostname_fqdn.yaml (+20/-0) tests/cloud_tests/configs/modules/set_password.yaml (+17/-0) tests/cloud_tests/configs/modules/set_password_expire.yaml (+28/-0) tests/cloud_tests/configs/modules/set_password_list.yaml (+40/-0) tests/cloud_tests/configs/modules/set_password_list_string.yaml (+40/-0) tests/cloud_tests/configs/modules/snappy.yaml (+13/-0) tests/cloud_tests/configs/modules/ssh_auth_key_fingerprints_disable.yaml (+13/-0) tests/cloud_tests/configs/modules/ssh_auth_key_fingerprints_enable.yaml (+16/-0) tests/cloud_tests/configs/modules/ssh_import_id.yaml (+14/-0) tests/cloud_tests/configs/modules/ssh_keys_generate.yaml (+42/-0) tests/cloud_tests/configs/modules/ssh_keys_provided.yaml (+102/-0) tests/cloud_tests/configs/modules/timezone.yaml (+14/-0) tests/cloud_tests/configs/modules/user_groups.yaml (+50/-0) tests/cloud_tests/configs/modules/write_files.yaml (+42/-0) tests/cloud_tests/images/__init__.py (+11/-0) tests/cloud_tests/images/base.py (+65/-0) tests/cloud_tests/images/lxd.py (+92/-0) tests/cloud_tests/instances/__init__.py (+10/-0) tests/cloud_tests/instances/base.py (+120/-0) tests/cloud_tests/instances/lxd.py (+121/-0) tests/cloud_tests/manage.py (+75/-0) tests/cloud_tests/platforms.yaml (+17/-0) tests/cloud_tests/platforms/__init__.py (+19/-0) tests/cloud_tests/platforms/base.py (+53/-0) tests/cloud_tests/platforms/lxd.py (+97/-0) tests/cloud_tests/releases.yaml (+79/-0) tests/cloud_tests/setup_image.py (+195/-0) tests/cloud_tests/snapshots/__init__.py (+10/-0) tests/cloud_tests/snapshots/base.py (+44/-0) tests/cloud_tests/snapshots/lxd.py (+50/-0) tests/cloud_tests/stage.py (+113/-0) tests/cloud_tests/testcases.yaml (+27/-0) tests/cloud_tests/testcases/__init__.py (+47/-0) tests/cloud_tests/testcases/base.py (+137/-0) tests/cloud_tests/testcases/bugs/__init__.py (+8/-0) tests/cloud_tests/testcases/bugs/lp1511485.py (+15/-0) tests/cloud_tests/testcases/bugs/lp1628337.py (+23/-0) tests/cloud_tests/testcases/examples/__init__.py (+8/-0) tests/cloud_tests/testcases/examples/add_apt_repositories.py (+20/-0) tests/cloud_tests/testcases/examples/alter_completion_message.py (+49/-0) tests/cloud_tests/testcases/examples/configure_instance_trusted_ca_certificates.py (+27/-0) tests/cloud_tests/testcases/examples/configure_instances_ssh_keys.py (+31/-0) tests/cloud_tests/testcases/examples/including_user_groups.py (+43/-0) tests/cloud_tests/testcases/examples/install_arbitrary_packages.py (+20/-0) tests/cloud_tests/testcases/examples/run_apt_upgrade.py (+19/-0) tests/cloud_tests/testcases/examples/run_commands.py (+15/-0) tests/cloud_tests/testcases/examples/run_commands_first_boot.py (+15/-0) tests/cloud_tests/testcases/examples/writing_out_arbitrary_files.py (+30/-0) tests/cloud_tests/testcases/main/__init__.py (+8/-0) tests/cloud_tests/testcases/main/command_output_simple.py (+21/-0) tests/cloud_tests/testcases/modules/__init__.py (+8/-0) tests/cloud_tests/testcases/modules/apt_configure_conf.py (+20/-0) tests/cloud_tests/testcases/modules/apt_configure_disable_suites.py (+15/-0) tests/cloud_tests/testcases/modules/apt_configure_primary.py (+20/-0) tests/cloud_tests/testcases/modules/apt_configure_proxy.py (+22/-0) tests/cloud_tests/testcases/modules/apt_configure_security.py (+15/-0) tests/cloud_tests/testcases/modules/apt_configure_sources_key.py (+23/-0) tests/cloud_tests/testcases/modules/apt_configure_sources_keyserver.py (+23/-0) tests/cloud_tests/testcases/modules/apt_configure_sources_list.py (+26/-0) tests/cloud_tests/testcases/modules/apt_configure_sources_ppa.py (+23/-0) tests/cloud_tests/testcases/modules/apt_pipelining_disable.py (+15/-0) tests/cloud_tests/testcases/modules/apt_pipelining_os.py (+15/-0) tests/cloud_tests/testcases/modules/bootcmd.py (+15/-0) tests/cloud_tests/testcases/modules/byobu.py (+25/-0) tests/cloud_tests/testcases/modules/ca_certs.py (+20/-0) tests/cloud_tests/testcases/modules/debug_disable.py (+16/-0) tests/cloud_tests/testcases/modules/debug_enable.py (+15/-0) tests/cloud_tests/testcases/modules/final_message.py (+49/-0) tests/cloud_tests/testcases/modules/keys_to_console.py (+22/-0) tests/cloud_tests/testcases/modules/locale.py (+27/-0) tests/cloud_tests/testcases/modules/lxd_bridge.py (+26/-0) tests/cloud_tests/testcases/modules/lxd_dir.py (+20/-0) tests/cloud_tests/testcases/modules/ntp.py (+28/-0) tests/cloud_tests/testcases/modules/ntp_pools.py (+28/-0) tests/cloud_tests/testcases/modules/ntp_servers.py (+25/-0) tests/cloud_tests/testcases/modules/package_update_upgrade_install.py (+38/-0) tests/cloud_tests/testcases/modules/runcmd.py (+15/-0) tests/cloud_tests/testcases/modules/salt_minion.py (+29/-0) tests/cloud_tests/testcases/modules/seed_random_data.py (+15/-0) tests/cloud_tests/testcases/modules/set_hostname.py (+15/-0) tests/cloud_tests/testcases/modules/set_hostname_fqdn.py (+26/-0) tests/cloud_tests/testcases/modules/set_password.py (+22/-0) tests/cloud_tests/testcases/modules/set_password_expire.py (+23/-0) tests/cloud_tests/testcases/modules/set_password_list.py (+11/-0) tests/cloud_tests/testcases/modules/set_password_list_string.py (+11/-0) tests/cloud_tests/testcases/modules/snappy.py (+18/-0) tests/cloud_tests/testcases/modules/ssh_auth_key_fingerprints_disable.py (+24/-0) tests/cloud_tests/testcases/modules/ssh_auth_key_fingerprints_enable.py (+18/-0) tests/cloud_tests/testcases/modules/ssh_import_id.py (+26/-0) tests/cloud_tests/testcases/modules/ssh_keys_generate.py (+57/-0) tests/cloud_tests/testcases/modules/ssh_keys_provided.py (+69/-0) tests/cloud_tests/testcases/modules/timezone.py (+15/-0) tests/cloud_tests/testcases/modules/user_groups.py (+43/-0) tests/cloud_tests/testcases/modules/write_files.py (+30/-0) tests/cloud_tests/util.py (+163/-0) tests/cloud_tests/verify.py (+93/-0) tests/data/merge_sources/expected8.yaml (+1/-1) tests/data/merge_sources/source8-1.yaml (+1/-1) tests/unittests/__init__.py (+2/-0) tests/unittests/helpers.py (+63/-48) tests/unittests/test__init__.py (+61/-33) tests/unittests/test_atomic_helper.py (+6/-2) tests/unittests/test_builtin_handlers.py (+4/-0) tests/unittests/test_cli.py (+5/-0) tests/unittests/test_cs_util.py (+4/-0) tests/unittests/test_data.py (+76/-0) tests/unittests/test_datasource/test_aliyun.py (+4/-0) tests/unittests/test_datasource/test_altcloud.py (+6/-18) tests/unittests/test_datasource/test_azure.py (+32/-22) tests/unittests/test_datasource/test_azure_helper.py (+4/-0) tests/unittests/test_datasource/test_cloudsigma.py (+20/-2) tests/unittests/test_datasource/test_cloudstack.py (+4/-0) tests/unittests/test_datasource/test_common.py (+75/-0) tests/unittests/test_datasource/test_configdrive.py (+6/-3) tests/unittests/test_datasource/test_digitalocean.py (+5/-14) tests/unittests/test_datasource/test_gce.py (+8/-15) tests/unittests/test_datasource/test_maas.py (+2/-0) tests/unittests/test_datasource/test_nocloud.py (+2/-0) tests/unittests/test_datasource/test_opennebula.py (+2/-0) tests/unittests/test_datasource/test_openstack.py (+10/-23) tests/unittests/test_datasource/test_ovf.py (+5/-15) tests/unittests/test_datasource/test_smartos.py (+12/-21) tests/unittests/test_distros/test_create_users.py (+151/-0) tests/unittests/test_distros/test_generic.py (+2/-0) tests/unittests/test_distros/test_hostname.py (+4/-0) tests/unittests/test_distros/test_hosts.py (+4/-0) tests/unittests/test_distros/test_netconfig.py (+354/-4) tests/unittests/test_distros/test_resolv.py (+5/-1) tests/unittests/test_distros/test_sysconfig.py (+4/-0) tests/unittests/test_distros/test_user_data_normalize.py (+4/-0) tests/unittests/test_ec2_util.py (+51/-2) tests/unittests/test_filters/test_launch_index.py (+4/-0) tests/unittests/test_handler/test_handler_apt_conf_v1.py (+2/-0) tests/unittests/test_handler/test_handler_apt_configure_sources_list_v1.py (+2/-0) tests/unittests/test_handler/test_handler_apt_configure_sources_list_v3.py (+2/-0) tests/unittests/test_handler/test_handler_apt_source_v1.py (+2/-0) tests/unittests/test_handler/test_handler_apt_source_v3.py (+2/-0) tests/unittests/test_handler/test_handler_ca_certs.py (+4/-0) tests/unittests/test_handler/test_handler_chef.py (+4/-0) tests/unittests/test_handler/test_handler_debug.py (+4/-14) tests/unittests/test_handler/test_handler_disk_setup.py (+120/-0) tests/unittests/test_handler/test_handler_growpart.py (+2/-0) tests/unittests/test_handler/test_handler_locale.py (+5/-15) tests/unittests/test_handler/test_handler_lxd.py (+4/-0) tests/unittests/test_handler/test_handler_mcollective.py (+4/-0) tests/unittests/test_handler/test_handler_mounts.py (+4/-0) tests/unittests/test_handler/test_handler_ntp.py (+4/-0) tests/unittests/test_handler/test_handler_power_state.py (+4/-0) tests/unittests/test_handler/test_handler_rsyslog.py (+4/-0) tests/unittests/test_handler/test_handler_seed_random.py (+5/-11) tests/unittests/test_handler/test_handler_set_hostname.py (+4/-0) tests/unittests/test_handler/test_handler_snappy.py (+4/-0) tests/unittests/test_handler/test_handler_spacewalk.py (+4/-0) tests/unittests/test_handler/test_handler_timezone.py (+5/-15) tests/unittests/test_handler/test_handler_write_files.py (+2/-0) tests/unittests/test_handler/test_handler_yum_add_repo.py (+4/-0) tests/unittests/test_helpers.py (+4/-0) tests/unittests/test_merging.py (+4/-0) tests/unittests/test_net.py (+740/-66) tests/unittests/test_pathprefix2dict.py (+2/-0) tests/unittests/test_registry.py (+4/-0) tests/unittests/test_reporting.py (+3/-2) tests/unittests/test_rh_subscription.py (+7/-13) tests/unittests/test_runs/test_merge_run.py (+4/-0) tests/unittests/test_runs/test_simple_run.py (+4/-0) tests/unittests/test_sshutil.py (+25/-1) tests/unittests/test_templating.py (+5/-15) tests/unittests/test_util.py (+71/-0) tests/unittests/test_version.py (+14/-0) tests/unittests/test_vmware_config_file.py (+6/-16) tools/Z99-cloud-locale-test.sh (+77/-75) tools/Z99-cloudinit-warnings.sh (+30/-0) tools/cloud-init-per (+1/-0) tools/ds-identify (+1266/-0) tools/hacking.py (+3/-2) tools/hook-dhclient (+3/-0) tools/hook-network-manager (+2/-0) tools/hook-rhel.sh (+2/-0) tools/make-mime.py (+3/-1) tools/make-tarball (+1/-1) tools/mock-meta.py (+27/-12) tools/motd-hook (+4/-16) tools/net-convert.py (+84/-0) tools/read-dependencies (+2/-0) tools/read-version (+3/-1) tools/uncloud-init (+2/-1) tools/validate-yaml.py (+5/-3) tools/write-ssh-key-fingerprints (+1/-0) tox.ini (+31/-7) Conflict in cloudinit/config/cc_set_passwords.py |
||||||||||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Tore | Approve | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message

Scott Moser (smoser) wrote : | # |
marked as merged. i'll get this into trunk under https:/
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | diff --git a/.gitignore b/.gitignore |
2 | index 865cac1..3946ec7 100644 |
3 | --- a/.gitignore |
4 | +++ b/.gitignore |
5 | @@ -5,3 +5,4 @@ dist |
6 | __pycache__ |
7 | .tox |
8 | .coverage |
9 | +doc/rtd_html |
10 | diff --git a/.pylintrc b/.pylintrc |
11 | new file mode 100644 |
12 | index 0000000..b8cda03 |
13 | --- /dev/null |
14 | +++ b/.pylintrc |
15 | @@ -0,0 +1,39 @@ |
16 | +[MASTER] |
17 | + |
18 | +# --go-faster, use multiple processes to speed up Pylint |
19 | +jobs=4 |
20 | + |
21 | + |
22 | +[MESSAGES CONTROL] |
23 | + |
24 | +# Errors only |
25 | +disable=C, F, I, R, W |
26 | + |
27 | + |
28 | +[REPORTS] |
29 | + |
30 | +# Set the output format. Available formats are text, parseable, colorized, msvs |
31 | +output-format=colorized |
32 | + |
33 | +# Just the errors please, no full report |
34 | +reports=no |
35 | + |
36 | + |
37 | +[TYPECHECK] |
38 | + |
39 | +# List of module names for which member attributes should not be checked |
40 | +# (useful for modules/projects where namespaces are manipulated during runtime |
41 | +# and thus existing member attributes cannot be deduced by static analysis. It |
42 | +# supports qualified module names, as well as Unix pattern matching. |
43 | +ignored-modules=six.moves,pkg_resources |
44 | + |
45 | +# List of class names for which member attributes should not be checked (useful |
46 | +# for classes with dynamically set attributes). This supports the use of |
47 | +# qualified names. |
48 | +ignored-classes=optparse.Values,thread._local |
49 | + |
50 | +# List of members which are set dynamically and missed by pylint inference |
51 | +# system, and so shouldn't trigger E1101 when accessed. Python regular |
52 | +# expressions are accepted. |
53 | +generated-members=types,http.client,command_handlers |
54 | + |
55 | diff --git a/ChangeLog b/ChangeLog |
56 | index 71df7ad..80405bc 100644 |
57 | --- a/ChangeLog |
58 | +++ b/ChangeLog |
59 | @@ -1,3 +1,100 @@ |
60 | +0.7.9: |
61 | + - doc: adjust headers in tests documentation for consistency. |
62 | + - pep8: fix issue found in zesty build with pycodestyle. |
63 | + - integration test: initial commit of integration test framework |
64 | + [Wesley Wiedenmeier] |
65 | + - LICENSE: Allow dual licensing GPL-3 or Apache 2.0 [Jon Grimm] |
66 | + - Fix config order of precedence, putting kernel command line over system. |
67 | + [Wesley Wiedenmeier] (LP: #1582323) |
68 | + - pep8: whitespace fix |
69 | + - Update the list of valid ssh keys. [Michael Felt] |
70 | + - network: add ENI unit test for statically rendered routes. |
71 | + - set_hostname: avoid erroneously appending domain to fqdn |
72 | + [Lars Kellogg-Stedman] (LP: #1647910) |
73 | + - doc: change 'nobootwait' to 'nofail' in docs [Anhad Jai Singh] |
74 | + - Replace an expired bit.ly link in code comment. |
75 | + - user-groups: fix bug when groups was provided as string and had spaces |
76 | + (LP: #1354694) |
77 | + - mounts: use mount -a again to accomplish mounts (LP: #1647708) |
78 | + - CloudSigma: Fix bug where datasource was not loaded in local search. |
79 | + (LP: #1648380) |
80 | + - when adding a user, strip whitespace from group list [Lars Kellogg-Stedman] |
81 | + (LP: #1354694) |
82 | + - fix decoding of utf-8 chars in yaml test |
83 | + - Replace usage of sys_netdev_info with read_sys_net (LP: #1625766) |
84 | + - fix problems found in python2.6 test. |
85 | + - OpenStack: extend physical types to include hyperv, hw_veb, vhost_user. |
86 | + (LP: #1642679) |
87 | + - tests: fix assumptions that expected no eth0 in system. (LP: #1644043) |
88 | + - net/cmdline: Consider ip= or ip6= on command line not only ip= |
89 | + (LP: #1639930) |
90 | + - Just use file logging by default (LP: #1643990) |
91 | + - Improve formatting for ProcessExecutionError [Wesley Wiedenmeier] |
92 | + - flake8: fix trailing white space |
93 | + - Doc: various documentation fixes [Sean Bright] |
94 | + - cloudinit/config/cc_rh_subscription.py: Remove repos before adding |
95 | + [Brent Baude] |
96 | + - packages/redhat: fix rpm spec file. |
97 | + - main: set TZ in environment if not already set. [Ryan Harper] |
98 | + - Azure: No longer rely on walinux agent. (LP: #1538522) |
99 | + - disk_setup: Use sectors as unit when formatting MBR disks with sfdisk. |
100 | + [Daniel Watkins] (LP: #1460715) |
101 | + - Add activate_datasource, for datasource specific code paths. (LP: #1611074) |
102 | + - systemd: cloud-init-local use RequiresMountsFor=/var/lib/cloud |
103 | + (LP: #1642062) |
104 | + - systemd: cloud-init remove After=systemd-networkd-wait-online |
105 | + - systemd: cloud-init-local change Before basic to sysinit |
106 | + - pep8: fix style errors reported by pycodestyle 2.1.0 |
107 | + - systemd: drop both Wants and After local-fs.target |
108 | + - systemd: networking service adjustments. (LP: #1636912) |
109 | + - systemd: replace Before=basic.target, dbus.target with sysinit.target |
110 | + (LP: #1629797) |
111 | + - doc: Add documentation on stages of boot. |
112 | + - doc: make the RST files consistently formated and other improvements. |
113 | + - Ec2: fix syntax and tox in previous commit. |
114 | + - Ec2: protect against non-dictionary in block-device-mapping. |
115 | + - doc: fixed example to not overwrite /etc/hosts [Chris Glass] |
116 | + - Doc: fix spelling / typos in ca_certs and scripts_vendor. |
117 | + - pyflakes: fix issue with pyflakes 1.3 found in ubuntu zesty-proposed. |
118 | + - net/cmdline: Further adjustments to ipv6 support [LaMont Jones] |
119 | + (LP: #1621615) |
120 | + - Add coverage dependency to bddeb to fix package build. |
121 | + - doc: improve HACKING.rst file |
122 | + - dmidecode: Allow dmidecode to be used on aarch64 [Robert Schweikert] |
123 | + - AliYun: Add new datasource for Ali-Cloud ECS [kaihuan.pkh] |
124 | + - Add coverage collection to tox unit tests. [Joshua Powers] |
125 | + - cc_users_groups: fix remaing call to ds.normalize_user_groups [Ryan Harper] |
126 | + - disk-config: udev settle after partitioning in gpt format. (LP: #1626243) |
127 | + - unittests: do not read system /etc/cloud/cloud.cfg.d (LP: #1635350) |
128 | + - Add documentation for logging features. [Wesley Wiedenmeier] |
129 | + - Add support for snap create-user on Ubuntu Core images. [Ryan Harper] |
130 | + - Fix sshd restarts for rhel distros. [Jim Gorz] |
131 | + - OpenNebula: replace 'ip' parsing with cloudinit.net usage. |
132 | + - Fix python2.6 things found running in centos 6. |
133 | + - Move user/group functions to new ug_util file |
134 | + - DigitalOcean: enable usage of data source by default. |
135 | + - update Gentoo initscripts to run in the correct order [Matthew Thode] |
136 | + - MAAS: improve the main of datasource to look at kernel cmdline config. |
137 | + - tests: silence the Cheetah UserWarning about NameMapper C version. |
138 | + - systemd: Run cloud-init.service Before dbus.socket not dbus.target |
139 | + [Daniel Watkins] (LP: #1629797) |
140 | + - systemd: run cloud-init.service Before dbus.service (LP: #1629797) |
141 | + - unittests: fix use of mock 2.0 'assert_called' when running make check |
142 | + [Ryan Harper] |
143 | + - Improve module documentation and doc cleanup. [Wesley Wiedenmeier] |
144 | + - lxd: Update network config for LXD 2.3 [Stéphane Graber] |
145 | + - DigitalOcean: use meta-data for network configruation [Ben Howard] |
146 | + - ntp: move to run after apt configuration (LP: #1628337) |
147 | + - Decode unicode types in decode_binary [Robert Schweikert] |
148 | + - systemd: Ensure that cloud-init-local happens before NetworkManager |
149 | + - Allow ephemeral drive to be unpartitioned [Paul Meyer] |
150 | + - subp: add 'update_env' argument |
151 | + - net: support reading ipv6 dhcp config from initramfs [LaMont Jones] |
152 | + (LP: #1621615, #1621507) |
153 | + - Adjust mounts and disk configuration for systemd. (LP: #1611074) |
154 | + - dmidecode: run dmidecode only on i?86 or x86_64 arch. [Robert Schweikert] |
155 | + - systemd: put cloud-init.target After multi-user.target (LP: #1623868) |
156 | + |
157 | 0.7.8: |
158 | - SmartOS: more improvements for network configuration |
159 | - add ntp config module [Ryan Harper] |
160 | diff --git a/HACKING.rst b/HACKING.rst |
161 | index 4072d0f..caee7ac 100644 |
162 | --- a/HACKING.rst |
163 | +++ b/HACKING.rst |
164 | @@ -1,13 +1,13 @@ |
165 | -===================== |
166 | +********************* |
167 | Hacking on cloud-init |
168 | -===================== |
169 | +********************* |
170 | |
171 | This document describes how to contribute changes to cloud-init. |
172 | It assumes you have a `Launchpad`_ account, and refers to your launchpad user |
173 | as ``LP_USER`` throughout. |
174 | |
175 | Do these things once |
176 | --------------------- |
177 | +==================== |
178 | |
179 | * To contribute, you must sign the Canonical `contributor license agreement`_ |
180 | |
181 | @@ -21,11 +21,12 @@ Do these things once |
182 | There is more information on Launchpad as a git hosting site in |
183 | `Launchpad git documentation`_. |
184 | |
185 | -* Create a new remote pointing to your personal Launchpad repository |
186 | +* Create a new remote pointing to your personal Launchpad repository. |
187 | + This is equivalent to 'fork' on github. |
188 | |
189 | - This is equivalent to 'fork' on github:: |
190 | + .. code:: sh |
191 | |
192 | - git remote add LP_USER git+ssh://LP_USER@git.launchpad.net/~LP_USER/cloud-init |
193 | + git remote add LP_USER ssh://LP_USER@git.launchpad.net/~LP_USER/cloud-init |
194 | git push LP_USER master |
195 | |
196 | .. _repository: https://git.launchpad.net/cloud-init |
197 | @@ -34,7 +35,7 @@ Do these things once |
198 | .. _Launchpad git documentation: https://help.launchpad.net/Code/Git |
199 | |
200 | Do these things for each feature or bug |
201 | ---------------------------------------- |
202 | +======================================= |
203 | |
204 | * Create a new topic branch for your work:: |
205 | |
206 | diff --git a/LICENSE b/LICENSE |
207 | index 94a9ed0..8a23b4d 100644 |
208 | --- a/LICENSE |
209 | +++ b/LICENSE |
210 | @@ -1,674 +1,22 @@ |
211 | - GNU GENERAL PUBLIC LICENSE |
212 | - Version 3, 29 June 2007 |
213 | - |
214 | - Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
215 | - Everyone is permitted to copy and distribute verbatim copies |
216 | - of this license document, but changing it is not allowed. |
217 | - |
218 | - Preamble |
219 | - |
220 | - The GNU General Public License is a free, copyleft license for |
221 | -software and other kinds of works. |
222 | - |
223 | - The licenses for most software and other practical works are designed |
224 | -to take away your freedom to share and change the works. By contrast, |
225 | -the GNU General Public License is intended to guarantee your freedom to |
226 | -share and change all versions of a program--to make sure it remains free |
227 | -software for all its users. We, the Free Software Foundation, use the |
228 | -GNU General Public License for most of our software; it applies also to |
229 | -any other work released this way by its authors. You can apply it to |
230 | -your programs, too. |
231 | - |
232 | - When we speak of free software, we are referring to freedom, not |
233 | -price. Our General Public Licenses are designed to make sure that you |
234 | -have the freedom to distribute copies of free software (and charge for |
235 | -them if you wish), that you receive source code or can get it if you |
236 | -want it, that you can change the software or use pieces of it in new |
237 | -free programs, and that you know you can do these things. |
238 | - |
239 | - To protect your rights, we need to prevent others from denying you |
240 | -these rights or asking you to surrender the rights. Therefore, you have |
241 | -certain responsibilities if you distribute copies of the software, or if |
242 | -you modify it: responsibilities to respect the freedom of others. |
243 | - |
244 | - For example, if you distribute copies of such a program, whether |
245 | -gratis or for a fee, you must pass on to the recipients the same |
246 | -freedoms that you received. You must make sure that they, too, receive |
247 | -or can get the source code. And you must show them these terms so they |
248 | -know their rights. |
249 | - |
250 | - Developers that use the GNU GPL protect your rights with two steps: |
251 | -(1) assert copyright on the software, and (2) offer you this License |
252 | -giving you legal permission to copy, distribute and/or modify it. |
253 | - |
254 | - For the developers' and authors' protection, the GPL clearly explains |
255 | -that there is no warranty for this free software. For both users' and |
256 | -authors' sake, the GPL requires that modified versions be marked as |
257 | -changed, so that their problems will not be attributed erroneously to |
258 | -authors of previous versions. |
259 | - |
260 | - Some devices are designed to deny users access to install or run |
261 | -modified versions of the software inside them, although the manufacturer |
262 | -can do so. This is fundamentally incompatible with the aim of |
263 | -protecting users' freedom to change the software. The systematic |
264 | -pattern of such abuse occurs in the area of products for individuals to |
265 | -use, which is precisely where it is most unacceptable. Therefore, we |
266 | -have designed this version of the GPL to prohibit the practice for those |
267 | -products. If such problems arise substantially in other domains, we |
268 | -stand ready to extend this provision to those domains in future versions |
269 | -of the GPL, as needed to protect the freedom of users. |
270 | - |
271 | - Finally, every program is threatened constantly by software patents. |
272 | -States should not allow patents to restrict development and use of |
273 | -software on general-purpose computers, but in those that do, we wish to |
274 | -avoid the special danger that patents applied to a free program could |
275 | -make it effectively proprietary. To prevent this, the GPL assures that |
276 | -patents cannot be used to render the program non-free. |
277 | - |
278 | - The precise terms and conditions for copying, distribution and |
279 | -modification follow. |
280 | - |
281 | - TERMS AND CONDITIONS |
282 | - |
283 | - 0. Definitions. |
284 | - |
285 | - "This License" refers to version 3 of the GNU General Public License. |
286 | - |
287 | - "Copyright" also means copyright-like laws that apply to other kinds of |
288 | -works, such as semiconductor masks. |
289 | - |
290 | - "The Program" refers to any copyrightable work licensed under this |
291 | -License. Each licensee is addressed as "you". "Licensees" and |
292 | -"recipients" may be individuals or organizations. |
293 | - |
294 | - To "modify" a work means to copy from or adapt all or part of the work |
295 | -in a fashion requiring copyright permission, other than the making of an |
296 | -exact copy. The resulting work is called a "modified version" of the |
297 | -earlier work or a work "based on" the earlier work. |
298 | - |
299 | - A "covered work" means either the unmodified Program or a work based |
300 | -on the Program. |
301 | - |
302 | - To "propagate" a work means to do anything with it that, without |
303 | -permission, would make you directly or secondarily liable for |
304 | -infringement under applicable copyright law, except executing it on a |
305 | -computer or modifying a private copy. Propagation includes copying, |
306 | -distribution (with or without modification), making available to the |
307 | -public, and in some countries other activities as well. |
308 | - |
309 | - To "convey" a work means any kind of propagation that enables other |
310 | -parties to make or receive copies. Mere interaction with a user through |
311 | -a computer network, with no transfer of a copy, is not conveying. |
312 | - |
313 | - An interactive user interface displays "Appropriate Legal Notices" |
314 | -to the extent that it includes a convenient and prominently visible |
315 | -feature that (1) displays an appropriate copyright notice, and (2) |
316 | -tells the user that there is no warranty for the work (except to the |
317 | -extent that warranties are provided), that licensees may convey the |
318 | -work under this License, and how to view a copy of this License. If |
319 | -the interface presents a list of user commands or options, such as a |
320 | -menu, a prominent item in the list meets this criterion. |
321 | - |
322 | - 1. Source Code. |
323 | - |
324 | - The "source code" for a work means the preferred form of the work |
325 | -for making modifications to it. "Object code" means any non-source |
326 | -form of a work. |
327 | - |
328 | - A "Standard Interface" means an interface that either is an official |
329 | -standard defined by a recognized standards body, or, in the case of |
330 | -interfaces specified for a particular programming language, one that |
331 | -is widely used among developers working in that language. |
332 | - |
333 | - The "System Libraries" of an executable work include anything, other |
334 | -than the work as a whole, that (a) is included in the normal form of |
335 | -packaging a Major Component, but which is not part of that Major |
336 | -Component, and (b) serves only to enable use of the work with that |
337 | -Major Component, or to implement a Standard Interface for which an |
338 | -implementation is available to the public in source code form. A |
339 | -"Major Component", in this context, means a major essential component |
340 | -(kernel, window system, and so on) of the specific operating system |
341 | -(if any) on which the executable work runs, or a compiler used to |
342 | -produce the work, or an object code interpreter used to run it. |
343 | - |
344 | - The "Corresponding Source" for a work in object code form means all |
345 | -the source code needed to generate, install, and (for an executable |
346 | -work) run the object code and to modify the work, including scripts to |
347 | -control those activities. However, it does not include the work's |
348 | -System Libraries, or general-purpose tools or generally available free |
349 | -programs which are used unmodified in performing those activities but |
350 | -which are not part of the work. For example, Corresponding Source |
351 | -includes interface definition files associated with source files for |
352 | -the work, and the source code for shared libraries and dynamically |
353 | -linked subprograms that the work is specifically designed to require, |
354 | -such as by intimate data communication or control flow between those |
355 | -subprograms and other parts of the work. |
356 | - |
357 | - The Corresponding Source need not include anything that users |
358 | -can regenerate automatically from other parts of the Corresponding |
359 | -Source. |
360 | - |
361 | - The Corresponding Source for a work in source code form is that |
362 | -same work. |
363 | - |
364 | - 2. Basic Permissions. |
365 | - |
366 | - All rights granted under this License are granted for the term of |
367 | -copyright on the Program, and are irrevocable provided the stated |
368 | -conditions are met. This License explicitly affirms your unlimited |
369 | -permission to run the unmodified Program. The output from running a |
370 | -covered work is covered by this License only if the output, given its |
371 | -content, constitutes a covered work. This License acknowledges your |
372 | -rights of fair use or other equivalent, as provided by copyright law. |
373 | - |
374 | - You may make, run and propagate covered works that you do not |
375 | -convey, without conditions so long as your license otherwise remains |
376 | -in force. You may convey covered works to others for the sole purpose |
377 | -of having them make modifications exclusively for you, or provide you |
378 | -with facilities for running those works, provided that you comply with |
379 | -the terms of this License in conveying all material for which you do |
380 | -not control copyright. Those thus making or running the covered works |
381 | -for you must do so exclusively on your behalf, under your direction |
382 | -and control, on terms that prohibit them from making any copies of |
383 | -your copyrighted material outside their relationship with you. |
384 | - |
385 | - Conveying under any other circumstances is permitted solely under |
386 | -the conditions stated below. Sublicensing is not allowed; section 10 |
387 | -makes it unnecessary. |
388 | - |
389 | - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. |
390 | - |
391 | - No covered work shall be deemed part of an effective technological |
392 | -measure under any applicable law fulfilling obligations under article |
393 | -11 of the WIPO copyright treaty adopted on 20 December 1996, or |
394 | -similar laws prohibiting or restricting circumvention of such |
395 | -measures. |
396 | - |
397 | - When you convey a covered work, you waive any legal power to forbid |
398 | -circumvention of technological measures to the extent such circumvention |
399 | -is effected by exercising rights under this License with respect to |
400 | -the covered work, and you disclaim any intention to limit operation or |
401 | -modification of the work as a means of enforcing, against the work's |
402 | -users, your or third parties' legal rights to forbid circumvention of |
403 | -technological measures. |
404 | - |
405 | - 4. Conveying Verbatim Copies. |
406 | - |
407 | - You may convey verbatim copies of the Program's source code as you |
408 | -receive it, in any medium, provided that you conspicuously and |
409 | -appropriately publish on each copy an appropriate copyright notice; |
410 | -keep intact all notices stating that this License and any |
411 | -non-permissive terms added in accord with section 7 apply to the code; |
412 | -keep intact all notices of the absence of any warranty; and give all |
413 | -recipients a copy of this License along with the Program. |
414 | - |
415 | - You may charge any price or no price for each copy that you convey, |
416 | -and you may offer support or warranty protection for a fee. |
417 | - |
418 | - 5. Conveying Modified Source Versions. |
419 | - |
420 | - You may convey a work based on the Program, or the modifications to |
421 | -produce it from the Program, in the form of source code under the |
422 | -terms of section 4, provided that you also meet all of these conditions: |
423 | - |
424 | - a) The work must carry prominent notices stating that you modified |
425 | - it, and giving a relevant date. |
426 | - |
427 | - b) The work must carry prominent notices stating that it is |
428 | - released under this License and any conditions added under section |
429 | - 7. This requirement modifies the requirement in section 4 to |
430 | - "keep intact all notices". |
431 | - |
432 | - c) You must license the entire work, as a whole, under this |
433 | - License to anyone who comes into possession of a copy. This |
434 | - License will therefore apply, along with any applicable section 7 |
435 | - additional terms, to the whole of the work, and all its parts, |
436 | - regardless of how they are packaged. This License gives no |
437 | - permission to license the work in any other way, but it does not |
438 | - invalidate such permission if you have separately received it. |
439 | - |
440 | - d) If the work has interactive user interfaces, each must display |
441 | - Appropriate Legal Notices; however, if the Program has interactive |
442 | - interfaces that do not display Appropriate Legal Notices, your |
443 | - work need not make them do so. |
444 | - |
445 | - A compilation of a covered work with other separate and independent |
446 | -works, which are not by their nature extensions of the covered work, |
447 | -and which are not combined with it such as to form a larger program, |
448 | -in or on a volume of a storage or distribution medium, is called an |
449 | -"aggregate" if the compilation and its resulting copyright are not |
450 | -used to limit the access or legal rights of the compilation's users |
451 | -beyond what the individual works permit. Inclusion of a covered work |
452 | -in an aggregate does not cause this License to apply to the other |
453 | -parts of the aggregate. |
454 | - |
455 | - 6. Conveying Non-Source Forms. |
456 | - |
457 | - You may convey a covered work in object code form under the terms |
458 | -of sections 4 and 5, provided that you also convey the |
459 | -machine-readable Corresponding Source under the terms of this License, |
460 | -in one of these ways: |
461 | - |
462 | - a) Convey the object code in, or embodied in, a physical product |
463 | - (including a physical distribution medium), accompanied by the |
464 | - Corresponding Source fixed on a durable physical medium |
465 | - customarily used for software interchange. |
466 | - |
467 | - b) Convey the object code in, or embodied in, a physical product |
468 | - (including a physical distribution medium), accompanied by a |
469 | - written offer, valid for at least three years and valid for as |
470 | - long as you offer spare parts or customer support for that product |
471 | - model, to give anyone who possesses the object code either (1) a |
472 | - copy of the Corresponding Source for all the software in the |
473 | - product that is covered by this License, on a durable physical |
474 | - medium customarily used for software interchange, for a price no |
475 | - more than your reasonable cost of physically performing this |
476 | - conveying of source, or (2) access to copy the |
477 | - Corresponding Source from a network server at no charge. |
478 | - |
479 | - c) Convey individual copies of the object code with a copy of the |
480 | - written offer to provide the Corresponding Source. This |
481 | - alternative is allowed only occasionally and noncommercially, and |
482 | - only if you received the object code with such an offer, in accord |
483 | - with subsection 6b. |
484 | - |
485 | - d) Convey the object code by offering access from a designated |
486 | - place (gratis or for a charge), and offer equivalent access to the |
487 | - Corresponding Source in the same way through the same place at no |
488 | - further charge. You need not require recipients to copy the |
489 | - Corresponding Source along with the object code. If the place to |
490 | - copy the object code is a network server, the Corresponding Source |
491 | - may be on a different server (operated by you or a third party) |
492 | - that supports equivalent copying facilities, provided you maintain |
493 | - clear directions next to the object code saying where to find the |
494 | - Corresponding Source. Regardless of what server hosts the |
495 | - Corresponding Source, you remain obligated to ensure that it is |
496 | - available for as long as needed to satisfy these requirements. |
497 | - |
498 | - e) Convey the object code using peer-to-peer transmission, provided |
499 | - you inform other peers where the object code and Corresponding |
500 | - Source of the work are being offered to the general public at no |
501 | - charge under subsection 6d. |
502 | - |
503 | - A separable portion of the object code, whose source code is excluded |
504 | -from the Corresponding Source as a System Library, need not be |
505 | -included in conveying the object code work. |
506 | - |
507 | - A "User Product" is either (1) a "consumer product", which means any |
508 | -tangible personal property which is normally used for personal, family, |
509 | -or household purposes, or (2) anything designed or sold for incorporation |
510 | -into a dwelling. In determining whether a product is a consumer product, |
511 | -doubtful cases shall be resolved in favor of coverage. For a particular |
512 | -product received by a particular user, "normally used" refers to a |
513 | -typical or common use of that class of product, regardless of the status |
514 | -of the particular user or of the way in which the particular user |
515 | -actually uses, or expects or is expected to use, the product. A product |
516 | -is a consumer product regardless of whether the product has substantial |
517 | -commercial, industrial or non-consumer uses, unless such uses represent |
518 | -the only significant mode of use of the product. |
519 | - |
520 | - "Installation Information" for a User Product means any methods, |
521 | -procedures, authorization keys, or other information required to install |
522 | -and execute modified versions of a covered work in that User Product from |
523 | -a modified version of its Corresponding Source. The information must |
524 | -suffice to ensure that the continued functioning of the modified object |
525 | -code is in no case prevented or interfered with solely because |
526 | -modification has been made. |
527 | - |
528 | - If you convey an object code work under this section in, or with, or |
529 | -specifically for use in, a User Product, and the conveying occurs as |
530 | -part of a transaction in which the right of possession and use of the |
531 | -User Product is transferred to the recipient in perpetuity or for a |
532 | -fixed term (regardless of how the transaction is characterized), the |
533 | -Corresponding Source conveyed under this section must be accompanied |
534 | -by the Installation Information. But this requirement does not apply |
535 | -if neither you nor any third party retains the ability to install |
536 | -modified object code on the User Product (for example, the work has |
537 | -been installed in ROM). |
538 | - |
539 | - The requirement to provide Installation Information does not include a |
540 | -requirement to continue to provide support service, warranty, or updates |
541 | -for a work that has been modified or installed by the recipient, or for |
542 | -the User Product in which it has been modified or installed. Access to a |
543 | -network may be denied when the modification itself materially and |
544 | -adversely affects the operation of the network or violates the rules and |
545 | -protocols for communication across the network. |
546 | - |
547 | - Corresponding Source conveyed, and Installation Information provided, |
548 | -in accord with this section must be in a format that is publicly |
549 | -documented (and with an implementation available to the public in |
550 | -source code form), and must require no special password or key for |
551 | -unpacking, reading or copying. |
552 | - |
553 | - 7. Additional Terms. |
554 | - |
555 | - "Additional permissions" are terms that supplement the terms of this |
556 | -License by making exceptions from one or more of its conditions. |
557 | -Additional permissions that are applicable to the entire Program shall |
558 | -be treated as though they were included in this License, to the extent |
559 | -that they are valid under applicable law. If additional permissions |
560 | -apply only to part of the Program, that part may be used separately |
561 | -under those permissions, but the entire Program remains governed by |
562 | -this License without regard to the additional permissions. |
563 | - |
564 | - When you convey a copy of a covered work, you may at your option |
565 | -remove any additional permissions from that copy, or from any part of |
566 | -it. (Additional permissions may be written to require their own |
567 | -removal in certain cases when you modify the work.) You may place |
568 | -additional permissions on material, added by you to a covered work, |
569 | -for which you have or can give appropriate copyright permission. |
570 | - |
571 | - Notwithstanding any other provision of this License, for material you |
572 | -add to a covered work, you may (if authorized by the copyright holders of |
573 | -that material) supplement the terms of this License with terms: |
574 | - |
575 | - a) Disclaiming warranty or limiting liability differently from the |
576 | - terms of sections 15 and 16 of this License; or |
577 | - |
578 | - b) Requiring preservation of specified reasonable legal notices or |
579 | - author attributions in that material or in the Appropriate Legal |
580 | - Notices displayed by works containing it; or |
581 | - |
582 | - c) Prohibiting misrepresentation of the origin of that material, or |
583 | - requiring that modified versions of such material be marked in |
584 | - reasonable ways as different from the original version; or |
585 | - |
586 | - d) Limiting the use for publicity purposes of names of licensors or |
587 | - authors of the material; or |
588 | - |
589 | - e) Declining to grant rights under trademark law for use of some |
590 | - trade names, trademarks, or service marks; or |
591 | - |
592 | - f) Requiring indemnification of licensors and authors of that |
593 | - material by anyone who conveys the material (or modified versions of |
594 | - it) with contractual assumptions of liability to the recipient, for |
595 | - any liability that these contractual assumptions directly impose on |
596 | - those licensors and authors. |
597 | - |
598 | - All other non-permissive additional terms are considered "further |
599 | -restrictions" within the meaning of section 10. If the Program as you |
600 | -received it, or any part of it, contains a notice stating that it is |
601 | -governed by this License along with a term that is a further |
602 | -restriction, you may remove that term. If a license document contains |
603 | -a further restriction but permits relicensing or conveying under this |
604 | -License, you may add to a covered work material governed by the terms |
605 | -of that license document, provided that the further restriction does |
606 | -not survive such relicensing or conveying. |
607 | - |
608 | - If you add terms to a covered work in accord with this section, you |
609 | -must place, in the relevant source files, a statement of the |
610 | -additional terms that apply to those files, or a notice indicating |
611 | -where to find the applicable terms. |
612 | - |
613 | - Additional terms, permissive or non-permissive, may be stated in the |
614 | -form of a separately written license, or stated as exceptions; |
615 | -the above requirements apply either way. |
616 | - |
617 | - 8. Termination. |
618 | - |
619 | - You may not propagate or modify a covered work except as expressly |
620 | -provided under this License. Any attempt otherwise to propagate or |
621 | -modify it is void, and will automatically terminate your rights under |
622 | -this License (including any patent licenses granted under the third |
623 | -paragraph of section 11). |
624 | - |
625 | - However, if you cease all violation of this License, then your |
626 | -license from a particular copyright holder is reinstated (a) |
627 | -provisionally, unless and until the copyright holder explicitly and |
628 | -finally terminates your license, and (b) permanently, if the copyright |
629 | -holder fails to notify you of the violation by some reasonable means |
630 | -prior to 60 days after the cessation. |
631 | - |
632 | - Moreover, your license from a particular copyright holder is |
633 | -reinstated permanently if the copyright holder notifies you of the |
634 | -violation by some reasonable means, this is the first time you have |
635 | -received notice of violation of this License (for any work) from that |
636 | -copyright holder, and you cure the violation prior to 30 days after |
637 | -your receipt of the notice. |
638 | - |
639 | - Termination of your rights under this section does not terminate the |
640 | -licenses of parties who have received copies or rights from you under |
641 | -this License. If your rights have been terminated and not permanently |
642 | -reinstated, you do not qualify to receive new licenses for the same |
643 | -material under section 10. |
644 | - |
645 | - 9. Acceptance Not Required for Having Copies. |
646 | - |
647 | - You are not required to accept this License in order to receive or |
648 | -run a copy of the Program. Ancillary propagation of a covered work |
649 | -occurring solely as a consequence of using peer-to-peer transmission |
650 | -to receive a copy likewise does not require acceptance. However, |
651 | -nothing other than this License grants you permission to propagate or |
652 | -modify any covered work. These actions infringe copyright if you do |
653 | -not accept this License. Therefore, by modifying or propagating a |
654 | -covered work, you indicate your acceptance of this License to do so. |
655 | - |
656 | - 10. Automatic Licensing of Downstream Recipients. |
657 | - |
658 | - Each time you convey a covered work, the recipient automatically |
659 | -receives a license from the original licensors, to run, modify and |
660 | -propagate that work, subject to this License. You are not responsible |
661 | -for enforcing compliance by third parties with this License. |
662 | - |
663 | - An "entity transaction" is a transaction transferring control of an |
664 | -organization, or substantially all assets of one, or subdividing an |
665 | -organization, or merging organizations. If propagation of a covered |
666 | -work results from an entity transaction, each party to that |
667 | -transaction who receives a copy of the work also receives whatever |
668 | -licenses to the work the party's predecessor in interest had or could |
669 | -give under the previous paragraph, plus a right to possession of the |
670 | -Corresponding Source of the work from the predecessor in interest, if |
671 | -the predecessor has it or can get it with reasonable efforts. |
672 | - |
673 | - You may not impose any further restrictions on the exercise of the |
674 | -rights granted or affirmed under this License. For example, you may |
675 | -not impose a license fee, royalty, or other charge for exercise of |
676 | -rights granted under this License, and you may not initiate litigation |
677 | -(including a cross-claim or counterclaim in a lawsuit) alleging that |
678 | -any patent claim is infringed by making, using, selling, offering for |
679 | -sale, or importing the Program or any portion of it. |
680 | - |
681 | - 11. Patents. |
682 | - |
683 | - A "contributor" is a copyright holder who authorizes use under this |
684 | -License of the Program or a work on which the Program is based. The |
685 | -work thus licensed is called the contributor's "contributor version". |
686 | - |
687 | - A contributor's "essential patent claims" are all patent claims |
688 | -owned or controlled by the contributor, whether already acquired or |
689 | -hereafter acquired, that would be infringed by some manner, permitted |
690 | -by this License, of making, using, or selling its contributor version, |
691 | -but do not include claims that would be infringed only as a |
692 | -consequence of further modification of the contributor version. For |
693 | -purposes of this definition, "control" includes the right to grant |
694 | -patent sublicenses in a manner consistent with the requirements of |
695 | -this License. |
696 | - |
697 | - Each contributor grants you a non-exclusive, worldwide, royalty-free |
698 | -patent license under the contributor's essential patent claims, to |
699 | -make, use, sell, offer for sale, import and otherwise run, modify and |
700 | -propagate the contents of its contributor version. |
701 | - |
702 | - In the following three paragraphs, a "patent license" is any express |
703 | -agreement or commitment, however denominated, not to enforce a patent |
704 | -(such as an express permission to practice a patent or covenant not to |
705 | -sue for patent infringement). To "grant" such a patent license to a |
706 | -party means to make such an agreement or commitment not to enforce a |
707 | -patent against the party. |
708 | - |
709 | - If you convey a covered work, knowingly relying on a patent license, |
710 | -and the Corresponding Source of the work is not available for anyone |
711 | -to copy, free of charge and under the terms of this License, through a |
712 | -publicly available network server or other readily accessible means, |
713 | -then you must either (1) cause the Corresponding Source to be so |
714 | -available, or (2) arrange to deprive yourself of the benefit of the |
715 | -patent license for this particular work, or (3) arrange, in a manner |
716 | -consistent with the requirements of this License, to extend the patent |
717 | -license to downstream recipients. "Knowingly relying" means you have |
718 | -actual knowledge that, but for the patent license, your conveying the |
719 | -covered work in a country, or your recipient's use of the covered work |
720 | -in a country, would infringe one or more identifiable patents in that |
721 | -country that you have reason to believe are valid. |
722 | - |
723 | - If, pursuant to or in connection with a single transaction or |
724 | -arrangement, you convey, or propagate by procuring conveyance of, a |
725 | -covered work, and grant a patent license to some of the parties |
726 | -receiving the covered work authorizing them to use, propagate, modify |
727 | -or convey a specific copy of the covered work, then the patent license |
728 | -you grant is automatically extended to all recipients of the covered |
729 | -work and works based on it. |
730 | - |
731 | - A patent license is "discriminatory" if it does not include within |
732 | -the scope of its coverage, prohibits the exercise of, or is |
733 | -conditioned on the non-exercise of one or more of the rights that are |
734 | -specifically granted under this License. You may not convey a covered |
735 | -work if you are a party to an arrangement with a third party that is |
736 | -in the business of distributing software, under which you make payment |
737 | -to the third party based on the extent of your activity of conveying |
738 | -the work, and under which the third party grants, to any of the |
739 | -parties who would receive the covered work from you, a discriminatory |
740 | -patent license (a) in connection with copies of the covered work |
741 | -conveyed by you (or copies made from those copies), or (b) primarily |
742 | -for and in connection with specific products or compilations that |
743 | -contain the covered work, unless you entered into that arrangement, |
744 | -or that patent license was granted, prior to 28 March 2007. |
745 | - |
746 | - Nothing in this License shall be construed as excluding or limiting |
747 | -any implied license or other defenses to infringement that may |
748 | -otherwise be available to you under applicable patent law. |
749 | - |
750 | - 12. No Surrender of Others' Freedom. |
751 | - |
752 | - If conditions are imposed on you (whether by court order, agreement or |
753 | -otherwise) that contradict the conditions of this License, they do not |
754 | -excuse you from the conditions of this License. If you cannot convey a |
755 | -covered work so as to satisfy simultaneously your obligations under this |
756 | -License and any other pertinent obligations, then as a consequence you may |
757 | -not convey it at all. For example, if you agree to terms that obligate you |
758 | -to collect a royalty for further conveying from those to whom you convey |
759 | -the Program, the only way you could satisfy both those terms and this |
760 | -License would be to refrain entirely from conveying the Program. |
761 | - |
762 | - 13. Use with the GNU Affero General Public License. |
763 | - |
764 | - Notwithstanding any other provision of this License, you have |
765 | -permission to link or combine any covered work with a work licensed |
766 | -under version 3 of the GNU Affero General Public License into a single |
767 | -combined work, and to convey the resulting work. The terms of this |
768 | -License will continue to apply to the part which is the covered work, |
769 | -but the special requirements of the GNU Affero General Public License, |
770 | -section 13, concerning interaction through a network will apply to the |
771 | -combination as such. |
772 | - |
773 | - 14. Revised Versions of this License. |
774 | - |
775 | - The Free Software Foundation may publish revised and/or new versions of |
776 | -the GNU General Public License from time to time. Such new versions will |
777 | -be similar in spirit to the present version, but may differ in detail to |
778 | -address new problems or concerns. |
779 | - |
780 | - Each version is given a distinguishing version number. If the |
781 | -Program specifies that a certain numbered version of the GNU General |
782 | -Public License "or any later version" applies to it, you have the |
783 | -option of following the terms and conditions either of that numbered |
784 | -version or of any later version published by the Free Software |
785 | -Foundation. If the Program does not specify a version number of the |
786 | -GNU General Public License, you may choose any version ever published |
787 | -by the Free Software Foundation. |
788 | - |
789 | - If the Program specifies that a proxy can decide which future |
790 | -versions of the GNU General Public License can be used, that proxy's |
791 | -public statement of acceptance of a version permanently authorizes you |
792 | -to choose that version for the Program. |
793 | - |
794 | - Later license versions may give you additional or different |
795 | -permissions. However, no additional obligations are imposed on any |
796 | -author or copyright holder as a result of your choosing to follow a |
797 | -later version. |
798 | - |
799 | - 15. Disclaimer of Warranty. |
800 | - |
801 | - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY |
802 | -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT |
803 | -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY |
804 | -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, |
805 | -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
806 | -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM |
807 | -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF |
808 | -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
809 | - |
810 | - 16. Limitation of Liability. |
811 | - |
812 | - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
813 | -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS |
814 | -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY |
815 | -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE |
816 | -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF |
817 | -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
818 | -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), |
819 | -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
820 | -SUCH DAMAGES. |
821 | - |
822 | - 17. Interpretation of Sections 15 and 16. |
823 | - |
824 | - If the disclaimer of warranty and limitation of liability provided |
825 | -above cannot be given local legal effect according to their terms, |
826 | -reviewing courts shall apply local law that most closely approximates |
827 | -an absolute waiver of all civil liability in connection with the |
828 | -Program, unless a warranty or assumption of liability accompanies a |
829 | -copy of the Program in return for a fee. |
830 | - |
831 | - END OF TERMS AND CONDITIONS |
832 | - |
833 | - How to Apply These Terms to Your New Programs |
834 | - |
835 | - If you develop a new program, and you want it to be of the greatest |
836 | -possible use to the public, the best way to achieve this is to make it |
837 | -free software which everyone can redistribute and change under these terms. |
838 | - |
839 | - To do so, attach the following notices to the program. It is safest |
840 | -to attach them to the start of each source file to most effectively |
841 | -state the exclusion of warranty; and each file should have at least |
842 | -the "copyright" line and a pointer to where the full notice is found. |
843 | - |
844 | - <one line to give the program's name and a brief idea of what it does.> |
845 | - Copyright (C) <year> <name of author> |
846 | - |
847 | - This program is free software: you can redistribute it and/or modify |
848 | - it under the terms of the GNU General Public License as published by |
849 | - the Free Software Foundation, either version 3 of the License, or |
850 | - (at your option) any later version. |
851 | - |
852 | - This program is distributed in the hope that it will be useful, |
853 | - but WITHOUT ANY WARRANTY; without even the implied warranty of |
854 | - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
855 | - GNU General Public License for more details. |
856 | - |
857 | - You should have received a copy of the GNU General Public License |
858 | - along with this program. If not, see <http://www.gnu.org/licenses/>. |
859 | - |
860 | -Also add information on how to contact you by electronic and paper mail. |
861 | - |
862 | - If the program does terminal interaction, make it output a short |
863 | -notice like this when it starts in an interactive mode: |
864 | - |
865 | - <program> Copyright (C) <year> <name of author> |
866 | - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
867 | - This is free software, and you are welcome to redistribute it |
868 | - under certain conditions; type `show c' for details. |
869 | - |
870 | -The hypothetical commands `show w' and `show c' should show the appropriate |
871 | -parts of the General Public License. Of course, your program's commands |
872 | -might be different; for a GUI interface, you would use an "about box". |
873 | - |
874 | - You should also get your employer (if you work as a programmer) or school, |
875 | -if any, to sign a "copyright disclaimer" for the program, if necessary. |
876 | -For more information on this, and how to apply and follow the GNU GPL, see |
877 | -<http://www.gnu.org/licenses/>. |
878 | - |
879 | - The GNU General Public License does not permit incorporating your program |
880 | -into proprietary programs. If your program is a subroutine library, you |
881 | -may consider it more useful to permit linking proprietary applications with |
882 | -the library. If this is what you want to do, use the GNU Lesser General |
883 | -Public License instead of this License. But first, please read |
884 | -<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
885 | +Copyright 2015 Canonical Ltd. |
886 | + |
887 | +This program is free software: you can redistribute it and/or modify it under |
888 | +the terms of the GNU General Public License version 3, as published by the |
889 | +Free Software Foundation. |
890 | + |
891 | +This program is distributed in the hope that it will be useful, but WITHOUT |
892 | +ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, |
893 | +SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
894 | +General Public License for more details. |
895 | + |
896 | +You should have received a copy of the GNU General Public License along with |
897 | +this program. If not, see <http://www.gnu.org/licenses/> |
898 | + |
899 | +Alternatively, this program may be used under the terms of the Apache License, |
900 | +Version 2.0, in which case the provisions of that license are applicable |
901 | +instead of those above. If you wish to allow use of your version of this |
902 | +program under the terms of the Apache License, Version 2.0 only, indicate |
903 | +your decision by deleting the provisions above and replace them with the notice |
904 | +and other provisions required by the Apache License, Version 2.0. If you do not |
905 | +delete the provisions above, a recipient may use your version of this file |
906 | +under the terms of either the GPLv3 or the Apache License, Version 2.0. |
907 | diff --git a/LICENSE-Apache2.0 b/LICENSE-Apache2.0 |
908 | new file mode 100644 |
909 | index 0000000..d645695 |
910 | --- /dev/null |
911 | +++ b/LICENSE-Apache2.0 |
912 | @@ -0,0 +1,202 @@ |
913 | + |
914 | + Apache License |
915 | + Version 2.0, January 2004 |
916 | + http://www.apache.org/licenses/ |
917 | + |
918 | + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION |
919 | + |
920 | + 1. Definitions. |
921 | + |
922 | + "License" shall mean the terms and conditions for use, reproduction, |
923 | + and distribution as defined by Sections 1 through 9 of this document. |
924 | + |
925 | + "Licensor" shall mean the copyright owner or entity authorized by |
926 | + the copyright owner that is granting the License. |
927 | + |
928 | + "Legal Entity" shall mean the union of the acting entity and all |
929 | + other entities that control, are controlled by, or are under common |
930 | + control with that entity. For the purposes of this definition, |
931 | + "control" means (i) the power, direct or indirect, to cause the |
932 | + direction or management of such entity, whether by contract or |
933 | + otherwise, or (ii) ownership of fifty percent (50%) or more of the |
934 | + outstanding shares, or (iii) beneficial ownership of such entity. |
935 | + |
936 | + "You" (or "Your") shall mean an individual or Legal Entity |
937 | + exercising permissions granted by this License. |
938 | + |
939 | + "Source" form shall mean the preferred form for making modifications, |
940 | + including but not limited to software source code, documentation |
941 | + source, and configuration files. |
942 | + |
943 | + "Object" form shall mean any form resulting from mechanical |
944 | + transformation or translation of a Source form, including but |
945 | + not limited to compiled object code, generated documentation, |
946 | + and conversions to other media types. |
947 | + |
948 | + "Work" shall mean the work of authorship, whether in Source or |
949 | + Object form, made available under the License, as indicated by a |
950 | + copyright notice that is included in or attached to the work |
951 | + (an example is provided in the Appendix below). |
952 | + |
953 | + "Derivative Works" shall mean any work, whether in Source or Object |
954 | + form, that is based on (or derived from) the Work and for which the |
955 | + editorial revisions, annotations, elaborations, or other modifications |
956 | + represent, as a whole, an original work of authorship. For the purposes |
957 | + of this License, Derivative Works shall not include works that remain |
958 | + separable from, or merely link (or bind by name) to the interfaces of, |
959 | + the Work and Derivative Works thereof. |
960 | + |
961 | + "Contribution" shall mean any work of authorship, including |
962 | + the original version of the Work and any modifications or additions |
963 | + to that Work or Derivative Works thereof, that is intentionally |
964 | + submitted to Licensor for inclusion in the Work by the copyright owner |
965 | + or by an individual or Legal Entity authorized to submit on behalf of |
966 | + the copyright owner. For the purposes of this definition, "submitted" |
967 | + means any form of electronic, verbal, or written communication sent |
968 | + to the Licensor or its representatives, including but not limited to |
969 | + communication on electronic mailing lists, source code control systems, |
970 | + and issue tracking systems that are managed by, or on behalf of, the |
971 | + Licensor for the purpose of discussing and improving the Work, but |
972 | + excluding communication that is conspicuously marked or otherwise |
973 | + designated in writing by the copyright owner as "Not a Contribution." |
974 | + |
975 | + "Contributor" shall mean Licensor and any individual or Legal Entity |
976 | + on behalf of whom a Contribution has been received by Licensor and |
977 | + subsequently incorporated within the Work. |
978 | + |
979 | + 2. Grant of Copyright License. Subject to the terms and conditions of |
980 | + this License, each Contributor hereby grants to You a perpetual, |
981 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
982 | + copyright license to reproduce, prepare Derivative Works of, |
983 | + publicly display, publicly perform, sublicense, and distribute the |
984 | + Work and such Derivative Works in Source or Object form. |
985 | + |
986 | + 3. Grant of Patent License. Subject to the terms and conditions of |
987 | + this License, each Contributor hereby grants to You a perpetual, |
988 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable |
989 | + (except as stated in this section) patent license to make, have made, |
990 | + use, offer to sell, sell, import, and otherwise transfer the Work, |
991 | + where such license applies only to those patent claims licensable |
992 | + by such Contributor that are necessarily infringed by their |
993 | + Contribution(s) alone or by combination of their Contribution(s) |
994 | + with the Work to which such Contribution(s) was submitted. If You |
995 | + institute patent litigation against any entity (including a |
996 | + cross-claim or counterclaim in a lawsuit) alleging that the Work |
997 | + or a Contribution incorporated within the Work constitutes direct |
998 | + or contributory patent infringement, then any patent licenses |
999 | + granted to You under this License for that Work shall terminate |
1000 | + as of the date such litigation is filed. |
1001 | + |
1002 | + 4. Redistribution. You may reproduce and distribute copies of the |
1003 | + Work or Derivative Works thereof in any medium, with or without |
1004 | + modifications, and in Source or Object form, provided that You |
1005 | + meet the following conditions: |
1006 | + |
1007 | + (a) You must give any other recipients of the Work or |
1008 | + Derivative Works a copy of this License; and |
1009 | + |
1010 | + (b) You must cause any modified files to carry prominent notices |
1011 | + stating that You changed the files; and |
1012 | + |
1013 | + (c) You must retain, in the Source form of any Derivative Works |
1014 | + that You distribute, all copyright, patent, trademark, and |
1015 | + attribution notices from the Source form of the Work, |
1016 | + excluding those notices that do not pertain to any part of |
1017 | + the Derivative Works; and |
1018 | + |
1019 | + (d) If the Work includes a "NOTICE" text file as part of its |
1020 | + distribution, then any Derivative Works that You distribute must |
1021 | + include a readable copy of the attribution notices contained |
1022 | + within such NOTICE file, excluding those notices that do not |
1023 | + pertain to any part of the Derivative Works, in at least one |
1024 | + of the following places: within a NOTICE text file distributed |
1025 | + as part of the Derivative Works; within the Source form or |
1026 | + documentation, if provided along with the Derivative Works; or, |
1027 | + within a display generated by the Derivative Works, if and |
1028 | + wherever such third-party notices normally appear. The contents |
1029 | + of the NOTICE file are for informational purposes only and |
1030 | + do not modify the License. You may add Your own attribution |
1031 | + notices within Derivative Works that You distribute, alongside |
1032 | + or as an addendum to the NOTICE text from the Work, provided |
1033 | + that such additional attribution notices cannot be construed |
1034 | + as modifying the License. |
1035 | + |
1036 | + You may add Your own copyright statement to Your modifications and |
1037 | + may provide additional or different license terms and conditions |
1038 | + for use, reproduction, or distribution of Your modifications, or |
1039 | + for any such Derivative Works as a whole, provided Your use, |
1040 | + reproduction, and distribution of the Work otherwise complies with |
1041 | + the conditions stated in this License. |
1042 | + |
1043 | + 5. Submission of Contributions. Unless You explicitly state otherwise, |
1044 | + any Contribution intentionally submitted for inclusion in the Work |
1045 | + by You to the Licensor shall be under the terms and conditions of |
1046 | + this License, without any additional terms or conditions. |
1047 | + Notwithstanding the above, nothing herein shall supersede or modify |
1048 | + the terms of any separate license agreement you may have executed |
1049 | + with Licensor regarding such Contributions. |
1050 | + |
1051 | + 6. Trademarks. This License does not grant permission to use the trade |
1052 | + names, trademarks, service marks, or product names of the Licensor, |
1053 | + except as required for reasonable and customary use in describing the |
1054 | + origin of the Work and reproducing the content of the NOTICE file. |
1055 | + |
1056 | + 7. Disclaimer of Warranty. Unless required by applicable law or |
1057 | + agreed to in writing, Licensor provides the Work (and each |
1058 | + Contributor provides its Contributions) on an "AS IS" BASIS, |
1059 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or |
1060 | + implied, including, without limitation, any warranties or conditions |
1061 | + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A |
1062 | + PARTICULAR PURPOSE. You are solely responsible for determining the |
1063 | + appropriateness of using or redistributing the Work and assume any |
1064 | + risks associated with Your exercise of permissions under this License. |
1065 | + |
1066 | + 8. Limitation of Liability. In no event and under no legal theory, |
1067 | + whether in tort (including negligence), contract, or otherwise, |
1068 | + unless required by applicable law (such as deliberate and grossly |
1069 | + negligent acts) or agreed to in writing, shall any Contributor be |
1070 | + liable to You for damages, including any direct, indirect, special, |
1071 | + incidental, or consequential damages of any character arising as a |
1072 | + result of this License or out of the use or inability to use the |
1073 | + Work (including but not limited to damages for loss of goodwill, |
1074 | + work stoppage, computer failure or malfunction, or any and all |
1075 | + other commercial damages or losses), even if such Contributor |
1076 | + has been advised of the possibility of such damages. |
1077 | + |
1078 | + 9. Accepting Warranty or Additional Liability. While redistributing |
1079 | + the Work or Derivative Works thereof, You may choose to offer, |
1080 | + and charge a fee for, acceptance of support, warranty, indemnity, |
1081 | + or other liability obligations and/or rights consistent with this |
1082 | + License. However, in accepting such obligations, You may act only |
1083 | + on Your own behalf and on Your sole responsibility, not on behalf |
1084 | + of any other Contributor, and only if You agree to indemnify, |
1085 | + defend, and hold each Contributor harmless for any liability |
1086 | + incurred by, or claims asserted against, such Contributor by reason |
1087 | + of your accepting any such warranty or additional liability. |
1088 | + |
1089 | + END OF TERMS AND CONDITIONS |
1090 | + |
1091 | + APPENDIX: How to apply the Apache License to your work. |
1092 | + |
1093 | + To apply the Apache License to your work, attach the following |
1094 | + boilerplate notice, with the fields enclosed by brackets "[]" |
1095 | + replaced with your own identifying information. (Don't include |
1096 | + the brackets!) The text should be enclosed in the appropriate |
1097 | + comment syntax for the file format. We also recommend that a |
1098 | + file or class name and description of purpose be included on the |
1099 | + same "printed page" as the copyright notice for easier |
1100 | + identification within third-party archives. |
1101 | + |
1102 | + Copyright [yyyy] [name of copyright owner] |
1103 | + |
1104 | + Licensed under the Apache License, Version 2.0 (the "License"); |
1105 | + you may not use this file except in compliance with the License. |
1106 | + You may obtain a copy of the License at |
1107 | + |
1108 | + http://www.apache.org/licenses/LICENSE-2.0 |
1109 | + |
1110 | + Unless required by applicable law or agreed to in writing, software |
1111 | + distributed under the License is distributed on an "AS IS" BASIS, |
1112 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
1113 | + See the License for the specific language governing permissions and |
1114 | + limitations under the License. |
1115 | diff --git a/LICENSE-GPLv3 b/LICENSE-GPLv3 |
1116 | new file mode 100644 |
1117 | index 0000000..94a9ed0 |
1118 | --- /dev/null |
1119 | +++ b/LICENSE-GPLv3 |
1120 | @@ -0,0 +1,674 @@ |
1121 | + GNU GENERAL PUBLIC LICENSE |
1122 | + Version 3, 29 June 2007 |
1123 | + |
1124 | + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> |
1125 | + Everyone is permitted to copy and distribute verbatim copies |
1126 | + of this license document, but changing it is not allowed. |
1127 | + |
1128 | + Preamble |
1129 | + |
1130 | + The GNU General Public License is a free, copyleft license for |
1131 | +software and other kinds of works. |
1132 | + |
1133 | + The licenses for most software and other practical works are designed |
1134 | +to take away your freedom to share and change the works. By contrast, |
1135 | +the GNU General Public License is intended to guarantee your freedom to |
1136 | +share and change all versions of a program--to make sure it remains free |
1137 | +software for all its users. We, the Free Software Foundation, use the |
1138 | +GNU General Public License for most of our software; it applies also to |
1139 | +any other work released this way by its authors. You can apply it to |
1140 | +your programs, too. |
1141 | + |
1142 | + When we speak of free software, we are referring to freedom, not |
1143 | +price. Our General Public Licenses are designed to make sure that you |
1144 | +have the freedom to distribute copies of free software (and charge for |
1145 | +them if you wish), that you receive source code or can get it if you |
1146 | +want it, that you can change the software or use pieces of it in new |
1147 | +free programs, and that you know you can do these things. |
1148 | + |
1149 | + To protect your rights, we need to prevent others from denying you |
1150 | +these rights or asking you to surrender the rights. Therefore, you have |
1151 | +certain responsibilities if you distribute copies of the software, or if |
1152 | +you modify it: responsibilities to respect the freedom of others. |
1153 | + |
1154 | + For example, if you distribute copies of such a program, whether |
1155 | +gratis or for a fee, you must pass on to the recipients the same |
1156 | +freedoms that you received. You must make sure that they, too, receive |
1157 | +or can get the source code. And you must show them these terms so they |
1158 | +know their rights. |
1159 | + |
1160 | + Developers that use the GNU GPL protect your rights with two steps: |
1161 | +(1) assert copyright on the software, and (2) offer you this License |
1162 | +giving you legal permission to copy, distribute and/or modify it. |
1163 | + |
1164 | + For the developers' and authors' protection, the GPL clearly explains |
1165 | +that there is no warranty for this free software. For both users' and |
1166 | +authors' sake, the GPL requires that modified versions be marked as |
1167 | +changed, so that their problems will not be attributed erroneously to |
1168 | +authors of previous versions. |
1169 | + |
1170 | + Some devices are designed to deny users access to install or run |
1171 | +modified versions of the software inside them, although the manufacturer |
1172 | +can do so. This is fundamentally incompatible with the aim of |
1173 | +protecting users' freedom to change the software. The systematic |
1174 | +pattern of such abuse occurs in the area of products for individuals to |
1175 | +use, which is precisely where it is most unacceptable. Therefore, we |
1176 | +have designed this version of the GPL to prohibit the practice for those |
1177 | +products. If such problems arise substantially in other domains, we |
1178 | +stand ready to extend this provision to those domains in future versions |
1179 | +of the GPL, as needed to protect the freedom of users. |
1180 | + |
1181 | + Finally, every program is threatened constantly by software patents. |
1182 | +States should not allow patents to restrict development and use of |
1183 | +software on general-purpose computers, but in those that do, we wish to |
1184 | +avoid the special danger that patents applied to a free program could |
1185 | +make it effectively proprietary. To prevent this, the GPL assures that |
1186 | +patents cannot be used to render the program non-free. |
1187 | + |
1188 | + The precise terms and conditions for copying, distribution and |
1189 | +modification follow. |
1190 | + |
1191 | + TERMS AND CONDITIONS |
1192 | + |
1193 | + 0. Definitions. |
1194 | + |
1195 | + "This License" refers to version 3 of the GNU General Public License. |
1196 | + |
1197 | + "Copyright" also means copyright-like laws that apply to other kinds of |
1198 | +works, such as semiconductor masks. |
1199 | + |
1200 | + "The Program" refers to any copyrightable work licensed under this |
1201 | +License. Each licensee is addressed as "you". "Licensees" and |
1202 | +"recipients" may be individuals or organizations. |
1203 | + |
1204 | + To "modify" a work means to copy from or adapt all or part of the work |
1205 | +in a fashion requiring copyright permission, other than the making of an |
1206 | +exact copy. The resulting work is called a "modified version" of the |
1207 | +earlier work or a work "based on" the earlier work. |
1208 | + |
1209 | + A "covered work" means either the unmodified Program or a work based |
1210 | +on the Program. |
1211 | + |
1212 | + To "propagate" a work means to do anything with it that, without |
1213 | +permission, would make you directly or secondarily liable for |
1214 | +infringement under applicable copyright law, except executing it on a |
1215 | +computer or modifying a private copy. Propagation includes copying, |
1216 | +distribution (with or without modification), making available to the |
1217 | +public, and in some countries other activities as well. |
1218 | + |
1219 | + To "convey" a work means any kind of propagation that enables other |
1220 | +parties to make or receive copies. Mere interaction with a user through |
1221 | +a computer network, with no transfer of a copy, is not conveying. |
1222 | + |
1223 | + An interactive user interface displays "Appropriate Legal Notices" |
1224 | +to the extent that it includes a convenient and prominently visible |
1225 | +feature that (1) displays an appropriate copyright notice, and (2) |
1226 | +tells the user that there is no warranty for the work (except to the |
1227 | +extent that warranties are provided), that licensees may convey the |
1228 | +work under this License, and how to view a copy of this License. If |
1229 | +the interface presents a list of user commands or options, such as a |
1230 | +menu, a prominent item in the list meets this criterion. |
1231 | + |
1232 | + 1. Source Code. |
1233 | + |
1234 | + The "source code" for a work means the preferred form of the work |
1235 | +for making modifications to it. "Object code" means any non-source |
1236 | +form of a work. |
1237 | + |
1238 | + A "Standard Interface" means an interface that either is an official |
1239 | +standard defined by a recognized standards body, or, in the case of |
1240 | +interfaces specified for a particular programming language, one that |
1241 | +is widely used among developers working in that language. |
1242 | + |
1243 | + The "System Libraries" of an executable work include anything, other |
1244 | +than the work as a whole, that (a) is included in the normal form of |
1245 | +packaging a Major Component, but which is not part of that Major |
1246 | +Component, and (b) serves only to enable use of the work with that |
1247 | +Major Component, or to implement a Standard Interface for which an |
1248 | +implementation is available to the public in source code form. A |
1249 | +"Major Component", in this context, means a major essential component |
1250 | +(kernel, window system, and so on) of the specific operating system |
1251 | +(if any) on which the executable work runs, or a compiler used to |
1252 | +produce the work, or an object code interpreter used to run it. |
1253 | + |
1254 | + The "Corresponding Source" for a work in object code form means all |
1255 | +the source code needed to generate, install, and (for an executable |
1256 | +work) run the object code and to modify the work, including scripts to |
1257 | +control those activities. However, it does not include the work's |
1258 | +System Libraries, or general-purpose tools or generally available free |
1259 | +programs which are used unmodified in performing those activities but |
1260 | +which are not part of the work. For example, Corresponding Source |
1261 | +includes interface definition files associated with source files for |
1262 | +the work, and the source code for shared libraries and dynamically |
1263 | +linked subprograms that the work is specifically designed to require, |
1264 | +such as by intimate data communication or control flow between those |
1265 | +subprograms and other parts of the work. |
1266 | + |
1267 | + The Corresponding Source need not include anything that users |
1268 | +can regenerate automatically from other parts of the Corresponding |
1269 | +Source. |
1270 | + |
1271 | + The Corresponding Source for a work in source code form is that |
1272 | +same work. |
1273 | + |
1274 | + 2. Basic Permissions. |
1275 | + |
1276 | + All rights granted under this License are granted for the term of |
1277 | +copyright on the Program, and are irrevocable provided the stated |
1278 | +conditions are met. This License explicitly affirms your unlimited |
1279 | +permission to run the unmodified Program. The output from running a |
1280 | +covered work is covered by this License only if the output, given its |
1281 | +content, constitutes a covered work. This License acknowledges your |
1282 | +rights of fair use or other equivalent, as provided by copyright law. |
1283 | + |
1284 | + You may make, run and propagate covered works that you do not |
1285 | +convey, without conditions so long as your license otherwise remains |
1286 | +in force. You may convey covered works to others for the sole purpose |
1287 | +of having them make modifications exclusively for you, or provide you |
1288 | +with facilities for running those works, provided that you comply with |
1289 | +the terms of this License in conveying all material for which you do |
1290 | +not control copyright. Those thus making or running the covered works |
1291 | +for you must do so exclusively on your behalf, under your direction |
1292 | +and control, on terms that prohibit them from making any copies of |
1293 | +your copyrighted material outside their relationship with you. |
1294 | + |
1295 | + Conveying under any other circumstances is permitted solely under |
1296 | +the conditions stated below. Sublicensing is not allowed; section 10 |
1297 | +makes it unnecessary. |
1298 | + |
1299 | + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. |
1300 | + |
1301 | + No covered work shall be deemed part of an effective technological |
1302 | +measure under any applicable law fulfilling obligations under article |
1303 | +11 of the WIPO copyright treaty adopted on 20 December 1996, or |
1304 | +similar laws prohibiting or restricting circumvention of such |
1305 | +measures. |
1306 | + |
1307 | + When you convey a covered work, you waive any legal power to forbid |
1308 | +circumvention of technological measures to the extent such circumvention |
1309 | +is effected by exercising rights under this License with respect to |
1310 | +the covered work, and you disclaim any intention to limit operation or |
1311 | +modification of the work as a means of enforcing, against the work's |
1312 | +users, your or third parties' legal rights to forbid circumvention of |
1313 | +technological measures. |
1314 | + |
1315 | + 4. Conveying Verbatim Copies. |
1316 | + |
1317 | + You may convey verbatim copies of the Program's source code as you |
1318 | +receive it, in any medium, provided that you conspicuously and |
1319 | +appropriately publish on each copy an appropriate copyright notice; |
1320 | +keep intact all notices stating that this License and any |
1321 | +non-permissive terms added in accord with section 7 apply to the code; |
1322 | +keep intact all notices of the absence of any warranty; and give all |
1323 | +recipients a copy of this License along with the Program. |
1324 | + |
1325 | + You may charge any price or no price for each copy that you convey, |
1326 | +and you may offer support or warranty protection for a fee. |
1327 | + |
1328 | + 5. Conveying Modified Source Versions. |
1329 | + |
1330 | + You may convey a work based on the Program, or the modifications to |
1331 | +produce it from the Program, in the form of source code under the |
1332 | +terms of section 4, provided that you also meet all of these conditions: |
1333 | + |
1334 | + a) The work must carry prominent notices stating that you modified |
1335 | + it, and giving a relevant date. |
1336 | + |
1337 | + b) The work must carry prominent notices stating that it is |
1338 | + released under this License and any conditions added under section |
1339 | + 7. This requirement modifies the requirement in section 4 to |
1340 | + "keep intact all notices". |
1341 | + |
1342 | + c) You must license the entire work, as a whole, under this |
1343 | + License to anyone who comes into possession of a copy. This |
1344 | + License will therefore apply, along with any applicable section 7 |
1345 | + additional terms, to the whole of the work, and all its parts, |
1346 | + regardless of how they are packaged. This License gives no |
1347 | + permission to license the work in any other way, but it does not |
1348 | + invalidate such permission if you have separately received it. |
1349 | + |
1350 | + d) If the work has interactive user interfaces, each must display |
1351 | + Appropriate Legal Notices; however, if the Program has interactive |
1352 | + interfaces that do not display Appropriate Legal Notices, your |
1353 | + work need not make them do so. |
1354 | + |
1355 | + A compilation of a covered work with other separate and independent |
1356 | +works, which are not by their nature extensions of the covered work, |
1357 | +and which are not combined with it such as to form a larger program, |
1358 | +in or on a volume of a storage or distribution medium, is called an |
1359 | +"aggregate" if the compilation and its resulting copyright are not |
1360 | +used to limit the access or legal rights of the compilation's users |
1361 | +beyond what the individual works permit. Inclusion of a covered work |
1362 | +in an aggregate does not cause this License to apply to the other |
1363 | +parts of the aggregate. |
1364 | + |
1365 | + 6. Conveying Non-Source Forms. |
1366 | + |
1367 | + You may convey a covered work in object code form under the terms |
1368 | +of sections 4 and 5, provided that you also convey the |
1369 | +machine-readable Corresponding Source under the terms of this License, |
1370 | +in one of these ways: |
1371 | + |
1372 | + a) Convey the object code in, or embodied in, a physical product |
1373 | + (including a physical distribution medium), accompanied by the |
1374 | + Corresponding Source fixed on a durable physical medium |
1375 | + customarily used for software interchange. |
1376 | + |
1377 | + b) Convey the object code in, or embodied in, a physical product |
1378 | + (including a physical distribution medium), accompanied by a |
1379 | + written offer, valid for at least three years and valid for as |
1380 | + long as you offer spare parts or customer support for that product |
1381 | + model, to give anyone who possesses the object code either (1) a |
1382 | + copy of the Corresponding Source for all the software in the |
1383 | + product that is covered by this License, on a durable physical |
1384 | + medium customarily used for software interchange, for a price no |
1385 | + more than your reasonable cost of physically performing this |
1386 | + conveying of source, or (2) access to copy the |
1387 | + Corresponding Source from a network server at no charge. |
1388 | + |
1389 | + c) Convey individual copies of the object code with a copy of the |
1390 | + written offer to provide the Corresponding Source. This |
1391 | + alternative is allowed only occasionally and noncommercially, and |
1392 | + only if you received the object code with such an offer, in accord |
1393 | + with subsection 6b. |
1394 | + |
1395 | + d) Convey the object code by offering access from a designated |
1396 | + place (gratis or for a charge), and offer equivalent access to the |
1397 | + Corresponding Source in the same way through the same place at no |
1398 | + further charge. You need not require recipients to copy the |
1399 | + Corresponding Source along with the object code. If the place to |
1400 | + copy the object code is a network server, the Corresponding Source |
1401 | + may be on a different server (operated by you or a third party) |
1402 | + that supports equivalent copying facilities, provided you maintain |
1403 | + clear directions next to the object code saying where to find the |
1404 | + Corresponding Source. Regardless of what server hosts the |
1405 | + Corresponding Source, you remain obligated to ensure that it is |
1406 | + available for as long as needed to satisfy these requirements. |
1407 | + |
1408 | + e) Convey the object code using peer-to-peer transmission, provided |
1409 | + you inform other peers where the object code and Corresponding |
1410 | + Source of the work are being offered to the general public at no |
1411 | + charge under subsection 6d. |
1412 | + |
1413 | + A separable portion of the object code, whose source code is excluded |
1414 | +from the Corresponding Source as a System Library, need not be |
1415 | +included in conveying the object code work. |
1416 | + |
1417 | + A "User Product" is either (1) a "consumer product", which means any |
1418 | +tangible personal property which is normally used for personal, family, |
1419 | +or household purposes, or (2) anything designed or sold for incorporation |
1420 | +into a dwelling. In determining whether a product is a consumer product, |
1421 | +doubtful cases shall be resolved in favor of coverage. For a particular |
1422 | +product received by a particular user, "normally used" refers to a |
1423 | +typical or common use of that class of product, regardless of the status |
1424 | +of the particular user or of the way in which the particular user |
1425 | +actually uses, or expects or is expected to use, the product. A product |
1426 | +is a consumer product regardless of whether the product has substantial |
1427 | +commercial, industrial or non-consumer uses, unless such uses represent |
1428 | +the only significant mode of use of the product. |
1429 | + |
1430 | + "Installation Information" for a User Product means any methods, |
1431 | +procedures, authorization keys, or other information required to install |
1432 | +and execute modified versions of a covered work in that User Product from |
1433 | +a modified version of its Corresponding Source. The information must |
1434 | +suffice to ensure that the continued functioning of the modified object |
1435 | +code is in no case prevented or interfered with solely because |
1436 | +modification has been made. |
1437 | + |
1438 | + If you convey an object code work under this section in, or with, or |
1439 | +specifically for use in, a User Product, and the conveying occurs as |
1440 | +part of a transaction in which the right of possession and use of the |
1441 | +User Product is transferred to the recipient in perpetuity or for a |
1442 | +fixed term (regardless of how the transaction is characterized), the |
1443 | +Corresponding Source conveyed under this section must be accompanied |
1444 | +by the Installation Information. But this requirement does not apply |
1445 | +if neither you nor any third party retains the ability to install |
1446 | +modified object code on the User Product (for example, the work has |
1447 | +been installed in ROM). |
1448 | + |
1449 | + The requirement to provide Installation Information does not include a |
1450 | +requirement to continue to provide support service, warranty, or updates |
1451 | +for a work that has been modified or installed by the recipient, or for |
1452 | +the User Product in which it has been modified or installed. Access to a |
1453 | +network may be denied when the modification itself materially and |
1454 | +adversely affects the operation of the network or violates the rules and |
1455 | +protocols for communication across the network. |
1456 | + |
1457 | + Corresponding Source conveyed, and Installation Information provided, |
1458 | +in accord with this section must be in a format that is publicly |
1459 | +documented (and with an implementation available to the public in |
1460 | +source code form), and must require no special password or key for |
1461 | +unpacking, reading or copying. |
1462 | + |
1463 | + 7. Additional Terms. |
1464 | + |
1465 | + "Additional permissions" are terms that supplement the terms of this |
1466 | +License by making exceptions from one or more of its conditions. |
1467 | +Additional permissions that are applicable to the entire Program shall |
1468 | +be treated as though they were included in this License, to the extent |
1469 | +that they are valid under applicable law. If additional permissions |
1470 | +apply only to part of the Program, that part may be used separately |
1471 | +under those permissions, but the entire Program remains governed by |
1472 | +this License without regard to the additional permissions. |
1473 | + |
1474 | + When you convey a copy of a covered work, you may at your option |
1475 | +remove any additional permissions from that copy, or from any part of |
1476 | +it. (Additional permissions may be written to require their own |
1477 | +removal in certain cases when you modify the work.) You may place |
1478 | +additional permissions on material, added by you to a covered work, |
1479 | +for which you have or can give appropriate copyright permission. |
1480 | + |
1481 | + Notwithstanding any other provision of this License, for material you |
1482 | +add to a covered work, you may (if authorized by the copyright holders of |
1483 | +that material) supplement the terms of this License with terms: |
1484 | + |
1485 | + a) Disclaiming warranty or limiting liability differently from the |
1486 | + terms of sections 15 and 16 of this License; or |
1487 | + |
1488 | + b) Requiring preservation of specified reasonable legal notices or |
1489 | + author attributions in that material or in the Appropriate Legal |
1490 | + Notices displayed by works containing it; or |
1491 | + |
1492 | + c) Prohibiting misrepresentation of the origin of that material, or |
1493 | + requiring that modified versions of such material be marked in |
1494 | + reasonable ways as different from the original version; or |
1495 | + |
1496 | + d) Limiting the use for publicity purposes of names of licensors or |
1497 | + authors of the material; or |
1498 | + |
1499 | + e) Declining to grant rights under trademark law for use of some |
1500 | + trade names, trademarks, or service marks; or |
1501 | + |
1502 | + f) Requiring indemnification of licensors and authors of that |
1503 | + material by anyone who conveys the material (or modified versions of |
1504 | + it) with contractual assumptions of liability to the recipient, for |
1505 | + any liability that these contractual assumptions directly impose on |
1506 | + those licensors and authors. |
1507 | + |
1508 | + All other non-permissive additional terms are considered "further |
1509 | +restrictions" within the meaning of section 10. If the Program as you |
1510 | +received it, or any part of it, contains a notice stating that it is |
1511 | +governed by this License along with a term that is a further |
1512 | +restriction, you may remove that term. If a license document contains |
1513 | +a further restriction but permits relicensing or conveying under this |
1514 | +License, you may add to a covered work material governed by the terms |
1515 | +of that license document, provided that the further restriction does |
1516 | +not survive such relicensing or conveying. |
1517 | + |
1518 | + If you add terms to a covered work in accord with this section, you |
1519 | +must place, in the relevant source files, a statement of the |
1520 | +additional terms that apply to those files, or a notice indicating |
1521 | +where to find the applicable terms. |
1522 | + |
1523 | + Additional terms, permissive or non-permissive, may be stated in the |
1524 | +form of a separately written license, or stated as exceptions; |
1525 | +the above requirements apply either way. |
1526 | + |
1527 | + 8. Termination. |
1528 | + |
1529 | + You may not propagate or modify a covered work except as expressly |
1530 | +provided under this License. Any attempt otherwise to propagate or |
1531 | +modify it is void, and will automatically terminate your rights under |
1532 | +this License (including any patent licenses granted under the third |
1533 | +paragraph of section 11). |
1534 | + |
1535 | + However, if you cease all violation of this License, then your |
1536 | +license from a particular copyright holder is reinstated (a) |
1537 | +provisionally, unless and until the copyright holder explicitly and |
1538 | +finally terminates your license, and (b) permanently, if the copyright |
1539 | +holder fails to notify you of the violation by some reasonable means |
1540 | +prior to 60 days after the cessation. |
1541 | + |
1542 | + Moreover, your license from a particular copyright holder is |
1543 | +reinstated permanently if the copyright holder notifies you of the |
1544 | +violation by some reasonable means, this is the first time you have |
1545 | +received notice of violation of this License (for any work) from that |
1546 | +copyright holder, and you cure the violation prior to 30 days after |
1547 | +your receipt of the notice. |
1548 | + |
1549 | + Termination of your rights under this section does not terminate the |
1550 | +licenses of parties who have received copies or rights from you under |
1551 | +this License. If your rights have been terminated and not permanently |
1552 | +reinstated, you do not qualify to receive new licenses for the same |
1553 | +material under section 10. |
1554 | + |
1555 | + 9. Acceptance Not Required for Having Copies. |
1556 | + |
1557 | + You are not required to accept this License in order to receive or |
1558 | +run a copy of the Program. Ancillary propagation of a covered work |
1559 | +occurring solely as a consequence of using peer-to-peer transmission |
1560 | +to receive a copy likewise does not require acceptance. However, |
1561 | +nothing other than this License grants you permission to propagate or |
1562 | +modify any covered work. These actions infringe copyright if you do |
1563 | +not accept this License. Therefore, by modifying or propagating a |
1564 | +covered work, you indicate your acceptance of this License to do so. |
1565 | + |
1566 | + 10. Automatic Licensing of Downstream Recipients. |
1567 | + |
1568 | + Each time you convey a covered work, the recipient automatically |
1569 | +receives a license from the original licensors, to run, modify and |
1570 | +propagate that work, subject to this License. You are not responsible |
1571 | +for enforcing compliance by third parties with this License. |
1572 | + |
1573 | + An "entity transaction" is a transaction transferring control of an |
1574 | +organization, or substantially all assets of one, or subdividing an |
1575 | +organization, or merging organizations. If propagation of a covered |
1576 | +work results from an entity transaction, each party to that |
1577 | +transaction who receives a copy of the work also receives whatever |
1578 | +licenses to the work the party's predecessor in interest had or could |
1579 | +give under the previous paragraph, plus a right to possession of the |
1580 | +Corresponding Source of the work from the predecessor in interest, if |
1581 | +the predecessor has it or can get it with reasonable efforts. |
1582 | + |
1583 | + You may not impose any further restrictions on the exercise of the |
1584 | +rights granted or affirmed under this License. For example, you may |
1585 | +not impose a license fee, royalty, or other charge for exercise of |
1586 | +rights granted under this License, and you may not initiate litigation |
1587 | +(including a cross-claim or counterclaim in a lawsuit) alleging that |
1588 | +any patent claim is infringed by making, using, selling, offering for |
1589 | +sale, or importing the Program or any portion of it. |
1590 | + |
1591 | + 11. Patents. |
1592 | + |
1593 | + A "contributor" is a copyright holder who authorizes use under this |
1594 | +License of the Program or a work on which the Program is based. The |
1595 | +work thus licensed is called the contributor's "contributor version". |
1596 | + |
1597 | + A contributor's "essential patent claims" are all patent claims |
1598 | +owned or controlled by the contributor, whether already acquired or |
1599 | +hereafter acquired, that would be infringed by some manner, permitted |
1600 | +by this License, of making, using, or selling its contributor version, |
1601 | +but do not include claims that would be infringed only as a |
1602 | +consequence of further modification of the contributor version. For |
1603 | +purposes of this definition, "control" includes the right to grant |
1604 | +patent sublicenses in a manner consistent with the requirements of |
1605 | +this License. |
1606 | + |
1607 | + Each contributor grants you a non-exclusive, worldwide, royalty-free |
1608 | +patent license under the contributor's essential patent claims, to |
1609 | +make, use, sell, offer for sale, import and otherwise run, modify and |
1610 | +propagate the contents of its contributor version. |
1611 | + |
1612 | + In the following three paragraphs, a "patent license" is any express |
1613 | +agreement or commitment, however denominated, not to enforce a patent |
1614 | +(such as an express permission to practice a patent or covenant not to |
1615 | +sue for patent infringement). To "grant" such a patent license to a |
1616 | +party means to make such an agreement or commitment not to enforce a |
1617 | +patent against the party. |
1618 | + |
1619 | + If you convey a covered work, knowingly relying on a patent license, |
1620 | +and the Corresponding Source of the work is not available for anyone |
1621 | +to copy, free of charge and under the terms of this License, through a |
1622 | +publicly available network server or other readily accessible means, |
1623 | +then you must either (1) cause the Corresponding Source to be so |
1624 | +available, or (2) arrange to deprive yourself of the benefit of the |
1625 | +patent license for this particular work, or (3) arrange, in a manner |
1626 | +consistent with the requirements of this License, to extend the patent |
1627 | +license to downstream recipients. "Knowingly relying" means you have |
1628 | +actual knowledge that, but for the patent license, your conveying the |
1629 | +covered work in a country, or your recipient's use of the covered work |
1630 | +in a country, would infringe one or more identifiable patents in that |
1631 | +country that you have reason to believe are valid. |
1632 | + |
1633 | + If, pursuant to or in connection with a single transaction or |
1634 | +arrangement, you convey, or propagate by procuring conveyance of, a |
1635 | +covered work, and grant a patent license to some of the parties |
1636 | +receiving the covered work authorizing them to use, propagate, modify |
1637 | +or convey a specific copy of the covered work, then the patent license |
1638 | +you grant is automatically extended to all recipients of the covered |
1639 | +work and works based on it. |
1640 | + |
1641 | + A patent license is "discriminatory" if it does not include within |
1642 | +the scope of its coverage, prohibits the exercise of, or is |
1643 | +conditioned on the non-exercise of one or more of the rights that are |
1644 | +specifically granted under this License. You may not convey a covered |
1645 | +work if you are a party to an arrangement with a third party that is |
1646 | +in the business of distributing software, under which you make payment |
1647 | +to the third party based on the extent of your activity of conveying |
1648 | +the work, and under which the third party grants, to any of the |
1649 | +parties who would receive the covered work from you, a discriminatory |
1650 | +patent license (a) in connection with copies of the covered work |
1651 | +conveyed by you (or copies made from those copies), or (b) primarily |
1652 | +for and in connection with specific products or compilations that |
1653 | +contain the covered work, unless you entered into that arrangement, |
1654 | +or that patent license was granted, prior to 28 March 2007. |
1655 | + |
1656 | + Nothing in this License shall be construed as excluding or limiting |
1657 | +any implied license or other defenses to infringement that may |
1658 | +otherwise be available to you under applicable patent law. |
1659 | + |
1660 | + 12. No Surrender of Others' Freedom. |
1661 | + |
1662 | + If conditions are imposed on you (whether by court order, agreement or |
1663 | +otherwise) that contradict the conditions of this License, they do not |
1664 | +excuse you from the conditions of this License. If you cannot convey a |
1665 | +covered work so as to satisfy simultaneously your obligations under this |
1666 | +License and any other pertinent obligations, then as a consequence you may |
1667 | +not convey it at all. For example, if you agree to terms that obligate you |
1668 | +to collect a royalty for further conveying from those to whom you convey |
1669 | +the Program, the only way you could satisfy both those terms and this |
1670 | +License would be to refrain entirely from conveying the Program. |
1671 | + |
1672 | + 13. Use with the GNU Affero General Public License. |
1673 | + |
1674 | + Notwithstanding any other provision of this License, you have |
1675 | +permission to link or combine any covered work with a work licensed |
1676 | +under version 3 of the GNU Affero General Public License into a single |
1677 | +combined work, and to convey the resulting work. The terms of this |
1678 | +License will continue to apply to the part which is the covered work, |
1679 | +but the special requirements of the GNU Affero General Public License, |
1680 | +section 13, concerning interaction through a network will apply to the |
1681 | +combination as such. |
1682 | + |
1683 | + 14. Revised Versions of this License. |
1684 | + |
1685 | + The Free Software Foundation may publish revised and/or new versions of |
1686 | +the GNU General Public License from time to time. Such new versions will |
1687 | +be similar in spirit to the present version, but may differ in detail to |
1688 | +address new problems or concerns. |
1689 | + |
1690 | + Each version is given a distinguishing version number. If the |
1691 | +Program specifies that a certain numbered version of the GNU General |
1692 | +Public License "or any later version" applies to it, you have the |
1693 | +option of following the terms and conditions either of that numbered |
1694 | +version or of any later version published by the Free Software |
1695 | +Foundation. If the Program does not specify a version number of the |
1696 | +GNU General Public License, you may choose any version ever published |
1697 | +by the Free Software Foundation. |
1698 | + |
1699 | + If the Program specifies that a proxy can decide which future |
1700 | +versions of the GNU General Public License can be used, that proxy's |
1701 | +public statement of acceptance of a version permanently authorizes you |
1702 | +to choose that version for the Program. |
1703 | + |
1704 | + Later license versions may give you additional or different |
1705 | +permissions. However, no additional obligations are imposed on any |
1706 | +author or copyright holder as a result of your choosing to follow a |
1707 | +later version. |
1708 | + |
1709 | + 15. Disclaimer of Warranty. |
1710 | + |
1711 | + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY |
1712 | +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT |
1713 | +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY |
1714 | +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, |
1715 | +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
1716 | +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM |
1717 | +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF |
1718 | +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. |
1719 | + |
1720 | + 16. Limitation of Liability. |
1721 | + |
1722 | + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
1723 | +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS |
1724 | +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY |
1725 | +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE |
1726 | +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF |
1727 | +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD |
1728 | +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), |
1729 | +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF |
1730 | +SUCH DAMAGES. |
1731 | + |
1732 | + 17. Interpretation of Sections 15 and 16. |
1733 | + |
1734 | + If the disclaimer of warranty and limitation of liability provided |
1735 | +above cannot be given local legal effect according to their terms, |
1736 | +reviewing courts shall apply local law that most closely approximates |
1737 | +an absolute waiver of all civil liability in connection with the |
1738 | +Program, unless a warranty or assumption of liability accompanies a |
1739 | +copy of the Program in return for a fee. |
1740 | + |
1741 | + END OF TERMS AND CONDITIONS |
1742 | + |
1743 | + How to Apply These Terms to Your New Programs |
1744 | + |
1745 | + If you develop a new program, and you want it to be of the greatest |
1746 | +possible use to the public, the best way to achieve this is to make it |
1747 | +free software which everyone can redistribute and change under these terms. |
1748 | + |
1749 | + To do so, attach the following notices to the program. It is safest |
1750 | +to attach them to the start of each source file to most effectively |
1751 | +state the exclusion of warranty; and each file should have at least |
1752 | +the "copyright" line and a pointer to where the full notice is found. |
1753 | + |
1754 | + <one line to give the program's name and a brief idea of what it does.> |
1755 | + Copyright (C) <year> <name of author> |
1756 | + |
1757 | + This program is free software: you can redistribute it and/or modify |
1758 | + it under the terms of the GNU General Public License as published by |
1759 | + the Free Software Foundation, either version 3 of the License, or |
1760 | + (at your option) any later version. |
1761 | + |
1762 | + This program is distributed in the hope that it will be useful, |
1763 | + but WITHOUT ANY WARRANTY; without even the implied warranty of |
1764 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1765 | + GNU General Public License for more details. |
1766 | + |
1767 | + You should have received a copy of the GNU General Public License |
1768 | + along with this program. If not, see <http://www.gnu.org/licenses/>. |
1769 | + |
1770 | +Also add information on how to contact you by electronic and paper mail. |
1771 | + |
1772 | + If the program does terminal interaction, make it output a short |
1773 | +notice like this when it starts in an interactive mode: |
1774 | + |
1775 | + <program> Copyright (C) <year> <name of author> |
1776 | + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
1777 | + This is free software, and you are welcome to redistribute it |
1778 | + under certain conditions; type `show c' for details. |
1779 | + |
1780 | +The hypothetical commands `show w' and `show c' should show the appropriate |
1781 | +parts of the General Public License. Of course, your program's commands |
1782 | +might be different; for a GUI interface, you would use an "about box". |
1783 | + |
1784 | + You should also get your employer (if you work as a programmer) or school, |
1785 | +if any, to sign a "copyright disclaimer" for the program, if necessary. |
1786 | +For more information on this, and how to apply and follow the GNU GPL, see |
1787 | +<http://www.gnu.org/licenses/>. |
1788 | + |
1789 | + The GNU General Public License does not permit incorporating your program |
1790 | +into proprietary programs. If your program is a subroutine library, you |
1791 | +may consider it more useful to permit linking proprietary applications with |
1792 | +the library. If this is what you want to do, use the GNU Lesser General |
1793 | +Public License instead of this License. But first, please read |
1794 | +<http://www.gnu.org/philosophy/why-not-lgpl.html>. |
1795 | diff --git a/Makefile b/Makefile |
1796 | index 5d35dcc..5940ed7 100644 |
1797 | --- a/Makefile |
1798 | +++ b/Makefile |
1799 | @@ -27,13 +27,16 @@ ifeq ($(distro),) |
1800 | distro = redhat |
1801 | endif |
1802 | |
1803 | -READ_VERSION=$(shell $(PYVER) $(CWD)/tools/read-version) |
1804 | +READ_VERSION=$(shell $(PYVER) $(CWD)/tools/read-version || \ |
1805 | + echo read-version-failed) |
1806 | CODE_VERSION=$(shell $(PYVER) -c "from cloudinit import version; print(version.version_string())") |
1807 | |
1808 | |
1809 | all: check |
1810 | |
1811 | -check: check_version pep8 $(pyflakes) test $(yaml) |
1812 | +check: check_version test $(yaml) |
1813 | + |
1814 | +style-check: pep8 $(pyflakes) |
1815 | |
1816 | pep8: |
1817 | @$(CWD)/tools/run-pep8 |
1818 | @@ -62,8 +65,8 @@ test: $(unittests) |
1819 | |
1820 | check_version: |
1821 | @if [ "$(READ_VERSION)" != "$(CODE_VERSION)" ]; then \ |
1822 | - echo "Error: read-version version $(READ_VERSION)" \ |
1823 | - "not equal to code version $(CODE_VERSION)"; exit 2; \ |
1824 | + echo "Error: read-version version '$(READ_VERSION)'" \ |
1825 | + "not equal to code version '$(CODE_VERSION)'"; exit 2; \ |
1826 | else true; fi |
1827 | |
1828 | clean_pyc: |
1829 | @@ -73,7 +76,7 @@ clean: clean_pyc |
1830 | rm -rf /var/log/cloud-init.log /var/lib/cloud/ |
1831 | |
1832 | yaml: |
1833 | - @$(CWD)/tools/validate-yaml.py $(YAML_FILES) |
1834 | + @$(PYVER) $(CWD)/tools/validate-yaml.py $(YAML_FILES) |
1835 | |
1836 | rpm: |
1837 | ./packages/brpm --distro $(distro) |
1838 | @@ -83,3 +86,4 @@ deb: |
1839 | |
1840 | .PHONY: test pyflakes pyflakes3 clean pep8 rpm deb yaml check_version |
1841 | .PHONY: pip-test-requirements pip-requirements clean_pyc unittest unittest3 |
1842 | +.PHONY: style-check |
1843 | diff --git a/cloudinit/__init__.py b/cloudinit/__init__.py |
1844 | index da12464..e69de29 100644 |
1845 | --- a/cloudinit/__init__.py |
1846 | +++ b/cloudinit/__init__.py |
1847 | @@ -1,21 +0,0 @@ |
1848 | -# vi: ts=4 expandtab |
1849 | -# |
1850 | -# Copyright (C) 2012 Canonical Ltd. |
1851 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
1852 | -# Copyright (C) 2012 Yahoo! Inc. |
1853 | -# |
1854 | -# Author: Scott Moser <scott.moser@canonical.com> |
1855 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
1856 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
1857 | -# |
1858 | -# This program is free software: you can redistribute it and/or modify |
1859 | -# it under the terms of the GNU General Public License version 3, as |
1860 | -# published by the Free Software Foundation. |
1861 | -# |
1862 | -# This program is distributed in the hope that it will be useful, |
1863 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1864 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1865 | -# GNU General Public License for more details. |
1866 | -# |
1867 | -# You should have received a copy of the GNU General Public License |
1868 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1869 | diff --git a/cloudinit/atomic_helper.py b/cloudinit/atomic_helper.py |
1870 | index a3cfd94..fb2df8d 100644 |
1871 | --- a/cloudinit/atomic_helper.py |
1872 | +++ b/cloudinit/atomic_helper.py |
1873 | @@ -1,5 +1,4 @@ |
1874 | -#!/usr/bin/python |
1875 | -# vi: ts=4 expandtab |
1876 | +# This file is part of cloud-init. See LICENSE file for license information. |
1877 | |
1878 | import json |
1879 | import os |
1880 | @@ -29,3 +28,5 @@ def write_json(filename, data, mode=_DEF_PERMS): |
1881 | return write_file( |
1882 | filename, json.dumps(data, indent=1, sort_keys=True) + "\n", |
1883 | omode="w", mode=mode) |
1884 | + |
1885 | +# vi: ts=4 expandtab |
1886 | diff --git a/cloudinit/cloud.py b/cloudinit/cloud.py |
1887 | index 3e6be20..b93a42e 100644 |
1888 | --- a/cloudinit/cloud.py |
1889 | +++ b/cloudinit/cloud.py |
1890 | @@ -1,24 +1,8 @@ |
1891 | -# vi: ts=4 expandtab |
1892 | -# |
1893 | -# Copyright (C) 2012 Canonical Ltd. |
1894 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
1895 | -# Copyright (C) 2012 Yahoo! Inc. |
1896 | -# |
1897 | -# Author: Scott Moser <scott.moser@canonical.com> |
1898 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
1899 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
1900 | -# |
1901 | -# This program is free software: you can redistribute it and/or modify |
1902 | -# it under the terms of the GNU General Public License version 3, as |
1903 | -# published by the Free Software Foundation. |
1904 | +# Copyright (C) 2012 Canonical Ltd. |
1905 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
1906 | +# Copyright (C) 2012 Yahoo! Inc. |
1907 | # |
1908 | -# This program is distributed in the hope that it will be useful, |
1909 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1910 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1911 | -# GNU General Public License for more details. |
1912 | -# |
1913 | -# You should have received a copy of the GNU General Public License |
1914 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1915 | +# This file is part of cloud-init. See LICENSE file for license information. |
1916 | |
1917 | import copy |
1918 | import os |
1919 | @@ -107,3 +91,5 @@ class Cloud(object): |
1920 | |
1921 | def get_ipath(self, name=None): |
1922 | return self.paths.get_ipath(name) |
1923 | + |
1924 | +# vi: ts=4 expandtab |
1925 | diff --git a/cloudinit/cmd/__init__.py b/cloudinit/cmd/__init__.py |
1926 | index da12464..e69de29 100644 |
1927 | --- a/cloudinit/cmd/__init__.py |
1928 | +++ b/cloudinit/cmd/__init__.py |
1929 | @@ -1,21 +0,0 @@ |
1930 | -# vi: ts=4 expandtab |
1931 | -# |
1932 | -# Copyright (C) 2012 Canonical Ltd. |
1933 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
1934 | -# Copyright (C) 2012 Yahoo! Inc. |
1935 | -# |
1936 | -# Author: Scott Moser <scott.moser@canonical.com> |
1937 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
1938 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
1939 | -# |
1940 | -# This program is free software: you can redistribute it and/or modify |
1941 | -# it under the terms of the GNU General Public License version 3, as |
1942 | -# published by the Free Software Foundation. |
1943 | -# |
1944 | -# This program is distributed in the hope that it will be useful, |
1945 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1946 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1947 | -# GNU General Public License for more details. |
1948 | -# |
1949 | -# You should have received a copy of the GNU General Public License |
1950 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1951 | diff --git a/cloudinit/cmd/main.py b/cloudinit/cmd/main.py |
1952 | index 83eb02c..fd22132 100644 |
1953 | --- a/cloudinit/cmd/main.py |
1954 | +++ b/cloudinit/cmd/main.py |
1955 | @@ -1,25 +1,14 @@ |
1956 | #!/usr/bin/python |
1957 | -# vi: ts=4 expandtab |
1958 | -# |
1959 | -# Copyright (C) 2012 Canonical Ltd. |
1960 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
1961 | -# Copyright (C) 2012 Yahoo! Inc. |
1962 | -# |
1963 | -# Author: Scott Moser <scott.moser@canonical.com> |
1964 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
1965 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
1966 | # |
1967 | -# This program is free software: you can redistribute it and/or modify |
1968 | -# it under the terms of the GNU General Public License version 3, as |
1969 | -# published by the Free Software Foundation. |
1970 | +# Copyright (C) 2012 Canonical Ltd. |
1971 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
1972 | +# Copyright (C) 2012 Yahoo! Inc. |
1973 | # |
1974 | -# This program is distributed in the hope that it will be useful, |
1975 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
1976 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1977 | -# GNU General Public License for more details. |
1978 | +# Author: Scott Moser <scott.moser@canonical.com> |
1979 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
1980 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
1981 | # |
1982 | -# You should have received a copy of the GNU General Public License |
1983 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
1984 | +# This file is part of cloud-init. See LICENSE file for license information. |
1985 | |
1986 | import argparse |
1987 | import json |
1988 | @@ -37,8 +26,10 @@ from cloudinit import signal_handler |
1989 | from cloudinit import sources |
1990 | from cloudinit import stages |
1991 | from cloudinit import templater |
1992 | +from cloudinit import url_helper |
1993 | from cloudinit import util |
1994 | from cloudinit import version |
1995 | +from cloudinit import warnings |
1996 | |
1997 | from cloudinit import reporting |
1998 | from cloudinit.reporting import events |
1999 | @@ -140,23 +131,104 @@ def apply_reporting_cfg(cfg): |
2000 | reporting.update_configuration(cfg.get('reporting')) |
2001 | |
2002 | |
2003 | +def parse_cmdline_url(cmdline, names=('cloud-config-url', 'url')): |
2004 | + data = util.keyval_str_to_dict(cmdline) |
2005 | + for key in names: |
2006 | + if key in data: |
2007 | + return key, data[key] |
2008 | + raise KeyError("No keys (%s) found in string '%s'" % |
2009 | + (cmdline, names)) |
2010 | + |
2011 | + |
2012 | +def attempt_cmdline_url(path, network=True, cmdline=None): |
2013 | + """Write data from url referenced in command line to path. |
2014 | + |
2015 | + path: a file to write content to if downloaded. |
2016 | + network: should network access be assumed. |
2017 | + cmdline: the cmdline to parse for cloud-config-url. |
2018 | + |
2019 | + This is used in MAAS datasource, in "ephemeral" (read-only root) |
2020 | + environment where the instance netboots to iscsi ro root. |
2021 | + and the entity that controls the pxe config has to configure |
2022 | + the maas datasource. |
2023 | + |
2024 | + An attempt is made on network urls even in local datasource |
2025 | + for case of network set up in initramfs. |
2026 | + |
2027 | + Return value is a tuple of a logger function (logging.DEBUG) |
2028 | + and a message indicating what happened. |
2029 | + """ |
2030 | + |
2031 | + if cmdline is None: |
2032 | + cmdline = util.get_cmdline() |
2033 | + |
2034 | + try: |
2035 | + cmdline_name, url = parse_cmdline_url(cmdline) |
2036 | + except KeyError: |
2037 | + return (logging.DEBUG, "No kernel command line url found.") |
2038 | + |
2039 | + path_is_local = url.startswith("file://") or url.startswith("/") |
2040 | + |
2041 | + if path_is_local and os.path.exists(path): |
2042 | + if network: |
2043 | + m = ("file '%s' existed, possibly from local stage download" |
2044 | + " of command line url '%s'. Not re-writing." % (path, url)) |
2045 | + level = logging.INFO |
2046 | + if path_is_local: |
2047 | + level = logging.DEBUG |
2048 | + else: |
2049 | + m = ("file '%s' existed, possibly from previous boot download" |
2050 | + " of command line url '%s'. Not re-writing." % (path, url)) |
2051 | + level = logging.WARN |
2052 | + |
2053 | + return (level, m) |
2054 | + |
2055 | + kwargs = {'url': url, 'timeout': 10, 'retries': 2} |
2056 | + if network or path_is_local: |
2057 | + level = logging.WARN |
2058 | + kwargs['sec_between'] = 1 |
2059 | + else: |
2060 | + level = logging.DEBUG |
2061 | + kwargs['sec_between'] = .1 |
2062 | + |
2063 | + data = None |
2064 | + header = b'#cloud-config' |
2065 | + try: |
2066 | + resp = util.read_file_or_url(**kwargs) |
2067 | + if resp.ok(): |
2068 | + data = resp.contents |
2069 | + if not resp.contents.startswith(header): |
2070 | + if cmdline_name == 'cloud-config-url': |
2071 | + level = logging.WARN |
2072 | + else: |
2073 | + level = logging.INFO |
2074 | + return ( |
2075 | + level, |
2076 | + "contents of '%s' did not start with %s" % (url, header)) |
2077 | + else: |
2078 | + return (level, |
2079 | + "url '%s' returned code %s. Ignoring." % (url, resp.code)) |
2080 | + |
2081 | + except url_helper.UrlError as e: |
2082 | + return (level, "retrieving url '%s' failed: %s" % (url, e)) |
2083 | + |
2084 | + util.write_file(path, data, mode=0o600) |
2085 | + return (logging.INFO, |
2086 | + "wrote cloud-config data from %s='%s' to %s" % |
2087 | + (cmdline_name, url, path)) |
2088 | + |
2089 | + |
2090 | def main_init(name, args): |
2091 | deps = [sources.DEP_FILESYSTEM, sources.DEP_NETWORK] |
2092 | if args.local: |
2093 | deps = [sources.DEP_FILESYSTEM] |
2094 | |
2095 | - if not args.local: |
2096 | - # See doc/kernel-cmdline.txt |
2097 | - # |
2098 | - # This is used in maas datasource, in "ephemeral" (read-only root) |
2099 | - # environment where the instance netboots to iscsi ro root. |
2100 | - # and the entity that controls the pxe config has to configure |
2101 | - # the maas datasource. |
2102 | - # |
2103 | - # Could be used elsewhere, only works on network based (not local). |
2104 | - root_name = "%s.d" % (CLOUD_CONFIG) |
2105 | - target_fn = os.path.join(root_name, "91_kernel_cmdline_url.cfg") |
2106 | - util.read_write_cmdline_url(target_fn) |
2107 | + early_logs = [] |
2108 | + early_logs.append( |
2109 | + attempt_cmdline_url( |
2110 | + path=os.path.join("%s.d" % CLOUD_CONFIG, |
2111 | + "91_kernel_cmdline_url.cfg"), |
2112 | + network=not args.local)) |
2113 | |
2114 | # Cloud-init 'init' stage is broken up into the following sub-stages |
2115 | # 1. Ensure that the init object fetches its config without errors |
2116 | @@ -182,12 +254,14 @@ def main_init(name, args): |
2117 | outfmt = None |
2118 | errfmt = None |
2119 | try: |
2120 | - LOG.debug("Closing stdin") |
2121 | + early_logs.append((logging.DEBUG, "Closing stdin.")) |
2122 | util.close_stdin() |
2123 | (outfmt, errfmt) = util.fixup_output(init.cfg, name) |
2124 | except Exception: |
2125 | - util.logexc(LOG, "Failed to setup output redirection!") |
2126 | - print_exc("Failed to setup output redirection!") |
2127 | + msg = "Failed to setup output redirection!" |
2128 | + util.logexc(LOG, msg) |
2129 | + print_exc(msg) |
2130 | + early_logs.append((logging.WARN, msg)) |
2131 | if args.debug: |
2132 | # Reset so that all the debug handlers are closed out |
2133 | LOG.debug(("Logging being reset, this logger may no" |
2134 | @@ -201,6 +275,10 @@ def main_init(name, args): |
2135 | # been redirected and log now configured. |
2136 | welcome(name, msg=w_msg) |
2137 | |
2138 | + # re-play early log messages before logging was setup |
2139 | + for lvl, msg in early_logs: |
2140 | + LOG.log(lvl, msg) |
2141 | + |
2142 | # Stage 3 |
2143 | try: |
2144 | init.initialize() |
2145 | @@ -235,8 +313,15 @@ def main_init(name, args): |
2146 | " would allow us to stop early.") |
2147 | else: |
2148 | existing = "check" |
2149 | - if util.get_cfg_option_bool(init.cfg, 'manual_cache_clean', False): |
2150 | + mcfg = util.get_cfg_option_bool(init.cfg, 'manual_cache_clean', False) |
2151 | + if mcfg: |
2152 | + LOG.debug("manual cache clean set from config") |
2153 | existing = "trust" |
2154 | + else: |
2155 | + mfile = path_helper.get_ipath_cur("manual_clean_marker") |
2156 | + if os.path.exists(mfile): |
2157 | + LOG.debug("manual cache clean found from marker: %s", mfile) |
2158 | + existing = "trust" |
2159 | |
2160 | init.purge_cache() |
2161 | # Delete the non-net file as well |
2162 | @@ -326,10 +411,51 @@ def main_init(name, args): |
2163 | util.logexc(LOG, "Failed to re-adjust output redirection!") |
2164 | logging.setupLogging(mods.cfg) |
2165 | |
2166 | + # give the activated datasource a chance to adjust |
2167 | + init.activate_datasource() |
2168 | + |
2169 | + di_report_warn(datasource=init.datasource, cfg=init.cfg) |
2170 | + |
2171 | # Stage 10 |
2172 | return (init.datasource, run_module_section(mods, name, name)) |
2173 | |
2174 | |
2175 | +def di_report_warn(datasource, cfg): |
2176 | + if 'di_report' not in cfg: |
2177 | + LOG.debug("no di_report found in config.") |
2178 | + return |
2179 | + |
2180 | + dicfg = cfg.get('di_report', {}) |
2181 | + if not isinstance(dicfg, dict): |
2182 | + LOG.warn("di_report config not a dictionary: %s", dicfg) |
2183 | + return |
2184 | + |
2185 | + dslist = dicfg.get('datasource_list') |
2186 | + if dslist is None: |
2187 | + LOG.warn("no 'datasource_list' found in di_report.") |
2188 | + return |
2189 | + elif not isinstance(dslist, list): |
2190 | + LOG.warn("di_report/datasource_list not a list: %s", dslist) |
2191 | + return |
2192 | + |
2193 | + # ds.__module__ is like cloudinit.sources.DataSourceName |
2194 | + # where Name is the thing that shows up in datasource_list. |
2195 | + modname = datasource.__module__.rpartition(".")[2] |
2196 | + if modname.startswith(sources.DS_PREFIX): |
2197 | + modname = modname[len(sources.DS_PREFIX):] |
2198 | + else: |
2199 | + LOG.warn("Datasource '%s' came from unexpected module '%s'.", |
2200 | + datasource, modname) |
2201 | + |
2202 | + if modname in dslist: |
2203 | + LOG.debug("used datasource '%s' from '%s' was in di_report's list: %s", |
2204 | + datasource, modname, dslist) |
2205 | + return |
2206 | + |
2207 | + warnings.show_warning('dsid_missing_source', cfg, |
2208 | + source=modname, dslist=str(dslist)) |
2209 | + |
2210 | + |
2211 | def main_modules(action_name, args): |
2212 | name = args.mode |
2213 | # Cloud-init 'modules' stages are broken up into the following sub-stages |
2214 | @@ -554,6 +680,10 @@ def status_wrapper(name, args, data_d=None, link_d=None): |
2215 | return len(v1[mode]['errors']) |
2216 | |
2217 | |
2218 | +def main_features(name, args): |
2219 | + sys.stdout.write('\n'.join(sorted(version.FEATURES)) + '\n') |
2220 | + |
2221 | + |
2222 | def main(sysv_args=None): |
2223 | if sysv_args is not None: |
2224 | parser = argparse.ArgumentParser(prog=sysv_args[0]) |
2225 | @@ -644,6 +774,10 @@ def main(sysv_args=None): |
2226 | ' upon')) |
2227 | parser_dhclient.set_defaults(action=('dhclient_hook', dhclient_hook)) |
2228 | |
2229 | + parser_features = subparsers.add_parser('features', |
2230 | + help=('list defined features')) |
2231 | + parser_features.set_defaults(action=('features', main_features)) |
2232 | + |
2233 | args = parser.parse_args(args=sysv_args) |
2234 | |
2235 | try: |
2236 | @@ -662,6 +796,7 @@ def main(sysv_args=None): |
2237 | if name in ("modules", "init"): |
2238 | functor = status_wrapper |
2239 | |
2240 | + rname = None |
2241 | report_on = True |
2242 | if name == "init": |
2243 | if args.local: |
2244 | @@ -676,10 +811,10 @@ def main(sysv_args=None): |
2245 | rname, rdesc = ("single/%s" % args.name, |
2246 | "running single module %s" % args.name) |
2247 | report_on = args.report |
2248 | - |
2249 | - elif name == 'dhclient_hook': |
2250 | - rname, rdesc = ("dhclient-hook", |
2251 | - "running dhclient-hook module") |
2252 | + else: |
2253 | + rname = name |
2254 | + rdesc = "running 'cloud-init %s'" % name |
2255 | + report_on = False |
2256 | |
2257 | args.reporter = events.ReportEventStack( |
2258 | rname, rdesc, reporting_enabled=report_on) |
2259 | @@ -691,4 +826,8 @@ def main(sysv_args=None): |
2260 | |
2261 | |
2262 | if __name__ == '__main__': |
2263 | + if 'TZ' not in os.environ: |
2264 | + os.environ['TZ'] = ":/etc/localtime" |
2265 | main(sys.argv) |
2266 | + |
2267 | +# vi: ts=4 expandtab |
2268 | diff --git a/cloudinit/config/__init__.py b/cloudinit/config/__init__.py |
2269 | index d57453b..57e2a44 100644 |
2270 | --- a/cloudinit/config/__init__.py |
2271 | +++ b/cloudinit/config/__init__.py |
2272 | @@ -1,23 +1,10 @@ |
2273 | -# vi: ts=4 expandtab |
2274 | -# |
2275 | -# Copyright (C) 2008-2010 Canonical Ltd. |
2276 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2277 | -# |
2278 | -# Author: Chuck Short <chuck.short@canonical.com> |
2279 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2280 | -# |
2281 | -# This program is free software: you can redistribute it and/or modify |
2282 | -# it under the terms of the GNU General Public License version 3, as |
2283 | -# published by the Free Software Foundation. |
2284 | +# Copyright (C) 2008-2010 Canonical Ltd. |
2285 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2286 | # |
2287 | -# This program is distributed in the hope that it will be useful, |
2288 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2289 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2290 | -# GNU General Public License for more details. |
2291 | -# |
2292 | -# You should have received a copy of the GNU General Public License |
2293 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2294 | +# Author: Chuck Short <chuck.short@canonical.com> |
2295 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2296 | # |
2297 | +# This file is part of cloud-init. See LICENSE file for license information. |
2298 | |
2299 | from cloudinit.settings import (PER_INSTANCE, FREQUENCIES) |
2300 | |
2301 | @@ -56,3 +43,5 @@ def fixup_module(mod, def_freq=PER_INSTANCE): |
2302 | if not hasattr(mod, 'osfamilies'): |
2303 | setattr(mod, 'osfamilies', []) |
2304 | return mod |
2305 | + |
2306 | +# vi: ts=4 expandtab |
2307 | diff --git a/cloudinit/config/cc_apt_configure.py b/cloudinit/config/cc_apt_configure.py |
2308 | index 6145fcd..7f09c91 100644 |
2309 | --- a/cloudinit/config/cc_apt_configure.py |
2310 | +++ b/cloudinit/config/cc_apt_configure.py |
2311 | @@ -1,22 +1,10 @@ |
2312 | -# vi: ts=4 expandtab |
2313 | -# |
2314 | -# Copyright (C) 2009-2010 Canonical Ltd. |
2315 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2316 | -# |
2317 | -# Author: Scott Moser <scott.moser@canonical.com> |
2318 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2319 | +# Copyright (C) 2009-2010 Canonical Ltd. |
2320 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2321 | # |
2322 | -# This program is free software: you can redistribute it and/or modify |
2323 | -# it under the terms of the GNU General Public License version 3, as |
2324 | -# published by the Free Software Foundation. |
2325 | +# Author: Scott Moser <scott.moser@canonical.com> |
2326 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2327 | # |
2328 | -# This program is distributed in the hope that it will be useful, |
2329 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2330 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2331 | -# GNU General Public License for more details. |
2332 | -# |
2333 | -# You should have received a copy of the GNU General Public License |
2334 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2335 | +# This file is part of cloud-init. See LICENSE file for license information. |
2336 | |
2337 | """ |
2338 | Apt Configure |
2339 | @@ -199,6 +187,8 @@ The ``source`` key supports variable replacements for the following strings: |
2340 | deb-src $MIRROR $RELEASE main restricted |
2341 | deb $PRIMARY $RELEASE universe restricted |
2342 | deb $SECURITY $RELEASE-security multiverse |
2343 | + debconf_selections: |
2344 | + set1: the-package the-package/some-flag boolean true |
2345 | conf: | |
2346 | APT { |
2347 | Get { |
2348 | @@ -216,9 +206,9 @@ The ``source`` key supports variable replacements for the following strings: |
2349 | keyserver: "keyserverurl" |
2350 | source: "deb http://<url>/ xenial main" |
2351 | source2: |
2352 | - source "ppa:<ppa-name>" |
2353 | + source: "ppa:<ppa-name>" |
2354 | source3: |
2355 | - source "deb $MIRROR $RELEASE multiverse" |
2356 | + source: "deb $MIRROR $RELEASE multiverse" |
2357 | key: | |
2358 | ------BEGIN PGP PUBLIC KEY BLOCK------- |
2359 | <key data> |
2360 | @@ -928,4 +918,4 @@ CONFIG_CLEANERS = { |
2361 | 'cloud-init': clean_cloud_init, |
2362 | } |
2363 | |
2364 | -# vi: ts=4 expandtab syntax=python |
2365 | +# vi: ts=4 expandtab |
2366 | diff --git a/cloudinit/config/cc_apt_pipelining.py b/cloudinit/config/cc_apt_pipelining.py |
2367 | index ab9d005..cdf28cd 100644 |
2368 | --- a/cloudinit/config/cc_apt_pipelining.py |
2369 | +++ b/cloudinit/config/cc_apt_pipelining.py |
2370 | @@ -1,20 +1,8 @@ |
2371 | -# vi: ts=4 expandtab |
2372 | -# |
2373 | -# Copyright (C) 2011 Canonical Ltd. |
2374 | -# |
2375 | -# Author: Ben Howard <ben.howard@canonical.com> |
2376 | +# Copyright (C) 2011 Canonical Ltd. |
2377 | # |
2378 | -# This program is free software: you can redistribute it and/or modify |
2379 | -# it under the terms of the GNU General Public License version 3, as |
2380 | -# published by the Free Software Foundation. |
2381 | +# Author: Ben Howard <ben.howard@canonical.com> |
2382 | # |
2383 | -# This program is distributed in the hope that it will be useful, |
2384 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2385 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2386 | -# GNU General Public License for more details. |
2387 | -# |
2388 | -# You should have received a copy of the GNU General Public License |
2389 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2390 | +# This file is part of cloud-init. See LICENSE file for license information. |
2391 | |
2392 | """ |
2393 | Apt Pipelining |
2394 | @@ -80,3 +68,5 @@ def write_apt_snippet(setting, log, f_name): |
2395 | file_contents = APT_PIPE_TPL % (setting) |
2396 | util.write_file(f_name, file_contents) |
2397 | log.debug("Wrote %s with apt pipeline depth setting %s", f_name, setting) |
2398 | + |
2399 | +# vi: ts=4 expandtab |
2400 | diff --git a/cloudinit/config/cc_bootcmd.py b/cloudinit/config/cc_bootcmd.py |
2401 | index 22b23f2..604f93b 100644 |
2402 | --- a/cloudinit/config/cc_bootcmd.py |
2403 | +++ b/cloudinit/config/cc_bootcmd.py |
2404 | @@ -1,22 +1,10 @@ |
2405 | -# vi: ts=4 expandtab |
2406 | -# |
2407 | -# Copyright (C) 2009-2011 Canonical Ltd. |
2408 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
2409 | -# |
2410 | -# Author: Scott Moser <scott.moser@canonical.com> |
2411 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2412 | +# Copyright (C) 2009-2011 Canonical Ltd. |
2413 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
2414 | # |
2415 | -# This program is free software: you can redistribute it and/or modify |
2416 | -# it under the terms of the GNU General Public License version 3, as |
2417 | -# published by the Free Software Foundation. |
2418 | +# Author: Scott Moser <scott.moser@canonical.com> |
2419 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2420 | # |
2421 | -# This program is distributed in the hope that it will be useful, |
2422 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2423 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2424 | -# GNU General Public License for more details. |
2425 | -# |
2426 | -# You should have received a copy of the GNU General Public License |
2427 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2428 | +# This file is part of cloud-init. See LICENSE file for license information. |
2429 | |
2430 | """ |
2431 | Bootcmd |
2432 | @@ -43,7 +31,7 @@ specified either as lists or strings. For invocation details, see ``runcmd``. |
2433 | |
2434 | bootcmd: |
2435 | - echo 192.168.1.130 us.archive.ubuntu.com > /etc/hosts |
2436 | - - [ cloud-nit-per, once, mymkfs, mkfs, /dev/vdb ] |
2437 | + - [ cloud-init-per, once, mymkfs, mkfs, /dev/vdb ] |
2438 | """ |
2439 | |
2440 | import os |
2441 | @@ -80,3 +68,5 @@ def handle(name, cfg, cloud, log, _args): |
2442 | except Exception: |
2443 | util.logexc(log, "Failed to run bootcmd module %s", name) |
2444 | raise |
2445 | + |
2446 | +# vi: ts=4 expandtab |
2447 | diff --git a/cloudinit/config/cc_byobu.py b/cloudinit/config/cc_byobu.py |
2448 | index 4a616e2..8570da1 100755 |
2449 | --- a/cloudinit/config/cc_byobu.py |
2450 | +++ b/cloudinit/config/cc_byobu.py |
2451 | @@ -1,22 +1,10 @@ |
2452 | -# vi: ts=4 expandtab |
2453 | -# |
2454 | -# Copyright (C) 2009-2010 Canonical Ltd. |
2455 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2456 | -# |
2457 | -# Author: Scott Moser <scott.moser@canonical.com> |
2458 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2459 | +# Copyright (C) 2009-2010 Canonical Ltd. |
2460 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2461 | # |
2462 | -# This program is free software: you can redistribute it and/or modify |
2463 | -# it under the terms of the GNU General Public License version 3, as |
2464 | -# published by the Free Software Foundation. |
2465 | +# Author: Scott Moser <scott.moser@canonical.com> |
2466 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2467 | # |
2468 | -# This program is distributed in the hope that it will be useful, |
2469 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2470 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2471 | -# GNU General Public License for more details. |
2472 | -# |
2473 | -# You should have received a copy of the GNU General Public License |
2474 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2475 | +# This file is part of cloud-init. See LICENSE file for license information. |
2476 | |
2477 | """ |
2478 | Byobu |
2479 | @@ -106,3 +94,5 @@ def handle(name, cfg, cloud, log, args): |
2480 | cmd = ["/bin/sh", "-c", "%s %s %s" % ("X=0;", shcmd, "exit $X")] |
2481 | log.debug("Setting byobu to %s", value) |
2482 | util.subp(cmd, capture=False) |
2483 | + |
2484 | +# vi: ts=4 expandtab |
2485 | diff --git a/cloudinit/config/cc_ca_certs.py b/cloudinit/config/cc_ca_certs.py |
2486 | index 53d1406..64bc900 100644 |
2487 | --- a/cloudinit/config/cc_ca_certs.py |
2488 | +++ b/cloudinit/config/cc_ca_certs.py |
2489 | @@ -1,18 +1,6 @@ |
2490 | -# vi: ts=4 expandtab |
2491 | -# |
2492 | -# Author: Mike Milner <mike.milner@canonical.com> |
2493 | -# |
2494 | -# This program is free software: you can redistribute it and/or modify |
2495 | -# it under the terms of the GNU General Public License version 3, as |
2496 | -# published by the Free Software Foundation. |
2497 | +# Author: Mike Milner <mike.milner@canonical.com> |
2498 | # |
2499 | -# This program is distributed in the hope that it will be useful, |
2500 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2501 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2502 | -# GNU General Public License for more details. |
2503 | -# |
2504 | -# You should have received a copy of the GNU General Public License |
2505 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2506 | +# This file is part of cloud-init. See LICENSE file for license information. |
2507 | |
2508 | """ |
2509 | CA Certs |
2510 | @@ -32,7 +20,7 @@ can be removed from the system with the configuration option |
2511 | |
2512 | **Module frequency:** per instance |
2513 | |
2514 | -**Supporte distros:** ubuntu, debian |
2515 | +**Supported distros:** ubuntu, debian |
2516 | |
2517 | **Config keys**:: |
2518 | |
2519 | @@ -82,8 +70,8 @@ def add_ca_certs(certs): |
2520 | # We have to strip the content because blank lines in the file |
2521 | # causes subsequent entries to be ignored. (LP: #1077020) |
2522 | orig = util.load_file(CA_CERT_CONFIG) |
2523 | - cur_cont = '\n'.join([l for l in orig.splitlines() |
2524 | - if l != CA_CERT_FILENAME]) |
2525 | + cur_cont = '\n'.join([line for line in orig.splitlines() |
2526 | + if line != CA_CERT_FILENAME]) |
2527 | out = "%s\n%s\n" % (cur_cont.rstrip(), CA_CERT_FILENAME) |
2528 | util.write_file(CA_CERT_CONFIG, out, omode="wb") |
2529 | |
2530 | @@ -134,3 +122,5 @@ def handle(name, cfg, _cloud, log, _args): |
2531 | # Update the system with the new cert configuration. |
2532 | log.debug("Updating certificates") |
2533 | update_ca_certs() |
2534 | + |
2535 | +# vi: ts=4 expandtab |
2536 | diff --git a/cloudinit/config/cc_chef.py b/cloudinit/config/cc_chef.py |
2537 | index 922fb6a..2be2532 100644 |
2538 | --- a/cloudinit/config/cc_chef.py |
2539 | +++ b/cloudinit/config/cc_chef.py |
2540 | @@ -1,22 +1,10 @@ |
2541 | -# vi: ts=4 expandtab |
2542 | -# |
2543 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2544 | -# |
2545 | -# Author: Avishai Ish-Shalom <avishai@fewbytes.com> |
2546 | -# Author: Mike Moulton <mike@meltmedia.com> |
2547 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2548 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2549 | # |
2550 | -# This program is free software: you can redistribute it and/or modify |
2551 | -# it under the terms of the GNU General Public License version 3, as |
2552 | -# published by the Free Software Foundation. |
2553 | +# Author: Avishai Ish-Shalom <avishai@fewbytes.com> |
2554 | +# Author: Mike Moulton <mike@meltmedia.com> |
2555 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2556 | # |
2557 | -# This program is distributed in the hope that it will be useful, |
2558 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2559 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2560 | -# GNU General Public License for more details. |
2561 | -# |
2562 | -# You should have received a copy of the GNU General Public License |
2563 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2564 | +# This file is part of cloud-init. See LICENSE file for license information. |
2565 | |
2566 | """ |
2567 | Chef |
2568 | @@ -314,7 +302,7 @@ def install_chef(cloud, chef_cfg, log): |
2569 | retries = max(0, util.get_cfg_option_int(chef_cfg, |
2570 | "omnibus_url_retries", |
2571 | default=OMNIBUS_URL_RETRIES)) |
2572 | - content = url_helper.readurl(url=url, retries=retries) |
2573 | + content = url_helper.readurl(url=url, retries=retries).contents |
2574 | with util.tempdir() as tmpd: |
2575 | # Use tmpdir over tmpfile to avoid 'text file busy' on execute |
2576 | tmpf = "%s/chef-omnibus-install" % tmpd |
2577 | @@ -348,3 +336,5 @@ def install_chef_from_gems(ruby_version, chef_version, distro): |
2578 | util.subp(['/usr/bin/gem', 'install', 'chef', |
2579 | '--no-ri', '--no-rdoc', '--bindir', |
2580 | '/usr/bin', '-q'], capture=False) |
2581 | + |
2582 | +# vi: ts=4 expandtab |
2583 | diff --git a/cloudinit/config/cc_debug.py b/cloudinit/config/cc_debug.py |
2584 | index 5ab3646..0a039eb 100644 |
2585 | --- a/cloudinit/config/cc_debug.py |
2586 | +++ b/cloudinit/config/cc_debug.py |
2587 | @@ -1,18 +1,6 @@ |
2588 | -# vi: ts=4 expandtab |
2589 | -# |
2590 | -# Copyright (C) 2013 Yahoo! Inc. |
2591 | -# |
2592 | -# This program is free software: you can redistribute it and/or modify |
2593 | -# it under the terms of the GNU General Public License version 3, as |
2594 | -# published by the Free Software Foundation. |
2595 | +# Copyright (C) 2013 Yahoo! Inc. |
2596 | # |
2597 | -# This program is distributed in the hope that it will be useful, |
2598 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2599 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2600 | -# GNU General Public License for more details. |
2601 | -# |
2602 | -# You should have received a copy of the GNU General Public License |
2603 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2604 | +# This file is part of cloud-init. See LICENSE file for license information. |
2605 | |
2606 | """ |
2607 | Debug |
2608 | @@ -113,3 +101,5 @@ def handle(name, cfg, cloud, log, args): |
2609 | util.write_file(out_file, "".join(content_to_file), 0o644, "w") |
2610 | else: |
2611 | util.multi_log("".join(content_to_file), console=True, stderr=False) |
2612 | + |
2613 | +# vi: ts=4 expandtab |
2614 | diff --git a/cloudinit/config/cc_disable_ec2_metadata.py b/cloudinit/config/cc_disable_ec2_metadata.py |
2615 | index 5c54e6f..c56319b 100644 |
2616 | --- a/cloudinit/config/cc_disable_ec2_metadata.py |
2617 | +++ b/cloudinit/config/cc_disable_ec2_metadata.py |
2618 | @@ -1,22 +1,10 @@ |
2619 | -# vi: ts=4 expandtab |
2620 | -# |
2621 | -# Copyright (C) 2009-2010 Canonical Ltd. |
2622 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2623 | -# |
2624 | -# Author: Scott Moser <scott.moser@canonical.com> |
2625 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2626 | +# Copyright (C) 2009-2010 Canonical Ltd. |
2627 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2628 | # |
2629 | -# This program is free software: you can redistribute it and/or modify |
2630 | -# it under the terms of the GNU General Public License version 3, as |
2631 | -# published by the Free Software Foundation. |
2632 | +# Author: Scott Moser <scott.moser@canonical.com> |
2633 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2634 | # |
2635 | -# This program is distributed in the hope that it will be useful, |
2636 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2637 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2638 | -# GNU General Public License for more details. |
2639 | -# |
2640 | -# You should have received a copy of the GNU General Public License |
2641 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2642 | +# This file is part of cloud-init. See LICENSE file for license information. |
2643 | |
2644 | """ |
2645 | Disable EC2 Metadata |
2646 | @@ -54,3 +42,5 @@ def handle(name, cfg, _cloud, log, _args): |
2647 | else: |
2648 | log.debug(("Skipping module named %s," |
2649 | " disabling the ec2 route not enabled"), name) |
2650 | + |
2651 | +# vi: ts=4 expandtab |
2652 | diff --git a/cloudinit/config/cc_disk_setup.py b/cloudinit/config/cc_disk_setup.py |
2653 | index 0c4b794..f39f081 100644 |
2654 | --- a/cloudinit/config/cc_disk_setup.py |
2655 | +++ b/cloudinit/config/cc_disk_setup.py |
2656 | @@ -1,21 +1,9 @@ |
2657 | -# vi: ts=4 expandtab |
2658 | -# |
2659 | -# Copyright (C) 2009-2010 Canonical Ltd. |
2660 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2661 | -# |
2662 | -# Author: Ben Howard <ben.howard@canonical.com> |
2663 | -# |
2664 | -# This program is free software: you can redistribute it and/or modify |
2665 | -# it under the terms of the GNU General Public License version 3, as |
2666 | -# published by the Free Software Foundation. |
2667 | +# Copyright (C) 2009-2010 Canonical Ltd. |
2668 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2669 | # |
2670 | -# This program is distributed in the hope that it will be useful, |
2671 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2672 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2673 | -# GNU General Public License for more details. |
2674 | +# Author: Ben Howard <ben.howard@canonical.com> |
2675 | # |
2676 | -# You should have received a copy of the GNU General Public License |
2677 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2678 | +# This file is part of cloud-init. See LICENSE file for license information. |
2679 | |
2680 | """ |
2681 | Disk Setup |
2682 | @@ -213,7 +201,7 @@ def update_fs_setup_devices(disk_setup, tformer): |
2683 | |
2684 | if part and 'partition' in definition: |
2685 | definition['_partition'] = definition['partition'] |
2686 | - definition['partition'] = part |
2687 | + definition['partition'] = part |
2688 | |
2689 | |
2690 | def value_splitter(values, start=None): |
2691 | @@ -436,14 +424,13 @@ def get_dyn_func(*args): |
2692 | |
2693 | |
2694 | def get_mbr_hdd_size(device): |
2695 | - size_cmd = [SFDISK_CMD, '--show-size', device] |
2696 | - size = None |
2697 | try: |
2698 | - size, _err = util.subp(size_cmd) |
2699 | + size_in_bytes, _ = util.subp([BLKDEV_CMD, '--getsize64', device]) |
2700 | + sector_size, _ = util.subp([BLKDEV_CMD, '--getss', device]) |
2701 | except Exception as e: |
2702 | raise Exception("Failed to get %s size\n%s" % (device, e)) |
2703 | |
2704 | - return int(size.strip()) |
2705 | + return int(size_in_bytes) / int(sector_size) |
2706 | |
2707 | |
2708 | def get_gpt_hdd_size(device): |
2709 | @@ -588,7 +575,7 @@ def get_partition_mbr_layout(size, layout): |
2710 | raise Exception("Partition was incorrectly defined: %s" % part) |
2711 | percent, part_type = part |
2712 | |
2713 | - part_size = int((float(size) * (float(percent) / 100)) / 1024) |
2714 | + part_size = int(float(size) * (float(percent) / 100)) |
2715 | |
2716 | if part_num == last_part_num: |
2717 | part_definition.append(",,%s" % part_type) |
2718 | @@ -692,7 +679,7 @@ def exec_mkpart_mbr(device, layout): |
2719 | types, i.e. gpt |
2720 | """ |
2721 | # Create the partitions |
2722 | - prt_cmd = [SFDISK_CMD, "--Linux", "-uM", device] |
2723 | + prt_cmd = [SFDISK_CMD, "--Linux", "--unit=S", "--force", device] |
2724 | try: |
2725 | util.subp(prt_cmd, data="%s\n" % layout) |
2726 | except Exception as e: |
2727 | @@ -909,7 +896,8 @@ def mkfs(fs_cfg): |
2728 | LOG.debug("Error in device identification handling.") |
2729 | return |
2730 | |
2731 | - LOG.debug("File system %s will be created on %s", label, device) |
2732 | + LOG.debug("File system type '%s' with label '%s' will be created on %s", |
2733 | + fs_type, label, device) |
2734 | |
2735 | # Make sure the device is defined |
2736 | if not device: |
2737 | @@ -958,3 +946,5 @@ def mkfs(fs_cfg): |
2738 | util.subp(fs_cmd) |
2739 | except Exception as e: |
2740 | raise Exception("Failed to exec of '%s':\n%s" % (fs_cmd, e)) |
2741 | + |
2742 | +# vi: ts=4 expandtab |
2743 | diff --git a/cloudinit/config/cc_emit_upstart.py b/cloudinit/config/cc_emit_upstart.py |
2744 | index a7be635..69dc2d5 100644 |
2745 | --- a/cloudinit/config/cc_emit_upstart.py |
2746 | +++ b/cloudinit/config/cc_emit_upstart.py |
2747 | @@ -1,22 +1,10 @@ |
2748 | -# vi: ts=4 expandtab |
2749 | -# |
2750 | -# Copyright (C) 2009-2011 Canonical Ltd. |
2751 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2752 | -# |
2753 | -# Author: Scott Moser <scott.moser@canonical.com> |
2754 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2755 | +# Copyright (C) 2009-2011 Canonical Ltd. |
2756 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2757 | # |
2758 | -# This program is free software: you can redistribute it and/or modify |
2759 | -# it under the terms of the GNU General Public License version 3, as |
2760 | -# published by the Free Software Foundation. |
2761 | +# Author: Scott Moser <scott.moser@canonical.com> |
2762 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2763 | # |
2764 | -# This program is distributed in the hope that it will be useful, |
2765 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2766 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2767 | -# GNU General Public License for more details. |
2768 | -# |
2769 | -# You should have received a copy of the GNU General Public License |
2770 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2771 | +# This file is part of cloud-init. See LICENSE file for license information. |
2772 | |
2773 | """ |
2774 | Emit Upstart |
2775 | @@ -82,3 +70,5 @@ def handle(name, _cfg, cloud, log, args): |
2776 | except Exception as e: |
2777 | # TODO(harlowja), use log exception from utils?? |
2778 | log.warn("Emission of upstart event %s failed due to: %s", n, e) |
2779 | + |
2780 | +# vi: ts=4 expandtab |
2781 | diff --git a/cloudinit/config/cc_fan.py b/cloudinit/config/cc_fan.py |
2782 | index 6027fdc..f0cda3d 100644 |
2783 | --- a/cloudinit/config/cc_fan.py |
2784 | +++ b/cloudinit/config/cc_fan.py |
2785 | @@ -1,20 +1,8 @@ |
2786 | -# vi: ts=4 expandtab |
2787 | -# |
2788 | -# Copyright (C) 2015 Canonical Ltd. |
2789 | -# |
2790 | -# Author: Scott Moser <scott.moser@canonical.com> |
2791 | +# Copyright (C) 2015 Canonical Ltd. |
2792 | # |
2793 | -# This program is free software: you can redistribute it and/or modify |
2794 | -# it under the terms of the GNU General Public License version 3, as |
2795 | -# published by the Free Software Foundation. |
2796 | +# Author: Scott Moser <scott.moser@canonical.com> |
2797 | # |
2798 | -# This program is distributed in the hope that it will be useful, |
2799 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2800 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2801 | -# GNU General Public License for more details. |
2802 | -# |
2803 | -# You should have received a copy of the GNU General Public License |
2804 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2805 | +# This file is part of cloud-init. See LICENSE file for license information. |
2806 | |
2807 | """ |
2808 | Fan |
2809 | @@ -112,3 +100,5 @@ def handle(name, cfg, cloud, log, args): |
2810 | stop_update_start( |
2811 | service='ubuntu-fan', config_file=mycfg.get('config_path'), |
2812 | content=mycfg.get('config'), systemd=distro.uses_systemd()) |
2813 | + |
2814 | +# vi: ts=4 expandtab |
2815 | diff --git a/cloudinit/config/cc_final_message.py b/cloudinit/config/cc_final_message.py |
2816 | index 5e144fd..c61f03d 100644 |
2817 | --- a/cloudinit/config/cc_final_message.py |
2818 | +++ b/cloudinit/config/cc_final_message.py |
2819 | @@ -1,22 +1,10 @@ |
2820 | -# vi: ts=4 expandtab |
2821 | -# |
2822 | -# Copyright (C) 2011 Canonical Ltd. |
2823 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2824 | -# |
2825 | -# Author: Scott Moser <scott.moser@canonical.com> |
2826 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2827 | +# Copyright (C) 2011 Canonical Ltd. |
2828 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2829 | # |
2830 | -# This program is free software: you can redistribute it and/or modify |
2831 | -# it under the terms of the GNU General Public License version 3, as |
2832 | -# published by the Free Software Foundation. |
2833 | +# Author: Scott Moser <scott.moser@canonical.com> |
2834 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2835 | # |
2836 | -# This program is distributed in the hope that it will be useful, |
2837 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2838 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2839 | -# GNU General Public License for more details. |
2840 | -# |
2841 | -# You should have received a copy of the GNU General Public License |
2842 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2843 | +# This file is part of cloud-init. See LICENSE file for license information. |
2844 | |
2845 | """ |
2846 | Final Message |
2847 | @@ -96,3 +84,5 @@ def handle(_name, cfg, cloud, log, args): |
2848 | |
2849 | if cloud.datasource.is_disconnected: |
2850 | log.warn("Used fallback datasource") |
2851 | + |
2852 | +# vi: ts=4 expandtab |
2853 | diff --git a/cloudinit/config/cc_foo.py b/cloudinit/config/cc_foo.py |
2854 | index ad0e046..924b967 100644 |
2855 | --- a/cloudinit/config/cc_foo.py |
2856 | +++ b/cloudinit/config/cc_foo.py |
2857 | @@ -1,22 +1,10 @@ |
2858 | -# vi: ts=4 expandtab |
2859 | -# |
2860 | -# Copyright (C) 2009-2010 Canonical Ltd. |
2861 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2862 | -# |
2863 | -# Author: Scott Moser <scott.moser@canonical.com> |
2864 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2865 | +# Copyright (C) 2009-2010 Canonical Ltd. |
2866 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2867 | # |
2868 | -# This program is free software: you can redistribute it and/or modify |
2869 | -# it under the terms of the GNU General Public License version 3, as |
2870 | -# published by the Free Software Foundation. |
2871 | +# Author: Scott Moser <scott.moser@canonical.com> |
2872 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2873 | # |
2874 | -# This program is distributed in the hope that it will be useful, |
2875 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2876 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2877 | -# GNU General Public License for more details. |
2878 | -# |
2879 | -# You should have received a copy of the GNU General Public License |
2880 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2881 | +# This file is part of cloud-init. See LICENSE file for license information. |
2882 | |
2883 | """ |
2884 | Foo |
2885 | @@ -64,3 +52,5 @@ frequency = PER_INSTANCE |
2886 | |
2887 | def handle(name, _cfg, _cloud, log, _args): |
2888 | log.debug("Hi from module %s", name) |
2889 | + |
2890 | +# vi: ts=4 expandtab |
2891 | diff --git a/cloudinit/config/cc_growpart.py b/cloudinit/config/cc_growpart.py |
2892 | index a95e6c8..832bb3f 100644 |
2893 | --- a/cloudinit/config/cc_growpart.py |
2894 | +++ b/cloudinit/config/cc_growpart.py |
2895 | @@ -1,22 +1,10 @@ |
2896 | -# vi: ts=4 expandtab |
2897 | -# |
2898 | -# Copyright (C) 2011 Canonical Ltd. |
2899 | -# Copyright (C) 2013 Hewlett-Packard Development Company, L.P. |
2900 | -# |
2901 | -# Author: Scott Moser <scott.moser@canonical.com> |
2902 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2903 | -# |
2904 | -# This program is free software: you can redistribute it and/or modify |
2905 | -# it under the terms of the GNU General Public License version 3, as |
2906 | -# published by the Free Software Foundation. |
2907 | +# Copyright (C) 2011 Canonical Ltd. |
2908 | +# Copyright (C) 2013 Hewlett-Packard Development Company, L.P. |
2909 | # |
2910 | -# This program is distributed in the hope that it will be useful, |
2911 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2912 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2913 | -# GNU General Public License for more details. |
2914 | +# Author: Scott Moser <scott.moser@canonical.com> |
2915 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2916 | # |
2917 | -# You should have received a copy of the GNU General Public License |
2918 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2919 | +# This file is part of cloud-init. See LICENSE file for license information. |
2920 | |
2921 | """ |
2922 | Growpart |
2923 | @@ -354,4 +342,7 @@ def handle(_name, cfg, _cloud, log, _args): |
2924 | else: |
2925 | log.debug("'%s' %s: %s" % (entry, action, msg)) |
2926 | |
2927 | + |
2928 | RESIZERS = (('growpart', ResizeGrowPart), ('gpart', ResizeGpart)) |
2929 | + |
2930 | +# vi: ts=4 expandtab |
2931 | diff --git a/cloudinit/config/cc_grub_dpkg.py b/cloudinit/config/cc_grub_dpkg.py |
2932 | index 33ca40a..a323edf 100644 |
2933 | --- a/cloudinit/config/cc_grub_dpkg.py |
2934 | +++ b/cloudinit/config/cc_grub_dpkg.py |
2935 | @@ -1,22 +1,10 @@ |
2936 | -# vi: ts=4 expandtab |
2937 | -# |
2938 | -# Copyright (C) 2009-2010 Canonical Ltd. |
2939 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2940 | -# |
2941 | -# Author: Scott Moser <scott.moser@canonical.com> |
2942 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2943 | +# Copyright (C) 2009-2010 Canonical Ltd. |
2944 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2945 | # |
2946 | -# This program is free software: you can redistribute it and/or modify |
2947 | -# it under the terms of the GNU General Public License version 3, as |
2948 | -# published by the Free Software Foundation. |
2949 | +# Author: Scott Moser <scott.moser@canonical.com> |
2950 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2951 | # |
2952 | -# This program is distributed in the hope that it will be useful, |
2953 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2954 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2955 | -# GNU General Public License for more details. |
2956 | -# |
2957 | -# You should have received a copy of the GNU General Public License |
2958 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2959 | +# This file is part of cloud-init. See LICENSE file for license information. |
2960 | |
2961 | """ |
2962 | Grub Dpkg |
2963 | @@ -105,3 +93,5 @@ def handle(name, cfg, _cloud, log, _args): |
2964 | util.subp(['debconf-set-selections'], dconf_sel) |
2965 | except Exception: |
2966 | util.logexc(log, "Failed to run debconf-set-selections for grub-dpkg") |
2967 | + |
2968 | +# vi: ts=4 expandtab |
2969 | diff --git a/cloudinit/config/cc_keys_to_console.py b/cloudinit/config/cc_keys_to_console.py |
2970 | index d4b2013..efedd4a 100644 |
2971 | --- a/cloudinit/config/cc_keys_to_console.py |
2972 | +++ b/cloudinit/config/cc_keys_to_console.py |
2973 | @@ -1,22 +1,10 @@ |
2974 | -# vi: ts=4 expandtab |
2975 | -# |
2976 | -# Copyright (C) 2011 Canonical Ltd. |
2977 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2978 | -# |
2979 | -# Author: Scott Moser <scott.moser@canonical.com> |
2980 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2981 | +# Copyright (C) 2011 Canonical Ltd. |
2982 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
2983 | # |
2984 | -# This program is free software: you can redistribute it and/or modify |
2985 | -# it under the terms of the GNU General Public License version 3, as |
2986 | -# published by the Free Software Foundation. |
2987 | +# Author: Scott Moser <scott.moser@canonical.com> |
2988 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
2989 | # |
2990 | -# This program is distributed in the hope that it will be useful, |
2991 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
2992 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
2993 | -# GNU General Public License for more details. |
2994 | -# |
2995 | -# You should have received a copy of the GNU General Public License |
2996 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
2997 | +# This file is part of cloud-init. See LICENSE file for license information. |
2998 | |
2999 | """ |
3000 | Keys to Console |
3001 | @@ -84,3 +72,5 @@ def handle(name, cfg, cloud, log, _args): |
3002 | except Exception: |
3003 | log.warn("Writing keys to the system console failed!") |
3004 | raise |
3005 | + |
3006 | +# vi: ts=4 expandtab |
3007 | diff --git a/cloudinit/config/cc_landscape.py b/cloudinit/config/cc_landscape.py |
3008 | index 11c8451..86b7138 100644 |
3009 | --- a/cloudinit/config/cc_landscape.py |
3010 | +++ b/cloudinit/config/cc_landscape.py |
3011 | @@ -1,22 +1,10 @@ |
3012 | -# vi: ts=4 expandtab |
3013 | -# |
3014 | -# Copyright (C) 2011 Canonical Ltd. |
3015 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3016 | -# |
3017 | -# Author: Scott Moser <scott.moser@canonical.com> |
3018 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3019 | +# Copyright (C) 2011 Canonical Ltd. |
3020 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3021 | # |
3022 | -# This program is free software: you can redistribute it and/or modify |
3023 | -# it under the terms of the GNU General Public License version 3, as |
3024 | -# published by the Free Software Foundation. |
3025 | +# Author: Scott Moser <scott.moser@canonical.com> |
3026 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3027 | # |
3028 | -# This program is distributed in the hope that it will be useful, |
3029 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3030 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3031 | -# GNU General Public License for more details. |
3032 | -# |
3033 | -# You should have received a copy of the GNU General Public License |
3034 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3035 | +# This file is part of cloud-init. See LICENSE file for license information. |
3036 | |
3037 | """ |
3038 | Landscape |
3039 | @@ -146,3 +134,5 @@ def merge_together(objs): |
3040 | else: |
3041 | cfg.merge(ConfigObj(obj)) |
3042 | return cfg |
3043 | + |
3044 | +# vi: ts=4 expandtab |
3045 | diff --git a/cloudinit/config/cc_locale.py b/cloudinit/config/cc_locale.py |
3046 | index 268888e..f68c3cc 100644 |
3047 | --- a/cloudinit/config/cc_locale.py |
3048 | +++ b/cloudinit/config/cc_locale.py |
3049 | @@ -1,22 +1,10 @@ |
3050 | -# vi: ts=4 expandtab |
3051 | -# |
3052 | -# Copyright (C) 2011 Canonical Ltd. |
3053 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3054 | -# |
3055 | -# Author: Scott Moser <scott.moser@canonical.com> |
3056 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3057 | +# Copyright (C) 2011 Canonical Ltd. |
3058 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3059 | # |
3060 | -# This program is free software: you can redistribute it and/or modify |
3061 | -# it under the terms of the GNU General Public License version 3, as |
3062 | -# published by the Free Software Foundation. |
3063 | +# Author: Scott Moser <scott.moser@canonical.com> |
3064 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3065 | # |
3066 | -# This program is distributed in the hope that it will be useful, |
3067 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3068 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3069 | -# GNU General Public License for more details. |
3070 | -# |
3071 | -# You should have received a copy of the GNU General Public License |
3072 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3073 | +# This file is part of cloud-init. See LICENSE file for license information. |
3074 | |
3075 | """ |
3076 | Locale |
3077 | @@ -55,3 +43,5 @@ def handle(name, cfg, cloud, log, args): |
3078 | log.debug("Setting locale to %s", locale) |
3079 | locale_cfgfile = util.get_cfg_option_str(cfg, "locale_configfile") |
3080 | cloud.distro.apply_locale(locale, locale_cfgfile) |
3081 | + |
3082 | +# vi: ts=4 expandtab |
3083 | diff --git a/cloudinit/config/cc_lxd.py b/cloudinit/config/cc_lxd.py |
3084 | index 3e7faca..e6262f8 100644 |
3085 | --- a/cloudinit/config/cc_lxd.py |
3086 | +++ b/cloudinit/config/cc_lxd.py |
3087 | @@ -1,20 +1,8 @@ |
3088 | -# vi: ts=4 expandtab |
3089 | -# |
3090 | -# Copyright (C) 2016 Canonical Ltd. |
3091 | -# |
3092 | -# Author: Wesley Wiedenmeier <wesley.wiedenmeier@canonical.com> |
3093 | +# Copyright (C) 2016 Canonical Ltd. |
3094 | # |
3095 | -# This program is free software: you can redistribute it and/or modify |
3096 | -# it under the terms of the GNU General Public License version 3, as |
3097 | -# published by the Free Software Foundation. |
3098 | +# Author: Wesley Wiedenmeier <wesley.wiedenmeier@canonical.com> |
3099 | # |
3100 | -# This program is distributed in the hope that it will be useful, |
3101 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3102 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3103 | -# GNU General Public License for more details. |
3104 | -# |
3105 | -# You should have received a copy of the GNU General Public License |
3106 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3107 | +# This file is part of cloud-init. See LICENSE file for license information. |
3108 | |
3109 | """ |
3110 | LXD |
3111 | @@ -262,3 +250,5 @@ def bridge_to_cmd(bridge_cfg): |
3112 | cmd_create.append("--force-local") |
3113 | |
3114 | return cmd_create, cmd_attach |
3115 | + |
3116 | +# vi: ts=4 expandtab |
3117 | diff --git a/cloudinit/config/cc_mcollective.py b/cloudinit/config/cc_mcollective.py |
3118 | index c447f26..d5f63f5 100644 |
3119 | --- a/cloudinit/config/cc_mcollective.py |
3120 | +++ b/cloudinit/config/cc_mcollective.py |
3121 | @@ -1,23 +1,11 @@ |
3122 | -# vi: ts=4 expandtab |
3123 | -# |
3124 | -# Copyright (C) 2009-2011 Canonical Ltd. |
3125 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3126 | -# |
3127 | -# Author: Marc Cluet <marc.cluet@canonical.com> |
3128 | -# Based on code by Scott Moser <scott.moser@canonical.com> |
3129 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3130 | +# Copyright (C) 2009-2011 Canonical Ltd. |
3131 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3132 | # |
3133 | -# This program is free software: you can redistribute it and/or modify |
3134 | -# it under the terms of the GNU General Public License version 3, as |
3135 | -# published by the Free Software Foundation. |
3136 | +# Author: Marc Cluet <marc.cluet@canonical.com> |
3137 | +# Based on code by Scott Moser <scott.moser@canonical.com> |
3138 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3139 | # |
3140 | -# This program is distributed in the hope that it will be useful, |
3141 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3142 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3143 | -# GNU General Public License for more details. |
3144 | -# |
3145 | -# You should have received a copy of the GNU General Public License |
3146 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3147 | +# This file is part of cloud-init. See LICENSE file for license information. |
3148 | |
3149 | """ |
3150 | Mcollective |
3151 | @@ -155,3 +143,5 @@ def handle(name, cfg, cloud, log, _args): |
3152 | |
3153 | # restart mcollective to handle updated config |
3154 | util.subp(['service', 'mcollective', 'restart'], capture=False) |
3155 | + |
3156 | +# vi: ts=4 expandtab |
3157 | diff --git a/cloudinit/config/cc_migrator.py b/cloudinit/config/cc_migrator.py |
3158 | index 6e0bf4b..3995704 100644 |
3159 | --- a/cloudinit/config/cc_migrator.py |
3160 | +++ b/cloudinit/config/cc_migrator.py |
3161 | @@ -1,20 +1,8 @@ |
3162 | -# vi: ts=4 expandtab |
3163 | -# |
3164 | -# Copyright (C) 2012 Yahoo! Inc. |
3165 | -# |
3166 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
3167 | +# Copyright (C) 2012 Yahoo! Inc. |
3168 | # |
3169 | -# This program is free software: you can redistribute it and/or modify |
3170 | -# it under the terms of the GNU General Public License version 3, as |
3171 | -# published by the Free Software Foundation. |
3172 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
3173 | # |
3174 | -# This program is distributed in the hope that it will be useful, |
3175 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3176 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3177 | -# GNU General Public License for more details. |
3178 | -# |
3179 | -# You should have received a copy of the GNU General Public License |
3180 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3181 | +# This file is part of cloud-init. See LICENSE file for license information. |
3182 | |
3183 | """ |
3184 | Migrator |
3185 | @@ -105,3 +93,5 @@ def handle(name, cfg, cloud, log, _args): |
3186 | log.debug("Migrated %s semaphore files to there canonicalized names", |
3187 | sems_moved) |
3188 | _migrate_legacy_sems(cloud, log) |
3189 | + |
3190 | +# vi: ts=4 expandtab |
3191 | diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py |
3192 | index dfc4b59..5b630f8 100644 |
3193 | --- a/cloudinit/config/cc_mounts.py |
3194 | +++ b/cloudinit/config/cc_mounts.py |
3195 | @@ -1,22 +1,10 @@ |
3196 | -# vi: ts=4 expandtab |
3197 | -# |
3198 | -# Copyright (C) 2009-2010 Canonical Ltd. |
3199 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3200 | -# |
3201 | -# Author: Scott Moser <scott.moser@canonical.com> |
3202 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3203 | -# |
3204 | -# This program is free software: you can redistribute it and/or modify |
3205 | -# it under the terms of the GNU General Public License version 3, as |
3206 | -# published by the Free Software Foundation. |
3207 | +# Copyright (C) 2009-2010 Canonical Ltd. |
3208 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3209 | # |
3210 | -# This program is distributed in the hope that it will be useful, |
3211 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3212 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3213 | -# GNU General Public License for more details. |
3214 | +# Author: Scott Moser <scott.moser@canonical.com> |
3215 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3216 | # |
3217 | -# You should have received a copy of the GNU General Public License |
3218 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3219 | +# This file is part of cloud-init. See LICENSE file for license information. |
3220 | |
3221 | """ |
3222 | Mounts |
3223 | @@ -42,6 +30,14 @@ values. It defaults to:: |
3224 | |
3225 | mount_default_fields: [none, none, "auto", "defaults,nobootwait", "0", "2"] |
3226 | |
3227 | +On a systemd booted system that default is the mostly equivalent:: |
3228 | + |
3229 | + mount_default_fields: [none, none, "auto", |
3230 | + "defaults,nofail,x-systemd.requires=cloud-init.service", "0", "2"] |
3231 | + |
3232 | +Note that `nobootwait` is an upstart specific boot option that somewhat |
3233 | +equates to the more standard `nofail`. |
3234 | + |
3235 | Swap files can be configured by setting the path to the swap file to create |
3236 | with ``filename``, the size of the swap file with ``size`` maximum size of |
3237 | the swap file if using an ``size: auto`` with ``maxsize``. By default no |
3238 | @@ -58,8 +54,8 @@ swap file is created. |
3239 | mounts: |
3240 | - [ /dev/ephemeral0, /mnt, auto, "defaults,noexec" ] |
3241 | - [ sdc, /opt/data ] |
3242 | - - [ xvdh, /opt/data, "auto", "defaults,nobootwait", "0", "0" ] |
3243 | - mount_default_fields: [None, None, "auto", "nefaults,nobootwait", "0", "2"] |
3244 | + - [ xvdh, /opt/data, "auto", "defaults,nofail", "0", "0" ] |
3245 | + mount_default_fields: [None, None, "auto", "defaults,nofail", "0", "2"] |
3246 | swap: |
3247 | filename: <file> |
3248 | size: <"auto"/size in bytes> |
3249 | @@ -312,7 +308,8 @@ def handle_swapcfg(swapcfg): |
3250 | def handle(_name, cfg, cloud, log, _args): |
3251 | # fs_spec, fs_file, fs_vfstype, fs_mntops, fs-freq, fs_passno |
3252 | def_mnt_opts = "defaults,nobootwait" |
3253 | - if cloud.distro.uses_systemd(): |
3254 | + uses_systemd = cloud.distro.uses_systemd() |
3255 | + if uses_systemd: |
3256 | def_mnt_opts = "defaults,nofail,x-systemd.requires=cloud-init.service" |
3257 | |
3258 | defvals = [None, None, "auto", def_mnt_opts, "0", "2"] |
3259 | @@ -326,6 +323,8 @@ def handle(_name, cfg, cloud, log, _args): |
3260 | if "mounts" in cfg: |
3261 | cfgmnt = cfg["mounts"] |
3262 | |
3263 | + LOG.debug("mounts configuration is %s", cfgmnt) |
3264 | + |
3265 | for i in range(len(cfgmnt)): |
3266 | # skip something that wasn't a list |
3267 | if not isinstance(cfgmnt[i], list): |
3268 | @@ -422,32 +421,53 @@ def handle(_name, cfg, cloud, log, _args): |
3269 | cc_lines.append('\t'.join(line)) |
3270 | |
3271 | fstab_lines = [] |
3272 | + removed = [] |
3273 | for line in util.load_file(FSTAB_PATH).splitlines(): |
3274 | try: |
3275 | toks = WS.split(line) |
3276 | if toks[3].find(comment) != -1: |
3277 | + removed.append(line) |
3278 | continue |
3279 | except Exception: |
3280 | pass |
3281 | fstab_lines.append(line) |
3282 | |
3283 | + for d in dirs: |
3284 | + try: |
3285 | + util.ensure_dir(d) |
3286 | + except Exception: |
3287 | + util.logexc(log, "Failed to make '%s' config-mount", d) |
3288 | + |
3289 | + sadds = [WS.sub(" ", n) for n in cc_lines] |
3290 | + sdrops = [WS.sub(" ", n) for n in removed] |
3291 | + |
3292 | + sops = (["- " + drop for drop in sdrops if drop not in sadds] + |
3293 | + ["+ " + add for add in sadds if add not in sdrops]) |
3294 | + |
3295 | fstab_lines.extend(cc_lines) |
3296 | contents = "%s\n" % ('\n'.join(fstab_lines)) |
3297 | util.write_file(FSTAB_PATH, contents) |
3298 | |
3299 | + activate_cmds = [] |
3300 | if needswap: |
3301 | - try: |
3302 | - util.subp(("swapon", "-a")) |
3303 | - except Exception: |
3304 | - util.logexc(log, "Activating swap via 'swapon -a' failed") |
3305 | + activate_cmds.append(["swapon", "-a"]) |
3306 | |
3307 | - for d in dirs: |
3308 | + if len(sops) == 0: |
3309 | + log.debug("No changes to /etc/fstab made.") |
3310 | + else: |
3311 | + log.debug("Changes to fstab: %s", sops) |
3312 | + activate_cmds.append(["mount", "-a"]) |
3313 | + if uses_systemd: |
3314 | + activate_cmds.append(["systemctl", "daemon-reload"]) |
3315 | + |
3316 | + fmt = "Activating swap and mounts with: %s" |
3317 | + for cmd in activate_cmds: |
3318 | + fmt = "Activate mounts: %s:" + ' '.join(cmd) |
3319 | try: |
3320 | - util.ensure_dir(d) |
3321 | - except Exception: |
3322 | - util.logexc(log, "Failed to make '%s' config-mount", d) |
3323 | + util.subp(cmd) |
3324 | + log.debug(fmt, "PASS") |
3325 | + except util.ProcessExecutionError: |
3326 | + log.warn(fmt, "FAIL") |
3327 | + util.logexc(log, fmt, "FAIL") |
3328 | |
3329 | - try: |
3330 | - util.subp(("mount", "-a")) |
3331 | - except util.ProcessExecutionError: |
3332 | - util.logexc(log, "Activating mounts via 'mount -a' failed") |
3333 | +# vi: ts=4 expandtab |
3334 | diff --git a/cloudinit/config/cc_ntp.py b/cloudinit/config/cc_ntp.py |
3335 | index 7cda317..e33032f 100644 |
3336 | --- a/cloudinit/config/cc_ntp.py |
3337 | +++ b/cloudinit/config/cc_ntp.py |
3338 | @@ -1,20 +1,8 @@ |
3339 | -# vi: ts=4 expandtab |
3340 | -# |
3341 | -# Copyright (C) 2016 Canonical Ltd. |
3342 | -# |
3343 | -# Author: Ryan Harper <ryan.harper@canonical.com> |
3344 | +# Copyright (C) 2016 Canonical Ltd. |
3345 | # |
3346 | -# This program is free software: you can redistribute it and/or modify |
3347 | -# it under the terms of the GNU General Public License version 3, as |
3348 | -# published by the Free Software Foundation. |
3349 | +# Author: Ryan Harper <ryan.harper@canonical.com> |
3350 | # |
3351 | -# This program is distributed in the hope that it will be useful, |
3352 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3353 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3354 | -# GNU General Public License for more details. |
3355 | -# |
3356 | -# You should have received a copy of the GNU General Public License |
3357 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3358 | +# This file is part of cloud-init. See LICENSE file for license information. |
3359 | |
3360 | """ |
3361 | NTP |
3362 | @@ -136,3 +124,5 @@ def write_ntp_config_template(cfg, cloud): |
3363 | "not rendering %s"), NTP_CONF) |
3364 | |
3365 | templater.render_to_file(template_fn, NTP_CONF, params) |
3366 | + |
3367 | +# vi: ts=4 expandtab |
3368 | diff --git a/cloudinit/config/cc_package_update_upgrade_install.py b/cloudinit/config/cc_package_update_upgrade_install.py |
3369 | index 6d71761..17b9101 100644 |
3370 | --- a/cloudinit/config/cc_package_update_upgrade_install.py |
3371 | +++ b/cloudinit/config/cc_package_update_upgrade_install.py |
3372 | @@ -1,20 +1,8 @@ |
3373 | -# vi: ts=4 expandtab |
3374 | -# |
3375 | -# Copyright (C) 2012 Yahoo! Inc. |
3376 | -# |
3377 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
3378 | +# Copyright (C) 2012 Yahoo! Inc. |
3379 | # |
3380 | -# This program is free software: you can redistribute it and/or modify |
3381 | -# it under the terms of the GNU General Public License version 3, as |
3382 | -# published by the Free Software Foundation. |
3383 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
3384 | # |
3385 | -# This program is distributed in the hope that it will be useful, |
3386 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3387 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3388 | -# GNU General Public License for more details. |
3389 | -# |
3390 | -# You should have received a copy of the GNU General Public License |
3391 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3392 | +# This file is part of cloud-init. See LICENSE file for license information. |
3393 | |
3394 | """ |
3395 | Package Update Upgrade Install |
3396 | @@ -132,3 +120,5 @@ def handle(_name, cfg, cloud, log, _args): |
3397 | log.warn("%s failed with exceptions, re-raising the last one", |
3398 | len(errors)) |
3399 | raise errors[-1] |
3400 | + |
3401 | +# vi: ts=4 expandtab |
3402 | diff --git a/cloudinit/config/cc_phone_home.py b/cloudinit/config/cc_phone_home.py |
3403 | index cb70d39..878069b 100644 |
3404 | --- a/cloudinit/config/cc_phone_home.py |
3405 | +++ b/cloudinit/config/cc_phone_home.py |
3406 | @@ -1,22 +1,10 @@ |
3407 | -# vi: ts=4 expandtab |
3408 | -# |
3409 | -# Copyright (C) 2011 Canonical Ltd. |
3410 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
3411 | -# |
3412 | -# Author: Scott Moser <scott.moser@canonical.com> |
3413 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3414 | +# Copyright (C) 2011 Canonical Ltd. |
3415 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
3416 | # |
3417 | -# This program is free software: you can redistribute it and/or modify |
3418 | -# it under the terms of the GNU General Public License version 3, as |
3419 | -# published by the Free Software Foundation. |
3420 | +# Author: Scott Moser <scott.moser@canonical.com> |
3421 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3422 | # |
3423 | -# This program is distributed in the hope that it will be useful, |
3424 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3425 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3426 | -# GNU General Public License for more details. |
3427 | -# |
3428 | -# You should have received a copy of the GNU General Public License |
3429 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3430 | +# This file is part of cloud-init. See LICENSE file for license information. |
3431 | |
3432 | """ |
3433 | Phone Home |
3434 | @@ -154,3 +142,5 @@ def handle(name, cfg, cloud, log, args): |
3435 | except Exception: |
3436 | util.logexc(log, "Failed to post phone home data to %s in %s tries", |
3437 | url, tries) |
3438 | + |
3439 | +# vi: ts=4 expandtab |
3440 | diff --git a/cloudinit/config/cc_power_state_change.py b/cloudinit/config/cc_power_state_change.py |
3441 | index 61b5416..c1c6fe7 100644 |
3442 | --- a/cloudinit/config/cc_power_state_change.py |
3443 | +++ b/cloudinit/config/cc_power_state_change.py |
3444 | @@ -1,20 +1,8 @@ |
3445 | -# vi: ts=4 expandtab |
3446 | -# |
3447 | -# Copyright (C) 2011 Canonical Ltd. |
3448 | -# |
3449 | -# Author: Scott Moser <scott.moser@canonical.com> |
3450 | +# Copyright (C) 2011 Canonical Ltd. |
3451 | # |
3452 | -# This program is free software: you can redistribute it and/or modify |
3453 | -# it under the terms of the GNU General Public License version 3, as |
3454 | -# published by the Free Software Foundation. |
3455 | +# Author: Scott Moser <scott.moser@canonical.com> |
3456 | # |
3457 | -# This program is distributed in the hope that it will be useful, |
3458 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3459 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3460 | -# GNU General Public License for more details. |
3461 | -# |
3462 | -# You should have received a copy of the GNU General Public License |
3463 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3464 | +# This file is part of cloud-init. See LICENSE file for license information. |
3465 | |
3466 | """ |
3467 | Power State Change |
3468 | @@ -266,3 +254,5 @@ def run_after_pid_gone(pid, pidcmdline, timeout, log, condition, func, args): |
3469 | fatal("Unexpected Exception when checking condition: %s" % e) |
3470 | |
3471 | func(*args) |
3472 | + |
3473 | +# vi: ts=4 expandtab |
3474 | diff --git a/cloudinit/config/cc_puppet.py b/cloudinit/config/cc_puppet.py |
3475 | index bfd630d..dc11561 100644 |
3476 | --- a/cloudinit/config/cc_puppet.py |
3477 | +++ b/cloudinit/config/cc_puppet.py |
3478 | @@ -1,22 +1,10 @@ |
3479 | -# vi: ts=4 expandtab |
3480 | -# |
3481 | -# Copyright (C) 2009-2010 Canonical Ltd. |
3482 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3483 | -# |
3484 | -# Author: Scott Moser <scott.moser@canonical.com> |
3485 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3486 | +# Copyright (C) 2009-2010 Canonical Ltd. |
3487 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3488 | # |
3489 | -# This program is free software: you can redistribute it and/or modify |
3490 | -# it under the terms of the GNU General Public License version 3, as |
3491 | -# published by the Free Software Foundation. |
3492 | +# Author: Scott Moser <scott.moser@canonical.com> |
3493 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3494 | # |
3495 | -# This program is distributed in the hope that it will be useful, |
3496 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3497 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3498 | -# GNU General Public License for more details. |
3499 | -# |
3500 | -# You should have received a copy of the GNU General Public License |
3501 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3502 | +# This file is part of cloud-init. See LICENSE file for license information. |
3503 | |
3504 | """ |
3505 | Puppet |
3506 | @@ -161,3 +149,5 @@ def handle(name, cfg, cloud, log, _args): |
3507 | |
3508 | # Start puppetd |
3509 | util.subp(['service', 'puppet', 'start'], capture=False) |
3510 | + |
3511 | +# vi: ts=4 expandtab |
3512 | diff --git a/cloudinit/config/cc_resizefs.py b/cloudinit/config/cc_resizefs.py |
3513 | index 1b91796..e028abf 100644 |
3514 | --- a/cloudinit/config/cc_resizefs.py |
3515 | +++ b/cloudinit/config/cc_resizefs.py |
3516 | @@ -1,22 +1,10 @@ |
3517 | -# vi: ts=4 expandtab |
3518 | -# |
3519 | -# Copyright (C) 2011 Canonical Ltd. |
3520 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3521 | -# |
3522 | -# Author: Scott Moser <scott.moser@canonical.com> |
3523 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3524 | -# |
3525 | -# This program is free software: you can redistribute it and/or modify |
3526 | -# it under the terms of the GNU General Public License version 3, as |
3527 | -# published by the Free Software Foundation. |
3528 | +# Copyright (C) 2011 Canonical Ltd. |
3529 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3530 | # |
3531 | -# This program is distributed in the hope that it will be useful, |
3532 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3533 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3534 | -# GNU General Public License for more details. |
3535 | +# Author: Scott Moser <scott.moser@canonical.com> |
3536 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3537 | # |
3538 | -# You should have received a copy of the GNU General Public License |
3539 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3540 | +# This file is part of cloud-init. See LICENSE file for license information. |
3541 | |
3542 | """ |
3543 | Resizefs |
3544 | @@ -69,6 +57,7 @@ def _resize_xfs(mount_point, devpth): |
3545 | def _resize_ufs(mount_point, devpth): |
3546 | return ('growfs', devpth) |
3547 | |
3548 | + |
3549 | # Do not use a dictionary as these commands should be able to be used |
3550 | # for multiple filesystem types if possible, e.g. one command for |
3551 | # ext2, ext3 and ext4. |
3552 | @@ -209,3 +198,5 @@ def do_resize(resize_cmd, log): |
3553 | raise |
3554 | # TODO(harlowja): Should we add a fsck check after this to make |
3555 | # sure we didn't corrupt anything? |
3556 | + |
3557 | +# vi: ts=4 expandtab |
3558 | diff --git a/cloudinit/config/cc_resolv_conf.py b/cloudinit/config/cc_resolv_conf.py |
3559 | index feea565..9c5cd1f 100644 |
3560 | --- a/cloudinit/config/cc_resolv_conf.py |
3561 | +++ b/cloudinit/config/cc_resolv_conf.py |
3562 | @@ -1,22 +1,10 @@ |
3563 | -# vi: ts=4 expandtab |
3564 | -# |
3565 | -# Copyright (C) 2013 Craig Tracey |
3566 | -# Copyright (C) 2013 Hewlett-Packard Development Company, L.P. |
3567 | -# |
3568 | -# Author: Craig Tracey <craigtracey@gmail.com> |
3569 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3570 | +# Copyright (C) 2013 Craig Tracey |
3571 | +# Copyright (C) 2013 Hewlett-Packard Development Company, L.P. |
3572 | # |
3573 | -# This program is free software: you can redistribute it and/or modify |
3574 | -# it under the terms of the GNU General Public License version 3, as |
3575 | -# published by the Free Software Foundation. |
3576 | +# Author: Craig Tracey <craigtracey@gmail.com> |
3577 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3578 | # |
3579 | -# This program is distributed in the hope that it will be useful, |
3580 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3581 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3582 | -# GNU General Public License for more details. |
3583 | -# |
3584 | -# You should have received a copy of the GNU General Public License |
3585 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3586 | +# This file is part of cloud-init. See LICENSE file for license information. |
3587 | |
3588 | """ |
3589 | Resolv Conf |
3590 | @@ -123,3 +111,5 @@ def handle(name, cfg, cloud, log, _args): |
3591 | |
3592 | generate_resolv_conf(template_fn=template_fn, params=cfg["resolv_conf"]) |
3593 | return |
3594 | + |
3595 | +# vi: ts=4 expandtab |
3596 | diff --git a/cloudinit/config/cc_rh_subscription.py b/cloudinit/config/cc_rh_subscription.py |
3597 | index d858f65..7f36cf8 100644 |
3598 | --- a/cloudinit/config/cc_rh_subscription.py |
3599 | +++ b/cloudinit/config/cc_rh_subscription.py |
3600 | @@ -1,20 +1,8 @@ |
3601 | -# vi: ts=4 expandtab |
3602 | -# |
3603 | -# Copyright (C) 2015 Red Hat, Inc. |
3604 | -# |
3605 | -# Author: Brent Baude <bbaude@redhat.com> |
3606 | +# Copyright (C) 2015 Red Hat, Inc. |
3607 | # |
3608 | -# This program is free software: you can redistribute it and/or modify |
3609 | -# it under the terms of the GNU General Public License version 3, as |
3610 | -# published by the Free Software Foundation. |
3611 | +# Author: Brent Baude <bbaude@redhat.com> |
3612 | # |
3613 | -# This program is distributed in the hope that it will be useful, |
3614 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3615 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3616 | -# GNU General Public License for more details. |
3617 | -# |
3618 | -# You should have received a copy of the GNU General Public License |
3619 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3620 | +# This file is part of cloud-init. See LICENSE file for license information. |
3621 | |
3622 | """ |
3623 | RedHat Subscription |
3624 | @@ -421,11 +409,12 @@ class SubscriptionManager(object): |
3625 | "because it is not enabled".format(fail)) |
3626 | |
3627 | cmd = ['repos'] |
3628 | - if len(enable_list) > 0: |
3629 | - cmd.extend(enable_list) |
3630 | if len(disable_list) > 0: |
3631 | cmd.extend(disable_list) |
3632 | |
3633 | + if len(enable_list) > 0: |
3634 | + cmd.extend(enable_list) |
3635 | + |
3636 | try: |
3637 | self._sub_man_cli(cmd) |
3638 | except util.ProcessExecutionError as e: |
3639 | @@ -442,3 +431,5 @@ class SubscriptionManager(object): |
3640 | |
3641 | def is_configured(self): |
3642 | return bool((self.userid and self.password) or self.activation_key) |
3643 | + |
3644 | +# vi: ts=4 expandtab |
3645 | diff --git a/cloudinit/config/cc_rightscale_userdata.py b/cloudinit/config/cc_rightscale_userdata.py |
3646 | index 6cf8c94..4e34c7e 100644 |
3647 | --- a/cloudinit/config/cc_rightscale_userdata.py |
3648 | +++ b/cloudinit/config/cc_rightscale_userdata.py |
3649 | @@ -1,22 +1,10 @@ |
3650 | -# vi: ts=4 expandtab |
3651 | -# |
3652 | -# Copyright (C) 2011 Canonical Ltd. |
3653 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
3654 | -# |
3655 | -# Author: Scott Moser <scott.moser@canonical.com> |
3656 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3657 | +# Copyright (C) 2011 Canonical Ltd. |
3658 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
3659 | # |
3660 | -# This program is free software: you can redistribute it and/or modify |
3661 | -# it under the terms of the GNU General Public License version 3, as |
3662 | -# published by the Free Software Foundation. |
3663 | +# Author: Scott Moser <scott.moser@canonical.com> |
3664 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3665 | # |
3666 | -# This program is distributed in the hope that it will be useful, |
3667 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3668 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3669 | -# GNU General Public License for more details. |
3670 | -# |
3671 | -# You should have received a copy of the GNU General Public License |
3672 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3673 | +# This file is part of cloud-init. See LICENSE file for license information. |
3674 | |
3675 | """ |
3676 | Rightscale Userdata |
3677 | @@ -126,3 +114,5 @@ def handle(name, _cfg, cloud, log, _args): |
3678 | log.warn("%s failed with exceptions, re-raising the last one", |
3679 | len(captured_excps)) |
3680 | raise captured_excps[-1] |
3681 | + |
3682 | +# vi: ts=4 expandtab |
3683 | diff --git a/cloudinit/config/cc_rsyslog.py b/cloudinit/config/cc_rsyslog.py |
3684 | index 1c12e56..5031621 100644 |
3685 | --- a/cloudinit/config/cc_rsyslog.py |
3686 | +++ b/cloudinit/config/cc_rsyslog.py |
3687 | @@ -1,22 +1,11 @@ |
3688 | -# vi: ts=4 expandtab syntax=python |
3689 | -# |
3690 | -# Copyright (C) 2009-2010 Canonical Ltd. |
3691 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3692 | -# |
3693 | -# Author: Scott Moser <scott.moser@canonical.com> |
3694 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3695 | -# |
3696 | -# This program is free software: you can redistribute it and/or modify |
3697 | -# it under the terms of the GNU General Public License version 3, as |
3698 | -# published by the Free Software Foundation. |
3699 | +# Copyright (C) 2009-2010 Canonical Ltd. |
3700 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3701 | # |
3702 | -# This program is distributed in the hope that it will be useful, |
3703 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3704 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3705 | -# GNU General Public License for more details. |
3706 | +# Author: Scott Moser <scott.moser@canonical.com> |
3707 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3708 | # |
3709 | -# You should have received a copy of the GNU General Public License |
3710 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3711 | +# This file is part of cloud-init. See LICENSE file for license information. |
3712 | + |
3713 | """ |
3714 | .. _cc_rsyslog: |
3715 | |
3716 | @@ -451,3 +440,5 @@ def handle(name, cfg, cloud, log, _args): |
3717 | # This should now use rsyslog if |
3718 | # the logging was setup to use it... |
3719 | log.debug("%s configured %s files", name, changes) |
3720 | + |
3721 | +# vi: ts=4 expandtab syntax=python |
3722 | diff --git a/cloudinit/config/cc_runcmd.py b/cloudinit/config/cc_runcmd.py |
3723 | index 23e1e89..dfa8cb3 100644 |
3724 | --- a/cloudinit/config/cc_runcmd.py |
3725 | +++ b/cloudinit/config/cc_runcmd.py |
3726 | @@ -1,22 +1,10 @@ |
3727 | -# vi: ts=4 expandtab |
3728 | -# |
3729 | -# Copyright (C) 2009-2010 Canonical Ltd. |
3730 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3731 | -# |
3732 | -# Author: Scott Moser <scott.moser@canonical.com> |
3733 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3734 | +# Copyright (C) 2009-2010 Canonical Ltd. |
3735 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3736 | # |
3737 | -# This program is free software: you can redistribute it and/or modify |
3738 | -# it under the terms of the GNU General Public License version 3, as |
3739 | -# published by the Free Software Foundation. |
3740 | +# Author: Scott Moser <scott.moser@canonical.com> |
3741 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3742 | # |
3743 | -# This program is distributed in the hope that it will be useful, |
3744 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3745 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3746 | -# GNU General Public License for more details. |
3747 | -# |
3748 | -# You should have received a copy of the GNU General Public License |
3749 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3750 | +# This file is part of cloud-init. See LICENSE file for license information. |
3751 | |
3752 | """ |
3753 | Runcmd |
3754 | @@ -68,3 +56,5 @@ def handle(name, cfg, cloud, log, _args): |
3755 | util.write_file(out_fn, content, 0o700) |
3756 | except Exception: |
3757 | util.logexc(log, "Failed to shellify %s into file %s", cmd, out_fn) |
3758 | + |
3759 | +# vi: ts=4 expandtab |
3760 | diff --git a/cloudinit/config/cc_salt_minion.py b/cloudinit/config/cc_salt_minion.py |
3761 | index 9078665..2b38837 100644 |
3762 | --- a/cloudinit/config/cc_salt_minion.py |
3763 | +++ b/cloudinit/config/cc_salt_minion.py |
3764 | @@ -1,18 +1,6 @@ |
3765 | -# vi: ts=4 expandtab |
3766 | -# |
3767 | -# Author: Jeff Bauer <jbauer@rubic.com> |
3768 | -# |
3769 | -# This program is free software: you can redistribute it and/or modify |
3770 | -# it under the terms of the GNU General Public License version 3, as |
3771 | -# published by the Free Software Foundation. |
3772 | +# Author: Jeff Bauer <jbauer@rubic.com> |
3773 | # |
3774 | -# This program is distributed in the hope that it will be useful, |
3775 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3776 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3777 | -# GNU General Public License for more details. |
3778 | -# |
3779 | -# You should have received a copy of the GNU General Public License |
3780 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3781 | +# This file is part of cloud-init. See LICENSE file for license information. |
3782 | |
3783 | """ |
3784 | Salt Minion |
3785 | @@ -95,3 +83,5 @@ def handle(name, cfg, cloud, log, _args): |
3786 | # restart salt-minion. 'service' will start even if not started. if it |
3787 | # was started, it needs to be restarted for config change. |
3788 | util.subp(['service', 'salt-minion', 'restart'], capture=False) |
3789 | + |
3790 | +# vi: ts=4 expandtab |
3791 | diff --git a/cloudinit/config/cc_scripts_per_boot.py b/cloudinit/config/cc_scripts_per_boot.py |
3792 | index 0736cf7..b03255c 100644 |
3793 | --- a/cloudinit/config/cc_scripts_per_boot.py |
3794 | +++ b/cloudinit/config/cc_scripts_per_boot.py |
3795 | @@ -1,22 +1,10 @@ |
3796 | -# vi: ts=4 expandtab |
3797 | -# |
3798 | -# Copyright (C) 2011 Canonical Ltd. |
3799 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3800 | -# |
3801 | -# Author: Scott Moser <scott.moser@canonical.com> |
3802 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3803 | +# Copyright (C) 2011 Canonical Ltd. |
3804 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3805 | # |
3806 | -# This program is free software: you can redistribute it and/or modify |
3807 | -# it under the terms of the GNU General Public License version 3, as |
3808 | -# published by the Free Software Foundation. |
3809 | +# Author: Scott Moser <scott.moser@canonical.com> |
3810 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3811 | # |
3812 | -# This program is distributed in the hope that it will be useful, |
3813 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3814 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3815 | -# GNU General Public License for more details. |
3816 | -# |
3817 | -# You should have received a copy of the GNU General Public License |
3818 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3819 | +# This file is part of cloud-init. See LICENSE file for license information. |
3820 | |
3821 | """ |
3822 | Scripts Per Boot |
3823 | @@ -55,3 +43,5 @@ def handle(name, _cfg, cloud, log, _args): |
3824 | log.warn("Failed to run module %s (%s in %s)", |
3825 | name, SCRIPT_SUBDIR, runparts_path) |
3826 | raise |
3827 | + |
3828 | +# vi: ts=4 expandtab |
3829 | diff --git a/cloudinit/config/cc_scripts_per_instance.py b/cloudinit/config/cc_scripts_per_instance.py |
3830 | index c71d154..baee5cc 100644 |
3831 | --- a/cloudinit/config/cc_scripts_per_instance.py |
3832 | +++ b/cloudinit/config/cc_scripts_per_instance.py |
3833 | @@ -1,22 +1,10 @@ |
3834 | -# vi: ts=4 expandtab |
3835 | -# |
3836 | -# Copyright (C) 2011 Canonical Ltd. |
3837 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3838 | -# |
3839 | -# Author: Scott Moser <scott.moser@canonical.com> |
3840 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3841 | +# Copyright (C) 2011 Canonical Ltd. |
3842 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3843 | # |
3844 | -# This program is free software: you can redistribute it and/or modify |
3845 | -# it under the terms of the GNU General Public License version 3, as |
3846 | -# published by the Free Software Foundation. |
3847 | +# Author: Scott Moser <scott.moser@canonical.com> |
3848 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3849 | # |
3850 | -# This program is distributed in the hope that it will be useful, |
3851 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3852 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3853 | -# GNU General Public License for more details. |
3854 | -# |
3855 | -# You should have received a copy of the GNU General Public License |
3856 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3857 | +# This file is part of cloud-init. See LICENSE file for license information. |
3858 | |
3859 | """ |
3860 | Scripts Per Instance |
3861 | @@ -55,3 +43,5 @@ def handle(name, _cfg, cloud, log, _args): |
3862 | log.warn("Failed to run module %s (%s in %s)", |
3863 | name, SCRIPT_SUBDIR, runparts_path) |
3864 | raise |
3865 | + |
3866 | +# vi: ts=4 expandtab |
3867 | diff --git a/cloudinit/config/cc_scripts_per_once.py b/cloudinit/config/cc_scripts_per_once.py |
3868 | index bf637ee..4943e9a 100644 |
3869 | --- a/cloudinit/config/cc_scripts_per_once.py |
3870 | +++ b/cloudinit/config/cc_scripts_per_once.py |
3871 | @@ -1,22 +1,10 @@ |
3872 | -# vi: ts=4 expandtab |
3873 | -# |
3874 | -# Copyright (C) 2011 Canonical Ltd. |
3875 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3876 | -# |
3877 | -# Author: Scott Moser <scott.moser@canonical.com> |
3878 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3879 | +# Copyright (C) 2011 Canonical Ltd. |
3880 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3881 | # |
3882 | -# This program is free software: you can redistribute it and/or modify |
3883 | -# it under the terms of the GNU General Public License version 3, as |
3884 | -# published by the Free Software Foundation. |
3885 | +# Author: Scott Moser <scott.moser@canonical.com> |
3886 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3887 | # |
3888 | -# This program is distributed in the hope that it will be useful, |
3889 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3890 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3891 | -# GNU General Public License for more details. |
3892 | -# |
3893 | -# You should have received a copy of the GNU General Public License |
3894 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3895 | +# This file is part of cloud-init. See LICENSE file for license information. |
3896 | |
3897 | """ |
3898 | Scripts Per Once |
3899 | @@ -55,3 +43,5 @@ def handle(name, _cfg, cloud, log, _args): |
3900 | log.warn("Failed to run module %s (%s in %s)", |
3901 | name, SCRIPT_SUBDIR, runparts_path) |
3902 | raise |
3903 | + |
3904 | +# vi: ts=4 expandtab |
3905 | diff --git a/cloudinit/config/cc_scripts_user.py b/cloudinit/config/cc_scripts_user.py |
3906 | index 54338a4..6c66481 100644 |
3907 | --- a/cloudinit/config/cc_scripts_user.py |
3908 | +++ b/cloudinit/config/cc_scripts_user.py |
3909 | @@ -1,22 +1,10 @@ |
3910 | -# vi: ts=4 expandtab |
3911 | -# |
3912 | -# Copyright (C) 2011 Canonical Ltd. |
3913 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3914 | -# |
3915 | -# Author: Scott Moser <scott.moser@canonical.com> |
3916 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3917 | +# Copyright (C) 2011 Canonical Ltd. |
3918 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
3919 | # |
3920 | -# This program is free software: you can redistribute it and/or modify |
3921 | -# it under the terms of the GNU General Public License version 3, as |
3922 | -# published by the Free Software Foundation. |
3923 | +# Author: Scott Moser <scott.moser@canonical.com> |
3924 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
3925 | # |
3926 | -# This program is distributed in the hope that it will be useful, |
3927 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3928 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3929 | -# GNU General Public License for more details. |
3930 | -# |
3931 | -# You should have received a copy of the GNU General Public License |
3932 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3933 | +# This file is part of cloud-init. See LICENSE file for license information. |
3934 | |
3935 | """ |
3936 | Scripts User |
3937 | @@ -59,3 +47,5 @@ def handle(name, _cfg, cloud, log, _args): |
3938 | log.warn("Failed to run module %s (%s in %s)", |
3939 | name, SCRIPT_SUBDIR, runparts_path) |
3940 | raise |
3941 | + |
3942 | +# vi: ts=4 expandtab |
3943 | diff --git a/cloudinit/config/cc_scripts_vendor.py b/cloudinit/config/cc_scripts_vendor.py |
3944 | index b5777df..0292eaf 100644 |
3945 | --- a/cloudinit/config/cc_scripts_vendor.py |
3946 | +++ b/cloudinit/config/cc_scripts_vendor.py |
3947 | @@ -1,20 +1,8 @@ |
3948 | -# vi: ts=4 expandtab |
3949 | -# |
3950 | -# Copyright (C) 2014 Canonical Ltd. |
3951 | -# |
3952 | -# Author: Ben Howard <ben.howard@canonical.com> |
3953 | +# Copyright (C) 2014 Canonical Ltd. |
3954 | # |
3955 | -# This program is free software: you can redistribute it and/or modify |
3956 | -# it under the terms of the GNU General Public License version 3, as |
3957 | -# published by the Free Software Foundation. |
3958 | +# Author: Ben Howard <ben.howard@canonical.com> |
3959 | # |
3960 | -# This program is distributed in the hope that it will be useful, |
3961 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
3962 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3963 | -# GNU General Public License for more details. |
3964 | -# |
3965 | -# You should have received a copy of the GNU General Public License |
3966 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
3967 | +# This file is part of cloud-init. See LICENSE file for license information. |
3968 | |
3969 | """ |
3970 | Scripts Vendor |
3971 | @@ -30,7 +18,7 @@ entry under the ``vendor_data`` config key. |
3972 | |
3973 | **Module frequency:** per instance |
3974 | |
3975 | -**Supporte distros:** all |
3976 | +**Supported distros:** all |
3977 | |
3978 | **Config keys**:: |
3979 | |
3980 | @@ -63,3 +51,5 @@ def handle(name, cfg, cloud, log, _args): |
3981 | log.warn("Failed to run module %s (%s in %s)", |
3982 | name, SCRIPT_SUBDIR, runparts_path) |
3983 | raise |
3984 | + |
3985 | +# vi: ts=4 expandtab |
3986 | diff --git a/cloudinit/config/cc_seed_random.py b/cloudinit/config/cc_seed_random.py |
3987 | index d84255e..e76b9c0 100644 |
3988 | --- a/cloudinit/config/cc_seed_random.py |
3989 | +++ b/cloudinit/config/cc_seed_random.py |
3990 | @@ -1,23 +1,11 @@ |
3991 | -# vi: ts=4 expandtab |
3992 | -# |
3993 | -# Copyright (C) 2013 Yahoo! Inc. |
3994 | -# Copyright (C) 2014 Canonical, Ltd |
3995 | -# |
3996 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
3997 | -# Author: Dustin Kirkland <kirkland@ubuntu.com> |
3998 | -# Author: Scott Moser <scott.moser@canonical.com> |
3999 | +# Copyright (C) 2013 Yahoo! Inc. |
4000 | +# Copyright (C) 2014 Canonical, Ltd |
4001 | # |
4002 | -# This program is free software: you can redistribute it and/or modify |
4003 | -# it under the terms of the GNU General Public License version 3, as |
4004 | -# published by the Free Software Foundation. |
4005 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4006 | +# Author: Dustin Kirkland <kirkland@ubuntu.com> |
4007 | +# Author: Scott Moser <scott.moser@canonical.com> |
4008 | # |
4009 | -# This program is distributed in the hope that it will be useful, |
4010 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4011 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4012 | -# GNU General Public License for more details. |
4013 | -# |
4014 | -# You should have received a copy of the GNU General Public License |
4015 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4016 | +# This file is part of cloud-init. See LICENSE file for license information. |
4017 | |
4018 | """ |
4019 | Seed Random |
4020 | @@ -144,3 +132,5 @@ def handle(name, cfg, cloud, log, _args): |
4021 | except ValueError as e: |
4022 | log.warn("handling random command [%s] failed: %s", command, e) |
4023 | raise e |
4024 | + |
4025 | +# vi: ts=4 expandtab |
4026 | diff --git a/cloudinit/config/cc_set_hostname.py b/cloudinit/config/cc_set_hostname.py |
4027 | index c35cefe..aa3dfe5 100644 |
4028 | --- a/cloudinit/config/cc_set_hostname.py |
4029 | +++ b/cloudinit/config/cc_set_hostname.py |
4030 | @@ -1,22 +1,10 @@ |
4031 | -# vi: ts=4 expandtab |
4032 | -# |
4033 | -# Copyright (C) 2011 Canonical Ltd. |
4034 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4035 | -# |
4036 | -# Author: Scott Moser <scott.moser@canonical.com> |
4037 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4038 | +# Copyright (C) 2011 Canonical Ltd. |
4039 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4040 | # |
4041 | -# This program is free software: you can redistribute it and/or modify |
4042 | -# it under the terms of the GNU General Public License version 3, as |
4043 | -# published by the Free Software Foundation. |
4044 | +# Author: Scott Moser <scott.moser@canonical.com> |
4045 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4046 | # |
4047 | -# This program is distributed in the hope that it will be useful, |
4048 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4049 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4050 | -# GNU General Public License for more details. |
4051 | -# |
4052 | -# You should have received a copy of the GNU General Public License |
4053 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4054 | +# This file is part of cloud-init. See LICENSE file for license information. |
4055 | |
4056 | """ |
4057 | Set Hostname |
4058 | @@ -39,7 +27,7 @@ will be used. |
4059 | |
4060 | **Config keys**:: |
4061 | |
4062 | - perserve_hostname: <true/false> |
4063 | + preserve_hostname: <true/false> |
4064 | fqdn: <fqdn> |
4065 | hostname: <fqdn/hostname> |
4066 | """ |
4067 | @@ -61,3 +49,5 @@ def handle(name, cfg, cloud, log, _args): |
4068 | util.logexc(log, "Failed to set the hostname to %s (%s)", fqdn, |
4069 | hostname) |
4070 | raise |
4071 | + |
4072 | +# vi: ts=4 expandtab |
4073 | diff --git a/cloudinit/config/cc_set_passwords.py b/cloudinit/config/cc_set_passwords.py |
4074 | index 5dd4b01..db27b7a 100755 |
4075 | --- a/cloudinit/config/cc_set_passwords.py |
4076 | +++ b/cloudinit/config/cc_set_passwords.py |
4077 | @@ -1,22 +1,10 @@ |
4078 | -# vi: ts=4 expandtab |
4079 | -# |
4080 | -# Copyright (C) 2009-2010 Canonical Ltd. |
4081 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4082 | -# |
4083 | -# Author: Scott Moser <scott.moser@canonical.com> |
4084 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4085 | -# |
4086 | -# This program is free software: you can redistribute it and/or modify |
4087 | -# it under the terms of the GNU General Public License version 3, as |
4088 | -# published by the Free Software Foundation. |
4089 | +# Copyright (C) 2009-2010 Canonical Ltd. |
4090 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4091 | # |
4092 | -# This program is distributed in the hope that it will be useful, |
4093 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4094 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4095 | -# GNU General Public License for more details. |
4096 | +# Author: Scott Moser <scott.moser@canonical.com> |
4097 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4098 | # |
4099 | -# You should have received a copy of the GNU General Public License |
4100 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4101 | +# This file is part of cloud-init. See LICENSE file for license information. |
4102 | |
4103 | """ |
4104 | Set Passwords |
4105 | @@ -58,6 +46,16 @@ enabled, disabled, or left to system defaults using ``ssh_pwauth``. |
4106 | expire: <true/false> |
4107 | |
4108 | chpasswd: |
4109 | + list: | |
4110 | + user1:password1 |
4111 | + user2:RANDOM |
4112 | + user3:password3 |
4113 | + user4:R |
4114 | + |
4115 | + ## |
4116 | + # or as yaml list |
4117 | + ## |
4118 | + chpasswd: |
4119 | list: |
4120 | - user1:password1 |
4121 | - user2:RANDOM |
4122 | @@ -94,14 +92,23 @@ def handle(_name, cfg, cloud, log, args): |
4123 | |
4124 | if 'chpasswd' in cfg: |
4125 | chfg = cfg['chpasswd'] |
4126 | - plist = util.get_cfg_option_str(chfg, 'list', plist) |
4127 | + if 'list' in chfg and chfg['list']: |
4128 | + if isinstance(chfg['list'], list): |
4129 | + log.debug("Handling input for chpasswd as list.") |
4130 | + plist = util.get_cfg_option_list(chfg, 'list', plist) |
4131 | + else: |
4132 | + log.debug("Handling input for chpasswd as multiline string.") |
4133 | + plist = util.get_cfg_option_str(chfg, 'list', plist) |
4134 | + if plist: |
4135 | + plist = plist.splitlines() |
4136 | + |
4137 | expire = util.get_cfg_option_bool(chfg, 'expire', expire) |
4138 | |
4139 | if not plist and password: |
4140 | (users, _groups) = ug_util.normalize_users_groups(cfg, cloud.distro) |
4141 | (user, _user_config) = ug_util.extract_default(users) |
4142 | if user: |
4143 | - plist = "%s:%s" % (user, password) |
4144 | + plist = ["%s:%s" % (user, password)] |
4145 | else: |
4146 | log.warn("No default or defined user to change password for.") |
4147 | |
4148 | @@ -112,6 +119,7 @@ def handle(_name, cfg, cloud, log, args): |
4149 | hashed_users = [] |
4150 | randlist = [] |
4151 | users = [] |
4152 | +<<<<<<< cloudinit/config/cc_set_passwords.py |
4153 | |
4154 | prog = re.compile(r'\$[1,2a,2y,5,6](\$.+){2}') |
4155 | |
4156 | @@ -124,6 +132,18 @@ def handle(_name, cfg, cloud, log, args): |
4157 | hashed_plist_in.append("%s:%s" % (u, p)) |
4158 | hashed_users.append(u) |
4159 | else: |
4160 | +======= |
4161 | + prog = re.compile(r'\$[1,2a,2y,5,6](\$.+){2}') |
4162 | + for line in plist: |
4163 | + u, p = line.split(':', 1) |
4164 | + if prog.match(p) is not None and ":" not in p: |
4165 | + hashed_plist_in.append("%s:%s" % (u, p)) |
4166 | + hashed_users.append(u) |
4167 | + else: |
4168 | + if p == "R" or p == "RANDOM": |
4169 | + p = rand_user_password() |
4170 | + randlist.append("%s:%s" % (u, p)) |
4171 | +>>>>>>> cloudinit/config/cc_set_passwords.py |
4172 | plist_in.append("%s:%s" % (u, p)) |
4173 | users.append(u) |
4174 | |
4175 | @@ -134,9 +154,14 @@ def handle(_name, cfg, cloud, log, args): |
4176 | util.subp(['chpasswd'], ch_in) |
4177 | except Exception as e: |
4178 | errors.append(e) |
4179 | +<<<<<<< cloudinit/config/cc_set_passwords.py |
4180 | util.logexc(log, |
4181 | "Failed to set passwords with chpasswd for %s", |
4182 | users) |
4183 | +======= |
4184 | + util.logexc( |
4185 | + log, "Failed to set passwords with chpasswd for %s", users) |
4186 | +>>>>>>> cloudinit/config/cc_set_passwords.py |
4187 | |
4188 | hashed_ch_in = '\n'.join(hashed_plist_in) + '\n' |
4189 | if hashed_users: |
4190 | @@ -145,9 +170,15 @@ def handle(_name, cfg, cloud, log, args): |
4191 | util.subp(['chpasswd', '-e'], hashed_ch_in) |
4192 | except Exception as e: |
4193 | errors.append(e) |
4194 | +<<<<<<< cloudinit/config/cc_set_passwords.py |
4195 | util.logexc(log, |
4196 | "Failed to set hashed passwords with chpasswd for %s", |
4197 | hashed_users) |
4198 | +======= |
4199 | + util.logexc( |
4200 | + log, "Failed to set hashed passwords with chpasswd for %s", |
4201 | + hashed_users) |
4202 | +>>>>>>> cloudinit/config/cc_set_passwords.py |
4203 | |
4204 | if len(randlist): |
4205 | blurb = ("Set the following 'random' passwords\n", |
4206 | @@ -232,3 +263,5 @@ def handle(_name, cfg, cloud, log, args): |
4207 | |
4208 | def rand_user_password(pwlen=9): |
4209 | return util.rand_str(pwlen, select_from=PW_SET) |
4210 | + |
4211 | +# vi: ts=4 expandtab |
4212 | diff --git a/cloudinit/config/cc_snap_config.py b/cloudinit/config/cc_snap_config.py |
4213 | index 275a2d0..db51166 100644 |
4214 | --- a/cloudinit/config/cc_snap_config.py |
4215 | +++ b/cloudinit/config/cc_snap_config.py |
4216 | @@ -1,20 +1,8 @@ |
4217 | -# vi: ts=4 expandtab |
4218 | -# |
4219 | -# Copyright (C) 2016 Canonical Ltd. |
4220 | -# |
4221 | -# Author: Ryan Harper <ryan.harper@canonical.com> |
4222 | +# Copyright (C) 2016 Canonical Ltd. |
4223 | # |
4224 | -# This program is free software: you can redistribute it and/or modify |
4225 | -# it under the terms of the GNU General Public License version 3, as |
4226 | -# published by the Free Software Foundation. |
4227 | +# Author: Ryan Harper <ryan.harper@canonical.com> |
4228 | # |
4229 | -# This program is distributed in the hope that it will be useful, |
4230 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4231 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4232 | -# GNU General Public License for more details. |
4233 | -# |
4234 | -# You should have received a copy of the GNU General Public License |
4235 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4236 | +# This file is part of cloud-init. See LICENSE file for license information. |
4237 | |
4238 | """ |
4239 | Snappy |
4240 | @@ -182,3 +170,5 @@ def handle(name, cfg, cloud, log, args): |
4241 | usercfg = add_snap_user(cfg=cfgin) |
4242 | if usercfg: |
4243 | cloud.distro.create_user(usercfg.get('snapuser'), **usercfg) |
4244 | + |
4245 | +# vi: ts=4 expandtab |
4246 | diff --git a/cloudinit/config/cc_snappy.py b/cloudinit/config/cc_snappy.py |
4247 | index e03ec48..6ea81b8 100644 |
4248 | --- a/cloudinit/config/cc_snappy.py |
4249 | +++ b/cloudinit/config/cc_snappy.py |
4250 | @@ -1,16 +1,4 @@ |
4251 | -# vi: ts=4 expandtab |
4252 | -# |
4253 | -# This program is free software: you can redistribute it and/or modify |
4254 | -# it under the terms of the GNU General Public License version 3, as |
4255 | -# published by the Free Software Foundation. |
4256 | -# |
4257 | -# This program is distributed in the hope that it will be useful, |
4258 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4259 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4260 | -# GNU General Public License for more details. |
4261 | -# |
4262 | -# You should have received a copy of the GNU General Public License |
4263 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4264 | +# This file is part of cloud-init. See LICENSE file for license information. |
4265 | |
4266 | """ |
4267 | Snappy |
4268 | @@ -321,3 +309,5 @@ def handle(name, cfg, cloud, log, args): |
4269 | |
4270 | if fails: |
4271 | raise Exception("failed to install/configure snaps") |
4272 | + |
4273 | +# vi: ts=4 expandtab |
4274 | diff --git a/cloudinit/config/cc_spacewalk.py b/cloudinit/config/cc_spacewalk.py |
4275 | index 99b63a8..1020e94 100644 |
4276 | --- a/cloudinit/config/cc_spacewalk.py |
4277 | +++ b/cloudinit/config/cc_spacewalk.py |
4278 | @@ -1,16 +1,4 @@ |
4279 | -# vi: ts=4 expandtab |
4280 | -# |
4281 | -# This program is free software: you can redistribute it and/or modify |
4282 | -# it under the terms of the GNU General Public License version 3, as |
4283 | -# published by the Free Software Foundation. |
4284 | -# |
4285 | -# This program is distributed in the hope that it will be useful, |
4286 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4287 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4288 | -# GNU General Public License for more details. |
4289 | -# |
4290 | -# You should have received a copy of the GNU General Public License |
4291 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4292 | +# This file is part of cloud-init. See LICENSE file for license information. |
4293 | |
4294 | """ |
4295 | Spacewalk |
4296 | @@ -98,3 +86,5 @@ def handle(name, cfg, cloud, log, _args): |
4297 | else: |
4298 | log.debug("Skipping module named %s, 'spacewalk/server' key" |
4299 | " was not found in configuration", name) |
4300 | + |
4301 | +# vi: ts=4 expandtab |
4302 | diff --git a/cloudinit/config/cc_ssh.py b/cloudinit/config/cc_ssh.py |
4303 | index 576fa58..45204a0 100755 |
4304 | --- a/cloudinit/config/cc_ssh.py |
4305 | +++ b/cloudinit/config/cc_ssh.py |
4306 | @@ -1,22 +1,10 @@ |
4307 | -# vi: ts=4 expandtab |
4308 | -# |
4309 | -# Copyright (C) 2009-2010 Canonical Ltd. |
4310 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4311 | -# |
4312 | -# Author: Scott Moser <scott.moser@canonical.com> |
4313 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4314 | +# Copyright (C) 2009-2010 Canonical Ltd. |
4315 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4316 | # |
4317 | -# This program is free software: you can redistribute it and/or modify |
4318 | -# it under the terms of the GNU General Public License version 3, as |
4319 | -# published by the Free Software Foundation. |
4320 | +# Author: Scott Moser <scott.moser@canonical.com> |
4321 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4322 | # |
4323 | -# This program is distributed in the hope that it will be useful, |
4324 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4325 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4326 | -# GNU General Public License for more details. |
4327 | -# |
4328 | -# You should have received a copy of the GNU General Public License |
4329 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4330 | +# This file is part of cloud-init. See LICENSE file for license information. |
4331 | |
4332 | """ |
4333 | SSH |
4334 | @@ -223,3 +211,5 @@ def apply_credentials(keys, user, disable_root, disable_root_opts): |
4335 | key_prefix = '' |
4336 | |
4337 | ssh_util.setup_user_keys(keys, 'root', options=key_prefix) |
4338 | + |
4339 | +# vi: ts=4 expandtab |
4340 | diff --git a/cloudinit/config/cc_ssh_authkey_fingerprints.py b/cloudinit/config/cc_ssh_authkey_fingerprints.py |
4341 | index 7eeb0f8..0066e97 100755 |
4342 | --- a/cloudinit/config/cc_ssh_authkey_fingerprints.py |
4343 | +++ b/cloudinit/config/cc_ssh_authkey_fingerprints.py |
4344 | @@ -1,20 +1,8 @@ |
4345 | -# vi: ts=4 expandtab |
4346 | -# |
4347 | -# Copyright (C) 2012 Yahoo! Inc. |
4348 | -# |
4349 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4350 | +# Copyright (C) 2012 Yahoo! Inc. |
4351 | # |
4352 | -# This program is free software: you can redistribute it and/or modify |
4353 | -# it under the terms of the GNU General Public License version 3, as |
4354 | -# published by the Free Software Foundation. |
4355 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4356 | # |
4357 | -# This program is distributed in the hope that it will be useful, |
4358 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4359 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4360 | -# GNU General Public License for more details. |
4361 | -# |
4362 | -# You should have received a copy of the GNU General Public License |
4363 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4364 | +# This file is part of cloud-init. See LICENSE file for license information. |
4365 | |
4366 | """ |
4367 | SSH Authkey Fingerprints |
4368 | @@ -120,3 +108,5 @@ def handle(name, cfg, cloud, log, _args): |
4369 | (key_fn, key_entries) = ssh_util.extract_authorized_keys(user_name) |
4370 | _pprint_key_entries(user_name, key_fn, |
4371 | key_entries, hash_meth) |
4372 | + |
4373 | +# vi: ts=4 expandtab |
4374 | diff --git a/cloudinit/config/cc_ssh_import_id.py b/cloudinit/config/cc_ssh_import_id.py |
4375 | index 1be96dc..6b46daf 100755 |
4376 | --- a/cloudinit/config/cc_ssh_import_id.py |
4377 | +++ b/cloudinit/config/cc_ssh_import_id.py |
4378 | @@ -1,22 +1,10 @@ |
4379 | -# vi: ts=4 expandtab |
4380 | -# |
4381 | -# Copyright (C) 2009-2010 Canonical Ltd. |
4382 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4383 | -# |
4384 | -# Author: Scott Moser <scott.moser@canonical.com> |
4385 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4386 | +# Copyright (C) 2009-2010 Canonical Ltd. |
4387 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4388 | # |
4389 | -# This program is free software: you can redistribute it and/or modify |
4390 | -# it under the terms of the GNU General Public License version 3, as |
4391 | -# published by the Free Software Foundation. |
4392 | +# Author: Scott Moser <scott.moser@canonical.com> |
4393 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4394 | # |
4395 | -# This program is distributed in the hope that it will be useful, |
4396 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4397 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4398 | -# GNU General Public License for more details. |
4399 | -# |
4400 | -# You should have received a copy of the GNU General Public License |
4401 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4402 | +# This file is part of cloud-init. See LICENSE file for license information. |
4403 | |
4404 | """ |
4405 | SSH Import Id |
4406 | @@ -117,3 +105,5 @@ def import_ssh_ids(ids, user, log): |
4407 | except util.ProcessExecutionError as exc: |
4408 | util.logexc(log, "Failed to run command to import %s ssh ids", user) |
4409 | raise exc |
4410 | + |
4411 | +# vi: ts=4 expandtab |
4412 | diff --git a/cloudinit/config/cc_timezone.py b/cloudinit/config/cc_timezone.py |
4413 | index 7024b07..a9de8fa 100644 |
4414 | --- a/cloudinit/config/cc_timezone.py |
4415 | +++ b/cloudinit/config/cc_timezone.py |
4416 | @@ -1,22 +1,10 @@ |
4417 | -# vi: ts=4 expandtab |
4418 | -# |
4419 | -# Copyright (C) 2009-2010 Canonical Ltd. |
4420 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4421 | -# |
4422 | -# Author: Scott Moser <scott.moser@canonical.com> |
4423 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4424 | +# Copyright (C) 2009-2010 Canonical Ltd. |
4425 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4426 | # |
4427 | -# This program is free software: you can redistribute it and/or modify |
4428 | -# it under the terms of the GNU General Public License version 3, as |
4429 | -# published by the Free Software Foundation. |
4430 | +# Author: Scott Moser <scott.moser@canonical.com> |
4431 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4432 | # |
4433 | -# This program is distributed in the hope that it will be useful, |
4434 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4435 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4436 | -# GNU General Public License for more details. |
4437 | -# |
4438 | -# You should have received a copy of the GNU General Public License |
4439 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4440 | +# This file is part of cloud-init. See LICENSE file for license information. |
4441 | |
4442 | """ |
4443 | Timezone |
4444 | @@ -57,3 +45,5 @@ def handle(name, cfg, cloud, log, args): |
4445 | |
4446 | # Let the distro handle settings its timezone |
4447 | cloud.distro.set_timezone(timezone) |
4448 | + |
4449 | +# vi: ts=4 expandtab |
4450 | diff --git a/cloudinit/config/cc_ubuntu_init_switch.py b/cloudinit/config/cc_ubuntu_init_switch.py |
4451 | index 31a96e4..5dd2690 100644 |
4452 | --- a/cloudinit/config/cc_ubuntu_init_switch.py |
4453 | +++ b/cloudinit/config/cc_ubuntu_init_switch.py |
4454 | @@ -1,20 +1,8 @@ |
4455 | -# vi: ts=4 expandtab |
4456 | -# |
4457 | -# Copyright (C) 2014 Canonical Ltd. |
4458 | -# |
4459 | -# Author: Scott Moser <scott.moser@canonical.com> |
4460 | +# Copyright (C) 2014 Canonical Ltd. |
4461 | # |
4462 | -# This program is free software: you can redistribute it and/or modify |
4463 | -# it under the terms of the GNU General Public License version 3, as |
4464 | -# published by the Free Software Foundation. |
4465 | +# Author: Scott Moser <scott.moser@canonical.com> |
4466 | # |
4467 | -# This program is distributed in the hope that it will be useful, |
4468 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4469 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4470 | -# GNU General Public License for more details. |
4471 | -# |
4472 | -# You should have received a copy of the GNU General Public License |
4473 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4474 | +# This file is part of cloud-init. See LICENSE file for license information. |
4475 | |
4476 | """ |
4477 | Ubuntu Init Switch |
4478 | @@ -168,3 +156,5 @@ def _fire_reboot(log, wait_attempts=6, initial_sleep=1, backoff=2): |
4479 | elapsed = time.time() - start |
4480 | raise RuntimeError(("Reboot did not happen" |
4481 | " after %s seconds!") % (int(elapsed))) |
4482 | + |
4483 | +# vi: ts=4 expandtab |
4484 | diff --git a/cloudinit/config/cc_update_etc_hosts.py b/cloudinit/config/cc_update_etc_hosts.py |
4485 | index 3fcb265..b394784 100644 |
4486 | --- a/cloudinit/config/cc_update_etc_hosts.py |
4487 | +++ b/cloudinit/config/cc_update_etc_hosts.py |
4488 | @@ -1,22 +1,10 @@ |
4489 | -# vi: ts=4 expandtab |
4490 | -# |
4491 | -# Copyright (C) 2011 Canonical Ltd. |
4492 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4493 | -# |
4494 | -# Author: Scott Moser <scott.moser@canonical.com> |
4495 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4496 | +# Copyright (C) 2011 Canonical Ltd. |
4497 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4498 | # |
4499 | -# This program is free software: you can redistribute it and/or modify |
4500 | -# it under the terms of the GNU General Public License version 3, as |
4501 | -# published by the Free Software Foundation. |
4502 | +# Author: Scott Moser <scott.moser@canonical.com> |
4503 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4504 | # |
4505 | -# This program is distributed in the hope that it will be useful, |
4506 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4507 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4508 | -# GNU General Public License for more details. |
4509 | -# |
4510 | -# You should have received a copy of the GNU General Public License |
4511 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4512 | +# This file is part of cloud-init. See LICENSE file for license information. |
4513 | |
4514 | """ |
4515 | Update Etc Hosts |
4516 | @@ -101,3 +89,5 @@ def handle(name, cfg, cloud, log, _args): |
4517 | else: |
4518 | log.debug(("Configuration option 'manage_etc_hosts' is not set," |
4519 | " not managing /etc/hosts in module %s"), name) |
4520 | + |
4521 | +# vi: ts=4 expandtab |
4522 | diff --git a/cloudinit/config/cc_update_hostname.py b/cloudinit/config/cc_update_hostname.py |
4523 | index 315b7b6..d5f4eb5 100644 |
4524 | --- a/cloudinit/config/cc_update_hostname.py |
4525 | +++ b/cloudinit/config/cc_update_hostname.py |
4526 | @@ -1,22 +1,10 @@ |
4527 | -# vi: ts=4 expandtab |
4528 | -# |
4529 | -# Copyright (C) 2011 Canonical Ltd. |
4530 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4531 | -# |
4532 | -# Author: Scott Moser <scott.moser@canonical.com> |
4533 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4534 | +# Copyright (C) 2011 Canonical Ltd. |
4535 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4536 | # |
4537 | -# This program is free software: you can redistribute it and/or modify |
4538 | -# it under the terms of the GNU General Public License version 3, as |
4539 | -# published by the Free Software Foundation. |
4540 | +# Author: Scott Moser <scott.moser@canonical.com> |
4541 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4542 | # |
4543 | -# This program is distributed in the hope that it will be useful, |
4544 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4545 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4546 | -# GNU General Public License for more details. |
4547 | -# |
4548 | -# You should have received a copy of the GNU General Public License |
4549 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4550 | +# This file is part of cloud-init. See LICENSE file for license information. |
4551 | |
4552 | """ |
4553 | Update Hostname |
4554 | @@ -66,3 +54,5 @@ def handle(name, cfg, cloud, log, _args): |
4555 | util.logexc(log, "Failed to update the hostname to %s (%s)", fqdn, |
4556 | hostname) |
4557 | raise |
4558 | + |
4559 | +# vi: ts=4 expandtab |
4560 | diff --git a/cloudinit/config/cc_users_groups.py b/cloudinit/config/cc_users_groups.py |
4561 | index 3635236..5964980 100644 |
4562 | --- a/cloudinit/config/cc_users_groups.py |
4563 | +++ b/cloudinit/config/cc_users_groups.py |
4564 | @@ -1,20 +1,8 @@ |
4565 | -# vi: ts=4 expandtab |
4566 | -# |
4567 | -# Copyright (C) 2012 Canonical Ltd. |
4568 | -# |
4569 | -# Author: Ben Howard <ben.howard@canonical.com> |
4570 | +# Copyright (C) 2012 Canonical Ltd. |
4571 | # |
4572 | -# This program is free software: you can redistribute it and/or modify |
4573 | -# it under the terms of the GNU General Public License version 3, as |
4574 | -# published by the Free Software Foundation. |
4575 | +# Author: Ben Howard <ben.howard@canonical.com> |
4576 | # |
4577 | -# This program is distributed in the hope that it will be useful, |
4578 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4579 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4580 | -# GNU General Public License for more details. |
4581 | -# |
4582 | -# You should have received a copy of the GNU General Public License |
4583 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4584 | +# This file is part of cloud-init. See LICENSE file for license information. |
4585 | |
4586 | """ |
4587 | Users and Groups |
4588 | @@ -112,3 +100,5 @@ def handle(name, cfg, cloud, _log, _args): |
4589 | cloud.distro.create_group(name, members) |
4590 | for (user, config) in users.items(): |
4591 | cloud.distro.create_user(user, **config) |
4592 | + |
4593 | +# vi: ts=4 expandtab |
4594 | diff --git a/cloudinit/config/cc_write_files.py b/cloudinit/config/cc_write_files.py |
4595 | index b5956bd..72e1cdd 100644 |
4596 | --- a/cloudinit/config/cc_write_files.py |
4597 | +++ b/cloudinit/config/cc_write_files.py |
4598 | @@ -1,20 +1,8 @@ |
4599 | -# vi: ts=4 expandtab |
4600 | -# |
4601 | -# Copyright (C) 2012 Yahoo! Inc. |
4602 | -# |
4603 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4604 | +# Copyright (C) 2012 Yahoo! Inc. |
4605 | # |
4606 | -# This program is free software: you can redistribute it and/or modify |
4607 | -# it under the terms of the GNU General Public License version 3, as |
4608 | -# published by the Free Software Foundation. |
4609 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4610 | # |
4611 | -# This program is distributed in the hope that it will be useful, |
4612 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4613 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4614 | -# GNU General Public License for more details. |
4615 | -# |
4616 | -# You should have received a copy of the GNU General Public License |
4617 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4618 | +# This file is part of cloud-init. See LICENSE file for license information. |
4619 | |
4620 | """ |
4621 | Write Files |
4622 | @@ -145,3 +133,5 @@ def extract_contents(contents, extraction_types): |
4623 | elif t == UNKNOWN_ENC: |
4624 | pass |
4625 | return result |
4626 | + |
4627 | +# vi: ts=4 expandtab |
4628 | diff --git a/cloudinit/config/cc_yum_add_repo.py b/cloudinit/config/cc_yum_add_repo.py |
4629 | index eb94c1f..ef8535e 100644 |
4630 | --- a/cloudinit/config/cc_yum_add_repo.py |
4631 | +++ b/cloudinit/config/cc_yum_add_repo.py |
4632 | @@ -1,20 +1,8 @@ |
4633 | -# vi: ts=4 expandtab |
4634 | -# |
4635 | -# Copyright (C) 2012 Yahoo! Inc. |
4636 | -# |
4637 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4638 | +# Copyright (C) 2012 Yahoo! Inc. |
4639 | # |
4640 | -# This program is free software: you can redistribute it and/or modify |
4641 | -# it under the terms of the GNU General Public License version 3, as |
4642 | -# published by the Free Software Foundation. |
4643 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4644 | # |
4645 | -# This program is distributed in the hope that it will be useful, |
4646 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4647 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4648 | -# GNU General Public License for more details. |
4649 | -# |
4650 | -# You should have received a copy of the GNU General Public License |
4651 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4652 | +# This file is part of cloud-init. See LICENSE file for license information. |
4653 | |
4654 | """ |
4655 | Yum Add Repo |
4656 | @@ -133,3 +121,5 @@ def handle(name, cfg, _cloud, log, _args): |
4657 | repo_blob = _format_repository_config(c_repo_id, |
4658 | repo_configs.get(c_repo_id)) |
4659 | util.write_file(path, repo_blob) |
4660 | + |
4661 | +# vi: ts=4 expandtab |
4662 | diff --git a/cloudinit/cs_utils.py b/cloudinit/cs_utils.py |
4663 | index 412431f..51c0958 100644 |
4664 | --- a/cloudinit/cs_utils.py |
4665 | +++ b/cloudinit/cs_utils.py |
4666 | @@ -1,20 +1,9 @@ |
4667 | -# vi: ts=4 expandtab |
4668 | -# |
4669 | -# Copyright (C) 2014 CloudSigma |
4670 | -# |
4671 | -# Author: Kiril Vladimiroff <kiril.vladimiroff@cloudsigma.com> |
4672 | -# |
4673 | -# This program is free software: you can redistribute it and/or modify |
4674 | -# it under the terms of the GNU General Public License version 3, as |
4675 | -# published by the Free Software Foundation. |
4676 | +# Copyright (C) 2014 CloudSigma |
4677 | # |
4678 | -# This program is distributed in the hope that it will be useful, |
4679 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4680 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4681 | -# GNU General Public License for more details. |
4682 | +# Author: Kiril Vladimiroff <kiril.vladimiroff@cloudsigma.com> |
4683 | # |
4684 | -# You should have received a copy of the GNU General Public License |
4685 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4686 | +# This file is part of cloud-init. See LICENSE file for license information. |
4687 | + |
4688 | """ |
4689 | cepko implements easy-to-use communication with CloudSigma's VMs through |
4690 | a virtual serial port without bothering with formatting the messages |
4691 | @@ -104,3 +93,5 @@ class CepkoResult(object): |
4692 | |
4693 | def __iter__(self): |
4694 | return self.result.__iter__() |
4695 | + |
4696 | +# vi: ts=4 expandtab |
4697 | diff --git a/cloudinit/dhclient_hook.py b/cloudinit/dhclient_hook.py |
4698 | index 82cb185..7f02d7f 100644 |
4699 | --- a/cloudinit/dhclient_hook.py |
4700 | +++ b/cloudinit/dhclient_hook.py |
4701 | @@ -1,5 +1,4 @@ |
4702 | -#!/usr/bin/python |
4703 | -# vi: ts=4 expandtab |
4704 | +# This file is part of cloud-init. See LICENSE file for license information. |
4705 | |
4706 | import os |
4707 | |
4708 | @@ -48,3 +47,5 @@ class LogDhclient(object): |
4709 | return |
4710 | atomic_helper.write_json(self.hook_file, self.get_vals(envs)) |
4711 | LOG.debug("Wrote dhclient options in %s", self.hook_file) |
4712 | + |
4713 | +# vi: ts=4 expandtab |
4714 | diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py |
4715 | index 4a72643..803ac74 100755 |
4716 | --- a/cloudinit/distros/__init__.py |
4717 | +++ b/cloudinit/distros/__init__.py |
4718 | @@ -1,25 +1,13 @@ |
4719 | -# vi: ts=4 expandtab |
4720 | -# |
4721 | -# Copyright (C) 2012 Canonical Ltd. |
4722 | -# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4723 | -# Copyright (C) 2012 Yahoo! Inc. |
4724 | -# |
4725 | -# Author: Scott Moser <scott.moser@canonical.com> |
4726 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4727 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4728 | -# Author: Ben Howard <ben.howard@canonical.com> |
4729 | +# Copyright (C) 2012 Canonical Ltd. |
4730 | +# Copyright (C) 2012, 2013 Hewlett-Packard Development Company, L.P. |
4731 | +# Copyright (C) 2012 Yahoo! Inc. |
4732 | # |
4733 | -# This program is free software: you can redistribute it and/or modify |
4734 | -# it under the terms of the GNU General Public License version 3, as |
4735 | -# published by the Free Software Foundation. |
4736 | +# Author: Scott Moser <scott.moser@canonical.com> |
4737 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4738 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4739 | +# Author: Ben Howard <ben.howard@canonical.com> |
4740 | # |
4741 | -# This program is distributed in the hope that it will be useful, |
4742 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4743 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4744 | -# GNU General Public License for more details. |
4745 | -# |
4746 | -# You should have received a copy of the GNU General Public License |
4747 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4748 | +# This file is part of cloud-init. See LICENSE file for license information. |
4749 | |
4750 | import six |
4751 | from six import StringIO |
4752 | @@ -34,6 +22,7 @@ from cloudinit import log as logging |
4753 | from cloudinit import net |
4754 | from cloudinit.net import eni |
4755 | from cloudinit.net import network_state |
4756 | +from cloudinit.net import renderers |
4757 | from cloudinit import ssh_util |
4758 | from cloudinit import type_utils |
4759 | from cloudinit import util |
4760 | @@ -62,6 +51,7 @@ class Distro(object): |
4761 | hostname_conf_fn = "/etc/hostname" |
4762 | tz_zone_dir = "/usr/share/zoneinfo" |
4763 | init_cmd = ['service'] # systemctl, service etc |
4764 | + renderer_configs = {} |
4765 | |
4766 | def __init__(self, name, cfg, paths): |
4767 | self._paths = paths |
4768 | @@ -81,6 +71,17 @@ class Distro(object): |
4769 | def _write_network_config(self, settings): |
4770 | raise NotImplementedError() |
4771 | |
4772 | + def _supported_write_network_config(self, network_config): |
4773 | + priority = util.get_cfg_by_path( |
4774 | + self._cfg, ('network', 'renderers'), None) |
4775 | + |
4776 | + name, render_cls = renderers.select(priority=priority) |
4777 | + LOG.debug("Selected renderer '%s' from priority list: %s", |
4778 | + name, priority) |
4779 | + renderer = render_cls(config=self.renderer_configs.get(name)) |
4780 | + renderer.render_network_config(network_config=network_config) |
4781 | + return [] |
4782 | + |
4783 | def _find_tz_file(self, tz): |
4784 | tz_file = os.path.join(self.tz_zone_dir, str(tz)) |
4785 | if not os.path.isfile(tz_file): |
4786 | @@ -398,13 +399,17 @@ class Distro(object): |
4787 | # support kwargs having groups=[list] or groups="g1,g2" |
4788 | groups = kwargs.get('groups') |
4789 | if groups: |
4790 | - if isinstance(groups, (list, tuple)): |
4791 | - # kwargs.items loop below wants a comma delimeted string |
4792 | - # that can go right through to the command. |
4793 | - kwargs['groups'] = ",".join(groups) |
4794 | - else: |
4795 | + if isinstance(groups, six.string_types): |
4796 | groups = groups.split(",") |
4797 | |
4798 | + # remove any white spaces in group names, most likely |
4799 | + # that came in as a string like: groups: group1, group2 |
4800 | + groups = [g.strip() for g in groups] |
4801 | + |
4802 | + # kwargs.items loop below wants a comma delimeted string |
4803 | + # that can go right through to the command. |
4804 | + kwargs['groups'] = ",".join(groups) |
4805 | + |
4806 | primary_group = kwargs.get('primary_group') |
4807 | if primary_group: |
4808 | groups.append(primary_group) |
4809 | @@ -413,10 +418,10 @@ class Distro(object): |
4810 | for group in groups: |
4811 | if not util.is_group(group): |
4812 | self.create_group(group) |
4813 | - LOG.debug("created group %s for user %s", name, group) |
4814 | + LOG.debug("created group '%s' for user '%s'", group, name) |
4815 | |
4816 | # Check the values and create the command |
4817 | - for key, val in kwargs.items(): |
4818 | + for key, val in sorted(kwargs.items()): |
4819 | |
4820 | if key in adduser_opts and val and isinstance(val, str): |
4821 | adduser_cmd.extend([adduser_opts[key], val]) |
4822 | @@ -433,7 +438,7 @@ class Distro(object): |
4823 | |
4824 | # Don't create the home directory if directed so or if the user is a |
4825 | # system user |
4826 | - if 'no_create_home' in kwargs or 'system' in kwargs: |
4827 | + if kwargs.get('no_create_home') or kwargs.get('system'): |
4828 | adduser_cmd.append('-M') |
4829 | log_adduser_cmd.append('-M') |
4830 | else: |
4831 | @@ -744,3 +749,5 @@ def set_etc_timezone(tz, tz_file=None, tz_conf="/etc/timezone", |
4832 | else: |
4833 | util.copy(tz_file, tz_local) |
4834 | return |
4835 | + |
4836 | +# vi: ts=4 expandtab |
4837 | diff --git a/cloudinit/distros/arch.py b/cloudinit/distros/arch.py |
4838 | index 66209f2..64b8c1f 100644 |
4839 | --- a/cloudinit/distros/arch.py |
4840 | +++ b/cloudinit/distros/arch.py |
4841 | @@ -1,20 +1,8 @@ |
4842 | -# vi: ts=4 expandtab |
4843 | -# |
4844 | -# Copyright (C) 2014 Rackspace, US Inc. |
4845 | -# |
4846 | -# Author: Nate House <nathan.house@rackspace.com> |
4847 | +# Copyright (C) 2014 Rackspace, US Inc. |
4848 | # |
4849 | -# This program is free software: you can redistribute it and/or modify |
4850 | -# it under the terms of the GNU General Public License version 3, as |
4851 | -# published by the Free Software Foundation. |
4852 | +# Author: Nate House <nathan.house@rackspace.com> |
4853 | # |
4854 | -# This program is distributed in the hope that it will be useful, |
4855 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4856 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4857 | -# GNU General Public License for more details. |
4858 | -# |
4859 | -# You should have received a copy of the GNU General Public License |
4860 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4861 | +# This file is part of cloud-init. See LICENSE file for license information. |
4862 | |
4863 | from cloudinit import distros |
4864 | from cloudinit import helpers |
4865 | @@ -199,3 +187,5 @@ def convert_resolv_conf(settings): |
4866 | for ns in settings: |
4867 | result = result + 'nameserver %s\n' % ns |
4868 | return result |
4869 | + |
4870 | +# vi: ts=4 expandtab |
4871 | diff --git a/cloudinit/distros/debian.py b/cloudinit/distros/debian.py |
4872 | index f9b3b92..3f0f9d5 100644 |
4873 | --- a/cloudinit/distros/debian.py |
4874 | +++ b/cloudinit/distros/debian.py |
4875 | @@ -1,32 +1,18 @@ |
4876 | -# vi: ts=4 expandtab |
4877 | -# |
4878 | -# Copyright (C) 2012 Canonical Ltd. |
4879 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4880 | -# Copyright (C) 2012 Yahoo! Inc. |
4881 | -# |
4882 | -# Author: Scott Moser <scott.moser@canonical.com> |
4883 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4884 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4885 | -# |
4886 | -# This program is free software: you can redistribute it and/or modify |
4887 | -# it under the terms of the GNU General Public License version 3, as |
4888 | -# published by the Free Software Foundation. |
4889 | +# Copyright (C) 2012 Canonical Ltd. |
4890 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4891 | +# Copyright (C) 2012 Yahoo! Inc. |
4892 | # |
4893 | -# This program is distributed in the hope that it will be useful, |
4894 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of |
4895 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
4896 | -# GNU General Public License for more details. |
4897 | +# Author: Scott Moser <scott.moser@canonical.com> |
4898 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4899 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4900 | # |
4901 | -# You should have received a copy of the GNU General Public License |
4902 | -# along with this program. If not, see <http://www.gnu.org/licenses/>. |
4903 | +# This file is part of cloud-init. See LICENSE file for license information. |
4904 | |
4905 | import os |
4906 | |
4907 | from cloudinit import distros |
4908 | from cloudinit import helpers |
4909 | from cloudinit import log as logging |
4910 | -from cloudinit.net import eni |
4911 | -from cloudinit.net.network_state import parse_net_config_data |
4912 | from cloudinit import util |
4913 | |
4914 | from cloudinit.distros.parsers.hostname import HostnameConf |
4915 | @@ -50,11 +36,23 @@ ENI_HEADER = """# This file is generated from information provided by |
4916 | # network: {config: disabled} |
4917 | """ |
4918 | |
4919 | +NETWORK_CONF_FN = "/etc/network/interfaces.d/50-cloud-init.cfg" |
4920 | + |
4921 | |
4922 | class Distro(distros.Distro): |
4923 | hostname_conf_fn = "/etc/hostname" |
4924 | locale_conf_fn = "/etc/default/locale" |
4925 | - network_conf_fn = "/etc/network/interfaces.d/50-cloud-init.cfg" |
4926 | + network_conf_fn = { |
4927 | + "eni": "/etc/network/interfaces.d/50-cloud-init.cfg", |
4928 | + "netplan": "/etc/netplan/50-cloud-init.yaml" |
4929 | + } |
4930 | + renderer_configs = { |
4931 | + "eni": {"eni_path": network_conf_fn["eni"], |
4932 | + "eni_header": ENI_HEADER}, |
4933 | + "netplan": {"netplan_path": network_conf_fn["netplan"], |
4934 | + "netplan_header": ENI_HEADER, |
4935 | + "postcmds": True} |
4936 | + } |
4937 | |
4938 | def __init__(self, name, cfg, paths): |
4939 | distros.Distro.__init__(self, name, cfg, paths) |
4940 | @@ -63,12 +61,6 @@ class Distro(distros.Distro): |
4941 | # should only happen say once per instance...) |
4942 | self._runner = helpers.Runners(paths) |
4943 | self.osfamily = 'debian' |
4944 | - self._net_renderer = eni.Renderer({ |
4945 | - 'eni_path': self.network_conf_fn, |
4946 | - 'eni_header': ENI_HEADER, |
4947 | - 'links_path_prefix': None, |
4948 | - 'netrules_path': None, |
4949 | - }) |
4950 | |
4951 | def apply_locale(self, locale, out_fn=None): |
4952 | if not out_fn: |
4953 | @@ -88,14 +80,13 @@ class Distro(distros.Distro): |
4954 | self.package_command('install', pkgs=pkglist) |
4955 | |
4956 | def _write_network(self, settings): |
4957 | - util.write_file(self.network_conf_fn, settings) |
4958 | + # this is a legacy method, it will always write eni |
4959 | + util.write_file(self.network_conf_fn["eni"], settings) |
4960 | return ['all'] |
4961 | |
4962 | def _write_network_config(self, netconfig): |
4963 | - ns = parse_net_config_data(netconfig) |
4964 | - self._net_renderer.render_network_state("/", ns) |
4965 | _maybe_remove_legacy_eth0() |
4966 | - return [] |
4967 | + return self._supported_write_network_config(netconfig) |
4968 | |
4969 | def _bring_up_interfaces(self, device_names): |
4970 | use_all = False |
4971 | @@ -234,3 +225,5 @@ def _maybe_remove_legacy_eth0(path="/etc/network/interfaces.d/eth0.cfg"): |
4972 | msg = bmsg + " %s exists, but could not be read." % path |
4973 | |
4974 | LOG.warn(msg) |
4975 | + |
4976 | +# vi: ts=4 expandtab |
4977 | diff --git a/cloudinit/distros/fedora.py b/cloudinit/distros/fedora.py |
4978 | index c777845..a9490d0 100644 |
4979 | --- a/cloudinit/distros/fedora.py |
4980 | +++ b/cloudinit/distros/fedora.py |
4981 | @@ -1,24 +1,12 @@ |
4982 | -# vi: ts=4 expandtab |
4983 | -# |
4984 | -# Copyright (C) 2012 Canonical Ltd. |
4985 | -# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4986 | -# Copyright (C) 2012 Yahoo! Inc. |
4987 | -# |
4988 | -# Author: Scott Moser <scott.moser@canonical.com> |
4989 | -# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
4990 | -# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
4991 | +# Copyright (C) 2012 Canonical Ltd. |
4992 | +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. |
4993 | +# Copyright (C) 2012 Yahoo! Inc. |
4994 | # |
4995 | -# This program is free software: you can redistribute it and/or modify |
4996 | -# it under the terms of the GNU General Public License version 3, as |
4997 | -# published by the Free Software Foundation. |
4998 | +# Author: Scott Moser <scott.moser@canonical.com> |
4999 | +# Author: Juerg Haefliger <juerg.haefliger@hp.com> |
5000 | +# Author: Joshua Harlow <harlowja@yahoo-inc.com> |
The diff has been truncated for viewing.
utACK