Merge lp:~andreserl/maas/lp1665143 into lp:maas/2.1

Proposed by Andres Rodriguez
Status: Superseded
Proposed branch: lp:~andreserl/maas/lp1665143
Merge into: lp:maas/2.1
Diff against target: 84231 lines (+48827/-17108) (has conflicts)
632 files modified
.bzrignore (+5/-7)
.gitignore (+5/-9)
HACKING.txt (+22/-5)
MANIFEST.in (+18/-5)
Makefile (+88/-60)
buildout.cfg (+72/-39)
docs/_templates/maas/static/css/main.css (+14/-0)
docs/about.rst (+0/-50)
docs/bootsources.rst (+0/-113)
docs/changelog.rst (+99/-874)
docs/conf.py (+2/-1)
docs/configure.rst (+0/-135)
docs/development/notifications.rst (+198/-0)
docs/devices.rst (+0/-28)
docs/dhcpsnippets.rst (+0/-111)
docs/getting-help.rst (+0/-49)
docs/ha.rst (+0/-290)
docs/hardware-enablement-kernels.rst (+0/-80)
docs/index.rst (+1/-55)
docs/installing-ubuntu.rst (+0/-36)
docs/ipv6.rst (+0/-150)
docs/juju-quick-start.rst (+0/-145)
docs/kernel-options.rst (+0/-38)
docs/networking.rst (+0/-270)
docs/nodes.rst (+0/-98)
docs/orientation.rst (+0/-107)
docs/os-support.rst (+0/-121)
docs/packagerepositories.rst (+0/-71)
docs/physical-zones.rst (+0/-132)
docs/power-driver-capabilities.rst (+0/-48)
docs/proxy.rst (+0/-81)
docs/rack-configuration.rst (+0/-192)
docs/releases.rst (+21/-54)
docs/sstreams-mirror.rst (+0/-64)
docs/static-ips.rst (+0/-53)
docs/storage.rst (+0/-679)
docs/tags.rst (+0/-124)
media/README (+4/-4)
required-packages/dev (+5/-3)
required-packages/forbidden (+3/-0)
required-packages/yakkety (+2/-0)
required-packages/zesty (+2/-0)
services/reloader/run (+1/-1)
src/maascli/cli.py (+2/-2)
src/maasserver/__init__.py (+1/-1)
src/maasserver/__main__.py (+9/-0)
src/maasserver/api/blockdevices.py (+1/-1)
src/maasserver/api/boot_source_selections.py (+2/-0)
src/maasserver/api/dhcpsnippets.py (+1/-1)
src/maasserver/api/dnsresourcerecords.py (+2/-2)
src/maasserver/api/dnsresources.py (+1/-1)
src/maasserver/api/doc.py (+52/-10)
src/maasserver/api/doc_handler.py (+14/-10)
src/maasserver/api/domains.py (+1/-1)
src/maasserver/api/fabrics.py (+1/-1)
src/maasserver/api/fannetworks.py (+1/-1)
src/maasserver/api/interfaces.py (+8/-8)
src/maasserver/api/ipranges.py (+1/-1)
src/maasserver/api/maas.py (+1/-1)
src/maasserver/api/machines.py (+37/-27)
src/maasserver/api/nodes.py (+57/-7)
src/maasserver/api/notification.py (+145/-0)
src/maasserver/api/packagerepositories.py (+1/-1)
src/maasserver/api/partitions.py (+1/-1)
src/maasserver/api/pods.py (+229/-0)
src/maasserver/api/rackcontrollers.py (+3/-3)
src/maasserver/api/results.py (+52/-13)
src/maasserver/api/spaces.py (+76/-5)
src/maasserver/api/staticroutes.py (+1/-1)
src/maasserver/api/subnets.py (+185/-52)
src/maasserver/api/tags.py (+1/-2)
src/maasserver/api/tests/test_api.py (+5/-5)
src/maasserver/api/tests/test_boot_resources.py (+2/-2)
src/maasserver/api/tests/test_boot_source_selections.py (+1/-1)
src/maasserver/api/tests/test_commissioning.py (+199/-103)
src/maasserver/api/tests/test_dhcpsnippets.py (+3/-3)
src/maasserver/api/tests/test_discoveries.py (+5/-8)
src/maasserver/api/tests/test_doc.py (+35/-15)
src/maasserver/api/tests/test_enlistment.py (+6/-4)
src/maasserver/api/tests/test_events.py (+0/-1)
src/maasserver/api/tests/test_interfaces.py (+0/-2)
src/maasserver/api/tests/test_ipaddresses.py (+0/-10)
src/maasserver/api/tests/test_licensekey.py (+1/-1)
src/maasserver/api/tests/test_maas.py (+1/-1)
src/maasserver/api/tests/test_machine.py (+46/-59)
src/maasserver/api/tests/test_machines.py (+43/-5)
src/maasserver/api/tests/test_node.py (+123/-8)
src/maasserver/api/tests/test_nodes.py (+0/-1)
src/maasserver/api/tests/test_notification.py (+313/-0)
src/maasserver/api/tests/test_packagerepositories.py (+6/-4)
src/maasserver/api/tests/test_pods.py (+365/-0)
src/maasserver/api/tests/test_rackcontroller.py (+7/-7)
src/maasserver/api/tests/test_spaces.py (+126/-0)
src/maasserver/api/tests/test_subnets.py (+79/-41)
src/maasserver/api/tests/test_tag.py (+5/-3)
src/maasserver/api/tests/test_utils.py (+11/-3)
src/maasserver/api/tests/test_vlans.py (+160/-1)
src/maasserver/api/tests/test_volume_groups.py (+1/-1)
src/maasserver/api/vlans.py (+31/-17)
src/maasserver/bootresources.py (+43/-17)
src/maasserver/bootsources.py (+3/-1)
src/maasserver/clusterrpc/driver_parameters.py (+77/-53)
src/maasserver/clusterrpc/pods.py (+161/-0)
src/maasserver/clusterrpc/power.py (+1/-1)
src/maasserver/clusterrpc/testing/driver_parameters.py (+27/-15)
src/maasserver/clusterrpc/tests/test_boot_images.py (+1/-2)
src/maasserver/clusterrpc/tests/test_driver_parameters.py (+56/-42)
src/maasserver/clusterrpc/tests/test_pods.py (+368/-0)
src/maasserver/clusterrpc/utils.py (+1/-1)
src/maasserver/components.py (+30/-20)
src/maasserver/compose_preseed.py (+39/-5)
src/maasserver/context_processors.py (+0/-2)
src/maasserver/dbviews.py (+9/-24)
src/maasserver/dhcp.py (+49/-67)
src/maasserver/djangosettings/demo.py (+1/-1)
src/maasserver/djangosettings/development.py (+6/-7)
src/maasserver/djangosettings/settings.py (+3/-3)
src/maasserver/djangosettings/tests/test_settings.py (+2/-2)
src/maasserver/dns/tests/test_config.py (+3/-3)
src/maasserver/dns/tests/test_zonegenerator.py (+29/-42)
src/maasserver/enum.py (+38/-1)
src/maasserver/eventloop.py (+2/-16)
src/maasserver/exceptions.py (+14/-3)
src/maasserver/fields.py (+13/-0)
src/maasserver/forms/__init__.py (+100/-97)
src/maasserver/forms/ephemeral.py (+130/-30)
src/maasserver/forms/notification.py (+39/-0)
src/maasserver/forms/pods.py (+287/-0)
src/maasserver/forms/settings.py (+33/-0)
src/maasserver/forms/subnet.py (+13/-13)
src/maasserver/forms/tests/test_config.py (+2/-4)
src/maasserver/forms/tests/test_controller.py (+2/-2)
src/maasserver/forms/tests/test_dhcpsnippet.py (+4/-4)
src/maasserver/forms/tests/test_dnsdata.py (+1/-1)
src/maasserver/forms/tests/test_dnsresource.py (+1/-1)
src/maasserver/forms/tests/test_domain.py (+1/-1)
src/maasserver/forms/tests/test_ephemeral.py (+174/-24)
src/maasserver/forms/tests/test_fabric.py (+1/-1)
src/maasserver/forms/tests/test_fannetwork.py (+1/-1)
src/maasserver/forms/tests/test_filesystem.py (+1/-1)
src/maasserver/forms/tests/test_helpers.py (+2/-2)
src/maasserver/forms/tests/test_interface.py (+1/-1)
src/maasserver/forms/tests/test_interface_link.py (+8/-43)
src/maasserver/forms/tests/test_iprange.py (+1/-1)
src/maasserver/forms/tests/test_machine.py (+2/-2)
src/maasserver/forms/tests/test_notification.py (+108/-0)
src/maasserver/forms/tests/test_packagerepository.py (+1/-1)
src/maasserver/forms/tests/test_pods.py (+473/-0)
src/maasserver/forms/tests/test_settings.py (+2/-6)
src/maasserver/forms/tests/test_space.py (+1/-1)
src/maasserver/forms/tests/test_staticroute.py (+1/-1)
src/maasserver/forms/tests/test_subnet.py (+48/-52)
src/maasserver/forms/tests/test_ubuntu.py (+1/-1)
src/maasserver/forms/tests/test_vlan.py (+126/-1)
src/maasserver/forms/vlan.py (+49/-7)
src/maasserver/locks.py (+3/-3)
src/maasserver/management/commands/dbupgrade.py (+50/-6)
src/maasserver/management/commands/tests/test_dbupgrade.py (+4/-1)
src/maasserver/migrations/builtin/maasserver/0016_migrate_power_data_node_to_bmc.py (+9/-7)
src/maasserver/migrations/builtin/maasserver/0022_extract_ip_for_bmcs.py (+6/-3)
src/maasserver/migrations/builtin/maasserver/0027_replace_static_range_with_admin_reserved_ranges.py (+1/-1)
src/maasserver/migrations/builtin/maasserver/0056_add_description_to_fabric_and_space.py (+1/-1)
src/maasserver/migrations/builtin/maasserver/0094_add_unmanaged_subnets.py (+22/-0)
src/maasserver/migrations/builtin/maasserver/0095_vlan_relay_vlan.py (+23/-0)
src/maasserver/migrations/builtin/maasserver/0096_set_default_vlan_field.py (+23/-0)
src/maasserver/migrations/builtin/maasserver/0097_node_chassis_storage_hints.py (+73/-0)
src/maasserver/migrations/builtin/maasserver/0098_add_space_to_vlan.py (+24/-0)
src/maasserver/migrations/builtin/maasserver/0099_set_default_vlan_field.py (+24/-0)
src/maasserver/migrations/builtin/maasserver/0100_migrate_spaces_from_subnet_to_vlan.py (+47/-0)
src/maasserver/migrations/builtin/maasserver/0101_filesystem_btrfs_support.py (+22/-0)
src/maasserver/migrations/builtin/maasserver/0102_remove_space_from_subnet.py (+25/-0)
src/maasserver/migrations/builtin/maasserver/0103_notifications.py (+44/-0)
src/maasserver/migrations/builtin/maasserver/0104_notifications_dismissals.py (+27/-0)
src/maasserver/migrations/builtin/maasserver/0105_add_script_sets_to_node_model.py (+34/-0)
src/maasserver/migrations/builtin/maasserver/0106_testing_status.py (+27/-0)
src/maasserver/migrations/builtin/maasserver/0107_chassis_to_pods.py (+107/-0)
src/maasserver/migrations/builtin/maasserver/0108_generate_bmc_names.py (+28/-0)
src/maasserver/migrations/builtin/maasserver/0109_bmc_names_unique.py (+22/-0)
src/maasserver/migrations/builtin/maasserver/0110_notification_category.py (+23/-0)
src/maasserver/migrations/builtin/maasserver/0111_remove_component_error.py (+14/-0)
src/maasserver/migrations/builtin/maasserver/0112_update_notification.py (+38/-0)
src/maasserver/migrations/builtin/maasserver/0113_set_filepath_limit_to_linux_max.py (+27/-0)
src/maasserver/migrations/builtin/maasserver/0114_node_dynamic_to_creation_type.py (+26/-0)
src/maasserver/models/__init__.py (+15/-7)
src/maasserver/models/blockdevice.py (+54/-1)
src/maasserver/models/bmc.py (+652/-15)
src/maasserver/models/bootsource.py (+1/-1)
src/maasserver/models/component_error.py (+0/-30)
src/maasserver/models/config.py (+3/-0)
src/maasserver/models/event.py (+8/-1)
src/maasserver/models/interface.py (+91/-9)
src/maasserver/models/node.py (+460/-143)
src/maasserver/models/nodeprobeddetails.py (+54/-37)
src/maasserver/models/notification.py (+248/-0)
src/maasserver/models/podhints.py (+35/-0)
src/maasserver/models/signals/bmc.py (+36/-7)
src/maasserver/models/signals/nodes.py (+62/-2)
src/maasserver/models/signals/tests/test_bmc.py (+29/-1)
src/maasserver/models/signals/tests/test_nodes.py (+137/-1)
src/maasserver/models/space.py (+15/-2)
src/maasserver/models/staticipaddress.py (+207/-28)
src/maasserver/models/subnet.py (+82/-23)
src/maasserver/models/tests/test_blockdevice.py (+26/-0)
src/maasserver/models/tests/test_bmc.py (+518/-3)
src/maasserver/models/tests/test_config.py (+32/-1)
src/maasserver/models/tests/test_discovery.py (+2/-6)
src/maasserver/models/tests/test_dnsdata.py (+12/-8)
src/maasserver/models/tests/test_dnspublication.py (+5/-0)
src/maasserver/models/tests/test_event.py (+10/-0)
src/maasserver/models/tests/test_interface.py (+117/-40)
src/maasserver/models/tests/test_managers.py (+3/-3)
src/maasserver/models/tests/test_neighbour.py (+2/-2)
src/maasserver/models/tests/test_node.py (+715/-240)
src/maasserver/models/tests/test_nodeprobeddetails.py (+71/-76)
src/maasserver/models/tests/test_notification.py (+265/-0)
src/maasserver/models/tests/test_space.py (+16/-7)
src/maasserver/models/tests/test_staticipaddress.py (+135/-112)
src/maasserver/models/tests/test_subnet.py (+114/-50)
src/maasserver/models/tests/test_timestampedmodel.py (+3/-3)
src/maasserver/models/tests/test_vlan.py (+28/-0)
src/maasserver/models/vlan.py (+19/-0)
src/maasserver/node_action.py (+52/-22)
src/maasserver/node_constraint_filter_forms.py (+192/-131)
src/maasserver/node_status.py (+60/-1)
src/maasserver/plugin.py (+2/-6)
src/maasserver/populate_tags.py (+2/-2)
src/maasserver/preseed.py (+9/-3)
src/maasserver/preseed_network.py (+228/-287)
src/maasserver/regiondservices/tests/test_ntp.py (+0/-12)
src/maasserver/rpc/nodes.py (+8/-7)
src/maasserver/rpc/rackcontrollers.py (+10/-3)
src/maasserver/rpc/regionservice.py (+16/-19)
src/maasserver/rpc/tests/test_nodes.py (+5/-5)
src/maasserver/rpc/tests/test_rackcontrollers.py (+7/-1)
src/maasserver/rpc/tests/test_regionservice.py (+4/-1)
src/maasserver/start_up.py (+3/-0)
src/maasserver/static/assets/images/04d2075a-chevron-down.svg (+10/-0)
src/maasserver/static/assets/images/1cdcdb82-system-shutdown.svg (+1/-0)
src/maasserver/static/assets/images/2355399b-info.svg (+1/-0)
src/maasserver/static/assets/images/314a253d-settings.svg (+1/-0)
src/maasserver/static/assets/images/3fd57564-mount.svg (+1/-0)
src/maasserver/static/assets/images/46b44caf-checkbox-hover.svg (+15/-0)
src/maasserver/static/assets/images/480f6014-add-partition.svg (+1/-0)
src/maasserver/static/assets/images/501ee9c0-add-logical-volume.svg (+1/-0)
src/maasserver/static/assets/images/50fc9223-power-off.svg (+20/-0)
src/maasserver/static/assets/images/5777c0c7-warning.svg (+1/-0)
src/maasserver/static/assets/images/5c9708d2-add.svg (+1/-0)
src/maasserver/static/assets/images/6c395e6d-green-tick.svg (+16/-0)
src/maasserver/static/assets/images/82993327-mount.svg (+1/-0)
src/maasserver/static/assets/images/89c10794-remove.svg (+1/-0)
src/maasserver/static/assets/images/89c6b797-success.svg (+17/-0)
src/maasserver/static/assets/images/8b8eb7d5-partition.svg (+1/-0)
src/maasserver/static/assets/images/908ee6a0-help.svg (+1/-0)
src/maasserver/static/assets/images/9cc42dcc-magnifying_glass.svg (+1/-0)
src/maasserver/static/assets/images/a02192e3-debug.svg (+1/-0)
src/maasserver/static/assets/images/b2fadbbe-tooltip.svg (+1/-0)
src/maasserver/static/assets/images/b5573b6a-delete.svg (+1/-0)
src/maasserver/static/assets/images/b562c17f-edit.svg (+1/-0)
src/maasserver/static/assets/images/b77e606e-logical-volume.svg (+1/-0)
src/maasserver/static/assets/images/b8119c45-power-error.svg (+20/-0)
src/maasserver/static/assets/images/d0374f79-tags.svg (+1/-0)
src/maasserver/static/assets/images/d53683c4-power-on.svg (+20/-0)
src/maasserver/static/assets/images/d730daea-error.svg (+1/-0)
src/maasserver/static/assets/images/d760df7b-account.svg (+1/-0)
src/maasserver/static/assets/images/d88a05ba-unmount.svg (+1/-0)
src/maasserver/static/assets/images/db8d0984-checkbox.svg (+11/-0)
src/maasserver/static/assets/images/f3f43376-chevron-up.svg (+10/-0)
src/maasserver/static/assets/images/f5453933-sync.svg (+1/-0)
src/maasserver/static/assets/images/forms/checkbox-checked.svg (+0/-24)
src/maasserver/static/assets/images/forms/checkbox.svg (+0/-23)
src/maasserver/static/assets/images/forms/chevron-down.svg (+0/-12)
src/maasserver/static/assets/images/forms/chevron-up.svg (+0/-12)
src/maasserver/static/assets/images/forms/chevron_down.svg (+0/-12)
src/maasserver/static/assets/images/forms/chevron_up.svg (+0/-12)
src/maasserver/static/assets/images/logos/logo-ubuntu-orange.svg (+0/-60)
src/maasserver/static/assets/images/logos/maas-logo.svg (+0/-63)
src/maasserver/static/css/build.css (+1/-0)
src/maasserver/static/js/angular/3rdparty/sticky.min.js (+684/-0)
src/maasserver/static/js/angular/controllers/dashboard.js (+2/-2)
src/maasserver/static/js/angular/controllers/fabric_details.js (+3/-1)
src/maasserver/static/js/angular/controllers/networks_list.js (+27/-4)
src/maasserver/static/js/angular/controllers/node_details.js (+9/-2)
src/maasserver/static/js/angular/controllers/node_events.js (+14/-7)
src/maasserver/static/js/angular/controllers/node_result.js (+14/-6)
src/maasserver/static/js/angular/controllers/subnet_details.js (+9/-2)
src/maasserver/static/js/angular/controllers/tests/test_networks_list.js (+41/-17)
src/maasserver/static/js/angular/controllers/tests/test_node_details.js (+33/-0)
src/maasserver/static/js/angular/controllers/tests/test_node_events.js (+19/-2)
src/maasserver/static/js/angular/controllers/tests/test_node_result.js (+17/-2)
src/maasserver/static/js/angular/controllers/tests/test_subnet_details.js (+3/-1)
src/maasserver/static/js/angular/controllers/tests/test_vlan_details.js (+57/-7)
src/maasserver/static/js/angular/controllers/vlan_details.js (+131/-32)
src/maasserver/static/js/angular/directives/call_to_action.js (+4/-6)
src/maasserver/static/js/angular/directives/error_overlay.js (+1/-1)
src/maasserver/static/js/angular/directives/notifications.js (+102/-0)
src/maasserver/static/js/angular/directives/os_select.js (+25/-18)
src/maasserver/static/js/angular/directives/power_parameters.js (+2/-2)
src/maasserver/static/js/angular/directives/tests/test_notifications.js (+192/-0)
src/maasserver/static/js/angular/directives/tests/test_power_parameters.js (+2/-2)
src/maasserver/static/js/angular/directives/tests/test_window_width.js (+53/-0)
src/maasserver/static/js/angular/directives/version_reloader.js (+10/-5)
src/maasserver/static/js/angular/directives/window_width.js (+33/-0)
src/maasserver/static/js/angular/factories/events.js (+1/-1)
src/maasserver/static/js/angular/factories/notifications.js (+34/-0)
src/maasserver/static/js/angular/factories/tests/test_events.js (+1/-1)
src/maasserver/static/js/angular/factories/tests/test_notifications.js (+47/-0)
src/maasserver/static/js/angular/factories/tests/test_region.js (+6/-2)
src/maasserver/static/js/angular/factories/tests/test_vlans.js (+6/-3)
src/maasserver/static/js/angular/factories/vlans.js (+12/-7)
src/maasserver/static/js/angular/filters/by_space.js (+16/-4)
src/maasserver/static/js/angular/filters/by_vlan.js (+0/-15)
src/maasserver/static/js/angular/maas.js (+15/-0)
src/maasserver/static/js/angular/services/log.js (+93/-0)
src/maasserver/static/js/angular/services/tests/test_log.js (+112/-0)
src/maasserver/static/js/angular/testing/setup.js (+19/-0)
src/maasserver/static/js/prefs.js (+2/-2)
src/maasserver/static/js/tests/test_prefs.js (+1/-1)
src/maasserver/static/partials/boot-images.html (+23/-23)
src/maasserver/static/partials/dashboard.html (+188/-0)
src/maasserver/static/partials/domain-details.html (+15/-8)
src/maasserver/static/partials/domains-list.html (+10/-6)
src/maasserver/static/partials/error.html (+4/-0)
src/maasserver/static/partials/fabric-details.html (+16/-8)
src/maasserver/static/partials/intro-user.html (+33/-0)
src/maasserver/static/partials/intro.html (+71/-0)
src/maasserver/static/partials/ipranges.html (+25/-19)
src/maasserver/static/partials/networks-list.html (+60/-38)
src/maasserver/static/partials/node-details.html (+1052/-826)
src/maasserver/static/partials/node-events.html (+7/-3)
src/maasserver/static/partials/node-result.html (+9/-1)
src/maasserver/static/partials/nodes-list.html (+220/-144)
src/maasserver/static/partials/settings.html (+209/-72)
src/maasserver/static/partials/space-details.html (+11/-3)
src/maasserver/static/partials/ssh-keys.html (+14/-2)
src/maasserver/static/partials/subnet-details.html (+85/-28)
src/maasserver/static/partials/vlan-details.html (+112/-32)
src/maasserver/static/scss/_base.definition-list.scss (+0/-35)
src/maasserver/static/scss/_base.maas-gui-vanilla-theme.scss (+80/-0)
src/maasserver/static/scss/_base.main.scss (+0/-18)
src/maasserver/static/scss/_base.typography.scss (+0/-78)
src/maasserver/static/scss/_components.code.scss (+0/-44)
src/maasserver/static/scss/_components.list-tree.scss (+0/-57)
src/maasserver/static/scss/_components.tabs.scss (+0/-51)
src/maasserver/static/scss/_components.tooltips.scss (+0/-125)
src/maasserver/static/scss/_helpers.animations.scss (+0/-45)
src/maasserver/static/scss/_helpers.borders.scss (+0/-45)
src/maasserver/static/scss/_helpers.mixins.scss (+0/-59)
src/maasserver/static/scss/_helpers.state.scss (+0/-37)
src/maasserver/static/scss/_helpers.vertical-alignment.scss (+0/-15)
src/maasserver/static/scss/_layout.row.scss (+0/-19)
src/maasserver/static/scss/_layout.wrapper.scss (+0/-42)
src/maasserver/static/scss/_pages.scratch.scss (+14/-2)
src/maasserver/static/scss/_patterns.accordion.scss (+0/-122)
src/maasserver/static/scss/_patterns.action-card.scss (+0/-34)
src/maasserver/static/scss/_patterns.header.scss (+0/-64)
src/maasserver/static/scss/_patterns.search.scss (+0/-85)
src/maasserver/static/scss/_settings.defaults.scss (+0/-80)
src/maasserver/static/scss/_settings.fonts.scss (+0/-31)
src/maasserver/static/scss/build.scss (+4/-74)
src/maasserver/templates/maasserver/base.html (+31/-31)
src/maasserver/templates/maasserver/index.html (+10/-12)
src/maasserver/templates/maasserver/logout_confirm.html (+15/-9)
src/maasserver/templates/maasserver/prefs.html (+3/-3)
src/maasserver/templates/maasserver/prefs_add_sslkey.html (+4/-2)
src/maasserver/templates/maasserver/settings.html (+24/-18)
src/maasserver/templates/maasserver/settings_add_commissioning_script.html (+4/-2)
src/maasserver/templates/maasserver/settings_add_license_key.html (+4/-2)
src/maasserver/templates/maasserver/settings_commissioning_scripts.html (+1/-1)
src/maasserver/templates/maasserver/settings_confirm_delete_commissioning_script.html (+4/-2)
src/maasserver/templates/maasserver/settings_confirm_delete_license_key.html (+4/-2)
src/maasserver/templates/maasserver/settings_edit_license_key.html (+1/-1)
src/maasserver/templates/maasserver/settings_license_keys.html (+1/-1)
src/maasserver/templates/maasserver/user_add.html (+4/-2)
src/maasserver/templates/maasserver/user_confirm_delete.html (+4/-2)
src/maasserver/templates/maasserver/user_edit.html (+8/-4)
src/maasserver/templates/maasserver/user_view.html (+2/-2)
src/maasserver/templates/maasserver/zone_add.html (+1/-1)
src/maasserver/templates/maasserver/zone_confirm_delete.html (+4/-2)
src/maasserver/templates/maasserver/zone_detail.html (+2/-2)
src/maasserver/templates/maasserver/zone_edit.html (+4/-2)
src/maasserver/templates/maasserver/zone_list.html (+6/-6)
src/maasserver/templates/registration/login.html (+18/-21)
src/maasserver/testing/api.py (+0/-1)
src/maasserver/testing/factory.py (+198/-73)
src/maasserver/testing/initial.maas_test.sql (+13594/-0)
src/maasserver/testing/matchers.py (+34/-2)
src/maasserver/testing/resources.py (+266/-0)
src/maasserver/testing/sampledata.py (+66/-7)
src/maasserver/testing/testcase.py (+112/-154)
src/maasserver/testing/tests/test_sampledata.py (+0/-5)
src/maasserver/tests/test_auth.py (+0/-5)
src/maasserver/tests/test_bootresources.py (+7/-0)
src/maasserver/tests/test_bootsources.py (+10/-6)
src/maasserver/tests/test_commands.py (+4/-1)
src/maasserver/tests/test_commands_dbupgrade.py (+3/-1)
src/maasserver/tests/test_components.py (+9/-20)
src/maasserver/tests/test_compose_preseed.py (+83/-26)
src/maasserver/tests/test_dbviews.py (+6/-11)
src/maasserver/tests/test_dhcp.py (+56/-83)
src/maasserver/tests/test_docs.py (+54/-0)
src/maasserver/tests/test_eventloop.py (+2/-1)
src/maasserver/tests/test_fields.py (+23/-9)
src/maasserver/tests/test_node_action.py (+136/-54)
src/maasserver/tests/test_node_constraint_filter_forms.py (+105/-5)
src/maasserver/tests/test_ntp.py (+0/-14)
src/maasserver/tests/test_plugin.py (+1/-1)
src/maasserver/tests/test_populate_tags.py (+33/-10)
src/maasserver/tests/test_preseed.py (+27/-10)
src/maasserver/tests/test_preseed_network.py (+4/-4)
src/maasserver/tests/test_routablepairs.py (+0/-5)
src/maasserver/tests/test_service_monitor.py (+1/-1)
src/maasserver/tests/test_start_up.py (+13/-0)
src/maasserver/tests/test_storage_layouts.py (+3/-3)
src/maasserver/tests/test_third_party_drivers.py (+17/-8)
src/maasserver/tests/test_x509.py (+2/-2)
src/maasserver/third_party_drivers.py (+11/-8)
src/maasserver/triggers/system.py (+58/-1)
src/maasserver/triggers/testing.py (+26/-11)
src/maasserver/triggers/tests/test_init.py (+227/-1)
src/maasserver/triggers/tests/test_system_listener.py (+148/-25)
src/maasserver/triggers/tests/test_websocket.py (+0/-127)
src/maasserver/triggers/tests/test_websocket_listener.py (+186/-11)
src/maasserver/triggers/websocket.py (+113/-10)
src/maasserver/urls_api.py (+25/-0)
src/maasserver/utils/orm.py (+102/-20)
src/maasserver/utils/osystems.py (+1/-1)
src/maasserver/utils/tests/test_dblocks.py (+30/-15)
src/maasserver/utils/tests/test_dbtasks.py (+1/-1)
src/maasserver/utils/tests/test_mac.py (+3/-3)
src/maasserver/utils/tests/test_orm.py (+204/-1)
src/maasserver/utils/tests/test_osystems.py (+4/-4)
src/maasserver/utils/tests/test_signals.py (+2/-2)
src/maasserver/utils/tests/test_threads.py (+3/-2)
src/maasserver/views/combo.py (+5/-0)
src/maasserver/views/tests/test_account.py (+7/-4)
src/maasserver/views/tests/test_general.py (+4/-36)
src/maasserver/websockets/handlers/__init__.py (+8/-29)
src/maasserver/websockets/handlers/config.py (+1/-1)
src/maasserver/websockets/handlers/controller.py (+5/-2)
src/maasserver/websockets/handlers/device.py (+7/-2)
src/maasserver/websockets/handlers/dhcpsnippet.py (+1/-1)
src/maasserver/websockets/handlers/fabric.py (+1/-1)
src/maasserver/websockets/handlers/general.py (+4/-4)
src/maasserver/websockets/handlers/iprange.py (+1/-1)
src/maasserver/websockets/handlers/machine.py (+4/-3)
src/maasserver/websockets/handlers/node.py (+48/-27)
src/maasserver/websockets/handlers/notification.py (+73/-0)
src/maasserver/websockets/handlers/packagerepository.py (+1/-1)
src/maasserver/websockets/handlers/space.py (+6/-6)
src/maasserver/websockets/handlers/staticroute.py (+1/-1)
src/maasserver/websockets/handlers/subnet.py (+23/-2)
src/maasserver/websockets/handlers/tests/test_config.py (+1/-1)
src/maasserver/websockets/handlers/tests/test_controller.py (+6/-0)
src/maasserver/websockets/handlers/tests/test_device.py (+0/-6)
src/maasserver/websockets/handlers/tests/test_dhcpsnippet.py (+1/-1)
src/maasserver/websockets/handlers/tests/test_discovery.py (+0/-5)
src/maasserver/websockets/handlers/tests/test_domain.py (+9/-4)
src/maasserver/websockets/handlers/tests/test_general.py (+11/-8)
src/maasserver/websockets/handlers/tests/test_machine.py (+58/-31)
src/maasserver/websockets/handlers/tests/test_notification.py (+252/-0)
src/maasserver/websockets/handlers/tests/test_packagerepository.py (+1/-1)
src/maasserver/websockets/handlers/tests/test_space.py (+4/-4)
src/maasserver/websockets/handlers/tests/test_subnet.py (+111/-8)
src/maasserver/websockets/handlers/tests/test_vlan.py (+19/-3)
src/maasserver/websockets/handlers/vlan.py (+16/-9)
src/maasserver/websockets/tests/test_protocol.py (+11/-6)
src/maastesting/djangotestcase.py (+14/-2)
src/maastesting/fixtures.py (+24/-13)
src/maastesting/karma.conf.js (+1/-0)
src/maastesting/matchers.py (+54/-0)
src/maastesting/noseplug.py (+208/-16)
src/maastesting/parallel.py (+399/-0)
src/maastesting/testcase.py (+44/-24)
src/maastesting/tests/test_conflict_markers.py (+20/-17)
src/maastesting/tests/test_factory.py (+13/-10)
src/maastesting/tests/test_fixtures.py (+12/-15)
src/maastesting/tests/test_matchers.py (+89/-0)
src/maastesting/tests/test_noseplug.py (+132/-2)
src/maastesting/tests/test_parallel.py (+242/-0)
src/maastesting/tests/test_testcase.py (+28/-0)
src/maastesting/twisted.py (+19/-0)
src/maastesting/typecheck.py (+21/-0)
src/maastesting/utils.py (+2/-109)
src/metadataserver/address.py (+1/-1)
src/metadataserver/api.py (+423/-128)
src/metadataserver/builtin_scripts/__init__.py (+126/-0)
src/metadataserver/builtin_scripts/smartctl.py (+215/-0)
src/metadataserver/builtin_scripts/tests/test_builtin_scripts.py (+103/-0)
src/metadataserver/builtin_scripts/tests/test_smartctl.py (+262/-0)
src/metadataserver/enum.py (+38/-1)
src/metadataserver/fixtures/initial_data.yaml (+0/-13)
src/metadataserver/migrations/builtin/0002_script_models.py (+83/-0)
src/metadataserver/migrations/builtin/0003_remove_noderesult.py (+83/-0)
src/metadataserver/migrations/builtin/0004_aborted_script_status.py (+22/-0)
src/metadataserver/migrations/builtin/0005_store_powerstate_on_scriptset_creation.py (+22/-0)
src/metadataserver/models/__init__.py (+8/-8)
src/metadataserver/models/commissioningscript.py (+7/-99)
src/metadataserver/models/noderesult.py (+0/-126)
src/metadataserver/models/script.py (+91/-0)
src/metadataserver/models/scriptresult.py (+146/-0)
src/metadataserver/models/scriptset.py (+195/-0)
src/metadataserver/models/tests/test_commissioningscript.py (+1/-138)
src/metadataserver/models/tests/test_nodecommissionresult.py (+0/-157)
src/metadataserver/models/tests/test_script.py (+89/-0)
src/metadataserver/models/tests/test_scriptresult.py (+231/-0)
src/metadataserver/models/tests/test_scriptset.py (+264/-0)
src/metadataserver/nodeinituser.py (+5/-12)
src/metadataserver/tests/test_api.py (+909/-147)
src/metadataserver/tests/test_api_status.py (+85/-35)
src/metadataserver/tests/test_fields.py (+2/-2)
src/metadataserver/tests/test_vendor_data.py (+0/-2)
src/metadataserver/urls.py (+9/-3)
src/metadataserver/user_data/__init__.py (+33/-9)
src/metadataserver/user_data/commissioning.py (+0/-22)
src/metadataserver/user_data/disk_erasing.py (+0/-25)
src/metadataserver/user_data/poweroff.py (+0/-24)
src/metadataserver/user_data/rescue_mode.py (+0/-24)
src/metadataserver/user_data/snippets.py (+5/-6)
src/metadataserver/user_data/templates/base_user_data.sh (+94/-0)
src/metadataserver/user_data/templates/commissioning.template (+57/-196)
src/metadataserver/user_data/templates/disk_erasing.template (+9/-101)
src/metadataserver/user_data/templates/poweroff.template (+2/-2)
src/metadataserver/user_data/templates/rescue_mode.template (+10/-101)
src/metadataserver/user_data/templates/snippets/maas_ipmi_autodetect_tool.py (+8/-0)
src/metadataserver/user_data/templates/snippets/maas_run_remote_scripts.py (+225/-0)
src/metadataserver/user_data/templates/snippets/maas_signal.py (+29/-161)
src/metadataserver/user_data/templates/snippets/maas_wedge_autodetect.sh (+154/-0)
src/metadataserver/user_data/templates/snippets/tests/test_maas_run_remote_scripts.py (+177/-0)
src/metadataserver/user_data/templates/testing.template (+26/-0)
src/metadataserver/user_data/tests/test_commissioning.py (+0/-65)
src/metadataserver/user_data/tests/test_disk_erasing.py (+0/-75)
src/metadataserver/user_data/tests/test_generate_user_data.py (+183/-0)
src/metadataserver/user_data/tests/test_poweroff.py (+0/-37)
src/metadataserver/user_data/tests/test_rescue_mode.py (+0/-37)
src/metadataserver/user_data/tests/test_snippets.py (+7/-6)
src/provisioningserver/boot/__init__.py (+19/-13)
src/provisioningserver/boot/pxe.py (+7/-1)
src/provisioningserver/boot/tests/test_boot.py (+6/-0)
src/provisioningserver/boot/uefi_amd64.py (+12/-2)
src/provisioningserver/dhcp/__init__.py (+5/-5)
src/provisioningserver/dhcp/tests/test_config.py (+31/-102)
src/provisioningserver/diskless.py (+0/-237)
src/provisioningserver/drivers/__init__.py (+78/-104)
src/provisioningserver/drivers/diskless/__init__.py (+0/-102)
src/provisioningserver/drivers/diskless/tests/test_base.py (+0/-163)
src/provisioningserver/drivers/hardware/tests/test_virsh.py (+14/-0)
src/provisioningserver/drivers/hardware/virsh.py (+3/-1)
src/provisioningserver/drivers/osystem/tests/test_windows.py (+1/-1)
src/provisioningserver/drivers/osystem/windows.py (+1/-0)
src/provisioningserver/drivers/pod/__init__.py (+329/-0)
src/provisioningserver/drivers/pod/registry.py (+36/-0)
src/provisioningserver/drivers/pod/rsd.py (+806/-0)
src/provisioningserver/drivers/pod/tests/test_base.py (+696/-0)
src/provisioningserver/drivers/pod/tests/test_registry.py (+56/-0)
src/provisioningserver/drivers/pod/tests/test_rsd.py (+1541/-0)
src/provisioningserver/drivers/pod/tests/test_virsh.py (+1379/-0)
src/provisioningserver/drivers/pod/virsh.py (+930/-0)
src/provisioningserver/drivers/power/__init__.py (+116/-78)
src/provisioningserver/drivers/power/amt.py (+11/-2)
src/provisioningserver/drivers/power/apc.py (+17/-2)
src/provisioningserver/drivers/power/dli.py (+17/-2)
src/provisioningserver/drivers/power/fence_cdu.py (+18/-2)
src/provisioningserver/drivers/power/hmc.py (+19/-2)
src/provisioningserver/drivers/power/ipmi.py (+31/-2)
src/provisioningserver/drivers/power/manual.py (+3/-1)
src/provisioningserver/drivers/power/moonshot.py (+16/-2)
src/provisioningserver/drivers/power/mscm.py (+19/-2)
src/provisioningserver/drivers/power/msftocs.py (+17/-2)
src/provisioningserver/drivers/power/nova.py (+21/-2)
src/provisioningserver/drivers/power/registry.py (+74/-0)
src/provisioningserver/drivers/power/seamicro.py (+27/-2)
src/provisioningserver/drivers/power/tests/test_base.py (+76/-43)
src/provisioningserver/drivers/power/tests/test_registry.py (+70/-0)
src/provisioningserver/drivers/power/ucsm.py (+18/-2)
src/provisioningserver/drivers/power/virsh.py (+18/-2)
src/provisioningserver/drivers/power/vmware.py (+25/-2)
src/provisioningserver/drivers/power/wedge.py (+13/-2)
src/provisioningserver/drivers/tests/test_base.py (+152/-62)
src/provisioningserver/events.py (+87/-6)
src/provisioningserver/import_images/boot_resources.py (+52/-10)
src/provisioningserver/import_images/keyrings.py (+2/-5)
src/provisioningserver/import_images/tests/test_boot_resources.py (+56/-18)
src/provisioningserver/import_images/tests/test_keyrings.py (+3/-1)
src/provisioningserver/plugin.py (+18/-0)
src/provisioningserver/power/change.py (+0/-269)
src/provisioningserver/power/poweraction.py (+0/-136)
src/provisioningserver/power/query.py (+0/-206)
src/provisioningserver/power/schema.py (+0/-476)
src/provisioningserver/power/tests/test_change.py (+0/-563)
src/provisioningserver/power/tests/test_query.py (+0/-557)
src/provisioningserver/rackdservices/node_power_monitor_service.py (+1/-1)
src/provisioningserver/rackdservices/tests/test_tftp.py (+3/-3)
src/provisioningserver/rackdservices/tftp.py (+2/-2)
src/provisioningserver/rackdservices/tftp_offload.py (+207/-0)
src/provisioningserver/refresh/__init__.py (+29/-55)
src/provisioningserver/refresh/maas_api_helper.py (+104/-2)
src/provisioningserver/refresh/node_info_scripts.py (+19/-13)
src/provisioningserver/refresh/tests/test_maas_api_helper.py (+320/-14)
src/provisioningserver/refresh/tests/test_node_info_scripts.py (+2/-2)
src/provisioningserver/refresh/tests/test_refresh.py (+58/-121)
src/provisioningserver/rpc/arguments.py (+68/-0)
src/provisioningserver/rpc/cluster.py (+87/-1)
src/provisioningserver/rpc/clusterservice.py (+42/-9)
src/provisioningserver/rpc/exceptions.py (+13/-0)
src/provisioningserver/rpc/pods.py (+174/-0)
src/provisioningserver/rpc/power.py (+432/-31)
src/provisioningserver/rpc/tests/test_arguments.py (+107/-0)
src/provisioningserver/rpc/tests/test_clusterservice.py (+165/-20)
src/provisioningserver/rpc/tests/test_pods.py (+415/-0)
src/provisioningserver/rpc/tests/test_power.py (+1109/-145)
src/provisioningserver/templates/commissioning-user-data/snippets/maas_api_helper.py (+0/-110)
src/provisioningserver/templates/commissioning-user-data/snippets/maas_get.py (+0/-47)
src/provisioningserver/templates/dns/zone.template (+1/-1)
src/provisioningserver/testing/network.py (+0/-40)
src/provisioningserver/tests/test_config.py (+4/-2)
src/provisioningserver/tests/test_diskless.py (+0/-493)
src/provisioningserver/tests/test_events.py (+22/-7)
src/provisioningserver/tests/test_plugin.py (+21/-1)
src/provisioningserver/tests/test_service_monitor.py (+1/-1)
src/provisioningserver/utils/fs.py (+10/-7)
src/provisioningserver/utils/network.py (+4/-3)
src/provisioningserver/utils/service_monitor.py (+5/-2)
src/provisioningserver/utils/tests/test_enum.py (+3/-3)
src/provisioningserver/utils/tests/test_env.py (+1/-0)
src/provisioningserver/utils/tests/test_fs.py (+15/-10)
src/provisioningserver/utils/tests/test_network.py (+8/-5)
src/provisioningserver/utils/tests/test_service_monitor.py (+18/-1)
src/provisioningserver/utils/tests/test_utils.py (+8/-12)
utilities/check-imports (+71/-55)
utilities/regiond-storm (+127/-0)
utilities/remote-reinstall (+0/-4)
versions.cfg (+29/-22)
Text conflict in MANIFEST.in
Text conflict in docs/changelog.rst
Contents conflict in docs/troubleshooting.rst
Text conflict in src/maasserver/api/spaces.py
Text conflict in src/maasserver/api/subnets.py
Text conflict in src/maasserver/compose_preseed.py
Text conflict in src/maasserver/forms/tests/test_interface_link.py
Contents conflict in src/maasserver/migrations/south/django16_south_maas19.tar.gz
Text conflict in src/maasserver/models/staticipaddress.py
Text conflict in src/maasserver/models/tests/test_staticipaddress.py
Contents conflict in src/maasserver/static/assets/images/icons/account.svg
Contents conflict in src/maasserver/static/assets/images/icons/add-logical-volume.svg
Contents conflict in src/maasserver/static/assets/images/icons/add-partition.svg
Contents conflict in src/maasserver/static/assets/images/icons/add.svg
Contents conflict in src/maasserver/static/assets/images/icons/cross-orange.svg
Contents conflict in src/maasserver/static/assets/images/icons/cross.svg
Contents conflict in src/maasserver/static/assets/images/icons/cross_orange.svg
Contents conflict in src/maasserver/static/assets/images/icons/debug.svg
Contents conflict in src/maasserver/static/assets/images/icons/delete.svg
Contents conflict in src/maasserver/static/assets/images/icons/edit.svg
Contents conflict in src/maasserver/static/assets/images/icons/green-tick.svg
Contents conflict in src/maasserver/static/assets/images/icons/help.svg
Contents conflict in src/maasserver/static/assets/images/icons/info-mono.svg
Contents conflict in src/maasserver/static/assets/images/icons/info.svg
Contents conflict in src/maasserver/static/assets/images/icons/logical-volume.svg
Contents conflict in src/maasserver/static/assets/images/icons/magnifying_glass.svg
Contents conflict in src/maasserver/static/assets/images/icons/mount.svg
Contents conflict in src/maasserver/static/assets/images/icons/partition.svg
Contents conflict in src/maasserver/static/assets/images/icons/power-error.svg
Contents conflict in src/maasserver/static/assets/images/icons/power-off.svg
Contents conflict in src/maasserver/static/assets/images/icons/power-on.svg
Contents conflict in src/maasserver/static/assets/images/icons/remove.svg
Contents conflict in src/maasserver/static/assets/images/icons/settings.svg
Contents conflict in src/maasserver/static/assets/images/icons/success-mono.svg
Contents conflict in src/maasserver/static/assets/images/icons/success.svg
Contents conflict in src/maasserver/static/assets/images/icons/success_colour_black.svg
Contents conflict in src/maasserver/static/assets/images/icons/success_colour_white.svg
Contents conflict in src/maasserver/static/assets/images/icons/success_mono.svg
Contents conflict in src/maasserver/static/assets/images/icons/sync.svg
Contents conflict in src/maasserver/static/assets/images/icons/system-shutdown.svg
Contents conflict in src/maasserver/static/assets/images/icons/tags.svg
Contents conflict in src/maasserver/static/assets/images/icons/tick.svg
Contents conflict in src/maasserver/static/assets/images/icons/tooltip.svg
Contents conflict in src/maasserver/static/assets/images/icons/unmount.svg
Contents conflict in src/maasserver/static/assets/images/icons/warning-mono.svg
Contents conflict in src/maasserver/static/assets/images/icons/warning.svg
Contents conflict in src/maasserver/static/assets/images/icons/warning_colour_black.svg
Contents conflict in src/maasserver/static/assets/images/icons/warning_colour_white.svg
Contents conflict in src/maasserver/static/assets/images/icons/warning_mono.svg
Conflict adding file src/maasserver/static/css/build.css.  Moved existing file to src/maasserver/static/css/build.css.moved.
Text conflict in src/maasserver/static/js/angular/maas.js
Text conflict in src/maasserver/static/partials/dashboard.html
Text conflict in src/maasserver/static/partials/domain-details.html
Text conflict in src/maasserver/static/partials/domains-list.html
Text conflict in src/maasserver/static/partials/error.html
Text conflict in src/maasserver/static/partials/fabric-details.html
Text conflict in src/maasserver/static/partials/intro-user.html
Text conflict in src/maasserver/static/partials/intro.html
Text conflict in src/maasserver/static/partials/networks-list.html
Text conflict in src/maasserver/static/partials/node-details.html
Text conflict in src/maasserver/static/partials/node-events.html
Text conflict in src/maasserver/static/partials/node-result.html
Text conflict in src/maasserver/static/partials/nodes-list.html
Text conflict in src/maasserver/static/partials/settings.html
Text conflict in src/maasserver/static/partials/space-details.html
Text conflict in src/maasserver/static/partials/ssh-keys.html
Text conflict in src/maasserver/static/partials/subnet-details.html
Text conflict in src/maasserver/static/partials/vlan-details.html
Contents conflict in src/maasserver/static/scss/_base.forms.scss
Contents conflict in src/maasserver/static/scss/_components.buttons.scss
Contents conflict in src/maasserver/static/scss/_components.flashmessages.scss
Contents conflict in src/maasserver/static/scss/_components.forms.scss
Contents conflict in src/maasserver/static/scss/_components.icons.scss
Contents conflict in src/maasserver/static/scss/_components.tables.scss
Contents conflict in src/maasserver/static/scss/_helpers.display.scss
Contents conflict in src/maasserver/static/scss/_helpers.spacing.scss
Contents conflict in src/maasserver/static/scss/_patterns.page-header.scss
Text conflict in src/maasserver/templates/maasserver/base.html
Text conflict in src/maasserver/tests/test_compose_preseed.py
Text conflict in src/metadataserver/api.py
Text conflict in src/provisioningserver/boot/uefi_amd64.py
Text conflict in src/provisioningserver/import_images/boot_resources.py
Text conflict in src/provisioningserver/import_images/tests/test_boot_resources.py
Text conflict in versions.cfg
To merge this branch: bzr merge lp:~andreserl/maas/lp1665143
Reviewer Review Type Date Requested Status
MAAS Maintainers Pending
Review via email: mp+318489@code.launchpad.net

This proposal supersedes a proposal from 2017-02-27.

This proposal has been superseded by a proposal from 2017-02-28.

To post a comment you must log in.

Unmerged revisions

5758. By Andres Rodriguez

Make updates

5757. By Andres Rodriguez

Make updates

5756. By Andres Rodriguez

Work around issue when discovering nvme

5755. By Andres Rodriguez

[r=andreserl,mpontillo][bug=][author=andreserl] Ensure that we can discover a wedge BMC even if we detect a connected 'ipmi' device

5754. By Gavin Panella

[r=blake-rouse][bug=][author=allenap] Concurrent calls to getClientNow will not cause an update storm.

5753. By Newell Jensen

[r=lamont][bug=1665839][author=newell-jensen] Sieve the newly composed machine based off of node_id.

5752. By Gavin Panella

[r=allenap][bug=][author=allenap] Add to the list of development packages needed for Yakkety and Zesty.

5751. By Gavin Panella

[r=andreserl][bug=][author=allenap] Use the new styling for notifications in the UI and group by category.

5750. By Blake Rouse

[r=newell-jensen][bug=1664732][author=blake-rouse] Fix pod deletion to only decompose machines that MAAS has composed. Convert pod deletion into an async operation.

MAAS know records the creation type of a machine. This type allows MAAS to know what to do upon deletion of that machine. If the machine existed in the pod or was added to the pod out of band from MAAS then it will not be decomposed when the machine or pod is deleted. If the machine was created by MAAS then it will be decomposed in the pod when the machine or pod is deleted. The pod delete operation is not an asynchronous operation where it tries its best to decompose all machines. If decomposing fails then the deletion process will be stopped and the reason for the failure will be raised. If all the machines that required decomposition are successfully decomposed then it will also delete the pre-existing machines and the pod.

5749. By Lee Trager

[r=brendan-donegan,mpontillo][bug=][author=ltrager] Fix smartctl test when running on hardware RAID and unsupported hardware.

The smartctl --scan command lists all drives on the system along with the
device type and any options needed to run smartctl against the drive. While the extra options aren't needed for a typical SCSI drive, they are needed when running smartctl on certain hardware RAID systems to indicate which drive is to be tested.

smartctl --scan also lists all drives it can find, it does not filter out
drives which do not support SMART. The script now verifies all drives support SMART before scanning.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.bzrignore'
--- .bzrignore 2016-09-07 15:04:32 +0000
+++ .bzrignore 2017-02-28 15:11:34 +0000
@@ -2,8 +2,10 @@
2*.egg2*.egg
3*.egg-info3*.egg-info
4*.log4*.log
5./.bzr
5./.db.lock6./.db.lock
6./.failed7./.failed
8./.git
7./.hypothesis9./.hypothesis
8./.idea10./.idea
9./.idea/libraries11./.idea/libraries
@@ -11,6 +13,8 @@
11./.idea/workspace.xml13./.idea/workspace.xml
12./.installed.cfg14./.installed.cfg
13./.noseids15./.noseids
16./.run
17./.run-e2e
14./bin18./bin
15./build19./build
16./coverage20./coverage
@@ -33,16 +37,10 @@
33./media/demo/*37./media/demo/*
34./media/development38./media/development
35./parts39./parts
36./run-e2e/*
37./run-e2e/etc/*
38./run-e2e/etc/maas/*
39./run/*
40./run/etc/*
41./run/etc/maas/*
42./run/etc/ntp/*
43./services/*/supervise40./services/*/supervise
44./src/maasserver/static/js/enums.js41./src/maasserver/static/js/enums.js
45./TAGS42./TAGS
46./tags43./tags
47./xunit.*.xml44./xunit.*.xml
48dropin.cache45dropin.cache
46__pycache__
4947
=== modified file '.gitignore'
--- .gitignore 2016-09-07 15:04:32 +0000
+++ .gitignore 2017-02-28 15:11:34 +0000
@@ -2,8 +2,10 @@
2*.egg2*.egg
3*.egg-info3*.egg-info
4*.log4*.log
5/.bzr
5/.db.lock6/.db.lock
6/.failed7/.failed
8/.git
7/.hypothesis9/.hypothesis
8/.idea10/.idea
9/.idea/libraries11/.idea/libraries
@@ -11,6 +13,8 @@
11/.idea/workspace.xml13/.idea/workspace.xml
12/.installed.cfg14/.installed.cfg
13/.noseids15/.noseids
16/.run
17/.run-e2e
14/bin18/bin
15/build19/build
16/coverage20/coverage
@@ -33,18 +37,10 @@
33/media/demo/*37/media/demo/*
34/media/development38/media/development
35/parts39/parts
36/run-e2e/*
37/run-e2e/etc/*
38/run-e2e/etc/maas/*
39/run/*
40/run/etc/*
41/run/etc/maas/*
42/run/etc/ntp/*
43/services/*/supervise40/services/*/supervise
44/src/maasserver/static/js/enums.js41/src/maasserver/static/js/enums.js
45/TAGS42/TAGS
46/tags43/tags
47/xunit.*.xml44/xunit.*.xml
48dropin.cache45dropin.cache
49/src/**/*.pyc46__pycache__
50/etc/**/*.pyc
5147
=== modified file 'HACKING.txt'
--- HACKING.txt 2016-03-28 13:54:47 +0000
+++ HACKING.txt 2017-02-28 15:11:34 +0000
@@ -108,6 +108,19 @@
108 changing your locales on your workstation to ones present on the108 changing your locales on your workstation to ones present on the
109 server will solve the issue.109 server will solve the issue.
110110
111
112Emitting subunit
113^^^^^^^^^^^^^^^^
114
115Pass the ``--with-subunit`` flag to any of the test runners (e.g.
116``bin/test.rack``) to produce a `subunit`_ stream of test results. This
117may be useful for parallelising test runs, or to allow later analysis of
118a test run. The optional ``--subunit-fd`` flag can be used to direct the
119results to a different file descriptor, to ensure a clean stream.
120
121.. _subunit: https://launchpad.net/subunit/
122
123
111Running JavaScript tests124Running JavaScript tests
112^^^^^^^^^^^^^^^^^^^^^^^^125^^^^^^^^^^^^^^^^^^^^^^^^
113126
@@ -138,8 +151,9 @@
138regiond.log. To enable logging of all exceptions even exceptions where MAAS151regiond.log. To enable logging of all exceptions even exceptions where MAAS
139will return the correct HTTP status code.::152will return the correct HTTP status code.::
140153
141 $ sudo sed -i 's/DEBUG = False/DEBUG = True/g' /usr/share/maas/maas/settings.py154 $ sudo sed -i 's/DEBUG = False/DEBUG = True/g' \
142 $ sudo service maas-regiond restart155 > /usr/lib/python3/dist-packages/maasserver/djangosettings/settings.py
156 $ sudo service maas-regiond restart
143157
144Run regiond in foreground158Run regiond in foreground
145^^^^^^^^^^^^^^^^^^^^^^^^^159^^^^^^^^^^^^^^^^^^^^^^^^^
@@ -149,8 +163,10 @@
149placed a breakpoint into the code you want to inspect you can start the regiond163placed a breakpoint into the code you want to inspect you can start the regiond
150process in the foreground.::164process in the foreground.::
151165
152 $ sudo service maas-regiond stop166 $ sudo service maas-regiond stop
153 $ sudo -u maas -H DJANGO_SETTINGS_MODULE=maas.settings PYTHONPATH=/usr/share/maas twistd3 --nodaemon --pidfile= maas-regiond167 $ sudo -u maas -H \
168 > DJANGO_SETTINGS_MODULE=maasserver.djangosettings.settings \
169 > twistd3 --nodaemon --pidfile= maas-regiond
154170
155171
156.. Note::172.. Note::
@@ -175,7 +191,8 @@
175Development MAAS server setup191Development MAAS server setup
176=============================192=============================
177193
178Access to the database is configured in ``src/maas/development.py``.194Access to the database is configured in
195``src/maasserver/djangosettings/development.py``.
179196
180The ``Makefile`` or the test suite sets up a development database197The ``Makefile`` or the test suite sets up a development database
181cluster inside your branch. It lives in the ``db`` directory, which198cluster inside your branch. It lives in the ``db`` directory, which
182199
=== modified file 'MANIFEST.in'
--- MANIFEST.in 2016-12-07 12:59:10 +0000
+++ MANIFEST.in 2017-02-28 15:11:34 +0000
@@ -1,6 +1,19 @@
1graft src/maasserver/static1<<<<<<< TREE
2graft src/maasserver/templates2graft src/maasserver/static
3graft src/metadataserver/fixtures3graft src/maasserver/templates
4graft src/provisioningserver/templates4graft src/metadataserver/fixtures
5graft src/provisioningserver/templates
6=======
7graft src/maasserver/static
8graft src/maasserver/templates
9graft src/metadataserver/fixtures
10graft src/metadataserver/user_data/templates
11graft src/provisioningserver/templates
12>>>>>>> MERGE-SOURCE
5include src/maasserver/migrations/south/django16_south_maas19.tar.gz13include src/maasserver/migrations/south/django16_south_maas19.tar.gz
6include src/provisioningserver/drivers/power/*.xml14<<<<<<< TREE
15include src/provisioningserver/drivers/power/*.xml
16=======
17include src/provisioningserver/drivers/power/*.xml
18include src/metadataserver/builtin_scripts/*.template
19>>>>>>> MERGE-SOURCE
720
=== modified file 'Makefile'
--- Makefile 2016-10-17 06:38:56 +0000
+++ Makefile 2017-02-28 15:11:34 +0000
@@ -28,11 +28,9 @@
2828
29# MAAS SASS stylesheets. The first input file (maas-styles.css) imports29# MAAS SASS stylesheets. The first input file (maas-styles.css) imports
30# the others, so is treated specially in the target definitions.30# the others, so is treated specially in the target definitions.
31scss_theme := include/nodejs/node_modules/cloud-vanilla-theme31scss_theme := include/nodejs/node_modules/maas-gui-vanilla-theme
32scss_inputs := \32scss_input := src/maasserver/static/scss/build.scss
33 src/maasserver/static/scss/build.scss \33scss_deps := $(wildcard src/maasserver/static/scss/_*.scss)
34 $(wildcard src/maasserver/static/scss/*/*.scss) \
35 $(wildcard src/maasserver/static/scss/*/*/*.scss)
36scss_output := src/maasserver/static/css/build.css34scss_output := src/maasserver/static/css/build.css
3735
38# Prefix commands with this when they need access to the database.36# Prefix commands with this when they need access to the database.
@@ -49,7 +47,7 @@
49export PGDATABASE := maas47export PGDATABASE := maas
5048
51# For anything we start, we want to hint as to its root directory.49# For anything we start, we want to hint as to its root directory.
52export MAAS_ROOT := $(CURDIR)/run50export MAAS_ROOT := $(CURDIR)/.run
5351
54build: \52build: \
55 bin/buildout \53 bin/buildout \
@@ -61,11 +59,12 @@
61 bin/twistd.region \59 bin/twistd.region \
62 bin/test.cli \60 bin/test.cli \
63 bin/test.rack \61 bin/test.rack \
64 bin/test.config \
65 bin/test.region \62 bin/test.region \
63 bin/test.region.legacy \
66 bin/test.testing \64 bin/test.testing \
67 bin/test.js \65 bin/test.js \
68 bin/test.e2e \66 bin/test.e2e \
67 bin/test.parallel \
69 bin/py bin/ipy \68 bin/py bin/ipy \
70 $(js_enums)69 $(js_enums)
7170
@@ -86,12 +85,6 @@
8685
87.gitignore: .bzrignore86.gitignore: .bzrignore
88 sed 's:^[.]/:/:' $^ > $@87 sed 's:^[.]/:/:' $^ > $@
89 echo '/src/**/*.pyc' >> $@
90 echo '/etc/**/*.pyc' >> $@
91
92run/etc/ntp.conf: templates/ntp.conf
93 @mkdir -p $(@D)
94 @cp templates/ntp.conf $@
9588
96configure-buildout:89configure-buildout:
97 utilities/configure-buildout90 utilities/configure-buildout
@@ -110,9 +103,14 @@
110 $(buildout) install database103 $(buildout) install database
111 @touch --no-create $@104 @touch --no-create $@
112105
106bin/test.parallel: \
107 bin/buildout buildout.cfg versions.cfg setup.py
108 $(buildout) install parallel-test
109 @touch --no-create $@
110
113bin/maas-region bin/twistd.region: \111bin/maas-region bin/twistd.region: \
114 bin/buildout buildout.cfg versions.cfg setup.py \112 bin/buildout buildout.cfg versions.cfg setup.py \
115 $(js_enums) $(scss_output)113 $(js_enums) $(scss_output) .run
116 $(buildout) install region114 $(buildout) install region
117 @touch --no-create $@115 @touch --no-create $@
118116
@@ -122,6 +120,11 @@
122 $(buildout) install region-test120 $(buildout) install region-test
123 @touch --no-create $@121 @touch --no-create $@
124122
123bin/test.region.legacy: \
124 bin/buildout buildout.cfg versions.cfg setup.py $(js_enums)
125 $(buildout) install region-test-legacy
126 @touch --no-create $@
127
125bin/maas: bin/buildout buildout.cfg versions.cfg setup.py128bin/maas: bin/buildout buildout.cfg versions.cfg setup.py
126 $(buildout) install cli129 $(buildout) install cli
127 @touch --no-create $@130 @touch --no-create $@
@@ -134,33 +137,29 @@
134 $(buildout) install js-test137 $(buildout) install js-test
135 @touch --no-create $@138 @touch --no-create $@
136139
137bin/test.e2e: bin/protractor bin/buildout buildout.cfg versions.cfg setup.py140bin/test.e2e: \
141 bin/protractor bin/buildout buildout.cfg versions.cfg setup.py .run-e2e
138 $(buildout) install e2e-test142 $(buildout) install e2e-test
139 @touch --no-create $@143 @touch --no-create $@
140144
141# bin/maas-region is needed for South migration tests. bin/flake8 is145# bin/maas-region is needed for South migration tests. bin/flake8 is
142# needed for checking lint and bin/sass is needed for checking css.146# needed for checking lint and bin/sass is needed for checking css.
143bin/test.testing: \147bin/test.testing: \
144 bin/maas-region bin/flake8 bin/sass bin/buildout \148 bin/maas-region bin/flake8 bin/sass $(scss_theme) bin/buildout \
145 buildout.cfg versions.cfg setup.py149 buildout.cfg versions.cfg setup.py
146 $(buildout) install testing-test150 $(buildout) install testing-test
147 @touch --no-create $@151 @touch --no-create $@
148152
149bin/maas-rack bin/twistd.rack: \153bin/maas-rack bin/twistd.rack: \
150 bin/buildout buildout.cfg versions.cfg setup.py154 bin/buildout buildout.cfg versions.cfg setup.py .run
151 $(buildout) install rack155 $(buildout) install rack
152 @touch --no-create $@156 @touch --no-create $@
153157
154bin/test.rack: \158bin/test.rack: \
155 bin/buildout buildout.cfg versions.cfg setup.py bin/maas-rack \159 bin/buildout buildout.cfg versions.cfg setup.py bin/maas-rack
156 run/etc/ntp.conf
157 $(buildout) install rack-test160 $(buildout) install rack-test
158 @touch --no-create $@161 @touch --no-create $@
159162
160bin/test.config: bin/buildout buildout.cfg versions.cfg setup.py
161 $(buildout) install config-test
162 @touch --no-create $@
163
164bin/flake8: bin/buildout buildout.cfg versions.cfg setup.py163bin/flake8: bin/buildout buildout.cfg versions.cfg setup.py
165 $(buildout) install flake8164 $(buildout) install flake8
166 @touch --no-create $@165 @touch --no-create $@
@@ -211,8 +210,8 @@
211define test-scripts210define test-scripts
212 bin/test.cli211 bin/test.cli
213 bin/test.rack212 bin/test.rack
214 bin/test.config
215 bin/test.region213 bin/test.region
214 bin/test.region.legacy
216 bin/test.testing215 bin/test.testing
217 bin/test.js216 bin/test.js
218endef217endef
@@ -224,7 +223,10 @@
224test+lxd: lxd $(strip $(test-scripts))223test+lxd: lxd $(strip $(test-scripts))
225 utilities/isolated-make-test224 utilities/isolated-make-test
226225
227test: $(strip $(test-scripts))226test: bin/test.parallel
227 @bin/test.parallel --subprocess-per-core
228
229test-serial: $(strip $(test-scripts))
228 @bin/maas-region makemigrations --dry-run --exit && exit 1 ||:230 @bin/maas-region makemigrations --dry-run --exit && exit 1 ||:
229 @$(RM) coverage.data .failed231 @$(RM) coverage.data .failed
230 $(foreach test,$^,$(test-template);)232 $(foreach test,$^,$(test-template);)
@@ -239,6 +241,13 @@
239clean-failed:241clean-failed:
240 $(RM) .noseids242 $(RM) .noseids
241243
244src/maasserver/testing/initial.maas_test.sql: bin/database syncdb
245 bin/database --preserve run -- \
246 pg_dump maas --no-owner --no-privileges \
247 --format=plain > $@
248
249test-initial-data: src/maasserver/testing/initial.maas_test.sql
250
242define test-template251define test-template
243$(test) --with-xunit --xunit-file=xunit.$(notdir $(test)).xml || touch .failed252$(test) --with-xunit --xunit-file=xunit.$(notdir $(test)).xml || touch .failed
244endef253endef
@@ -253,8 +262,8 @@
253 @bin/maas-region makemigrations --dry-run --exit && exit 1 ||:262 @bin/maas-region makemigrations --dry-run --exit && exit 1 ||:
254 @bin/test.rack --stop263 @bin/test.rack --stop
255264
256test+coverage: export NOSE_WITH_COVERAGE = 1265test-serial+coverage: export NOSE_WITH_COVERAGE = 1
257test+coverage: test266test-serial+coverage: test-serial
258267
259coverage-report: coverage/index.html268coverage-report: coverage/index.html
260 sensible-browser $< > /dev/null 2>&1 &269 sensible-browser $< > /dev/null 2>&1 &
@@ -270,10 +279,12 @@
270 --title "MAAS r$(revno)" --directory $(@D)279 --title "MAAS r$(revno)" --directory $(@D)
271280
272coverage.data:281coverage.data:
273 @$(error Use `$(MAKE) test+coverage` to generate coverage data, \282 @$(error Use `$(MAKE) test-serial+coverage` to generate coverage \
274 or invoke a test script using the `--with-coverage` flag)283 data, or invoke a test script using the `--with-coverage` flag)
275284
276lint: lint-py lint-py-complexity lint-py-imports lint-js lint-doc lint-rst285lint: \
286 lint-py lint-py-complexity lint-py-imports \
287 lint-js lint-junk lint-doc lint-rst
277288
278pocketlint = $(call available,pocketlint,python-pocket-lint)289pocketlint = $(call available,pocketlint,python-pocket-lint)
279290
@@ -289,7 +300,7 @@
289lint-py: bin/flake8300lint-py: bin/flake8
290 @find $(sources) -name '*.py' \301 @find $(sources) -name '*.py' \
291 ! -path '*/migrations/*' ! -path '*/south_migrations/*' -print0 \302 ! -path '*/migrations/*' ! -path '*/south_migrations/*' -print0 \
292 | xargs -r0 bin/flake8 --ignore=E123,E402,E731 --isolated303 | xargs -r0 bin/flake8 --ignore=E123,E305,E402,E731 --isolated
293304
294# Ignore tests when checking complexity. The maximum complexity ought to305# Ignore tests when checking complexity. The maximum complexity ought to
295# be close to 10 but MAAS has many functions that are over that so we306# be close to 10 but MAAS has many functions that are over that so we
@@ -300,7 +311,7 @@
300 @find $(sources) -name '*.py' \311 @find $(sources) -name '*.py' \
301 ! -path '*/migrations/*' ! -path '*/south_migrations/*' \312 ! -path '*/migrations/*' ! -path '*/south_migrations/*' \
302 ! -path '*/tests/*' ! -path '*/testing/*' ! -name 'testing.py' \313 ! -path '*/tests/*' ! -path '*/testing/*' ! -name 'testing.py' \
303 -print0 | xargs -r0 bin/flake8 --ignore=E123,E402,E731 \314 -print0 | xargs -r0 bin/flake8 --ignore=E123,E305,E402,E731 \
304 --isolated --max-complexity=$(maximum)315 --isolated --max-complexity=$(maximum)
305316
306# Statically check imports against policy.317# Statically check imports against policy.
@@ -323,6 +334,11 @@
323 '(' -name '*.html' -o -name '*.js' ')' -print0 \334 '(' -name '*.html' -o -name '*.js' ')' -print0 \
324 | xargs -r0 -n20 -P4 $(pocketlint)335 | xargs -r0 -n20 -P4 $(pocketlint)
325336
337# Sometimes junk gets added to MAAS, like .moved files.
338lint-junk:
339 @if bzr ls --recursive --versioned | egrep '[.]moved$$'; then \
340 echo "^ Junk found. Please remove it from the tree." >&2 ; fi
341
326# Apply automated formatting to all Python files.342# Apply automated formatting to all Python files.
327format: sources = $(wildcard *.py contrib/*.py) src templates twisted utilities etc343format: sources = $(wildcard *.py contrib/*.py) src templates twisted utilities etc
328format:344format:
@@ -360,6 +376,9 @@
360man/%: docs/man/%.rst | bin/sphinx-build376man/%: docs/man/%.rst | bin/sphinx-build
361 bin/sphinx-build -b man docs man $^377 bin/sphinx-build -b man docs man $^
362378
379.run .run-e2e: run-skel
380 cp -av $^ $@
381
363enums: $(js_enums)382enums: $(js_enums)
364383
365$(js_enums): bin/py src/maasserver/utils/jsenums.py $(py_enums)384$(js_enums): bin/py src/maasserver/utils/jsenums.py $(py_enums)
@@ -367,23 +386,23 @@
367386
368styles: clean-styles $(scss_output)387styles: clean-styles $(scss_output)
369388
370$(scss_output): bin/sass $(scss_theme) $(scss_inputs)389$(scss_output): bin/sass $(scss_theme) $(scss_input) $(scss_deps)
371 bin/sass --include-path=src/maasserver/static/scss \390 bin/sass --include-path=src/maasserver/static/scss \
372 --output-style compressed $(scss_inputs) -o $(dir $@)391 --output-style compressed $(scss_input) -o $(dir $@)
373392
374$(scss_theme): prefix = include/nodejs393$(scss_theme): prefix = include/nodejs
375$(scss_theme):394$(scss_theme):
376 $(npm_install) --prefix $(prefix) cloud-vanilla-theme@0.0.22395 $(npm_install) --prefix $(prefix) maas-gui-vanilla-theme@1.2.0
377396
378clean-styles:397clean-styles:
379 $(RM) $(scss_output)398 $(RM) $(scss_output)
380399
381clean: stop clean-run clean-failed400clean: stop clean-failed
382 find . -type f -name '*.py[co]' -print0 | xargs -r0 $(RM)401 find . -type f -name '*.py[co]' -print0 | xargs -r0 $(RM)
383 find . -type d -name '__pycache__' -print0 | xargs -r0 $(RM) -r402 find . -type d -name '__pycache__' -print0 | xargs -r0 $(RM) -r
384 find . -type f -name '*~' -print0 | xargs -r0 $(RM)403 find . -type f -name '*~' -print0 | xargs -r0 $(RM)
385 find . -type f -name dropin.cache -print0 | xargs -r0 $(RM)404 find . -type f -name dropin.cache -print0 | xargs -r0 $(RM)
386 $(RM) -r media/demo/* media/development405 $(RM) -r media/demo/* media/development media/development.*
387 $(RM) $(js_enums) $(js_enums).tmp406 $(RM) $(js_enums) $(js_enums).tmp
388 $(RM) src/maasserver/data/templates.py407 $(RM) src/maasserver/data/templates.py
389 $(RM) *.log408 $(RM) *.log
@@ -399,25 +418,10 @@
399 $(RM) tags TAGS .installed.cfg418 $(RM) tags TAGS .installed.cfg
400 $(RM) -r *.egg *.egg-info src/*.egg-info419 $(RM) -r *.egg *.egg-info src/*.egg-info
401 $(RM) -r services/*/supervise420 $(RM) -r services/*/supervise
421 $(RM) -r .run .run-e2e
402 $(RM) xunit.*.xml422 $(RM) xunit.*.xml
403 $(RM) .failed423 $(RM) .failed
404424
405# Be selective about what to remove from run and run-e2e.
406define clean-run-template
407find $(1) -depth ! -type d \
408 ! -path $(1)/etc/maas/templates \
409 ! -path $(1)/etc/maas/drivers.yaml \
410 ! -path $(1)/etc/ntp/.keep \
411 ! -path $(1)/etc/ntp.conf \
412 -print0 | xargs -r0 $(RM)
413find $(1) -depth -type d \
414 -print0 | xargs -r0 rmdir --ignore-fail-on-non-empty
415endef
416
417clean-run:
418 $(call clean-run-template,run)
419 $(call clean-run-template,run-e2e)
420
421clean+db: clean425clean+db: clean
422 while fuser db --kill -TERM; do sleep 1; done426 while fuser db --kill -TERM; do sleep 1; done
423 $(RM) -r db427 $(RM) -r db
@@ -427,7 +431,8 @@
427 $(warning 'distclean' is deprecated; use 'clean')431 $(warning 'distclean' is deprecated; use 'clean')
428432
429harness: bin/maas-region bin/database433harness: bin/maas-region bin/database
430 $(dbrun) bin/maas-region shell --settings=maas.demo434 $(dbrun) bin/maas-region shell \
435 --settings=maasserver.djangosettings.demo
431436
432dbharness: bin/database437dbharness: bin/database
433 bin/database --preserve shell438 bin/database --preserve shell
@@ -441,7 +446,6 @@
441 clean446 clean
442 clean+db447 clean+db
443 clean-failed448 clean-failed
444 clean-run
445 clean-styles449 clean-styles
446 configure-buildout450 configure-buildout
447 copyright451 copyright
@@ -458,6 +462,7 @@
458 lint-css462 lint-css
459 lint-doc463 lint-doc
460 lint-js464 lint-js
465 lint-junk
461 lint-py466 lint-py
462 lint-py-complexity467 lint-py-complexity
463 lint-py-imports468 lint-py-imports
@@ -471,10 +476,11 @@
471 sudoers476 sudoers
472 syncdb477 syncdb
473 test478 test
474 test+coverage
475 test+lxd479 test+lxd
476 test-failed480 test-failed
477 test-migrations481 test-initial-data
482 test-serial
483 test-serial+coverage
478endef484endef
479485
480#486#
@@ -568,13 +574,13 @@
568574
569services/database/@deps: bin/database575services/database/@deps: bin/database
570576
571services/rackd/@deps: bin/twistd.rack577services/rackd/@deps: bin/twistd.rack bin/maas-rack
572578
573services/reloader/@deps:579services/reloader/@deps:
574580
575services/regiond/@deps: bin/maas-region581services/regiond/@deps: bin/maas-region bin/maas-rack
576582
577services/regiond2/@deps: bin/maas-region583services/regiond2/@deps: bin/maas-region bin/maas-rack
578584
579#585#
580# Package building586# Package building
@@ -692,6 +698,28 @@
692.PHONY: $(phony) FORCE698.PHONY: $(phony) FORCE
693699
694#700#
701# Secondary stuff.
702#
703# These are intermediate files that we want to keep around in the event
704# that they get built. By declaring them here we're also telling Make
705# that their absense is okay if a rule target is newer than the rule's
706# other prerequisites; i.e. don't build them.
707#
708# For example, converting foo.scss to foo.css might require bin/sass. If
709# foo.css is newer than foo.scss we know that we don't need to perform
710# that conversion, and hence don't need bin/sass. We declare bin/sass as
711# secondary so that Make knows this too.
712#
713
714define secondary
715 bin/py bin/buildout
716 bin/sass $(scss_theme)
717 bin/sphinx bin/sphinx-build
718endef
719
720.SECONDARY: $(sort $(strip $(secondary)))
721
722#
695# Functions.723# Functions.
696#724#
697725
698726
=== modified file 'buildout.cfg'
--- buildout.cfg 2016-10-12 15:26:17 +0000
+++ buildout.cfg 2017-02-28 15:11:34 +0000
@@ -5,10 +5,12 @@
5 config-test5 config-test
6 coverage6 coverage
7 flake87 flake8
8 parallel-test
8 rack9 rack
9 rack-test10 rack-test
10 region11 region
11 region-test12 region-test
13 region-test-legacy
12 repl14 repl
13 sphinx15 sphinx
14 testing-test16 testing-test
@@ -36,8 +38,8 @@
36 fixtures38 fixtures
37 hypothesis39 hypothesis
38 ipdb40 ipdb
41 junitxml
39 nose42 nose
40 nose-progressive
41 nose-timer43 nose-timer
42 postgresfixture44 postgresfixture
43 python-subunit45 python-subunit
@@ -63,17 +65,15 @@
63 sys.path.sort(key=p_sys_prefix)65 sys.path.sort(key=p_sys_prefix)
64environment =66environment =
65 from os import environ67 from os import environ
66 environ.setdefault("MAAS_ROOT", "${buildout:directory}/run")68 environ.setdefault("MAAS_ROOT", "${buildout:directory}/.run")
67warnings =69warnings =
68 from warnings import filterwarnings70 from warnings import filterwarnings
69 filterwarnings("ignore", category=RuntimeWarning, module="pkg_resources")71 filterwarnings("ignore", category=RuntimeWarning, module="pkg_resources")
70inject-test-options =72inject-test-options =
71 # When running tests from a console use the progressive output plugin.73 # When running tests from a console show only dots, but when running
72 # When running headless increase the verbosity so we can see the test74 # headless increase verbosity so we can see the test being run from a
73 # being run from a log file. An `options` list must be defined ahead75 # log file. An `options` list must be defined ahead of the use of this
74 # of the use of this snippet.76 # snippet.
75 # *** NOSE PROGRESSIVE IS BROKEN IN PYTHON 3.5 ***
76 # ["--verbosity=0", "--with-progressive"]
77 options += (77 options += (
78 ["--verbosity=1"]78 ["--verbosity=1"]
79 if sys.stdout.isatty() else79 if sys.stdout.isatty() else
@@ -92,6 +92,16 @@
92entry-points = database=postgresfixture.main:main92entry-points = database=postgresfixture.main:main
93scripts = database93scripts = database
9494
95[parallel-test]
96recipe = zc.recipe.egg
97eggs =
98 ${common:test-eggs}
99entry-points =
100 test.parallel=maastesting.parallel:main
101scripts = test.parallel
102extra-paths =
103 ${common:extra-paths}
104
95[region]105[region]
96recipe = zc.recipe.egg106recipe = zc.recipe.egg
97test-eggs =107test-eggs =
@@ -104,7 +114,7 @@
104 twistd.region=twisted.scripts.twistd:run114 twistd.region=twisted.scripts.twistd:run
105initialization =115initialization =
106 ${common:initialization}116 ${common:initialization}
107 environ.setdefault("DJANGO_SETTINGS_MODULE", "maas.development")117 environ.setdefault("DJANGO_SETTINGS_MODULE", "maasserver.djangosettings.development")
108scripts =118scripts =
109 maas-region119 maas-region
110 twistd.region120 twistd.region
@@ -115,8 +125,54 @@
115recipe = zc.recipe.egg125recipe = zc.recipe.egg
116eggs =126eggs =
117 ${region:eggs}127 ${region:eggs}
118entry-points =128 ${common:test-eggs}
119 test.region=maasserver:execute_from_command_line129entry-points =
130 test.region=maastesting.noseplug:main
131initialization =
132 ${region:initialization}
133 options = [
134 "--with-crochet",
135 "--with-resources",
136 "--with-scenarios",
137 "--with-select",
138 "--select-dir=src/maasserver",
139 "--select-dir=src/metadataserver",
140 "--cover-package=maas,maasserver,metadataserver",
141 "--cover-branches",
142 # Reduce the logging level to INFO here as
143 # DebuggingLoggerMiddleware logs the content of all the
144 # requests at DEBUG level: we don't want this in the
145 # tests as it's too verbose.
146 "--logging-level=INFO",
147 "--logging-clear-handlers",
148 # Do not run tests tagged "legacy".
149 "-a", "!legacy",
150 ]
151 ${common:inject-test-options}
152 # Configure logging. TODO: Do this in a plugin.
153 from provisioningserver import logger
154 logger.configure(mode=logger.LoggingMode.COMMAND)
155 # Limit concurrency in all thread-pools to ONE.
156 from maasserver.utils import threads
157 threads.install_default_pool(maxthreads=1)
158 threads.install_database_unpool(maxthreads=1)
159 # Disable all database connections in the reactor.
160 from maasserver.utils import orm
161 from twisted.internet import reactor
162 assert not reactor.running, "The reactor has been started too early."
163 reactor.callFromThread(orm.disable_all_database_connections)
164 # Last and least, configure Django.
165 import django; django.setup()
166scripts = test.region
167extra-paths =
168 ${region:extra-paths}
169
170[region-test-legacy]
171recipe = zc.recipe.egg
172eggs =
173 ${region:eggs}
174entry-points =
175 test.region.legacy=maasserver:execute_from_command_line
120initialization =176initialization =
121 ${region:initialization}177 ${region:initialization}
122 environ.setdefault("MAAS_PREVENT_MIGRATIONS", "1")178 environ.setdefault("MAAS_PREVENT_MIGRATIONS", "1")
@@ -124,12 +180,8 @@
124 "test",180 "test",
125 "--noinput",181 "--noinput",
126 "--with-crochet",182 "--with-crochet",
127 # Disable resources in the region for now because of suspected bad
128 # interactions with django_nose.
129 # "--with-resources",
130 "--with-scenarios",183 "--with-scenarios",
131 "--with-select",184 "--with-select",
132 "--select-dir=src/maas",
133 "--select-dir=src/maasserver",185 "--select-dir=src/maasserver",
134 "--select-dir=src/metadataserver",186 "--select-dir=src/metadataserver",
135 "--cover-package=maas,maasserver,metadataserver",187 "--cover-package=maas,maasserver,metadataserver",
@@ -140,9 +192,11 @@
140 # tests as it's too verbose.192 # tests as it's too verbose.
141 "--logging-level=INFO",193 "--logging-level=INFO",
142 "--logging-clear-handlers",194 "--logging-clear-handlers",
195 # Run only tests tagged "legacy".
196 "-a", "legacy",
143 ]197 ]
144 ${common:inject-test-options}198 ${common:inject-test-options}
145scripts = test.region199scripts = test.region.legacy
146extra-paths =200extra-paths =
147 ${region:extra-paths}201 ${region:extra-paths}
148202
@@ -258,27 +312,6 @@
258scripts =312scripts =
259 test.rack313 test.rack
260314
261[config-test]
262recipe = zc.recipe.egg
263eggs =
264 ${common:test-eggs}
265entry-points =
266 test.config=maastesting.noseplug:main
267initialization =
268 ${common:initialization}
269 options = [
270 "--with-resources",
271 "--with-scenarios",
272 "--with-select",
273 "--select-dir=etc/maas/templates/commissioning-user-data",
274 "--cover-package=snippets",
275 "--cover-branches",
276 ]
277 ${common:inject-test-options}
278extra-paths = ${common:extra-paths}
279scripts =
280 test.config
281
282[e2e-test]315[e2e-test]
283recipe = zc.recipe.egg316recipe = zc.recipe.egg
284eggs =317eggs =
@@ -293,8 +326,8 @@
293 ${common:path-munge}326 ${common:path-munge}
294 from os import environ327 from os import environ
295 environ.setdefault("MAAS_RACK_DEVELOP", "TRUE")328 environ.setdefault("MAAS_RACK_DEVELOP", "TRUE")
296 environ.setdefault("MAAS_ROOT", "${buildout:directory}/run-e2e")329 environ.setdefault("MAAS_ROOT", "${buildout:directory}/.run-e2e")
297 environ.setdefault("DJANGO_SETTINGS_MODULE", "maas.development")330 environ.setdefault("DJANGO_SETTINGS_MODULE", "maasserver.djangosettings.development")
298 environ.setdefault("DEV_DB_NAME", "test_maas_e2e")331 environ.setdefault("DEV_DB_NAME", "test_maas_e2e")
299 environ.setdefault("MAAS_PREVENT_MIGRATIONS", "1")332 environ.setdefault("MAAS_PREVENT_MIGRATIONS", "1")
300333
301334
=== modified file 'docs/_templates/maas/static/css/main.css'
--- docs/_templates/maas/static/css/main.css 2014-06-09 16:25:19 +0000
+++ docs/_templates/maas/static/css/main.css 2017-02-28 15:11:34 +0000
@@ -73,3 +73,17 @@
73 text-decoration: none;73 text-decoration: none;
74 border-bottom: 1px solid #6D4100;74 border-bottom: 1px solid #6D4100;
75}75}
76
77/*
78 * Custom CSS selectors for the API documentation page.
79 *
80 * Make subtitles for each API endpoint smaller, so they don't overwhelm
81 * the remainder of the documentation.
82 */
83div#maas-api div#operations h4 code.docutils {
84 font-size: 75%;
85}
86
87div#maas-api div#operations div.section h5 {
88 font-size: 90%;
89}
7690
=== removed file 'docs/about.rst'
--- docs/about.rst 2016-04-11 16:23:26 +0000
+++ docs/about.rst 1970-01-01 00:00:00 +0000
@@ -1,50 +0,0 @@
1About this documentation
2========================
3
4This is the documentation for Canonical's MAAS software. If you aren't
5sure what that is, you should probably skip everything else and head
6straight to the :ref:`orientation` section where it is explained.
7Like any software though, it can be frustrating if you don't know how
8bits of it work, how to achieve certain goals or what to do when
9things go wrong. Amongst its various sections, this manual aims to
10answer all those questions and plenty more you haven't even thought of
11yet.
12
13
14Getting it
15----------
16
17In a cunning move, the current documentation always lives, and is
18built from, the main MAAS source code (in the top-level ``docs/``
19directory). That means that whatever MAAS package you have installed,
20or even if you are really living life on the edge and have checked out
21a development version from Launchpad, this documentation should be the
22latest and most appropriate version for the software you are running.
23However, it is also possible that there have been additional sections,
24or more helpful and clearer bits added since the package you are using
25was made. For this reason you can always find the latest documentation
26online here: `http://maas.io/`_.
27
28.. _http://maas.io/:
29 http://maas.io
30
31
32Contributing
33------------
34
35If you have some extra information to add, or think you have spotted
36an error or something out of date, we really want to hear about
37it. Please `File a bug report`_ or `contact us directly`_. In addition
38you can talk to us on the Freenode IRC channel #maas.
39
40.. _File a bug report:
41 https://bugs.launchpad.net/maas/+filebug
42
43.. _contact us directly:
44 https://launchpad.net/~maas-maintainers/+contactuser
45
46If you see something wrong with this documentation, you can help us fix it.
47Download the source to MAAS by following the instructions in
48:doc:`the hacking guide <hacking>`, make your changes, and propose a merge
49against lp:maas on Launchpad. The documentation source lives in the top-level
50``docs/`` directory.
510
=== removed file 'docs/bootsources.rst'
--- docs/bootsources.rst 2016-09-27 22:26:08 +0000
+++ docs/bootsources.rst 1970-01-01 00:00:00 +0000
@@ -1,113 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _bootsources:
4
5Boot images import configuration
6================================
7
8The configuration for where a region downloads its images is defined by
9a set of "sources". Each "source" defines a Simplestreams repository
10location (``url``) from which images can be downloaded and a
11``keyring_filename`` (or ``keyring_data``) for validating index and image
12signatures from that location. For each source, you can define a series of
13filters (``selections``) specifying which images should be downloaded from
14that source.
15
16The following example use the MAAS CLI to list the boot sources and the boot
17source selections. Assuming the CLI ``PROFILE`` is the name of the profile
18under which you're logged in to the server::
19
20 $ maas $PROFILE boot-sources read
21 [
22 {
23 "url": "http://images.maas.io/ephemeral-v3/daily/",
24 "keyring_data": "",
25 "resource_uri": "<url omitted for readability>",
26 "keyring_filename": "/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg",
27 "id": 1
28 }
29 ]
30
31 $ maas $PROFILE boot-source-selections read 1
32 [
33 {
34 "labels": [
35 "release"
36 ],
37 "arches": [
38 "amd64"
39 ],
40 "subarches": [
41 "*"
42 ],
43 "release": "trusty",
44 "id": 1,
45 "resource_uri": "<url omitted for readability>"
46 }
47 ]
48
49
50Restricting the images being downloaded
51---------------------------------------
52
53Let's say you want to add a previous LTS release to images being downloaded.
54Starting from the configuration described above, you would need to:
55
56- Add the "Precise" selection (the selection '1' of the source '1')::
57
58 $ maas $PROFILE boot-source-selections create 1 os="ubuntu" release="precise" arches="amd64" subarches="*" labels="*"
59
60After you've selected the additional boot sources you need to tell MAAS to
61start the import process by running the command::
62
63 $ maas $PROFILE boot-resources import
64
65Downloading the images from a different source
66----------------------------------------------
67
68Let's say you want to import the images from a different location. You would
69need to to change the source's url and keyring::
70
71 $ maas $PROFILE boot-source update 1 url="http://custom.url" keyring_filename="" keyring_data@=./custom_keyring_file
72 {
73 "url": "http://custom.url/",
74 "keyring_data": "<base64 encoded content of `custom_keyring_file`>",
75 "resource_uri": "<url omitted for readability>",
76 "keyring_filename": "",
77 "id": 1
78 }
79
80Adding a source
81---------------
82
83You can also add a new source::
84
85 $ maas $PROFILE boot-sources create url=http://my.url keyring_filename="" keyring_data@=./ custom_keyring_file
86 {
87 "url": "http://my.url/",
88 "keyring_data": "ZW1wdHkK",
89 "keyring_filename": "",
90 "id": 2,
91 "resource_uri": "<url omitted for readability>"
92 }
93
94Inside that newly created source ('2') you can add selections::
95
96 $ maas $PROFILE boot-source-selections create 2 os="ubuntu" release="trusty" arches="amd64" subarches="*" labels='*'
97 {
98 "labels": ["*"],
99 "arches": ["amd64"],
100 "subarches": ["*"],
101 "release": "trusty",
102 "id": 3,
103 "resource_uri": "<url omitted for readability>"
104 }
105
106Deleting a source
107-----------------
108
109Let's say you need to delete the newly added source.
110
111To delete the source::
112
113 $ maas $PROFILE boot-source delete 2
1140
=== modified file 'docs/changelog.rst'
--- docs/changelog.rst 2017-02-17 05:59:11 +0000
+++ docs/changelog.rst 2017-02-28 15:11:34 +0000
@@ -2,6 +2,7 @@
2Changelog2Changelog
3=========3=========
44
5<<<<<<< TREE
52.1.462.1.4
6=====7=====
78
@@ -170,881 +171,105 @@
170171
1712.1.01722.1.0
172=====173=====
174=======
1752.2.0 (beta1)
176=============
177>>>>>>> MERGE-SOURCE
173178
174Important announcements179Important announcements
175-----------------------180-----------------------
176181
177**New MAAS dashboard, now including discovered devices!**182**Migrating MAAS L3 to L2 spaces**
178 In MAAS 2.1, administrators will be redirected to the new MAAS dashboard183 MAAS 2.2 has changed the definition of spaces from a Layer 3 concept to a
179 after they log in to the Web UI. On the dashboard, administrators are guided184 Layer 2 concept.
180 through where to go to quickly get MAAS up and running. In addition,185
181 administrators can view hosts that have been discovered on the network, and186 The spaces definition in MAAS (first introduced in MAAS 1.9) is “a set of
182 quickly convert them to a device in MAAS.187 subnets that can mutually communicate”. The assumption is that these spaces
183188 can route to each other, and have appropriate firewall rules for their
184**Image streams have been upgraded to v3. (Important: update your mirrors!)**189 purposes. (For example, a dmz space might contain subnets with internet
185 In order to support the new kernels, MAAS has moved to a new format for image190 access, and a storage space might contain subnets that can access the same
186 streams. Previous releases used stream in “v2” format. Starting from MAAS 2.1,191 storage networks.) Juju uses the current definition in order to ensure that
187 the “v3” format image stream will be used.192 deployed applications have access to networks appropriate for the services
188193 they provide.
189 Users upgrading from earlier versions of MAAS who are using the default images194
190 URL will be automatically migrated to the new “v3” URL.195 The current definition of spaces as a L3 concept is problematic, in that
191196 sometimes Juju wants to deploy applications that themselves create a Layer 3
192 For users with custom mirrors, MAAS will not migrate the image URL197 subnet. Therefore, it was decided that the concept of spaces will be pushed
193 automatically. Users must ensure their image mirrors contain the “v3” stream,198 down a layer (to apply to VLANs in MAAS).
194 which is available at http://images.maas.io/ephemeral-v3/. Old images199
195 downloaded from the “v2” stream will continue to work until the mirror is200 With spaces as a Layer 2 concept, it is is now “a set of VLANs whose subnets
196 updated, but the MAAS team only supports MAAS 2.1 users using the “v3” stream.201 can mutually communicate”.
197 Please note that bootloaders are now included in the mirror; be sure to mirror202
198 them in addition to the images.203 As such, starting from MAAS 2.2b1:
199204
200**New hardware enablement kernel naming convention**205 * VLANs will gain a ‘space’ reference, and subnets will have their spaces
201 Starting from MAAS 2.1 and Ubuntu 16.04 "Xenial", MAAS is adhering to a new206 migrated to the VLANs they are on. On upgrades, if two subnets on the same
202 naming convention for hardware enablement kernels. On Xenial and above, MAAS207 VLAN are in different spaces, the most recently created space will be used
203 will not support HWE kernels with the old naming convention, but it will208 for both.
204 support HWE kernel channel. For example, given Ubuntu 16.04 "Xenial" and209
205 Yakkety, currently available kernels in MAAS are:210 * Spaces will become optional. Fresh installs will not have a default space
206211 (e.g. space-0). On upgrades, if only the default space (space-0) exists,
207 * ga-<version>212 it will be removed.
208 The GA, or general availability kernel is the kernel which the Ubuntu213
209 release shipped with. For example ‘ga-16.04’ is the default 4.4 kernel214 The following API changes will occur in MAAS 2.2:
210 which shipped on Ubuntu 16.04 "Xenial". The ga kernel contains all bug and215
211 security fixes provided by the Ubuntu archives. Deployments which use the216 * Editing a subnet's space will no longer be possible (breaks backwards
212 ga kernel will stay at the same kernel version through upgrades until the217 compatibility). Spaces must now be edited each VLAN. For backward
213 entire release is upgraded with ‘do-release-upgrade.’218 compatibility, the subnets endpoint will present the underlying VLAN’s space.
214219
215 * hwe-<version>220 Recommended actions for MAAS administrators prior to upgrading to MAAS 2.2:
216 The latest Hardware Enablement Kernel currently available in a given221
217 Ubuntu release. As new Hardware Enable Kernels are released with new Ubuntu222 * Ensure that no two subnets in the same VLAN are in different spaces, so that
218 releases the hwe-<version> kernel will be upgraded up until the next LTS.223 the upgrade path migrates the expected space to the VLAN. Ensure that each
219 For example hwe-16.04 is currently the 16.04 GA kernel. Once 16.10 is224 VLAN with an assigned space will contain subnets which can mutually
220 released the hwe-16.04 kernel will be upgraded to the 16.10 GA kernel. The225 communicate with other subnets whose VLAN is in the same space. This will
221 kernel will continue to be upgraded up until and including the 18.04 GA226 allow backward compatibility with Juju charms which use the Layer 3 definition
222 kernel.227 of spaces.
223228
224**Commissioning-user-data and pxe/uefi templates no longer available**229 NOTE: Please note that not breakage is expected, provided that most people are not
225 In the past, MAAS stored commissioning-user-data and pxe/uefi templates in230 using spaces. For those who we know are, they are using them in a compatible way.
226 /etc/maas/templates. As of MAAS 2.1, these templates are no longer available231 If you experience some type of issue, please contact us.
227 under /etc/maas.232
228233Major new features
229Major new features234------------------
230------------------235
231236**DHCP Relay support**
232**First user configuration journey (UI)**237 The ability to model the usage of DHCP relays in your networking configuration has
233 MAAS now provides the ability for administrators to perform some initial238 been added to MAAS. The allows an administrator to identify which VLANs will be
234 configuration immediately after they log-in into the MAAS UI for the first239 relayed through another VLAN running a MAAS DHCP server. This will configure the
235 time. The configuration includes:240 MAAS DHCP server running on the primary and/or secondary rack controller to include
236241 the shared network statement for that VLAN. Note: MAAS does not run a DHCP relay
237 * Ability to change the name of your MAAS242 service, it is up to the administrator to configure the DHCP relay service on the
238 * Ability to configure options that affect connectivity:243 VLAN and point it at the primary and/or secondary rack controller running the MAAS DHCP.
239 * Option to select an Upstream DNS Server (Optional)244
240 * Option to input different Ubuntu Mirrors (Required)245**Unmanaged subnets**
241 * Option to input an external proxy (Optional)246 In MAAS 2.0, the concept of a “static range” (a specific range of addresses in which
242 * Ability to select additional images to download247 MAAS was allowed to freely allocate addresses from) was removed from MAAS, in favor
243 * Ability to import SSH keys from Launchpad or Github248 of the idea that MAAS managing entire subnets. As such, the only way to tell MAAS to
244249 not allocate certain sections of a subnet is to add a reserved IP range.
245**Device discovery**250
246 MAAS will now automatically listen to the network and report any discovered251 Starting from MAAS 2.2b1, however, MAAS enhances this functionality by introducing a
247 devices. Devices are identified when the MAAS rack observes them252 new concept, called unamanged subnets. Setting a Subnet in MAAS as unmanaged, allows
248 communicating on an attached IPv4 subnet. Discovered devices that do not253 administrators to prevent MAAS from using that subnet for automatic IP assignment.
249 correspond to machines and devices already known to MAAS are shown on the254 In other words, it is a way to tell MAAS that it knows about a subnet but that it
250 dashboard. If a device advertises a hostname using mDNS (such as with avahi255 shouldn’t use it.
251 or Bonjour), MAAS will also present the discovered hostname in the dashboard.256
252 Using the dashboard, a discovery can quickly be added to MAAS as a device or257Other notable changes
253 as a network interface to a machine or device.258---------------------
254259
255**Active subnet mapping**260**MAAS is now responsive**
256 The device discovery feature was designed to operate passively by default.261 For all of those users that use (or would like to use) MAAS WebUI from their Phone
257 While MAAS will not send any traffic on attached networks for discovery262 or Tablet, will now have a better user experience, provided that starting from
258 purposes unless instructed to, there are two ways to instruct MAAS to map263 2.2b1, MAAS is now responsive.
259 your networks:264
260265 Phone or Table users will see a new slick design for those devices. Thanks for
261 * On-demand: administrators can choose to map their subnet using an action266 the Ubuntu Web team for putting the effort into making MAAS look great in smaller
262 on the subnet details page. This action will scan the subnet just once, so267 devices.
263 that observed devices on that subnet may quickly be seen in the dashboard.268
264 This feature is useful after initially installing MAAS, to quickly populate269Known issues and workarounds
265 the list of discoveries with active devices on the network.270----------------------------
266271
267 * Periodically (recommended): by enabling active discovery on a per-subnet272**Cannot add a device from the dashboard**
268 basis, subnets will be scanned at a user-specified interval. (default is273 Please see LP #1659959 for more information.
269 every three hours) This allows MAAS to maintain current information about274
270 which IP addresses are in use on each subnet.275 https://bugs.launchpad.net/maas/+bug/1659959
271
272 Before actively mapping any networks, it is recommended that the ‘nmap’
273 package be installed on each MAAS rack controller. Doing so results in faster
274 scans that require less network traffic. (If ‘nmap’ is not installed, MAAS
275 will resort to scanning using the ‘ping’ utility.)
276
277**Offline deployment and customizable APT repositories**
278 MAAS 2.1 improves its offline deployment capabilities by adding support for
279 Ubuntu derived repositories, PPAs, and custom APT repositories. This enables
280 MAAS to configure deployed machines with the correct APT repositories and
281 keyrings, without being dependent on Internet connectivity.
282
283 * Ubuntu Derived Repositories (from an Ubuntu Mirror)
284 MAAS 2.0 and earlier versions only allowed users to change the Ubuntu
285 archive to use. This was limited to defining the location of an official
286 Ubuntu mirror.
287
288 Derived repositories are based on an Ubuntu mirror, but have had packages
289 added or removed, which requires signing the repository with an unofficial
290 GPG key. MAAS now allow users to provide GPG key fingerprints to support
291 this type of repository. These fingerprints are required in order for
292 the derived repository to be trusted, and will be added to the APT keyring
293 on each machine.
294
295 * PPAs
296 PPAs can now be specified, which will be added to the APT sources on
297 deployed machines. Users may define a GPG key fingerprint in order for
298 the machine to trust the PPA, for cases where the deployed machine cannot
299 access the Ubuntu key server.
300
301 * Custom repositories
302 Custom repositories can be specified to add additional packages to deployed
303 machines. For custom repositories, the distribution and component can be
304 customized as appropriate. For example, users would be able to add the
305 Google Chrome repository, which is as follows:
306
307 deb http://dl.google.com/linux/chrome/deb/ stable main
308
309 In this case, the distribution is “stable”, and the component is “main”.
310 (Multiple components may also be specified.)
311
312**MAAS time sync, NTP services and configuration**
313 MAAS now provides managed NTP services (with ntpd) for all region and rack
314 controllers. This allows MAAS to both keep its own controllers synchronized,
315 and keep deployed machines synchronized well.
316
317 * Region controllers synchronize time externally
318 The MAAS region controller configures the NTP service (ntpd) to keep its
319 time synchronized from one or more external sources. By default, the MAAS
320 region controller uses ntp.ubuntu.com. This can be customized on the
321 settings page.
322
323 * Rack controllers synchronize time from the region controller
324 The rack controllers also configure the NTP service (ntpd). Unlike the
325 region controllers, rack controllers synchronize their time from region
326 controllers, rather than accessing an external time source.
327
328 Rack controllers also configure DHCP with the correct NTP information, so
329 that any machine on the network that obtains a DHCP lease from MAAS will
330 benefit from the enhanced NTP support.
331
332 * Controllers and Machines can synchronize time for external time sources only.
333 MAAS 2.1 also provides the ability to directly use external time sources
334 without using the Rack Controller as a source of time for machines. This
335 means that administrators who already have their own NTP infrastructure,
336 and they don’t want MAAS to provide NTP services, they can tell all
337 machines and controllers to sync their time from the external time source.
338 This can be done by selecting the "External Only" option on the Settings
339 page.
340
341**Advanced networking: static routes**
342 MAAS 2.1 introduces the ability to define static routes. This allows
343 administrators to configure reachability to a subnet from a source subnet.
344 Administrators can define routes on a per-subnet basis to use a particular
345 gateway, using a configured destination and metric.
346
347**Machine networking: bridge configuration**
348 MAAS now supports the creation of bridge interfaces. This support is limited
349 to the ability to create a bridge against a single interface, such as for the
350 purpose of eventually deploying virtual machines or containers on the machine.
351
352 Automatic bridge creation on all configured interfaces can also be performed
353 at allocation time using the API.
354
355**Rescue mode**
356 MAAS 2.1 supports a new state in the machine lifecycle: rescue mode. Rescue
357 mode allows users to boot a Deployed or a Broken using an ephemeral image.
358 (That is, Ubuntu is running in memory on the machine.) This allows
359 administrators to SSH to the machine for maintenance purposes, similar to
360 running Ubuntu from a USB stick.
361
362**Enhanced images user interface**
363 The MAAS images page has been completely redesigned. Improvements include:
364
365 * Supports selecting the image source (maas.io or custom repository).
366 * Now shows the image releases and architectures available in a repository before the import starts.
367 * Now displays detailed status throughout the image import process.
368 * The Boot Images section in the settings page has been removed.
369
370Minor new features
371------------------
372
373**Disk erasing improvements and secure erase**
374 In 1.7 (and later) MAAS introduced the ability to erase disks on machine
375 release. This support was limited to erasing the whole disk and could only
376 be enabled (or disabled) globally.
377
378 Starting from MAAS 2.1, it now supports the ability to request disk erasure
379 on a per-machine basis, at the time the machine is released. In addition, new
380 options for the disk erase mode have been added:
381
382 * Secure erase - If this option is enabled, MAAS will attempt to erase via
383 secure erase (if the storage device support it), otherwise, it will perform
384 a full erase or a quick erase (depending on the options provided).
385
386 * Quick erase - If this option is enabled, MAAS will only erase the beginning
387 and the end of each storage device.
388
389**Machine networking: - SR-IOV auto-tagging, tags UI**
390 MAAS now allows the definition of tags per network interface via the WebUI.
391 Additionally, MAAS also attempts to auto-detect and tag SR-IOV NIC cards.
392
393**Support for low latency kernels**
394 Starting from Ubuntu 16.04 “Xenial” and later, “low latency” kernels available
395 on i386 and amd64 for both GA and HWE kernels. The currently available
396 lowlatency kernels are:
397
398 * hwe-x-lowlatency - For using the Xenial Lowlatency kernel on Trusty
399 * ga-16.04-lowlatency - For using the GA lowlatency kernel on Xenial
400 * hwe-16.04-lowlatency - For using the HWE lowlatency kernel on Xenial.
401
402**Bootloaders are now provided in the image stream**
403 Previously, bootloaders where downloaded on the rack controller from the
404 Ubuntu archives for each architecture MAAS had images for. Starting from MAAS
405 2.1, bootloaders are downloaded with the images. All rack controllers retrieve
406 all supported bootloaders from the region controller. MAAS no longer directly
407 interacts with the Ubuntu archives.
408
409 In the case that bootloaders are missing from the stream, MAAS will attempt
410 to locate previous downloads of the bootloader as well as package installs of
411 the bootloader. Users with image mirrors must ensure image their mirrors
412 include the bootloaders in order to be running the latest supported versions.
413
414**SSH keys can be imported from Launchpad or GitHub**
415 All users will now have the ability to import their SSH public keys from the
416 UI. Users who log-in to MAAS for the first time will be prompted to import
417 their SSH keys, if desired. Alternatively, users can import keys later on
418 their user profile page, or continue to upload keys manually.
419
420Other notable changes
421---------------------
422
423**Better error surfacing for DHCP snippets and package repositories**
424 Both the DHCP Snippets section and the Package Repositories section have been
425 improved in order to show errors in a more user-friendly way.
426
427**Vanilla framework: HTML and CSS updates, smoother look and feel**
428 The HTML templates and CSS frameworks in MAAS have been completely rebuilt
429 with the Vanilla CSS framework. Icons and interactions in MAAS have greatly
430 improved; users will notice smoother, more intuitive interactions with the UI.
431
432 The MAAS team would like to thank the Canonical design and web teams for their
433 contributions in this area.
434
435Issues fixed in this release
436----------------------------
437
438A full list of issues fixed in this release is available in the Launchpad 2.1.0
439Milestone page
440
441 https://launchpad.net/maas/+milestone/2.1.0
442
443
4442.1.0 (RC1)
445===========
446
447Issues fixed in this release
448----------------------------
449
450LP: #1569365 TestPartition.test_get_partition_number_returns_starting_at_2_for_ppc64el fails spuriously
451
452LP: #1598470 "Deployed" and "Deploying" are too similar
453
454LP: #1536354 Users' maas api keys do not have a name
455
456LP: #1631358 [2.1] Incorrect logging message - showing SERVICE_STATE.ON
457
458LP: #1631420 [2.1 UI] Images page "Queued for download" is confusing when selections are not saved
459
460LP: #1631024 [2.1b1] Dashboard column widths for discovered items are wonky
461
462LP: #1631022 [2.1b1] 'Registering existing rack controller'
463
464LP: #1629604 [2.1] Command 'interface link-subnet' does not work
465
466LP: #1628114 [FUJ] SSH input field not indicated for invalid username & the error is incomprehensible
467
468LP: #1629475 [2.1 ipv6] DHCP generation should not fail when address-family conflicts are present
469
470LP: #1603466 [2.0rc2] Commissioning node with gateway_link_v4 set fails.
471
472LP: #1608555 [2.1, 2.0 UI] Error when using dhcp range with pre-existing dynamic reservation
473
474LP: #1632815 [2.1b2] Node failed to be released, because of the following error: 'NoneType' object has no attribute 'addErrback'
475
476LP: #1632395 [2.1, Yakkety, UI] UI error when adding a chassis
477
478LP: #1631079 [2.0, 2.1 UI] Other reserved IP ranges disappear when one of them is deleted on Subnet details page.
479
480LP: #1630667 [2.1b1] MAAS fails to deploy systems with 3+ TB disks
481
482LP: #1630633 [2.1 Yakkety UI] Unable to select nodes
483
484LP: #1629061 [2.0, 2.1] Release and list IPs reserved by another user
485
486LP: #1605476 [2.0rc2] Changing DNSSEC validation does not trigger configuration file update
487
488
4892.1.0 (beta2)
490=============
491
492Issues fixed in this release
493----------------------------
494
495LP: #1630394 [2.1] Bootloaders not downloaded on initial import
496
497LP: #1611949 cryptic error when PXE-boot requires an image not yet imported
498
499LP: #1625676 [2.0, 2.1, UI] MAAS webui allows boot disk to be changed on an already deployed node
500
501LP: #1630591 Rename "Networks" tab to "Subnets"
502
503LP: #1628761 [2.1] netaddr assumes MAC OUI is ascii
504
505LP: #1619262 [2.1, 2.0] Can't input dynamic range on "Enable DHCP" after I deleted the dynamic range
506
507LP: #1630636 [2.1 ipv6] YAML error when maas_url has an IPv6 IP
508
509LP: #1612203 Machine unable to pxe with no-such-image while non-related images are being imported
510
511LP: #1628645 External DHCP detection is broken for a variety of reasons
512
513LP: #1627362 [2.1] expected string or bytes-like object
514
515LP: #1614659 [2.1] When trying to release a node, it gets stuck in releasing if there is no rack controller to power control
516
517LP: #1445941 WebUI needs a filter for deployed OS
518
519
5202.1.0 (beta1)
521=============
522
523Important Announcements
524-----------------------
525
526**New Hardware Enablement Kernels naming convention**
527 Starting from MAAS 2.1 and Ubuntu Xenial, MAAS is adhering to a new naming
528 convention for hardware enablement kernels. On Xenial and above, MAAS will
529 not support HWE kernels with the old naming convention, but it will support
530 HWE kernel channel. For Ubuntu Xenial and Yakkety, currently available
531 kernels in MAAS now are:
532
533 * ga-<version>
534 The GA, or general availability kernel is the kernel which the Ubuntu
535 release shipped with. For example ‘ga-16.04’ is the default 4.4 kernel
536 which shipped on Ubuntu Xenial. The ga kernel contains all bug and security
537 fixes provided by the Ubuntu archives. Deployments which use the ga
538 kernel will stay at the same kernel version through upgrades until the
539 entire release is upgraded with ‘do-release-upgrade.’
540
541 * hwe-<version>
542 The latest Hardware Enablement Kernel currently available in a given
543 Ubuntu release. As new Hardware Enable Kernels are released with new
544 Ubuntu releases the hwe-<version> kernel will be upgraded up until the
545 next LTS. For example hwe-16.04 is currently the 16.04 GA kernel. Once
546 16.10 is released the hwe-16.04 kernel will be upgraded to the 16.10 GA
547 kernel. The kernel will continue to be upgraded up until and including
548 the 18.04 GA kernel.
549
550**New Simplestreams Version - Update your images & your Image repositories**
551 In order to support the new kernels, MAAS has updated the version of the
552 MAAS Image streams. Previously MAAS has been using the Streams Version 2,
553 and as of MAAS 2.1 it will use the MAAS Streams Version 3.
554
555 All users who upgrade from an earlier version of MAAS who have been using
556 the default image mirror, will be automatically migrated to the new version
557 of streams.
558
559 For all those users running a custom mirror, MAAS won’t make the migration
560 automatically. Users are requested to update their image mirror to match the
561 latest images. This image mirror is now available at
562 http://images.maas.io/ephemeral-v3/.
563
564Major new features
565------------------
566
567**Support for Low Latency kernels.**
568 Starting from MAAS 2.1 Beta 1 and Ubuntu Xenial, MAAS will be making available
569 the ability to install low latency kernels. Low latency kernels are available
570 on i386 and amd64 for both GA and HWE kernels. The currently available
571 lowlatency kernels are
572
573 * hwe-x-lowlatency - For using the Xenial Lowlatency kernel on Trusty
574 * ga-16.04-lowlatency - For using the GA lowlatency kernel on Xenial
575 * hwe-16.04-lowlatency - For using the HWE lowlatency kernel on Xenial.
576
577**Bootloaders are now provided in the SimpleStream.**
578 Previously bootloaders where downloaded on the Rack Controller from the Ubuntu
579 archives for each architecture MAAS had images for. Starting with MAAS 2.1
580 Beta 1 bootloaders are downloaded with the images from the SimpleStream. All
581 Rack Controllers retrieve all supported bootloaders from the Region Controller.
582 MAAS no longer directly interacts with the Ubuntu archives.
583
584 In the case that bootloaders are missing from the SimpleStream MAAS will
585 attempt to locate previous downloads of the bootloader as well as package
586 installs of the bootloader.
587
588Minor new features
589------------------
590
591**Active Device Discovery - Map your subnet**
592 To complete MAAS’ Active Discovery, starting from beta 1 MAAS 2.1 now allows
593 the user to ‘Map a subnet’, both automatically at regular intervals, or
594 manually:
595
596 * Manually
597 Administrators can now Map a subnet manually from the Subnet Details page
598 under the ‘Take Action’ option. This will allow administrators to map
599 their subnet. By default, this will use ping but if nmap is installed,
600 it will automatically use nmap.
601
602 * Automatically
603 Administrators can now chose to Map their subnets Automatically at regular
604 intervals. This allows administrators to have MAAS always probe on the
605 network to find new devices. By default, the automatic mechanism is enabled,
606 but no subnet is enabled by default.
607
608 To automatically map each subnet, please refer to the ‘Active Discovery’
609 section on the subnet details page.
610
611Bugs fixed in this release
612--------------------------
613
614LP: #1392763 When changing sync-url via the UI, it's not obvious if syncing starts on its own or not
615LP: #1508975 maas deletes products/images locally that do not exist remotely
616LP: #1481285 1.8 Boot images tick boxes should be orange
617LP: #1629402 [2.1] please cleanup log format for new interface monitoring state
618LP: #1629011 Missing punctuation in disk erasing options
619LP: #1629008 Missing preposition sentence disk erasing options
620LP: #1629004 Typo: "futher"
621LP: #1628052 [2.1, FUJ] Help text in input fields is missing 'e.g'
622LP: #1459888 Too much spacing between checkboxes/releases in the 'Images'
623LP: #1627039 [2.1] Discovery object and view doesn't set a flag when the device is the DHCP server
624LP: #1627038 [2.1] SSH key import should use the specified HTTP proxy if one exists
625LP: #1625714 DHCP services on rack controllers only publishes external NTP servers
626LP: #1625711 Peer selection for NTP servers on region controllers is broken
627LP: #1593388 Changing a boot source URL while images are being download doesn't interrupt current downloads to use the new URL
628LP: #1623878 [2.1] mDNS label contains disallowed characters
629LP: #1394792 MAAS could do a better job of reporting image download status
630LP: #1623110 [2.1] Networks page doesn't load fully on yakkety
631LP: #1629896 [2.1] Deployment defaulting to hwe-16.04 instead of ga-16.04
632LP: #1629491 [2.1] After upgrade to latest trunk (pre-beta1) and after updating images, machines fail to pxe boot due to missing hwe-x kernel
633LP: #1629142 2.1 DHCP reported as enabled but not running
634LP: #1629045 [2.1] When failing to download images, MAAS leaves old files in the fs
635LP: #1629022 [2.1, UI] Broken 'images page' link
636LP: #1629019 [2.1 ipv6] log_host needs to be ipv6 when booting ipv6-only
637LP: #1628298 [2.1 UI] SSH keys not listed on user page and no button to add keys
638LP: #1628213 [2.1 yakkety UI] First user journey doesn't display and can't be skipped
639LP: #1627363 [2.1] 'NoneType' object has no attribute 'external_dhcp'
640LP: #1627019 [2.1, rev5385] NTP services on region/rack keep showing as ON/OFF constantly
641LP: #1623634 [2.1, UX] Trying to cancel an image import from the new Images page results on it not being cancelled on the backend.
642LP: #1589640 [2.0b6] MAAS should validate a boot source path actually provides images
643
644Known issues and workarounds
645Trusty images not available on fresh installs
646The MAAS Images V3 streams do not yet have Ubuntu Trusty available. These are currently being built to be made available.
647
648User’s upgrading from a previous version of MAAS that had originally imported Trusty images will continue to be able to deploy Trusty. Once the images are made available, MAAS will automatically update (if so configured).
649
650LP: #1627362 - expected string or bytes-like object
651In some situations after an upgrade, accessing the dashboard might yield error above. This is a difficult to easily reproduce issue. If you come across it please contact a MAAS developer immediately.
652
653https://bugs.launchpad.net/maas/+bug/1627362
654
655
6562.1.0 (alpha4)
657==============
658
659Important Announcements
660-----------------------
661
662**MAAS Landing page - Let’s see what’s on your network!**
663 As of MAAS 2.1 alpha 4, administrative users have a new landing page. Once
664 administrators log in they will be redirected to the MAAS dashboard.
665
666 This dashboard is where administrators will have some basic information
667 and the ability to see the observed and discovered devices.
668
669Major new features
670------------------
671
672**Device discovery UI**
673 MAAS 2.1 alpha 4 introduces the MAAS Device Discovery UI. As part of the
674 dashboard, administrative users will be able to see all the observed and
675 discovered devices.
676
677 MAAS will also allow administrator to properly register those discoveries
678 as MAAS known devices, and be able to select the IP address allocation for
679 them, if MAAS is to manage them.
680
681**Active Device Discovery - map your network (API only)**
682 As of MAAS 2.1 alpha 2, networks attached to rack controllers are observed
683 for device discovery purposes. MAAS listens to ARP requests and replies to
684 determine which IPv4 addresses are in-use on attached networks, and will
685 resolve their hostnames if possible (when advertised using the mDNS
686 protocol).
687
688 As of MAAS 2.1 alpha 4, MAAS now has the ability to actively probe subnets.
689 This allows MAAS to keep its knowledge of which devices are on the network
690 up-to-date, and discover “quiet” devices that MAAS would not be able to
691 observe passively. If ‘nmap’ is installed, MAAS will prefer to use it for
692 scanning (since the scan is faster and will transmit fewer packets). If
693 ‘nmap’ is not installed, MAAS will fall back to using parallel ‘ping’ requests.
694
695 Scanning is available using the API at the following URL:
696
697 POST /MAAS/api/2.0/discovery/?op=scan
698
699 To scan using the command-line interface, you can use the following syntax:
700
701 maas <profile> discoveries scan [cidr=<cidr> [cidr=<cidr>....] [force=true] [always_use_ping=true] [slow=true] [threads=<num-concurrent-scanning-threads>]
702
703 If you want to scan particular subnets, specify one or more using the cidr
704 option. For example, ‘cidr=192.168.0.0/24’ would scan for neighbours on
705 192.168.0.0/24 on any rack controller configured with an address in that
706 network. The cidr option can be specified multiple times, such as
707 ‘cidr=192.168.0.0/24 cidr=192.168.1.0/24’.
708
709 If you want to scan all networks attached to all rack controllers, you must
710 specify the “force=true” option. (This is not allowed by default, since some
711 network operators do not allow active neighbour scanning.)
712
713 If your organization has a policy against using ‘nmap’, you will want to use
714 the ‘always_use_ping’ option, in case ‘nmap’ has been installed on a rack
715 controller by mistake.
716
717 If quickly scanning your network using ‘nmap’ may raise alerts with an
718 intrusion detection system, you can use the ‘slow=true’ argument to slow
719 down scanning. This option has no effect when using ‘ping’, since scanning
720 using ‘ping’ is already slower. If using ‘ping’, scans can be slowed down or
721 sped up, if desired, by using the threads option, such as by specifying
722 “threads=2”. Using the threads option has less impact on nmap threads, which
723 use a single thread to scan an entire network.
724
725Minor new features
726------------------
727
728**First User Journey - Import your SSH keys from Launchpad or Github**
729 The ability to import SSH keys from Launchpad or Github was introduced in
730 MAAS alpha 3. As of alpha 4, you can do so via the Front-end.
731
732 All users will now have the ability to import their SSH keys from the UI.
733 All users who log-in to MAAS for the first time will be prompted to import
734 their SSH keys, if they so desire. Alternatively, users can do so via their
735 user profile page.
736
737Other notable changes
738---------------------
739
740**NTP Improvements - MAAS NTP vs External**
741 MAAS now provides the ability to decide between using solely an external NTP
742 server or a MAAS run NTP server. MAAS run NTP services is the preferred
743 configuration, but, in order to maintain backwards compatibility,
744 administrators can chose to use external NTP organizations. This will only
745 be suitable for scenarios where administrators have restricted communication
746 between their machines and the MAAS rack controllers.
747
748Bugs fixed in this release
749--------------------------
750
751#1625668 [2.1] When trying to add SSH keys for a GH user that doesn't exist, there's no feedback
752#1626748 [2.1] maas admin discoveries scan API output shows rack controller ids instead of names
753#1626722 [2.1] DHPv6 addresses do not have netmasks: do not create /128 subnets for them
754#1625812 [2.1] Error message is not user friendly
755#1625689 [2.1] default gateway cannot be set to fe80::/64 via web ui
756#1626727 [2.1] You can define distribution or component for 'ubuntu archive' or 'ubuntu extra architectures'
757#1625671 [2.1] Need better error message when trying to add SSH keys for LP/GH user that doesn't exist
758#1623994 [2.1] DHCP configuration breaks when NTP servers are unresolvable.
759#1626669 [2.1] Can't logout, create users and do other actions
760#1625674 [2.1] No feedback when there are no keys to import from LP/GH
761
762Known issues and workarounds
763----------------------------
764
765**LP: #1623634: Unable to cancel the image import.**
766 When downloading images, MAAS will fail to cancel the import of all or
767 any of the images being imported. MAAS will first download all the images
768 before the user is able to remove them.
769
770 See bug `1617596`_ for more information.
771
772.. _1617596:
773 http://launchpad.net/bugs/1617596
774
775**LP: 1624693: Rack failed to run/register on fresh install**
776 The MAAS Rack Controller is unable to register after a fresh install due to
777 being unable to parse network interfaces. After manual restart of maas-rackd,
778 the rack was successfully registered.
779
780 See bug `1624693`_ for more information.
781
782.. _1624693:
783 http://launchpad.net/bugs/1624693
784
785
7862.1.0 (alpha 3)
787===============
788
789Major new features
790------------------
791
792**First User Configuration Journey (UI)**
793 Starting from alpha 3, MAAS now provides the ability for administrators to
794 perform some initial configuration when they log-in into the UI for the
795 first time. The configuration includes:
796
797 * Ability to change the name of your MAAS.
798 * Ability to configure options that affect connectivity:
799 * Option to select an Upstream DNS Server (Optional)
800 * Option to input different Ubuntu Mirrors (Required).
801 * Option to input an external proxy (Optional)
802 * Ability to select additional images to download.
803
804**MAAS time sync, NTP services and configuration**
805 Starting from alpha 3, MAAS now provides managed NTP services (with ntpd) in
806 both the Region and Rack controller. This allows MAAS to not only keep its
807 own controllers time synced, but the deployed machines as well.
808
809 * Region Controller time syncs from external source
810 The Region Controller configures the NTP service (ntpd) to keep its time
811 sync from one or various external sources. By default, the MAAS region
812 controller syncs its time from ntp.ubuntu.com. The default can be changed
813 by one or multiple external NTP servers from the Settings page, under the
814 Network Configuration section.
815
816 * Rack Controller time syncs from the Region Controller
817 The Rack Controllers also configure the NTP service (ntpd). Unlike the
818 Region Controllers, the Rack Controllers sync their time from the Region
819 Controller(s) instead of accessing directly to the external time source.
820
821 Additionally, the Rack Controllers also configure DHCP with the correct
822 NTP information, so that any machine on the network that DHCP’s from MAAS
823 can benefit of the NTP configuration.
824
825 * Machines configured to sync time from external NTP (transitional).
826 MAAS also configures deployed machines with NTP configuration. This is done
827 by cloud-init via MAAS vendor data.
828
829 During the transition period, MAAS will configure machines to use the
830 external time source (configured under the Settings page). Note that this
831 is transitional, as in future releases the machines will default to the
832 Rack Controller for NTP.
833
834**MAAS Images page re-written in AngularJS**
835 Continuing the transition from YUI to AngularJS, the MAAS Images page has now
836 been completely redesigned and reimplemented in AngularJS. Improvements to
837 the Image page include:
838
839 * Ability to select the image source (maas.io or custom repository).
840 Show the releases and architectures available in the custom repository
841 before the import starts.
842
843 * Ability to view the status of the image in the import process.
844 Show percentage based progress on the image import.
845
846 Additionally, the ‘Boot Images’ section in the Settings page has been removed.
847
848**Minor new features**
849
850 * (Backend) Ability to import SSH keys from Launchpad and Github
851 MAAS now provides the ability to import SSH keys for a user from Launchpad
852 and Github. This is currently supported via the API or via the user
853 creation process. Users can import their SSH keys when creating their user
854 for Launchpad or Github:
855
856 maas createadmin --ssh-import lp:<user-id>
857 maas createadmin --ssh-import gh:<user-id>
858
859 Or via the API based CLI with:
860
861 maas <maas username> sshkeys import protocol=lp auth_id=<user-id>
862 maas <maas username> sshkeys import protocol=gh auth_id=<user-id>
863
864 * MAAS now provides cloud-init vendor data for NTP
865 As of MAAS 2.1 alpha 3, MAAS now provide cloud-init vendor data. Vendor
866 data allows cloud-init to do some initial configurations on the system
867 before user data is being run. As of 2.1, MAAS will provide NTP
868 configuration which is delivered via vendor data. Note that this is
869 dependent on the latest version of cloud-init (0.7.8-1-g3705bb5-0ubuntu1).
870 This is currently available in Yakkety and is in progress to be available
871 in Xenial.
872
873 * Add ability to enable or disable network discovery
874 MAAS now provides the ability to disable the discovery of networks and
875 devices. By default, discovery is enabled. This setting can be changed
876 under the Settings page, or via the MAAS CLI and API using the
877 “network_discovery” configuration key. (Accepted values are “enabled” and
878 “disabled”.) When discovery is disabled, mDNS records and ARP requests will
879 no longer be stored in MAAS, and the listening processes on each rack
880 controller will be shut down.
881
882Other notable changes
883---------------------
884
885**HTML template updates**
886 In MAAS 2.1 alpha 3, the HTML templates and SCSS framework has been
887 completely rebuilt and using the current Vanilla CSS framework as its base.
888 This includes all design patterns and utility classes which would be expected
889 of a powerful frontend GUI framework.
890
891 HTML and CSS templates have been completely redesigned to use the new
892 “Vanilla” styles. This brings a refreshed look of icons and interactions that
893 benefit the UI. While users may not see much difference, it has been
894 completely re-implemented in the backend.
895
896 Thank you the design and web teams for their contribution to MAAS.
897
898Known issues and workarounds
899----------------------------
900
901**Unable to cancel the image import.**
902 When downloading images, MAAS will fail to cancel the import of all or any of
903 the images being imported. MAAS will first download all the images before the
904 user is able to remove them.
905
906 See bug `1623634`_ for more information.
907
908.. _1623634:
909 http://launchpad.net/bugs/1623634
910
911**Unable to enable DHCP if NTP server is unresolvable.**
912 If the NTP server(s) are unresolvable, DHCP will fail to enable. This is
913 because DHCP doesn’t accept DNS names for DHCP’s NTP configuration, and as
914 such, MAAS tries to resolve the domain before it is able to set it in the
915 configuration.
916
917 See bug `1623994`_ for more information.
918
919.. _1623994:
920 http://launchpad.net/bugs/1623994
921
922**Rack failed to run/register on fresh install**
923 The MAAS Rack Controller is unable to register after a fresh install due to
924 being unable to parse network interfaces. After manual restart of maas-rackd,
925 the rack was successfully registered.
926
927 See bug `1624693`_ for more information.
928
929.. _1624693:
930 http://launchpad.net/bugs/1624693
931
932
9332.1.0 (alpha2)
934==============
935
936Important Announcements
937-----------------------
938
939**commissioning-user-data and pxe/uefi templates no longer available**
940 In the past, MAAS stored commissioning-user-data and pxe/uefi templates
941 in `/etc/maas/templates`. As of MAAS 2.1.0 Alpha 2, these templates are
942 no longer available under /etc/maas.
943
944Major New Features
945------------------
946
947**(Backend) Device Discovery**
948 As of MAAS 2.1.0 Alpha 2, MAAS will automatically listen to the network
949 and report any observed devices.
950
951 * New discovery API can be used to get information about what MAAS has
952 discovered. This API can be used from the command line interface as
953 follows:
954
955 * maas <profile> discoveries read - Lists all MAC, IP bindings
956 (discoveries) that MAAS has seen, and attempts to correlate those
957 discoveries with hostnames advertised by mDNS.
958 * maas <profile> discoveries by-unknown-mac - Lists all discoveries,
959 but filters out discoveries where the MAC belongs to an interface
960 known to MAAS.
961 * maas <profile> discoveries by-unknown-ip - Lists all discoveries,
962 but filters out discoveries where the IP address is known to MAAS
963 (such as reserved by a user, or assigned to a node).
964 * maas <profile> discoveries by-unknown-ip-and-mac - Lists all discoveries,
965 but applies the filters for both unknown MACs and unknown IP addresses.
966
967 * Note that the discovery API is currently read-only. It brings together
968 data from several different sources, including observed network neighbours,
969 resolved mDNS hostnames, and controller interface information.
970 * New maas-rack commands have been added, which are called internally by
971 MAAS in order to gather information about observed devices on the network.
972 MAAS administrators should not normally need to use these commands
973 (although they could be helpful for supportability).
974
975 * maas-rack observe-mdns [--verbose]
976 * sudo maas-rack observe-arp <interface> [--verbose]
977
978 * Note: this feature intentionally does not place any network devices into
979 “promiscuous mode”, or actively probe. MAAS controllers listen to ARP
980 traffic they would have received anyway. Therefore, if a MAAS admin wants
981 to keep MAAS’s knowledge of the network up-to-date, a command such as one
982 of the following could be run periodically (such as from a script invoked
983 by a crontab); MAAS will listen to any ARP replies and update its knowledge
984 of the network:
985
986 * To actively probe one or more subnet CIDRs on an interface:
987 sudo nmap -e <interface> -sn -n -oX - -PR <cidr> [cidr2] [...]
988
989 * To actively probe for a single IP address from a particular interface
990 (regardless of whether or not the IP address is routable on-link on that
991 interface):
992 ping -r -I <interface> <ip-address> -c 3 -w 1 -i 0.2 -D -O
993
994 * MAAS now depends on the avahi-utils and tcpdump packages in order to provide
995 this functionality. (Before MAAS 2.1.0 is released, the MAAS team will consider
996 making these optional dependencies, in case MAAS administrators do not want
997 to run the avahi daemon, or require that tcpdump not be installed.)
998
999Important Bugs Fixed in this Release
1000------------------------------------
1001
1002**Bug #1617596: [2.1] Rack(relay) Controller is rejected after upgrade to 2.1**
1003 Fixes a regression regarding registering rack controllers which have bonds
1004 interfaces which are not currently bonding any interfaces.
1005
1006 See bug `1617596`_ for more information.
1007
1008.. _1617596:
1009 http://launchpad.net/bugs/1617596
1010
1011**Bug #1615618: [2.1] 'SERVICE_STATE' object has no attribute 'getStatusInfo'**
1012 Fixes a regression in the service tracking mechanism, where it would fail to
1013 successfully track the status of some services.
1014
1015 See bug `1615618`_ for more information.
1016
1017.. _1615618:
1018 http://launchpad.net/bugs/1615618
1019
1020
1021Other Notable Changes
1022---------------------
1023
1024**WebUI - Better error surfacing for DHCP snippets and Package Repositories**
1025 Both the DHCP Snippets Section and the Package Repositories section have now
1026 been improvement and will surface better errors.
1027
1028Ongoing Work
1029------------
1030
1031 * First User Journery - WebUI
1032 * Device Discovery - WebUI
1033 * Improved IPv6 Support
1034 * MAAS Services - NTP
1035 * MAAS Image Consolidation
1036 * Support for HWE Rolling Kernels
1037
1038Known Issues and Workarounds
1039----------------------------
1040
1041**Configuring APT key’s in ephemeral environment (overlayfs) fails.**
1042 A regression preventing cloud-init from configuring APT's key in a
1043 ephemeral environment, prevents MAAS from enlisting, commissioning and
1044 deploying `only` when using Derived Repositories or Custom Mirrors that
1045 require a new key.
1046
1047 See bug `1618572`_ for more information.
1048
1049.. _1618572:
1050 http://launchpad.net/bugs/1618572
1051276
=== modified file 'docs/conf.py'
--- docs/conf.py 2016-03-28 13:54:47 +0000
+++ docs/conf.py 2017-02-28 15:11:34 +0000
@@ -24,7 +24,8 @@
24from pytz import UTC24from pytz import UTC
2525
26# Configure MAAS's settings.26# Configure MAAS's settings.
27environ.setdefault("DJANGO_SETTINGS_MODULE", "maas.settings")27environ.setdefault(
28 "DJANGO_SETTINGS_MODULE", "maasserver.djangosettings.settings")
2829
29# If extensions (or modules to document with autodoc) are in another directory,30# If extensions (or modules to document with autodoc) are in another directory,
30# add these directories to sys.path here. If the directory is relative to the31# add these directories to sys.path here. If the directory is relative to the
3132
=== removed file 'docs/configure.rst'
--- docs/configure.rst 2016-03-28 13:54:47 +0000
+++ docs/configure.rst 1970-01-01 00:00:00 +0000
@@ -1,135 +0,0 @@
1Additional Configuration
2========================
3
4
5Choosing a series to install
6----------------------------
7
8You may have some specific reason to choose a particular version of Ubuntu
9to install on your nodes, perhaps based around package availability,
10hardware support or some other reason.
11
12It is possible to choose a specific series from those available in a
13number of ways.
14
15From the user interface
16^^^^^^^^^^^^^^^^^^^^^^^
17
18The web-based user interface makes it easy to select which Ubuntu series you
19wish to install on an individual node. When either adding a node
20manually, or on the node page when the node has been automatically
21discovered but before it is accepted, there is a drop down menu to select
22the version of Ubuntu you wish to install.
23
24.. image:: media/series.*
25
26The menu will always list all the currently available series according
27to which boot images are available.
28
29Using the maas command
30^^^^^^^^^^^^^^^^^^^^^^
31
32It is also possible to select a series using the maas command. This
33can be done on a per node basis with::
34
35 $ maas <profile> machine update <system_id> distro_series="<value>"
36
37Where the string contains one of the valid, available distro series (e.g.
38"trusty") or is empty for the default value.
39
40
41.. _preseed:
42
43Altering the Preseed file
44-------------------------
45
46.. warning::
47 Do not try to alter the preseed files if you don't have a good
48 understanding of what you are doing. Altering the installed version
49 of Ubuntu can prevent MAAS from working as intended, and may have
50 security and stability consequences.
51
52When MAAS commissions a node it installs a version of Ubuntu. The
53installation is performed using a 'preseed' file, which is
54effectively a list of answers to the questions you would get were
55you to run the installer manually.
56The preseed file used by MAAS is carefully made so that the
57target node can be brought up and do all the jobs expected of it.
58However, in exceptional circumstances, you may wish to alter the
59pressed file to work around some issue.
60There are actually two preseed files, stored here::
61
62 /etc/maas/preseeds/curtin_userdata
63
64The preseed file is used to customize the installation of a machine
65based on different options. Users can set early_commands or late_commands
66according to what they need, or customize it based on nodes, architecture
67and other variables. The preseeds offers a concept that will allow users
68to configure it as required. This is based on a node's ::
69
70 node.system_id
71 node.hostname
72 node.domain
73 node.owner
74 node.bios_boot_method
75 node.osystem
76 node.distro_series
77 node.architecture
78 node.min_hwe_kernel
79 node.hwe_kernel
80 node.zone
81 node.cpu_count
82 node.memory
83
84You can configure the preseed to add late_commands. For example,
85you can configure the preseed to install a package based on the hostname,
86and after the installation has been completed::
87
88 late_commands:
89 {{if node.hostname == 'node01'}}
90 package_install: ["curtin", "in-target", "--", "apt-get", "-y", "install", "mysql"]
91 {{endif}}
92
93
94Installing Additional Rack Controllers
95--------------------------------------
96
97In an environment comprising large numbers of nodes, it is likely that you will
98want to organise the nodes on a more distributed basis. The standard install of
99the MAAS region controller includes a rack controller, but it is
100possible to add additional rack controllers to the configuration, as
101shown in the diagram below:
102
103.. image:: media/orientation_architecture-diagram.*
104
105Each rack controller will need to run on a separate Ubuntu server.
106Installing and configuring the software is straightforward though::
107
108 $ sudo apt-get install maas-rack-controller
109
110This meta-package will install all the basic requirements of the system.
111
112
113Configuring the Rack Controller
114^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
115
116Follow the instructions at :doc:`rack-configuration` to configure
117additional Rack Controllers.
118
119
120Client-side DNS configuration
121-----------------------------
122
123When using a third party tool such as ``juju`` it will need to be able to
124resolve the hostnames that the MAAS API returns to it. In order for this to
125happen, *client-side DNS* must be configured to point to MAAS's DNS
126server. Generally speaking, this is a simple case of adding the following
127line to the ``/etc/resolv.conf`` file on your client host::
128
129 nameserver <IP OF MAAS DNS HOST>
130
131replacing the <IP OF MAAS DNS HOST> with the actual IP address of the host
132running the MAAS DNS server.
133
134However, for hosts using the ``resolvconf`` package, please read its
135documentation for more information.
1360
=== added file 'docs/development/notifications.rst'
--- docs/development/notifications.rst 1970-01-01 00:00:00 +0000
+++ docs/development/notifications.rst 2017-02-28 15:11:34 +0000
@@ -0,0 +1,198 @@
1Notifications
2=============
3
4When you need to inform or warn users, administrators, or a specific
5user about something that has happened or is happening, consider using
6notifications. These can be created by code running in the region or via
7the Web API if you're an administrator.
8
9Tell all users that MAAS is on fire:
10
11 >>> from maasserver.models.notification import Notification
12
13 >>> Notification.objects.create_error_for_users("MAAS is on fire.")
14 <Notification ERROR user=None users=True admins=True 'MAAS is ...>
15
16Warn all admins that MAAS is taking on water:
17
18 >>> Notification.objects.create_warning_for_admins(
19 ... "MAAS is taking on water.")
20 <Notification WARNING user=None users=False admins=True ...>
21
22Tell a specific user that they've won the lottery:
23
24 >>> from maasserver.testing.factory import factory
25 >>> user = factory.make_User()
26
27 >>> Notification.objects.create_success_for_user(
28 ... "Congratulations {name}! You've won €10 in the lottery!",
29 ... user=user, context={"name": user.username})
30 <Notification SUCCESS user='...' users=False admins=False ...>
31
32
33Context
34-------
35
36A notification's ``context`` is a dict — saved into the database as JSON
37— that gets interpolated into the message (new-style, not %-based).
38What's its purpose?
39
40 >>> Notification.objects.create_warning_for_admins(
41 ... "Disk space is low; only {amount:0.2f} GiB remaining.",
42 ... context={"amount": 1.3}, ident="disk-space-warning")
43 <Notification WARNING user=None users=False admins=True 'Disk space ...'>
44
45Later:
46
47 >>> ds_warning = Notification.objects.get(ident="disk-space-warning")
48 >>> ds_warning.context = {"amount": 0.8}
49 >>> ds_warning.save()
50
51This will update the message, live, in the browser, but will not show it
52again to people that have dismissed it already.
53
54This could be done by just changing the message! True, but the context
55does give a convenient location for context of all kinds; it does not
56have to be consumed by the message:
57
58 >>> ii_warning = Notification.objects.create_warning_for_users(
59 ... "Image import from {url} has failed.",
60 ... ident="import:http://foobar.example.com/",
61 ... context={
62 ... "url": "http://foobar.example.com/",
63 ... "failures": ["2016-02-14 13:58:37"],
64 ... })
65
66Later, after another failure:
67
68 >>> ii_warning = Notification.objects.get(
69 ... ident="import:http://foobar.example.com/")
70 >>> ii_warning.context["failures"].append("2016-02-14 16:58:02")
71 >>> ii_warning.context["count"] = len(ii_warning.context["failures"])
72 >>> ii_warning.context["hours"] = 3 # Calculate this.
73 >>> ii_warning.message = (
74 ... "Image import from {url} has failed {count} times "
75 ... "in the last {hours} hours.")
76 >>> ii_warning.save()
77 >>> ii_warning.render()
78 'Image import from http://foobar.example.com/ has
79 failed 2 times in the last 3 hours.'
80
81
82Rendering and HTML
83------------------
84
85As you can see, rendering the message and context should be done with
86the ``render`` method:
87
88 >>> ds_warning.render()
89 'Disk space is low; only 0.80 GiB remaining.'
90
91Why?
92
93Notifications are primarily for a browser environment and so some
94limited amount of HTML is tolerated — it's sanitised by AngularJS in the
95UI so nothing fancy will get through.
96
97The ``render`` method knows about this and allows HTML content in the
98*message* through, but escapes the *context*:
99
100 >>> ds_warning.message = "Hello <em>{name}</em>!"
101 >>> ds_warning.context = {"name": "<script>nasty();</script>"}
102 >>> ds_warning.render()
103 'Hello <em>&lt;script&gt;nasty();&lt;/script&gt;</em>!'
104
105
106Creating notifications
107----------------------
108
109There are many methods to create notifications
110
111
112For a specific user:
113^^^^^^^^^^^^^^^^^^^^
114
115 >>> Notification.objects.create_error_for_user("abc", user)
116 <Notification ERROR user='...' users=False admins=False 'abc'>
117 >>> Notification.objects.create_warning_for_user("abc", user)
118 <Notification WARNING user='...' users=False admins=False 'abc'>
119 >>> Notification.objects.create_success_for_user("abc", user)
120 <Notification SUCCESS user='...' users=False admins=False 'abc'>
121 >>> Notification.objects.create_info_for_user("abc", user)
122 <Notification INFO user='...' users=False admins=False 'abc'>
123
124
125For all users:
126^^^^^^^^^^^^^^
127
128 >>> Notification.objects.create_error_for_users("abc")
129 <Notification ERROR user=None users=True admins=True 'abc'>
130 >>> Notification.objects.create_warning_for_users("abc")
131 <Notification WARNING user=None users=True admins=True 'abc'>
132 >>> Notification.objects.create_success_for_users("abc")
133 <Notification SUCCESS user=None users=True admins=True 'abc'>
134 >>> Notification.objects.create_info_for_users("abc")
135 <Notification INFO user=None users=True admins=True 'abc'>
136
137These methods create notifications that are visible to both users and
138admins:
139
140 >>> notification = Notification.objects.create_info_for_users("abc")
141 >>> notification.users
142 True
143 >>> notification.admins
144 True
145
146
147For administrators:
148^^^^^^^^^^^^^^^^^^^
149
150 >>> Notification.objects.create_error_for_admins("abc")
151 <Notification ERROR user=None users=False admins=True 'abc'>
152 >>> Notification.objects.create_warning_for_admins("abc")
153 <Notification WARNING user=None users=False admins=True 'abc'>
154 >>> Notification.objects.create_success_for_admins("abc")
155 <Notification SUCCESS user=None users=False admins=True 'abc'>
156 >>> Notification.objects.create_info_for_admins("abc")
157 <Notification INFO user=None users=False admins=True 'abc'>
158
159
160For users and **not** administrators:
161^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
162
163Using the test factory, or by creating a ``Notification`` directly, it's
164possible to create a notification that's only for users and not for
165admins:
166
167 >>> notification = factory.make_Notification(users=True, admins=False)
168 >>> admin = factory.make_admin()
169 >>> notification.is_relevant_to(admin)
170 False
171
172This isn't explicitly catered for in the model API. If you find a need
173for this use case, adapt ``NotificationManager`` to accommodate it.
174
175
176Finding notifications
177---------------------
178
179Finding notifications that are both:
180
181- relevant to a particular user, and
182
183- have not been dismissed by that user
184
185should be done with ``find_for_user``:
186
187 >>> Notification.objects.find_for_user(user)
188 [<Notification ...]
189
190
191Well-formed messages
192--------------------
193
194If you use HTML, don't forget to close tags and otherwise respect all
195the proper rules of HTML.
196
197Finally, punctuation. Don't forget to end notification messages with a
198full-stop or exclamation mark!
0199
=== removed file 'docs/devices.rst'
--- docs/devices.rst 2015-05-20 14:56:13 +0000
+++ docs/devices.rst 1970-01-01 00:00:00 +0000
@@ -1,28 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _devices:
4
5Devices
6========
7
8.. note::
9
10 This feature is available in MAAS versions 1.8 and above.
11 If you're writing a client application, you can check if MAAS
12 supports this feature via the web API; see the documentation for the
13 ``devices-management`` capability :ref:`here<cap-devices-management>`.
14
15In addition to nodes, a MAAS cluster controller can manage *devices*. Devices
16represent non-installable machines. This feature can be used to track
17routers, virtual machines, etc. within MAAS.
18
19Same as nodes, devices can be assigned IP addresses and DNS names. IP
20addresses can be fixed, in which case the device should be configured to use
21the defined IP address, or dynamic, in which case the device can obtain an
22IP address from the MAAS DHCP server and will receive the configured IP
23address.
24
25Devices can also be assigned a parent node and will be automatically deleted
26(along with all the IP address reservations associated with it) when the
27parent node is deleted or released. This is designed to model and manage the
28virtual machines or containers running on a MAAS-deployed node.
29\ No newline at end of file0\ No newline at end of file
301
=== removed file 'docs/dhcpsnippets.rst'
--- docs/dhcpsnippets.rst 2016-03-28 16:52:32 +0000
+++ docs/dhcpsnippets.rst 1970-01-01 00:00:00 +0000
@@ -1,111 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _dhcpsnippets:
4
5=========================
6DHCP Snippets
7=========================
8
9.. note::
10
11 This feature is available in MAAS versions 2.0 and above. Modifications made
12 directly to dhcpd.conf.template or dhcpd6.conf.template are no longer
13 supported.
14
15MAAS allows customizing dhcpd.conf and dhcpd6.conf through the use of DHCP
16snippets. DHCP snippets are user defined dhcpd.conf configuration options which
17are inserted into /var/lib/maas/dhcpd.conf and /var/lib/maas/dhcpd6.conf by
18MAAS. Custom dhcpd.conf configuration options can be inserted either globally,
19on a subnet, or on a node. For information about dhcpd.conf options refer to
20the dhcpd.conf man or info page.
21
22Creating a DHCP Snippet
23-----------------------
24
25Administrators can create DHCP Snippets over the API using the following command:::
26
27 $ maas <profile> dhcpsnippets create name=<DHCP Snippet Name> value=<valid DHCP configuration options>
28
29The name of the DHCP snippet will be added to /var/lib/maas/dhcpd.conf and
30/var/lib/maas/dhcpd6.conf as a comment above the value. Optionally a
31description can also be specified as such::
32
33 $ maas <profile> dhcpsnippets create name=<DHCP Snippet Name> value=<valid DHCP configuration options> description=<DHCP Snippet description>
34
35Global DHCP Snippets
36^^^^^^^^^^^^^^^^^^^^
37
38If no subnet or node is specified, the DHCP Snippet will be considered global.
39A global DHCP Snippet is a configuration option which is applied to all VLANS,
40subnets, and nodes. The global_snippet flag can also be used to force a DHCP
41Snippet to be global::
42
43 $ maas <profile> dhcpsnippets create name=<DHCP Snippet Name> value=<valid DHCP configuration options> global_snippet=true
44
45Subnet DHCP Snippets
46^^^^^^^^^^^^^^^^^^^^
47
48DHCP Snippets can be applied only to a specific subnet as follows::
49
50 $ maas <profile> dhcpsnippets create name=<DHCP Snippet Name> value=<valid DHCP configuration options> subnet=<subnet id or cidr>
51
52Node DHCP Snippets
53^^^^^^^^^^^^^^^^^^
54
55DHCP Snippets can be applied only to a specific node. When a node is specified,
56each snippet will be added to the host entry for each interface. A node can be
57specified as follows::
58
59 $ maas <profile> dhcpsnippets create name=<DHCP Snippet Name> value=<valid DHCP configuration options> node=<system_id or hostname>
60
61DHCP Snippet Enablement
62^^^^^^^^^^^^^^^^^^^^^^^
63
64DHCP Snippets can be turned off by using the enabled flag option as follows::
65
66 $ maas <profile> dhcpsnippets create name=<DHCP Snippet Name> value=<valid DHCP configuration options> enabled=false
67
68Listing DHCP Snippets
69---------------------
70
71To list all DHCP Snippets use the following command::
72
73 $ maas <profile> dhcpsnippets read
74
75To list a particular DHCP Snippet use the following command.::
76
77 $ maas <profile> dhcpsnippet read <DHCP Snippet id or name>
78
79Updating a DHCP Snippet
80-----------------------
81
82Administrators can update the DHCP Snippet attributes using the following
83command::
84
85 $ maas <profile> dhcpsnippet update <DHCP Snippet id or name> <options>
86
87DHCP Snippet Value History
88--------------------------
89
90MAAS stores the complete history of changes made to the DHCP Snippet's
91value. MAAS only uses the latest revision of the value when writing
92dhcpd.conf.
93
94Reverting a Value
95^^^^^^^^^^^^^^^^^
96
97.. warning::
98 Reverting a value will result in all later versions being deleted!
99
100The revert operation allows the user to revert to a previous value. When
101specifying what to revert to the user can either provide the value id or a
102negative number representing how many revivisions to go back::
103
104 $ maas <profile> dhcpsnippet revert <DHCP Snippet id or name> to=<value id or negative number>
105
106Deleting a DHCP Snippet
107-----------------------
108
109Administrators can delete a DHCP Snippet using the following command::
110
111 $ maas <profile> dhcpsnippet delete <DHCP Snippet id or name>
1120
=== removed file 'docs/getting-help.rst'
--- docs/getting-help.rst 2014-08-20 12:07:13 +0000
+++ docs/getting-help.rst 1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
1************
2Getting help
3************
4
5Where to get help
6-----------------
7
8The two channels you can use to get help debugging a MAAS issue are:
9
10- The `Ask Ubuntu`_ website.
11- The `Freenode #maas`_ IRC channel.
12
13.. _Ask Ubuntu:
14 http://askubuntu.com/questions/ask?tags=maas
15
16.. _Freenode #maas:
17 http://webchat.freenode.net/?channels=maas
18
19
20Gathering debugging information
21-------------------------------
22
23If your question is related to a problem related to a specific MAAS installation, we encourage you to gather debugging information and make it available before you head over to Ask Ubuntu or the IRC channel. This way, you'll have all the required information handy for people who can help you.
24
25Gathering debugging information is a fully automated process that is performed with the help of `sosreport`_.
26
27If your MAAS server is running Ubuntu version 14.04 (Trusty Tahr) or later, you can get sosreport from the official archives::
28
29 # Install sosreport.
30 sudo apt-get install -y sosreport
31 # Create the report.
32 sudo sosreport -o maas
33
34Alternatively, if your MAAS server is running a previous Ubuntu release, you'll need to install sosreport manually::
35
36 # Install git.
37 sudo apt-get install -y git
38 # Get the latest version of sosreport.
39 git clone https://github.com/sosreport/sosreport.git /tmp/sosreport
40 # Create the report.
41 sudo /tmp/sosreport/sosreport -o maas
42
43.. _sosreport:
44 https://github.com/sosreport/sosreport
45
46This will create a tarball containing MAAS' log files, MAAS' configuration files and a dump of MAAS' database. By default, the tarball will end up in /tmp but you can change the location, see sosreport's manpage for details. If there are things you do not wish to share publicly, feel free to edit the tarball.
47
48Now, the last step is to make this file available by any means at your disposal (openly accessible FTP server, Dropbox, etc.) in order for the people who will help you to be able to get their hands on it.
49
500
=== removed file 'docs/ha.rst'
--- docs/ha.rst 2016-06-03 23:10:17 +0000
+++ docs/ha.rst 1970-01-01 00:00:00 +0000
@@ -1,290 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _ha:
4
5High Availability (HA) Configuration
6====================================
7
8MAAS 2.0+ supports high availability (HA) across its entire architecture. HA
9can be enabled at the rack controller level allowing the ability for
10controlling BMCs, providing DHCP, and deploying machines to span across
11multiple rack controllers. At the region controller level, HA can be provided
12for the API, WebUI, DNS, and APT proxy.
13
14
15Rack Controller HA
16------------------
17
18Rack controller HA is provided for BMCs out of the box. MAAS will
19automatically identify which rack controllers can communicate to which BMCs
20and pass BMC actions to the correct rack controllers.
21
22To provide HA for deploying machines, DHCP HA must be turned on. DHCP HA in
23MAAS allows a primary and a secondary DHCP server to run on the same VLAN. This
24allows a deploying machine to request an IP address from either DHCP server
25(primary first) for PXE booting. The responding rack controller will then
26handle PXE booting the machine and loading the required files to complete the
27deployment. All lease information will be replicated between the primary and
28secondary rack controller, allowing one rack controller to fail without
29interrupting MAAS operation.
30
31Enabling DHCP HA
32^^^^^^^^^^^^^^^^
33
34DHCP works at the VLAN level, providing interfaces connected to that VLAN the
35ability to get an IP address on a subnet. This requires a subnet be defined
36on the VLAN where DHCP will be enabled, along with a range of IPs that will be
37assigned to unknown interfaces (called the 'dynamic range'). Enabling DHCP HA
38is the same as enabling DHCP without HA; setting a secondary rack controller
39will turn DHCP HA on. Follow the instructions at :doc:`rack-configuration` to
40enable DHCP HA.
41
42
43Region Controller HA
44--------------------
45
46Region controller HA is more complicated, in that MAAS allows you to configure
47this in many different configurations. Any number of region controllers can
48be added to MAAS, as long as they connect to the same PostgreSQL database. The
49only state that is held in MAAS is in the database, allowing region controllers
50to be scaled up and scaled down at will.
51
52Initial Region Controller
53^^^^^^^^^^^^^^^^^^^^^^^^^
54
55The first step to enabling HA for the MAAS region controller is installing the
56``maas-region-controller`` package. This package configures everything for you
57to start using the MAAS region controller on one machine. It initializes a new
58database, runs the migrations, and sets up the default configuration files for
59the new MAAS region controller to run. ::
60
61 $ sudo apt update
62 $ sudo apt install maas-region-controller
63
64.. note::
65
66 This installs and configures the PostgreSQL database on the same machine as
67 the region controller. When possible, this is the recommended configuration.
68 MAAS requires database access to be fast, since all MAAS state (including
69 operating system images, which will be synchronized with each rack
70 controller).
71
72Enabling PostgreSQL HA
73^^^^^^^^^^^^^^^^^^^^^^
74
75MAAS stores all state information in the PostgreSQL database, so it is key to
76place this into an HA configuration. PostgreSQL supports many different HA
77configurations, but hot standby is recommended as it allows the secondary
78database to become the primary quickly and the MAAS region controller can
79quickly switch to using the secondary database server as the primary. For
80configuring hot standby, the following wiki provides a quick start guide on
81setting it up: `https://wiki.postgresql.org/wiki/Hot_Standby`_.
82
83.. _https://wiki.postgresql.org/wiki/Hot_Standby:
84 https://wiki.postgresql.org/wiki/Hot_Standby
85
86Extra Region Controller
87^^^^^^^^^^^^^^^^^^^^^^^
88
89Since this new region will not be setting up its own database, use the
90following packages to set up the new region controller::
91
92 maas-region-api maas-dns
93
94In order to add another region controller to MAAS, you will also need the
95*regiond.conf* from the initial region controller. This will allow the new
96region controller to connect to the same PostgreSQL database. You will want to
97adjust the database_host in the *regiond.conf* to point to the primary database
98for PostgreSQL.::
99
100 $ sudo apt update
101 $ sudo apt install maas-region-api maas-dns
102 $ sudo systemctl stop maas-regiond
103 $ sudo rm /var/lib/maas/{maas_id,secret}
104 $ sudo scp <ubuntu@initial-region>:/etc/maas/regiond.conf /etc/maas/regiond.conf
105 $ sudo chown root:maas /etc/maas/regiond.conf
106 $ sudo chmod 640 /etc/maas/regiond.conf
107 $ sudo maas-region local_config_set --database-host <postgresql-primary-ip>
108 $ sudo systemctl restart maas-regiond
109
110Now if you check the MAAS UI or the API, you will see that MAAS has another
111region controller. But one issue still exists: the ``bind9`` service will
112refuse to start. This is because both BIND and MAAS define some of the same
113options in their respective configuration files. Since BIND will not allow you
114to use the same option more than once, MAAS needs to migrate the options from
115the BIND configuration. ::
116
117 $ sudo maas-region edit_named_options --migrate-conflicting-options
118 $ sudo systemctl restart bind9
119
120After that, you should have another fully functioning MAAS region controller!
121The DNS configuration and proxy configuration across all region controllers
122will stay synced, and you have another server to access the MAAS WebUI and API
123endpoints.
124
125Load Balancing Between Regions (optional)
126^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
127
128With multiple region controllers, there are several options for load balancing.
129One approach is to only use one region controller all the time, and fail over
130to another using a virtual IP (VIP). Another approach is to use a load-balancer
131and a VIP, to distribute the workload across all active region controllers.
132In this example, we will use ``haproxy`` to configure load balancing across the
133MAAS region controllers.
134
135First (on each region controller) ``apache2`` needs to be disabled. While the
136``maas-region-api`` package depends on ``apache2`` for its default
137configuration, it will conflict with ``haproxy`` (or any other load balancer
138running on port 80) if it is enabled. ::
139
140 $ sudo systemctl stop apache2
141 $ sudo systemctl disable apache2
142
143Now that ``apache2`` is disabled, ``haproxy`` can be installed and configured.
144You will want to change the <server-name> and <server-ip> in the proxy
145configuration below to match your infrastructure. ::
146
147 $ sudo apt install haproxy
148 $ sudo sh -c 'cat >>/etc/haproxy/haproxy.cfg <<EOL
149
150 frontend maas
151 bind *:80
152 retries 3
153 option redispatch
154 option http-server-close
155 default_backend maas
156
157 backend maas
158 timeout server 30s
159 balance roundrobin
160 server localhost localhost:5240 check
161 server <server-name-1> <server-ip-1>:5240 check
162 server <server-name-2> <server-ip-2>:5240 check
163 EOL'
164 $ sudo systemctl restart haproxy
165
166.. note::
167
168 It is recommended to run a load-balancer on every region controller server
169 and place a VIP between the servers. This will ensure that the load is
170 balanced between the servers, and ensure that (if a failure occurs) the
171 VIP moves over to the another server (which could then distribute
172 requests to the remaining servers).
173
174VIP between the Regions
175^^^^^^^^^^^^^^^^^^^^^^^
176
177Whether you configured a load-balancer or not, a VIP (virtual IP) is needed.
178The VIP will be used by the rack controllers (and the deploying machines) to
179access the region controller API endpoint. In this example, we will show how to
180use ``keepalived`` to configure a VIP.
181
182You will need to adjust checks below, depending on if you are using
183``apache2``, or ``haproxy``. You will also need to configure the
184interface_name, priority, random_password, and the VIP in the configuration
185below. The priority needs to be between 1-255. Larger priority numbers
186indicate a greater preference for the server to claim the VIP. ::
187
188 $ sudo apt install keepalived
189 $ sudo modprobe ip_vs
190 $ sudo sh -c 'echo modprobe ip_vs >> /etc/modules'
191 $ sudo sh -c 'echo net.ipv4.ip_nonlocal_bind=1' > /etc/sysctl.d/60-keepalived-nonlocal.conf
192 $ sudo systemctl restart procps
193 $ sudo sh -c 'cat >>/etc/keepalived/keepalived.conf <<EOL
194
195 # Un-comment when using haproxy.
196 #vrrp_script chk_haproxy {
197 # script "killall -0 haproxy"
198 # interval 2
199 #}
200
201 # Un-comment when using apache2.
202 #vrrp_script chk_apache2 {
203 # script "killall -0 apache2"
204 # interval 2
205 #}
206
207 vrrp_script chk_named {
208 script "killall -0 named"
209 interval 2
210 }
211
212 vrrp_instance maas_region {
213 state MASTER
214 interface <interface_name>
215 priority <priority>
216 virtual_router_id 51
217
218 authentication {
219 auth_type PASS
220 auth_pass <random_password>
221 }
222
223 track_script {
224 # Un-comment when using haproxy
225 #chk_haproxy
226 # Un-comment when using apache2
227 #chk_apache2
228 chk_named
229 }
230
231 virtual_ipaddress {
232 <vip>
233 }
234 }'
235 $ sudo systemctl restart keepalived
236
237.. note::
238
239 If you are enabling this inside of a container, the host of the container
240 needs the ip_vs module loaded and the sysctl change. A restart of the
241 container is required once the change has been made in the host.
242
243Once ``keepalived`` has been configured you will want to adjust the
244MAAS_URL on all region controllers and rack controllers to point to that VIP.
245That will ensure that all clients and machines use that IP address for
246communication.
247
248On the rack controller's::
249
250 $ sudo maas-rack config --region-url http://<vip>/MAAS
251 $ sudo systemctl restart maas-rackd
252
253On the region controller's::
254
255 $ sudo maas-region local_config_set --maas-url http://<vip>/MAAS
256 $ sudo systemctl restart maas-regiond
257
258
259Deploying HA with Juju
260----------------------
261
262Now that you have an understanding of how to configure HA manually, it
263is possible to use Juju to deploy MAAS in an HA configuration. Using Juju
264allows you to quickly scale up or scale down the MAAS infrastructure in a
265configuration supported by the MAAS team.
266
267.. note::
268
269 Using Juju to deploy MAAS is not normally how Juju would be used.
270 Normally, you would first install MAAS, then use Juju to deploy services on
271 MAAS-managed machines. However, we can use Juju's manual provisioning
272 support to deploy MAAS to existing Ubuntu systems.
273
274In the following example, Juju is bootstrapped with manual provisioning,
275the machines intended to be used for MAAS services are added, and the services
276are deployed and linked together. Be sure to adjust the given numbers based
277on what you see in the "juju status" command. (See the Juju documentation
278for more details.) The following commands could be used to deploy MAAS::
279
280 $ juju bootstrap maas manual/<ip-of-server>
281 $ juju add-machine ssh:<ip-of-server>
282 ... add required machines ...
283 $ juju deploy postgresql --to 0
284 $ juju add-unit postgresql --to 1
285 $ juju deploy maas-region --to 0
286 $ juju add-unit maas-region --to 1
287 $ juju add-relation maas-region:db postgresql:db
288 $ juju deploy maas-rack --to 3
289 $ juju add-unit maas-rack --to 4
290 $ juju add-relation maas-region:rpc maas-rack:rpc
2910
=== removed file 'docs/hardware-enablement-kernels.rst'
--- docs/hardware-enablement-kernels.rst 2015-08-26 02:32:49 +0000
+++ docs/hardware-enablement-kernels.rst 1970-01-01 00:00:00 +0000
@@ -1,80 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _hardware-enablement-kernels:
4
5=================================
6Using hardware-enablement kernels
7=================================
8
9.. note::
10
11 As of MAAS 1.9 this feature is configured by setting the hwe_kernel variable
12 instead of the architecture variable.
13
14MAAS allows you to use hardware enablement kernels when booting nodes
15with Ubuntu that require them.
16
17What are hardware-enablement kernels?
18-------------------------------------
19
20Brand new hardware gets released all the time. We want that hardware to
21work well with Ubuntu and MAAS, even if it was released after the latest
22release of MAAS or Ubuntu. Hardware Enablement (HWE) is all about keeping
23pace with the new hardware.
24
25Ubuntu's solution to this is to offer newer kernels for older releases.
26There are at least two kernels on offer for Ubuntu releases: the
27"generic" kernel -- i.e. the kernel released with the current series --
28and the Hardware Enablement kernel, which is the most recent kernel
29release.
30
31There are separate HWE kernels for each release of Ubuntu, referred to
32as ``hwe-<release letter>``. So, the 14.04 / Trusty Tahr HWE kernel is
33called ``hwe-t``, the 12.10 / Quantal Quetzal HWE kernel is called
34``hwe-q`` and so on. This allows you to use newer kernels with older
35releases, for example running Precise with a Saucy (hwe-s) kernel.
36
37For more information see the `LTS Enablement Stack`_ page on the Ubuntu
38wiki.
39
40.. _LTS Enablement Stack:
41 https://wiki.ubuntu.com/Kernel/LTSEnablementStack
42
43
44Booting hardware-enablement kernels
45-----------------------------------
46
47MAAS imports hardware-enablement kernels along with its generic boot
48images. These hardware-enablement kernels are specified by using min_hwe_kernel
49or hwe_kernel variables.
50
51The min_hwe_kernel variable is used to instruct MAAS to ensure the release to
52be deployed uses a kernel version at or above the value of min_hwe_kernel. For
53example if min_hwe_kernel is set to hwe-t when deploying any release before
54Trusty the hwe-t kernel will be used. For any release after Trusty the default
55kernel for that release will be used. If hwe-t or newer is not availible for
56the specified release MAAS will not allow that release to be deployed and throw
57an error.
58
59min_hwe_kernel can be set by running the command::
60
61 $ maas <profile-name> node update <system-id>
62 min_hwe_kernel=hwe-<release letter>
63
64It's also possible to set the min_hwe_kernel from the MAAS web UI, by visiting
65the Node's page and clicking ``Edit node``. Under the Minimum Kernel field, you
66will be able to select any HWE kernels that have been imported onto that node's
67cluster controller.
68
69.. image:: media/min_hwe_kernel.png
70
71You can also set the hwe_kernel during deployment. MAAS checks that the
72specified kernel is avalible for the release specified before deploying the
73node. You can set the hwe_kernel when deploying by using the command::
74
75 $ maas <profile-name> node start <system-id> distro_series=<distro>
76 hwe_kernel=hwe-<release letter>
77
78Or through the web interface as seen below.
79
80.. image:: media/hwe_kernel.png
810
=== modified file 'docs/index.rst'
--- docs/index.rst 2016-08-15 09:54:43 +0000
+++ docs/index.rst 2017-02-28 15:11:34 +0000
@@ -39,54 +39,10 @@
39.. toctree::39.. toctree::
40 :maxdepth: 240 :maxdepth: 2
4141
42 about
43 orientation
44 releases42 releases
45 changelog43 changelog
4644
4745
48************************
49Setting up a MAAS server
50************************
51
52.. toctree::
53 :maxdepth: 2
54
55 install
56 configure
57 rack-configuration
58 ha
59 static-ips
60 ipv6
61 bootsources
62 nodes
63 hardware-enablement-kernels
64 sstreams-mirror
65 networking
66 kernel-options
67 installing-ubuntu
68 os-support
69 storage
70 networking
71 proxy
72 devices
73 dhcpsnippets
74 packagerepositories
75 power-driver-capabilities
76
77
78******************
79Deploying services
80******************
81
82.. toctree::
83 :maxdepth: 2
84
85 juju-quick-start
86 tags
87 physical-zones
88
89
90***********************46***********************
91API / CLI Documentation47API / CLI Documentation
92***********************48***********************
@@ -100,17 +56,6 @@
100 version56 version
10157
10258
103***************
104Troubleshooting
105***************
106
107.. toctree::
108 :maxdepth: 2
109
110 getting-help
111 troubleshooting
112
113
114******************59******************
115Command-line Tools60Command-line Tools
116******************61******************
@@ -140,6 +85,7 @@
140 development/tagging85 development/tagging
141 development/preseeds86 development/preseeds
142 development/metadata87 development/metadata
88 development/notifications
143 development/rpc89 development/rpc
144 development/transactions90 development/transactions
145 development/notes/index91 development/notes/index
14692
=== removed symlink 'docs/install.rst'
=== target was u'../INSTALL.txt'
=== removed file 'docs/installing-ubuntu.rst'
--- docs/installing-ubuntu.rst 2016-05-11 19:01:48 +0000
+++ docs/installing-ubuntu.rst 1970-01-01 00:00:00 +0000
@@ -1,36 +0,0 @@
1=====================================
2Installing Ubuntu and deploying nodes
3=====================================
4
5Once a node has been accepted into MAAS and is ready for use, users can
6deploy services to that node.
7
8Prior to deployment, MAAS is responsible for:
9
101. Powering up the node.
112. Installing Ubuntu on the node (with the help of :ref:`curtin
12 <curtin-installer>`).
133. Installing the user's SSH keys on the node.
14
15Once these steps have been completed, the node is ready to have services
16deployed to it, either manually or by using a tool like Juju_.
17
18.. _Juju: http://juju.ubuntu.com
19
20
21.. _curtin-installer:
22
23Curtin: The Curt Installer
24--------------------------
25
26As the name suggests this installs Ubuntu on a node more quickly than
27would be possible using the traditional Debian installer.
28
29Curtin is enabled by default and is the only mechanism for installing
30Ubuntu supported by MAAS. It copies a pre-built Ubuntu image to the
31node, with all the packages installed that would be normally found in an
32Ubuntu installation. It's very fast!
33
34For more information about curtin, see its `project page`_ on Launchpad.
35
36.. _project page: https://launchpad.net/curtin
370
=== removed file 'docs/ipv6.rst'
--- docs/ipv6.rst 2014-10-10 13:36:03 +0000
+++ docs/ipv6.rst 1970-01-01 00:00:00 +0000
@@ -1,150 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _ipv6:
4
5Managing IPv6 Networks
6======================
7
8.. note::
9
10 This feature is available in MAAS versions 1.7 and above, starting with
11 lp:maas revision 2992. If you're writing a client application that makes use
12 of this feature, you can query the region-server API for the
13 ``ipv6-deployment-ubuntu`` :ref:`capability<cap-ipv6-deployment-ubuntu>`.
14
15MAAS has limited IPv6 support for networking nodes. It works much like IPv4
16support, but with a number of limitations:
17
18* Nodes still boot, register, and install using the IPv4 network.
19* IPv6 addresses are only configured when using the default Ubuntu installer.
20* Most BMCs can only be controlled (e.g. to power nodes on/off) using IPv4.
21* MAAS still uses IPv4 for its internal operation, installing nodes, etc.
22* For now, MAAS only supports IPv6 on networks where it also manages IPv4 DHCP.
23* A network interface on a node can only be on one IPv6 subnet.
24* A network interface on a cluster controller can manage only one IPv6 subnet.
25
26The web user interface and REST API can be accessed in the same way on both
27IPv4 and IPv6. To use an IPv6 address as the hostname in a URL, in your
28browser or elsewhere, surround it with square brackets. For example, on the
29local machine (``::1``, the IPv6 equivalent of ``localhost``) you might
30request::
31
32 http://[::1]/MAAS/
33
34If your MAAS server has a DNS hostname that resolves to both IPv4 and IPv6
35addresses, your browser may already be accessing the UI through IPv6 without
36you noticing.
37
38
39Enabling IPv6
40-------------
41
42You enable IPv6 networking in the same way that you enable IPv4 networking:
43configure a separate cluster interface for your IPv6 subnet, in addition to the
44one you need for your IPv4 subnet. The IPv6 cluster interface must define a
45static address range. Provided that you already have a functioning IPv6
46network, that's all there is to it. The following sections will go into more
47detail about what is supported, what is needed, and what to do if you don't yet
48have a functioning IPv6 network.
49
50An IPv6 cluster interface can use the same network interface on the cluster
51controller as an existing IPv4 network interface. It just defines a different
52subnet, with IPv6 addressing. A node that's connected to the IPv4 subnet will
53also be connected to the IPv6 subnet on the same network segment.
54
55
56Configuring your IPv6 subnet
57^^^^^^^^^^^^^^^^^^^^^^^^^^^^
58
59When you configure your IPv6 cluster interface, be sure to define a static IP
60address range. Deployed nodes on the subnet will get static addresses in this
61range.
62
63IPv6 networks are normally 64 bits wide, so you can be generous with the
64ranges' sizes. It also means that you can leave the netmask field blank.
65
66(There are no broadcast addresses in IPv6, so leave the broadcast address field
67blank as well.)
68
69You may want MAAS to manage DHCP and DNS, but it's not required. In fact nodes
70do not need a DHCP server at all for IPv6; MAAS configures static IPv6
71addresses on the node's network interfaces while deploying it. A DHCPv6 server
72can provide addresses for containers or virtual machines running on the nodes,
73as well as devices on the network that are not managed by MAAS, but it is not
74needed for the nodes themselves. MAAS will not be aware of any addresses
75issued by DHCP, and does not guarantee that they will stay unchanged.
76
77
78.. _ipv6-routing:
79
80Routing
81^^^^^^^
82
83In IPv6, clients do not discover routes through DHCP. Routers make themselves
84known on their networks by sending out *route advertisements*. These *RAs*
85contain other configuration as well: whether clients should statelessly
86configure their own unique IP addresses based on their MAC addresses; whether
87they should request stateless configuration from a DHCP server; and finally,
88whether they should request a stateful IP address from a DHCP server. Since a
89network interface can have any number of IPv6 addresses even on a single
90subnet, several of these address assignment mechanisms can be combined.
91
92However, when MAAS configures IPv6 networking on a node, it does not rely on
93RAs. it statically configures your nodes' default IPv6 route to use the router
94that is configured on the cluster interface, so that the nodes will know their
95default gateway. They do not need DHCP and will not autoconfigure global
96addresses.
97
98However, if you are planning to operate DHCPv6 clients as well, e.g. on
99machines not managed by MAAS or on virtual machines hosted by MAAS nodes, you
100may still want to have RAs configured to make those clients obtain
101configuration over DHCP.
102
103If you need RAs but your gateway does not send them, install and configure
104``radvd`` somewhere on the network to advertise its route.
105
106
107Other installers and operating systems
108^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
109
110Static IPv6 addresses are currently only configured on Ubuntu, when installed
111using the "fast" installer. Other operating systems, or Ubuntu with the
112classic Debian installer, will not have their IPv6 addresses configured.
113The same applies when a user manually installs an operating system on a node,
114or overwrites its networking configuration: the node will no longer have its
115static IPv6 address configured, even if MAAS has allocated it to the node.
116
117However, as long as the address remains allocated to the node, you may still
118configure its operating system to use that address. The node can then use that
119address as if it had been configured by MAAS.
120
121
122Disabling IPv4
123--------------
124
125For advanced users, there is an experimental capability to deploy nodes with
126pure IPv6, with IPv4 networking disabled. To enable this on a node, check the
127"Disable IPv4 when deployed" box on the node's Edit page. The process of
128managing and deploying the node will still largely work through IPv4, but once
129deployed, the node will have IPv6 networking only.
130
131In practice nodes may not be functional without IPv4 networking. A few things
132are known to be needed in any case:
133
134
135Configuring the MAAS URL
136^^^^^^^^^^^^^^^^^^^^^^^^
137
138The *maas-cluster-controller* package has a configuration item for the URL
139where nodes and cluster controllers can reach the MAAS region API.
140
141By default, this URL is set based on the region controller's IPv4 address. To
142make it work for nodes that won't have IP4, you must set the MAAS URL to use
143a hostname instead of an IP address. The hostname must resolve to both IPv4
144and IPv6 addresses, and both on the cluster controller and on the nodes.
145
146To change this setting, run::
147
148 dpkg-reconfigure maas-cluster-controller
149
150It will prompt you for the URL, with its current setting as the initial value.
1510
=== removed file 'docs/juju-quick-start.rst'
--- docs/juju-quick-start.rst 2016-01-25 14:10:29 +0000
+++ docs/juju-quick-start.rst 1970-01-01 00:00:00 +0000
@@ -1,145 +0,0 @@
1Juju Quick Start
2================
3
4These instructions will help you deploy your first charm with Juju to
5a MAAS cluster.
6
7In the following, we assume that you have a MAAS cluster set-up with at least
82 nodes enlisted with it.
9
10
11Your API key, SSH key, and environments.yaml
12--------------------------------------------
13
14You'll need an API key from MAAS so that the Juju client can access
15it. Each user account in MAAS can have as many API keys as desired.
16One hard and fast rule is that you'll need to use a different API key
17for each Juju *environment* you set up within a single MAAS cluster.
18
19There is no need to explicitly add an SSH key to MAAS when using Juju;
20it will automatically put your public key on any hosts that it starts up.
21
22**Note**: You do not need to use the MAAS web UI or API to allocate
23a node to yourself, Juju will do this for you.
24
25
26Getting a key
27^^^^^^^^^^^^^
28
29To get the API key:
30
31#. Go to your MAAS preferences page (go to your MAAS home page
32 ``http://${my-maas-server}:80/MAAS/`` and choose *Preferences* from the
33 drop-down menu that appears when clicking your username at the top-right
34 of the page).
35
36#. Optionally add a new MAAS key. Do this if you're setting up another
37 environment within the same MAAS cluster.
38
39The ``${my-maas-server}`` slot should be replaced with the hostname of your
40MAAS server.
41
42
43Adding an SSH key
44^^^^^^^^^^^^^^^^^
45
46While you're still on the MAAS preferences page, add your SSH key
47by clicking *Add SSH key*. Use the public half of your SSH key, the
48content of ``~/.ssh/id_rsa.pub`` for example; don't paste the private
49half.
50
51
52Creating environments.yaml
53^^^^^^^^^^^^^^^^^^^^^^^^^^
54
55Create or modify ``~/.juju/environments.yaml`` with the following content::
56
57 environments:
58 maas:
59 type: maas
60 maas-server: 'http://${my-maas-server}:80/MAAS'
61 maas-oauth: '${maas-api-key}'
62 admin-secret: ${your-admin-secret}
63 default-series: precise
64
65Substitute the API key from earlier into the ``${maas-api-key}``
66slot, and the hostname of your MAAS server into the ``${my-maas-server}``
67slot.
68
69The ``${your-admin-secret}`` slot should be replaced with a random pass-phrase,
70there is no default.
71
72
73Now Juju
74--------
75
76If juju-core is not yet installed on the client machine, run::
77
78 $ sudo apt-get install juju-core
79
80Now, use juju to display the status of the default environment::
81
82 $ juju status
83
84As you've not bootstrapped you ought to see::
85
86 error: Unable to connect to environment "".
87 Please check your credentials or use 'juju bootstrap' to create a new environment.
88
89**Note**: if Juju complains that there are multiple environments and
90no explicit default, add ``-e ${environment-name}`` after each
91command, e.g.::
92
93 $ juju status -e maas
94
95Bootstrap::
96
97 $ juju sync-tools
98 $ juju bootstrap
99
100If bootstrapping on a version of juju older than 1.14.0 then use::
101
102 $ juju bootstrap --upload-tools
103
104This will return quickly, but the master node may take a *long* time
105to come up. It has to completely install Ubuntu and Juju on it and
106reboot before it'll be available for use. It's probably worth either
107trying a ``juju status`` once in a while to check on progress, or
108following the install on the node directly.
109
110 **Beware** of `bug 413415`_ - *console-setup hangs under chroot
111 debootstrap with a console login on ttyX* - when monitoring an
112 installation on the node.
113
114.. _bug 413415:
115 https://bugs.launchpad.net/ubuntu/+source/console-setup/+bug/413415
116
117Once the boostrap node has been installed a status command should
118come up with something a bit more interesting::
119
120 environment: maas
121 machines:
122 "0":
123 agent-state: started
124 agent-version: 1.13.3.1
125 dns-name: kmhwd.master
126 instance-id: /MAAS/api/2.0/nodes/node-5c5b713a-1afc-11e3-9904-525400123456/
127 series: precise
128 services: {}
129
130Now it's possible to deploy a charm::
131
132 $ juju deploy mysql
133 $ juju status
134
135If you have another node free you can finish off the canonical and by
136now familiar example::
137
138 $ juju deploy wordpress
139 $ juju add-relation wordpress mysql
140 $ juju expose wordpress
141 $ juju status
142
143Note that each charm runs on its own host, so each deployment will
144actually take as long as it took to bootstrap. Have a beer, drown your
145sorrows in liquor, or, my preference, have another cup of tea.
1460
=== removed file 'docs/kernel-options.rst'
--- docs/kernel-options.rst 2014-02-11 05:21:58 +0000
+++ docs/kernel-options.rst 1970-01-01 00:00:00 +0000
@@ -1,38 +0,0 @@
1===========================
2Setting kernel boot options
3===========================
4
5MAAS is able to send specific kernel options to booting nodes on both
6a global basis and a per-node basis.
7
8Global kernel options
9---------------------
10
11As an admin, click on the gear icon at the top right and scroll down to
12the Global Kernel Parameters section, as shown here:
13
14.. image:: media/global_kernel_opts.png
15
16Whatever you set here is sent as-is to all booting nodes.
17
18Per-node kernel options
19-----------------------
20
21Per-node kernel options are set using tags. The easiest way of doing this
22is to use the ``maas`` command. You will need to :ref:`be
23logged in to the API first <api-key>` and then you can add a tag which has its
24``kernel_opts`` value set, like this::
25
26 $ maas maas tags new name='nomodeset' \
27 comment='nomodeset kernel option' kernel_opts='nomodeset vga'
28
29Once the tag is defined, you can add it to a node or nodes::
30
31 $ maas maas tag update-nodes nomodeset add=<system_id_1> \
32 add=<system_id_2>
33
34.. note::
35
36 Any per-node kernel options set will completely override the global options.
37 If multiple tags attached to a node have the kernel_opts defined, the first
38 one ordered by name is used.
390
=== removed file 'docs/networking.rst'
--- docs/networking.rst 2016-07-08 14:38:44 +0000
+++ docs/networking.rst 1970-01-01 00:00:00 +0000
@@ -1,270 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _networking:
4
5=========================
6Networking
7=========================
8
9.. note::
10
11 This feature is available in MAAS versions 1.9 and above on Ubuntu
12 deployments. If you're writing a client application, you can check
13 if MAAS supports this feature via the web API; see the documentation
14 for the ``network-deployment-ubuntu`` capability
15 :ref:`here<cap-network-deployment-ubuntu>`.
16
17MAAS 1.9 adds support for the modeling of a wide variety of networking concepts
18and configurations.
19
20Networking Concepts
21-------------------
22
23At a high level, MAAS supports the following networking concepts:
24
25Fabrics
26^^^^^^^
27
28A fabric is a set of interconnected VLANs that are capable of mutual
29communication. A fabric can be thought of as a logical grouping in which VLANs
30can be considered unique.
31
32For example, a distributed network may have a fabric in London containing
33VLAN 100, while a separate fabric in San Francisco may contain a VLAN 100,
34whose attached subnets are completely different and unrelated.
35
36A "Default Fabric" is created when MAAS is installed (or upgraded).
37
38Subnets
39^^^^^^^
40
41A subnet is a "layer 3" network defined by a particular network prefix, plus
42a network mask length (in bits). This notation is also referred to as a *CIDR*.
43
44MAAS supports IPv4 and IPv6 subnets.
45
46Examples::
47
48 10.0.0.0/8
49 172.16.0.0/12
50 192.168.0.0/16
51 2001:db8:4d41:4153::/64
52
53Subnets can be annotated with a descriptive name, their default gateway,
54and/or their DNS server(s).
55
56A subnet can be in a single space.
57
58Subnets are considered managed if a cluster interface specifies the cluster
59network range.
60
61**IP Ranges**
62
63MAAS assumes it can allocate all unreserved IPs in a subnet. For example,
64MAAS will assign IPs out of the unreserved pool to node interfaces configured
65"IP Address" type "Auto assign". You can reserve IPs for other purposes by
66adding one or more "reserved ranges" in your subnet configuration.
67
68There are two kinds of reserved ranges: "Reserved Range" and "Reserved Dynamic
69Range". Use a "Reserved Range" to block out a set of static IPs that you plan
70to use for other devices on your network (e.g. managed switches or routers).
71
72Use a "Reserved Dynamic Range" to block out a set of IP addresses that you
73plan to hand out using a DHCP server. If you enable DHCP on your subnet's
74VLAN, MAAS will provide a DHCP for IPs in this range, otherwise you are
75responsible for proving an external DHCP server for this range.
76
77Note that a "Reserved Dynamic Range" with active DHCP is *required* if you
78have nodes that require DHCP to network boot (e.g. PXE clients), or if you
79have configured any node interfaces as "IP Address" type "DHCP".
80
81
82VLANs
83^^^^^
84
85VLANs (Virtual LANs) are a common way to create logically separate networks
86using the same physical infrastructure.
87
88Managed switches can assign VLANs to each port in either a "tagged" or an
89"untagged" manner. A VLAN is said to be "untagged" on a particular port when
90it is the default VLAN for that port, and requires no special configuration
91in order to access.
92
93"Tagged" VLANs (traditionally used by network administrators in order to
94aggregate multiple networks over inter-switch "trunk" lines) can also be used
95with nodes in MAAS. That is, if a switch port is configured such that "tagged"
96VLAN frames can be sent and received by a MAAS node, that MAAS node can be
97configured to automatically bring up VLAN interfaces, so that the deployed node
98can make use of them.
99
100A "Default VLAN" is created for every Fabric, to which every new VLAN-aware
101object in the fabric will be associated to by default (unless otherwise
102specified).
103
104Spaces
105^^^^^^
106
107A Space is a logical grouping of subnets that should be able to communicate
108with each other. Subnets within each space need not belong to the same fabric.
109For example, you may have a "DMZ" space in both your London and San Francisco
110fabrics, and a "Storage" space to indicate subnets attached to your storage
111network.
112
113A "space-0" is created when MAAS is installed (or upgraded), which
114every subnet will belong to by default (unless otherwise specified).
115
116Interfaces
117^^^^^^^^^^
118
119**Physical**
120
121After a node is commissioned, MAAS discovers its physical interfaces. In
122addition, devices are created with physical interfaces.
123
124Prior to deployment, a MAAS administrator can specify additional interfaces
125to be configured on the node, including one or more of the below types.
126
127**Bond**
128
129A bond interface is capable of aggregating two or more physical interfaces
130into a single logical interface. Bonds can be used in conjunction with a
131managed switch (using Link Aggregation and Control Protocol, or LACP), or
132independently (software bonds).
133
134**VLAN**
135
136A VLAN interface can be used to connect to a tagged VLAN, if the switch port
137the node is connected to is authorized to access it.
138
139**Unknown**
140
141Unknown interfaces cannot be created by users.
142
143Sometimes, *unknown* interfaces are discovered by MAAS. (For example, when
144MAAS learns of a new DHCP lease that is not associated with any known node
145or device.)
146
147How to Configure Nodes for Networking
148-------------------------------------
149
150Creating a Bond Interface
151^^^^^^^^^^^^^^^^^^^^^^^^^
152
153Use the ``node-interfaces create-bond`` API to create a bond. For example::
154
155 $ maas admin node-interfaces create-bond node-d83ce230-4b50-11e5-a267-00163eb185eb name=bond0 vlan=0 parents=30 parents=31 mac_address=00:50:56:2b:60:53
156 Success.
157 Machine-readable output follows:
158 {
159 "name": "bond0",
160 "links": [],
161 "tags": [],
162 "vlan": {
163 "id": 0,
164 "resource_uri": "/MAAS/api/2.0/fabrics/0/vlans/0/",
165 "name": "Default VLAN",
166 "vid": 0,
167 "fabric": "fabric-0"
168 },
169 "enabled": true,
170 "id": 41,
171 "parents": [
172 "eth0",
173 "eth1"
174 ],
175 "mac_address": "00:50:56:2b:60:53",
176 "type": "bond",
177 "children": [],
178 "resource_uri": "/MAAS/api/2.0/nodes/node-d83ce230-4b50-11e5-a267-00163eb185eb/interfaces/41/"
179 }
180
181Note that in the example above, the bond contains two interfaces because
182the ``parents`` parameter was specified twice, such as
183``parents=30 parents=31``.
184
185Creating a VLAN Interface
186^^^^^^^^^^^^^^^^^^^^^^^^^
187
188To create a VLAN interface, use the ``node-interfaces create-vlan`` API.
189
190Be aware that the ``vlan`` paremeter does not indicate a VLAN ID that
191corresponds to the VLAN tag. You must first create the VLAN, and then
192associate it with the interface. For example::
193
194 $ maas admin vlans create 0 name="Storage network" vid=100
195 Success.
196 Machine-readable output follows:
197 {
198 "id": 1,
199 "resource_uri": "/MAAS/api/2.0/fabrics/0/vlans/1/",
200 "name": "Storage network",
201 "vid": 100,
202 "fabric": "fabric-0"
203 }
204
205Note that the ``0`` in the command above indicates the ``fabric_id``. If you
206have not defined any additional fabrics, the ``fabric_id`` of the default
207fabric will be ``0``.
208
209Now that a VLAN is created, it may be associated with a new interface::
210
211 $ maas admin node-interfaces create-vlan node-d83ce230-4b50-11e5-a267-00163eb185eb vlan=1 parent=30
212 Success.
213 Machine-readable output follows:
214 {
215 "name": "eth0.100",
216 "links": [],
217 "tags": [],
218 "vlan": {
219 "id": 1,
220 "resource_uri": "/MAAS/api/2.0/fabrics/0/vlans/1/",
221 "name": "Storage network",
222 "vid": 100,
223 "fabric": "fabric-0"
224 },
225 "enabled": true,
226 "id": 44,
227 "parents": [
228 "eth0"
229 ],
230 "mac_address": "00:50:56:2b:60:53",
231 "type": "vlan",
232 "children": [],
233 "resource_uri": "/MAAS/api/2.0/nodes/node-d83ce230-4b50-11e5-a267-00163eb185eb/interfaces/44/"
234 }
235
236
237Deleting an Interface
238^^^^^^^^^^^^^^^^^^^^^
239
240To delete an interface, use the ``node-interface delete`` API. For example::
241
242 $ maas admin node-interface delete node-d83ce230-4b50-11e5-a267-00163eb185eb 41
243 Success.
244
245Machine Interface Configuration
246^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
247
248**Auto Assign**
249
250Interfaces configured as "Auto assign" will be deployed with a static
251(non-DHCP) network configuration. MAAS will choose an IP from the subnet
252that does not fall into a defined reserved range.
253
254**Static**
255
256When you configure an interfaces as "Static", you will provide an IP address
257for that interface to use when deployed.
258
259**DHCP**
260
261Interfaces configured as "DHCP" will be configured to use DHCP to request
262configuration information at boot. In order for the interface to successfully
263configure, you will need to insure that a "Dynamic Range" has been reserved
264on the associated subnet, and that either you have configured MAAS to provide
265DHCP services on the associated VLAN, or that you have provided an external
266DHCP server to do so.
267
268**(Unconfigured)**
269
270These interfaces will be left unconfigured.
2710
=== removed file 'docs/nodes.rst'
--- docs/nodes.rst 2016-03-28 13:54:47 +0000
+++ docs/nodes.rst 1970-01-01 00:00:00 +0000
@@ -1,98 +0,0 @@
1Adding nodes to the system
2==========================
3
4Now that the MAAS controller is running, we need to make the nodes
5aware of MAAS and vice-versa. If you have set up DHCP correctly, and
6your nodes can boot via PXE_ then things really couldn't be much easier
7and you can use :ref:`the automatic discovery procedure <auto-enlist>`.
8You do not need to install Ubuntu on nodes that you wish to add to MAAS
9prior to enlistment.
10
11To learn more about setting up DHCP, read the :ref:`cluster configuration
12documentation <rack-configuration>`.
13
14.. _PXE: http://en.wikipedia.org/wiki/Preboot_Execution_Environment
15
16.. _auto-enlist:
17
18Automatic Discovery
19-------------------
20
21With nodes set to boot from a PXE image, they will start, look for a
22DHCP server, receive the PXE boot details, boot the image, contact the
23MAAS server and shut down.
24
25During this process, the MAAS server will be passed information about
26the node, including the architecture, MAC address and other details
27which will be stored in the database of nodes. You can accept and
28commission the nodes via the web interface. When the nodes have been
29accepted the selected series of Ubuntu will be installed.
30
31To save time, you can also accept and commission all nodes from the
32commandline. This requires that you first log in with the API key,
33which :ref:`you can retrieve from the web interface <api-key>`::
34
35 $ maas maas nodes accept-all
36
37
38.. _enlist-via-boot-media:
39
40
41Manually add nodes
42------------------
43
44If you know the MAC address of a node, you can manually enter details
45about the node through the web interface. Click the ``Add Node`` button
46to be taken to the "Add Node" form:
47
48.. image:: media/add-node.png
49
50
51Virtual machine nodes
52---------------------
53
54If you're setting up virtual machines to use as nodes with MAAS, you need
55to configure the power type as ``virsh``. For MAAS to be able to use
56virsh, make sure you have the ``libvirt-bin`` package installed.
57
58.. note::
59
60 If you are assembling a set of VMs for testing or development, make
61 sure they have at least 512 MB (768 MB If you are deploying 15.10)
62 to avoid failures during deployment.
63
64The virsh power type takes two parameters:
65
66Power ID
67 The Power ID is the name of the virtual machine shown by
68 ``sudo virsh list --all``
69
70Address
71 This is a libvirt connection string, such as
72 ``qemu+ssh://ubuntu@10.0.0.2/system`` or ``qemu:///system``
73
74.. image:: media/virsh-config.png
75
76If you want to use ssh you'll need to generate a ssh key pair for the maas
77user. By default there is no home directory created for the maas user::
78
79 $ sudo mkdir /home/maas
80 $ sudo chown maas:maas /home/maas
81
82Add a login shell for the maas user::
83
84 $ sudo chsh -s /bin/bash maas
85
86Become the maas user and generate a SSH keypair::
87
88 $ sudo su - maas
89 $ ssh-keygen -f ~/.ssh/id_rsa -N ''
90
91Then add the public key to ``/ubuntu/.ssh/authorized_keys`` on the vm server
92so virsh can use ssh without a password::
93
94 $ ssh-copy-id -i ~/.ssh/id_rsa ubuntu@10.0.0.2
95
96As the maas user, test virsh commands against libvirt at 10.0.0.2::
97
98 $ virsh -c qemu+ssh://ubuntu@10.0.0.2/system list --all
990
=== removed file 'docs/orientation.rst'
--- docs/orientation.rst 2014-08-22 00:13:24 +0000
+++ docs/orientation.rst 1970-01-01 00:00:00 +0000
@@ -1,107 +0,0 @@
1.. _orientation:
2
3Orientation
4===========
5
6
7MAAS in Brief
8-------------
9
10Canonical’s MAAS brings the dynamism of cloud computing to the world
11of physical provisioning and Ubuntu. Connect, commission and deploy
12physical servers in record time, re-allocate nodes between services
13dynamically, and keep them up to date and in due course, retire them
14from use.
15
16MAAS is a new way of thinking about physical infrastructure. Compute,
17storage and network are commodities in the virtual world, and for
18large-scale deployments the same is true of the metal. “Metal as a
19service” lets you treat farms of servers as a malleable resource for
20allocation to specific problems, and re-allocation on a dynamic basis.
21
22In conjunction with the Juju service orchestration software (see
23https://juju.ubuntu.com/docs/), MAAS will enable you to get the most
24out of your physical hardware and dynamically deploy complex services
25with ease and confidence.
26
27
28Do I Need MAAS?
29---------------
30
31MAAS certainly isn't for everyone, but why not ask yourself these
32questions?
33
34You probably *SHOULD* use MAAS if any or all of the following
35statements are true:
36
37 * You are trying to manage many physical servers.
38 * You want to deploy services with the minimum fuss.
39 * You need to get the most from your resources.
40 * You want things to work, repeatably and reliably.
41
42You probably don't need MAAS if any or all of these statements are
43true:
44
45 * You don't need to manage physical hardware
46 * You relish time spent in the server room
47 * You like trying to set up complicated, critical services without any help
48
49
50.. _setup:
51
52A Typical MAAS setup
53--------------------
54
55MAAS is designed to work with your physical hardware, whether your
56setup includes thousands of server boxes or only a few. The key
57components of the MAAS software are:
58
59 * Region controller
60 * Cluster controller(s)
61 * Nodes
62
63The nodes are the computers you manage using MAAS. These can range from just
64a handful to many thousands of systems.
65
66For small (in terms of number of nodes) setups, you will probably just
67install the Region controller and a cluster controller on the same
68server - it is only worth having multiple region controllers if you
69need to organise your nodes into different subnets (e.g. if you have a
70lot of nodes). If you install the ``maas`` package, it will include both a
71region controller and a cluster controller, and they will be automatically
72set up to work together.
73
74.. image:: media/orientation_architecture-diagram.*
75
76
77How MAAS is used
78----------------
79
80MAAS manages a pool of nodes. After registering a new system with the MAAS
81and preparing it for service ("commissioning"), the new system joins this pool.
82
83From the moment a node is accepted into the MAAS, any operating system,
84software, or data that it may have had installed before is meant to be
85overwritten. A node in the pool is under MAAS's sole control, and off-limits
86to users.
87
88Once you have nodes in the pool, users of the MAAS can allocate them for their
89own use. At that point, the nodes are installed with the selected operating
90system and set up with the user's login credentials for remote access. This
91is referred to as "starting" a node in the browser interface, and as
92"acquiring" (and, as a separate step, "starting") a node in the API.
93
94When allocating from the API, you can specify constraints such as how much
95memory you need, how many CPUs, what networks the node should be connected to,
96what physical zone they should be in, and so on. API commands can also be
97issued through the ``maas`` command-line utility.
98
99An allocated node is not like a virtual instance in a cloud: you get complete
100control, including hardware drivers and root access. To upgrade a BIOS, for
101example, an administrator could allocate a node to themselves, and run a
102vendor-supplied upgrade utility. Needless to say, you also get full hardware
103performance and tweaking!
104
105Once you are done with a node you have allocated, you can release it back to
106the pool. Once again any data, software, or operating system will no longer
107be available.
1080
=== removed file 'docs/os-support.rst'
--- docs/os-support.rst 2015-09-08 18:41:57 +0000
+++ docs/os-support.rst 1970-01-01 00:00:00 +0000
@@ -1,121 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _os-support:
4
5=========================
6Operating Systems Support
7=========================
8
9.. note::
10
11 This feature is available in MAAS versions 1.7 and above.
12
13Besides Ubuntu, MAAS allows users to deploy different operating
14systems, such as CentOS. Ubuntu Advantage customers can
15additionally deploy Redhat Enterprise Linux (RHEL), OpenSUSE, SLES,
16Window Server and Windows HyperV.
17
18
19Generated Images vs. Custom Images
20----------------------------------
21
22MAAS supports two different classes of OS images, `Generated images`
23and `Custom images`.
24
25`Generated images` are images of the OS' that MAAS team fully
26supports. Currently supported OS' are CentOS and Windows.
27
28`Custom images` are images that MAAS can deploy, but may have been
29customized and differ from those that the MAAS team supports. Custom
30images can include any Ubuntu, CentOS or Windows image. Additionally,
31Redhat Enterprise Linux (RHEL), OpenSUSE and SLES images also fall
32under this category.
33
34
35Installing MAAS Images
36----------------------
37
38Installing Generated Images
39^^^^^^^^^^^^^^^^^^^^^^^^^^^
40
41Installing MAAS Generated Images (CentOS or Windows) can be done with
42the command::
43
44 $ maas admin boot-resources create name=<os/series>
45 architecture=<architecture> [filetype=ddtgz]
46 content@=<image-name>
47
48The list of supported Operating Systems under `Generated Images` is:
49
50 * CentOS 6.5 (centos/centos65)
51 * CentOS 7 (centos/centos7)
52 * Windows Server 2012 (windows/win2012)
53 * Windows Server 2012 R2 (windows/win2012r2)
54 * Windows Hyper-V (windows/win2012hv)
55 * Windows Hyper-V R2 (windows/win2012hvr2)
56
57Examples::
58
59 $ maas admin boot-resources create name=centos/centos7
60 architecture=amd64/generic content@=centos7-amd64-root-tgz
61
62 $ maas admin boot-resources create name=windows/win2012
63 architecture=amd64/generic filetype=ddtgz
64 content@=win2012-amd64-ddtgz
65
66Installing Custom Images
67^^^^^^^^^^^^^^^^^^^^^^^^
68
69Installing custom images require the user to specify a unique
70identifier for the OS and Release, as well as the title of the
71Image::
72
73 $ maas admin boot-resources create name=custom/<os-release-id>
74 title=<title> architecture=amd64/generic content@=<image-name>
75
76Examples::
77
78 $ maas admin boot-resources create name=custom/rhel7
79 title="RedHat Enterprise Linux 7" architecture=amd64/generic
80 content@=rhel7-amd64-root-tgz
81
82The list of tested Operating Systems under `Custom Images` is:
83
84 * OpenSUSE
85 * SLES 11 and SLES 12
86 * Redhat Enterprise Linux 7 (RHEL7)
87
88
89MAAS Image Builder
90------------------
91
92The MAAS Image Builder is a script that allows users to generate their
93own images. However, ``maas-image-builder`` only supports the generation
94of CentOS and RHEL images. To install ``maas-image-builder``, please
95follow the instructions::
96
97 $ sudo apt-add-repository ppa:maas-maintainers/stable
98 $ sudo apt-get install maas-image-builder
99
100
101Creating and Installing CentOS MAAS Images
102^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
103
104.. note::
105
106 Supported CentOS versions are CentOS 6.5 (centos65) and CentOS 7 (centos7).
107
108
109To create a MAAS CentOS image, no ISO is needed as all of the required
110software to create the image is downloaded (from CentOS repositories) as part
111of the image generation process. To create the MAAS CentOS image,
112``maas-image-builder`` can be used as::
113
114 $ maas-image-builder -a amd64 -o centos7-amd64-root-tgz centos --edition 7
115
116The created image, ``centos7-amd64-root-tgz``, needs to be uploaded into the
117MAAS Region Controller. This image will be listed under the `Generated` Image
118Section in the `MAAS Image` page. This image can be uploaded with::
119
120 $ maas admin boot-resources create name=centos/centos7
121 architecture=amd64/generic content@=./build-output/centos7-amd64-root-tgz
1220
=== removed file 'docs/packagerepositories.rst'
--- docs/packagerepositories.rst 2016-08-15 09:54:43 +0000
+++ docs/packagerepositories.rst 1970-01-01 00:00:00 +0000
@@ -1,71 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _packagerepositories:
4
5====================
6Package Repositories
7====================
8
9.. note::
10
11 This feature is available in MAAS versions 2.0 and above.
12
13MAAS allows the configuring of multiple additional package repositories, which
14will find their way into the /etc/apt/sources.list on MAAS deployed machines.
15
16Creating a Package Repository
17-----------------------------
18
19Administrators can create Package Repositories over the API using the following command:::
20
21 $ maas <profile> package-repositories create name=<Package Repository Name> url=<URL locating the package repository>
22
23These are the minimally required parameters - see the online API help,
24described below, for the complete list of parameters.
25
26Package Repository Enablement
27^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
28
29Package Repositories can be turned off by using the enabled flag option as follows:::
30
31 $ maas <profile> package-repositories create name=<Package Repository Name> url=<URL locating the package repository> enabled=false
32
33The enabled flag can be modified on an existing repository by using the update
34API, described below.
35
36Listing Package Repositories
37----------------------------
38
39To list all Package Repositories use the following command:::
40
41 $ maas <profile> package-repositories read
42
43To list a particular Package Repository use the following command:::
44
45 $ maas <profile> package-repository read <Package Repository id or name>
46
47Updating a Package Repository
48-----------------------------
49
50Administrators can update the Package Repository attributes using the following
51command:::
52
53 $ maas <profile> package-repository update <Package Repository id or name> <options>
54
55Deleting a Package Repository
56-----------------------------
57
58Administrators can delete a Package Repository using the following command:::
59
60 $ maas <profile> package-repository delete <Package Repository id or name>
61
62Getting Help
63------------
64
65Online help is available for all API's in MAAS. For example:::
66
67 $ maas <profile> package-repository --help
68 $ maas <profile> package-repository <command> --help
69
70 $ maas <profile> package-repositories --help
71 $ maas <profile> package-repositories <command> --help
720
=== removed file 'docs/physical-zones.rst'
--- docs/physical-zones.rst 2014-08-22 00:13:24 +0000
+++ docs/physical-zones.rst 1970-01-01 00:00:00 +0000
@@ -1,132 +0,0 @@
1Physical Zones
2==============
3
4.. note::
5 This feature is only available in MAAS versions 1.5 and above.
6
7To help you maximise fault-tolerance and performance of the services you
8deploy, MAAS administrators can define *physical zones* (or just *zones*
9for short), and assign nodes to them. When a user requests a node, they can
10ask for one that is in a specific zone, or one that is not in a specific zone.
11
12It's up to you as an administrator to decide what a physical zone should
13represent: it could be a server rack, a room, a data centre, machines attached
14to the same UPS, or a portion of your network. Zones are most useful when they
15represent portions of your infrastructure. But you could also use them simply
16to keep track of where your systems are located.
17
18Each node is in one and only one physical zone. Each MAAS instance ships with
19a default zone to which nodes are attached by default. If you do not
20need this feature, you can simply pretend it does not exist.
21
22
23Applications
24------------
25
26Since you run your own MAAS, its physical zones give you more flexibility
27than those of a third-party hosted cloud service. That means that you get to
28design your zones and define what they mean. Below are some examples of how
29physical zones can help you get the most out of your MAAS.
30
31
32Using Zones for Fault Tolerance
33...............................
34
35If you are concerned about availability of services you deploy through MAAS, a
36physical zone could be on one power supply, or it could be an entire data
37centre location, or an area of your network that is unlikely to suffer problems
38when another zone experiences an outage.
39
40For example, you might roll out separate instances of the same web application
41into different physical zones of the same MAAS, and either load-balance
42between them or keep one as a warm stand-by. If one zone suffers a power loss,
43is cut off from the internet, or is affected by a natural disaster, the other
44instance of your application may still be available in the other zone, and
45ready to take over.
46
47For fault tolerance, machines that work together in order to provide one
48instance of a service should generally be allocated in the same zone. The
49entire service should have a backup instance in another zone.
50
51
52Using Zones for Performance
53...........................
54
55Even if fault tolerance is not an issue, you may still want to divide your
56nodes into groups that communicate efficiently through a high-performance local
57network, or share efficient access to external resources.
58
59When it comes to performance, machines should generally be allocated in the
60zone closest to performance-critical resources they need.
61
62For example, for applications that are highly sensitive to network latency, it
63may make sense to divide your MAAS into smaller physical networks, and
64represent each of those networks as a physical zone. Now, you can use the
65physical zones to allocate nodes just where they get the best performance
66when communicating with specific other nodes.
67
68In another example, your application may rely on a third-party service
69available on the internet. If your MAAS is spread out across multiple data
70centre locations, you may want the application to be deployed in the location
71with the best access to that service.
72
73
74Using Zones for Power Management
75................................
76
77If you are concerned about power density and cooling, you can lay out your
78physical zones to match server racks. Instead of allocating machines that
79share a physical zone, you can spread out the load by ensuring that "hot"
80systems are in located different zones.
81
82
83Creating a Zone
84---------------
85
86Only administrators can create and manage zones. To create a physical
87zone in the web user interface, log in as an administrator and browse to the
88"Zones" section in the top bar. This will takes you to the zones listing page.
89At the bottom of the page is a button for creating a new zone:
90
91.. image:: media/add-zone.*
92
93Or to do it in the :ref:`region-controller API <region-controller-api>`, POST
94your zone definition to the *"zones"* endpoint.
95
96
97Assigning Nodes to a Zone
98-------------------------
99
100Once you have created one or more physical zones, you can set nodes' zones
101from the nodes listing page in the UI. Select the nodes for which you wish to
102set a zone, and choose "Set physical zone" from the "Bulk action" dropdown
103list near the top. A second dropdown list will appear, to let you select which
104zone you wish to set. Leave it blank to clear nodes' physical zones.
105Clicking "Go" will apply the change to the selected nodes.
106
107You can also set an individual node's zone on its "Edit node" page. Both ways
108are available in the API as well: edit an individual node through a ``PUT``
109request to the node's URI, or set the zone on multiple nodes at once by calling
110the ``set_zone`` operation on the ``nodes`` endpoint.
111
112
113Allocating a Node in a Zone
114---------------------------
115
116To deploy in a particular zone, call the ``acquire`` method in the
117:ref:`region-controller API <region-controller-api>` as before, but pass the
118``zone`` parameter with the name of the zone. The method will allocate a node
119in that zone, or fail with an HTTP 409 ("conflict") error if the zone has no
120nodes available that match your request.
121
122Alternatively, you may want to request a node that is *not* in a particular
123zone, or one that is not in any of several zones. To do that, specify the
124``not_in_zone`` parameter to ``acquire``. This parameter takes a list of zone
125names; the allocated node will not be in any of them. Again, if that leaves no
126nodes available that match your request, the call will return a "conflict"
127error.
128
129It is possible, though not usually useful, to combine the ``zone`` and
130``not_in_zone`` parameters. If your choice for ``zone`` is also present in
131``not_in_zone``, no node will ever match your request. Or if it's not, then
132the ``not_in_zone`` values will not affect the result of the call at all.
1330
=== removed file 'docs/power-driver-capabilities.rst'
--- docs/power-driver-capabilities.rst 2016-05-27 22:46:58 +0000
+++ docs/power-driver-capabilities.rst 1970-01-01 00:00:00 +0000
@@ -1,48 +0,0 @@
1.. -*- mode: rst -*-
2
3*************************
4Power Driver Capabilities
5*************************
6
7
8**2016-05-23, newell**
9
10MAAS has internal support for power controlling differents types of hardware.
11Not all the power drivers in MAAS have the same capabilities and the table below
12details the main differences amongst the power drivers.
13
14
15+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
16| Power Driver | Set PXE On | Power | Chassis | Enhanced UI | BMC |
17| X=Yes, Blank=No | Next Boot | Querying | Configuration | Error Reporting | Enlistment |
18+=========================+=============+=============+===========+===============+=================+============+
19| American Power Conversion (APC) - PDU | | | | | |
20+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
21| Cisco UCS Manager | X | X | X | | |
22+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
23| Digital Loggers, Inc. - PDU | | | | | |
24+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
25| HP Moonshot - iLO Chassis Manager | X | X | X | | |
26+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
27| HP Moonshot - iLO4 (IPMI) | X | X | | | X |
28+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
29| IBM Hardware Management Console (HMC) | X | X | | | |
30+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
31| IPMI | X | X | | X | X |
32+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
33| Intel AMT | X | X | | X | |
34+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
35| Manual | | | | | |
36+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
37| Microsoft OCS - Chassis Manager | X | X | X | | |
38+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
39| OpenStack Nova | | X | | | |
40+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
41| SeaMicro 15000 | X | X | X | | |
42+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
43| Sentry Switch CDU - PDU | | | | | |
44+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
45| VMWare | X | X | X | | |
46+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
47| Virsh (virtual systems) | X | X | X | | |
48+---------------------------------------+-------------+-----------+---------------+-----------------+------------+
490
=== removed file 'docs/proxy.rst'
--- docs/proxy.rst 2016-04-07 17:04:26 +0000
+++ docs/proxy.rst 1970-01-01 00:00:00 +0000
@@ -1,81 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _proxy:
4
5Proxy Configuration
6===================
7
8In most cases, the machines deployed in a MAAS installation will use a proxy to
9access the archive. Alternatively, MAAS can be told to use an externall
10configured proxy, or none at all.
11
12As of MAAS 2.0, the default MAAS region controller configuration will create a
13maas-proxy configuration that explicitly allows all of the subnets in the
14configuration to use it for a proxy.
15
16
17Assumptions
18-----------
19
20It is generally assumed that the MAAS region controller is not exposed to
21untusted networks. (That is, that there is a firewall between the MAAS region
22controller and any such networks.) Prior to MAAS 2.0, the only option if this
23was not the case was to manually edit /etc/maas/maas-proxy.conf, or use
24iptables to create a firewall on the host.
25
26As of MAAS 2.0, permission to use the proxy can be managed on a per-subnet
27basis. (The default is to allow proxying.)
28
29.. warning:: If your MAAS Region is connected to an untrusted network, you should disable that subnet in the proxy, as shown below.
30
31MAAS Proxy Installation
32-----------------------
33
34When you install a Region Controller, maas-proxy will be installed. The
35configuration of the proxy relies on maas-proxy being on the same machine as
36the Region Controller.
37
38
39Using an external proxy
40-----------------------
41If you want to use an external proxy, see the Network Configuration section of
42the web user interface to set the proxy url.
43
44.. image:: media/external-proxy.png
45
46Alternatively, the following
47command will specify squid.example.com as the proxy, using port 3128::
48
49 $ maas admin maas set-config name=http_proxy value=http://squid.example.com:3128/
50
51Disable proxying for a Subnet
52-----------------------------
53As an example, we will configure MAAS to disable the proxy for a subnet::
54
55 $ maas admin subnet update 192.168.0.0/22 allow_proxy=False
56
57Enable proxying for a Subnet
58----------------------------
59To re-enable the proxy for that subnet::
60
61 $ maas admin subnet update 192.168.0.0/22 allow_proxy=True
62
63Allow an arbitrary subnet to use the Proxy
64------------------------------------------
65Since the default is to allow proxying, simply create the subnet in MAAS::
66
67 $ maas admin subnets create cidr=192.168.100.0/23
68
69You may wish to set other parameters on the subnet.
70
71Disabling proxying
72------------------
73If you want to not use any proxy, see the Network Configuration section of
74the web user interface and uncheck the "Enable the use of an APT and HTTP/HTTPS
75proxy" box.
76
77.. image:: media/no-proxy.png
78
79Alternatively, the following command will disable the proxy::
80
81 $ maas admin maas set-config name=enable_http_proxy value=False
820
=== removed file 'docs/rack-configuration.rst'
--- docs/rack-configuration.rst 2016-04-26 17:31:11 +0000
+++ docs/rack-configuration.rst 1970-01-01 00:00:00 +0000
@@ -1,192 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _rack-configuration:
4
5Rack Controller Configuration
6=============================
7
8Before any of MAAS's features can be used for the first time, you must have
9a Rack Controller and configure at least one VLAN to manage DHCP for at least
10a subnet. Each machine can be attached to any number of subnets, which may or
11may not be managed by MAAS.
12
13Managing a VLAN normally means that MAAS will server DHCP from the Rack
14Controller, for the purpose of providing IP address to machines that
15are being enlisted or commissioned. Also, any other DHCP client that is
16on the VLAN will obtain a dynamic IP address from the MAAS DHCP server.
17
18**Do this only on a network that was set up with this in mind**. Enabling
19your own DHCP server that competes with an existing one that's
20being managed by MAAS can cause serious disruption, and it can be hard
21for administrator to track the source of the problem. Worse, the problems
22may not become immediately noticeable. Make sure you understand the
23implications of running a DHCP server before doing this. If MAAS detects any
24DHCP servers already running on these networks, it will show them on the
25rack's configuration page.
26
27
28Network requirements
29--------------------
30
31The Rack Controller manages DHCP for subnet(s) in the VLAN(s) that it is
32connected to via one of its interfaces defined in MAAS. Rack Controller
33interfaces are discovered automatically, when MAAS is installed, and any
34future changes are automatically communicated to the region.
35
36When a Rack Controller manages machines on the network through one of the
37VLANs it is connected to, the machines must be in the same subnet as the
38Rack Controller interface connected to that VLAN. This is because:
39
40#. If the VLAN that the Rack Controller is connected to is configured to
41 provide DHCP, the nodes must be able to configure their own network
42 interfaces using MAAS's DHCP server. This means that either they must
43 be on the same subnet, or that DHCP packets are being specially routed
44 between the machine's subnet and MAAS' DHCP server.
45
46
47Registration
48------------
49
50If you install your first Rack Controller on the same system as the Region
51Controller, as is the case when you install the full "maas" ubuntu package,
52it will be automatically accepted by default (but not yet configured, see
53below). Any other Rack Controllers you set up will show up automatically
54after they have been manually added to MAAS.
55
56To install a new MAAS Rack Controller, at the command line, type::
57
58 $ sudo apt-get install maas-rack-controller
59
60Once installed, you will need to input the shared secret, in order
61to allow the Rack Controller to authenticate with the Region Controller.
62You can obtain the shared secret from the Region Controller. The
63shared secret can be copied from the Region Controller in::
64
65 /var/lib/maas/secret
66
67Once you have copied the secret, you can install it in the Rack
68Controller. At the command line, type::
69
70 $ sudo maas-rack install-shared-secret
71
72Once installed, you will need to reconfigure the Rack Controller
73to correctly point to the API hostname or IP address of the Region
74Controller that's on the same network as the Rack Controller::
75
76 $ sudo dpkg-reconfigure maas-rack-controller
77
78The configuration for the MAAS Rack Controller will automatically
79run and pop up this config screen:
80
81.. image:: media/install_cluster-config.*
82
83This is where the MAAS Rack Controller is prompting for the URL
84of the MAAS Region Controller. Once entered, the Rack Controller
85configuration will be complete.
86
87
88Interface Management
89--------------------
90
91MAAS automatically recognises the network interfaces on each Rack
92Controller. Some (though not necessarily all) of these will be connected
93to subnets on a VLAN inside a Fabric. In other words, the Rack Controllers
94will be connected to VLANs, and the subnets being served on these.
95
96Once a new Rack Controller is connected, it will try to autodetect in
97what Subnet, VLAN and even Fabric the interface is connected to. If these
98have not being created, new Subnets, VLAN's and Fabrics and Spaces will
99be created.
100
101If Fabrics, VLANs and Subnets are already created, once MAAS automatically
102recognises the Rack Controller network interfaces, it will try to determine
103to which these are connected to before being able to provide services.
104
105As such, each Rack Controller interface will determine whether a Rack
106Controller can provide DHCP on an specific VLAN, or for advanced configuration,
107a Rack Controller interface will determine whether a Rack Controller
108can be a primary or backup Rack on an HA configuration.
109
110If for any reason, the Rack Controller interfaces are mis-identified
111and are in the correct fabric, the user can manually change that by
112editing the Rack Controller Fabric information:
113
114.. image:: media/rack-interface-edit.png
115
116
117In order for MAAS to be able to manage a machine throught its lifecycle,
118it needs to provide DHCP for at least one subnet, by configuring the
119corresponding VLAN to which the Rack Controller is connected to.
120
121
122Providing DHCP + HA
123-------------------
124In order for MAAS to be able to manage machines on the network, and more
125specifically, in order to be able to enlist, commission and deploy machines
126it needs to provide and manage DHCP. As such, Rack Controller(s) can
127provide DHCP on the different VLANs it is connected to.
128
129Dynamic range & addresses
130^^^^^^^^^^^^^^^^^^^^^^^^^
131Starting from MAAS 2.0, a Dynamic range needs to be defined in order for
132MAAS to be able to provide DHCP for machines. The purpose of the dynamic
133range is to:
134
135 * provide DHCP for machines that are performing auto-registration (also
136 called enlistment), or
137 * provide DHCP for machines that are being commissioned.
138
139 This means that when a machine is being enlisted or commissioned, they
140 DHCP from the dynamic range in order to perform those two steps.
141
142 In turn, however, machines that are being deployed will, by default,
143 obtain static IP addresses (DHCP or otherwise) from the section of the
144 subnet that has not been reserved for the Dynamic Range on such VLAN.
145 This allows the machine to obtain IP addresses that will remain
146 allocated to a machine throughout the rest of its deployment.
147
148Enabling a DHCP on a VLAN (optional HA)
149^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
150As an example, we will configure MAAS to provide DHCP on a Rack
151Controller.
152
153The first thing that we need to do is select in what VLAN and subnet
154we would like to configure DHCP. In this case, in order to be able
155to PXE boot machines, we need to configure DHCP for an 'untagged' VLAN
156under any fabric. In this example, we will chose the 'untagged' VLAN on
157'fabric-0'. The subnet '192.168.10.0/24' is on this 'untagged' VLAN. We
158can see that the Rack Controller has access to this VLAN via its 'eth0'
159interface.
160
161The second step is to create a dynamic range::
162
163 $ maas admin ipranges create type=dynamic start_ip=192.168.10.28 end_ip=192.168.10.100
164
165The third, and last step is to enable DHCP on a VLAN. For this to be
166effective we need to at least select the Primary Rack controller that will
167provide DHCP::
168
169 $ maas admin vlan update fabric-0 untagged dhcp_on=True primary_rack=node01
170
171If enabling DHCP HA is something you need for your MAAS deployment, then
172following operation would enable HA::
173
174 $ maas admin vlan update fabric-0 untagged dhcp_on=True primary_rack=node01 secondary_rack=node02
175
176Note that if you are enabling DHCP over the CLI, but the subnet doesn't have a
177Gateway IP defined, you can define the gateway using::
178
179 $ maas admin subnet update 192.168.10.0/24 gateway_ip=192.168.10.1
180
181You can also do the same configuration via the WebUI on the VLAN details page:
182
183.. image:: media/vlan_provide_dhcp.png
184
185
186Multiple networks
187-----------------
188
189A single Rack Controller can be connected to more than one VLAN, each from a
190different Rack Controller interface. This allows one Rack Controller to
191manage different subnets to help scale your Rack Controller or to satisfy
192your network architecture.
1930
=== modified file 'docs/releases.rst'
--- docs/releases.rst 2016-04-11 16:23:26 +0000
+++ docs/releases.rst 2017-02-28 15:11:34 +0000
@@ -1,62 +1,29 @@
1*************
1MAAS Releases2MAAS Releases
2=============3*************
34
45Stable Release
5MAAS currently has the following releases:6==============
6
7
81.5
9---
10
11* Status: Deprecated.
12* Last release: 1.5.4
13* Location: ubuntu/trusty
14* Support:
15
16 * Release has been deprecated.
17 * No longer providing updates.
18 * Users need to upgrade to 1.7 or 1.9.
19
20
211.7
22---
23
24* Status: Old Stable Release
25* Current Release: 1.7.6
26* Location: ubuntu/trusty-updates
27* Support:
28
29 * It is currently only supported on Ubuntu trusty-updates.
30 * It will be supported until 1.9 series is SRU'd into Trusty.
31 * It will be deprecated once supreseeded by 1.9 around February 2016.
32
33
341.8
35---
36
37* Status: Deprecated
38* Initial release data: June 2015
39* Current release: 1.8.3
40* Location: No longer available
41* Support:
42
43 * Release has been deprecated.
44 * No longer providing updates.
45 * Users need to upgrade to 1.9.
46
477
481.981.9
49---9---
5010
11 * Status: Old Stable Release
12 * Latest version: 1.9.4
13 * Support: Ubuntu Trusty LTS. Only critical issues.
14
152.1
16---
17
51 * Status: Current Stable Release18 * Status: Current Stable Release
52 * Initial Release date: November 201519 * Latest version: 2.1.3
53 * Current release: 1.9.020 * Support: Ubuntu Xenial LTS.
54 * Location: ppa:maas/stable21
55 * Support: This will be an LTS release.22Development release
5623===================
5724
582.0252.2
59---26---
6027
61 * Status: New Development Release28 * Status: Current development release
62 * Estimated Release Date: March or April 201629 * Localtion: ppa:maas/next
6330
=== removed file 'docs/sstreams-mirror.rst'
--- docs/sstreams-mirror.rst 2016-10-17 20:43:34 +0000
+++ docs/sstreams-mirror.rst 1970-01-01 00:00:00 +0000
@@ -1,64 +0,0 @@
1Local Mirroring of Boot Images
2==============================
3
4Boot images are delivered to MAAS via the simplestreams protocol. It is
5useful in some situations, such as testing, to mirror the images locally
6so that you don't need to repeatedly pull them down over a slower Internet
7link.
8
9First, install the required packages on the host where you wish to store
10the mirrored images::
11
12 $ sudo apt-get install simplestreams ubuntu-cloudimage-keyring apache2
13
14Now you can pull the images over using the mirroring tools for simplestreams.
15This example gets the daily trusty (14.04) and xenial (16.04) images for the
16amd64 architecture::
17
18 $ sudo sstream-mirror --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg https://images.maas.io/ephemeral-v3/daily/ /var/www/html/maas/images/ephemeral-v3/daily 'arch=amd64' 'release~(trusty|xenial)' --max=1
19
20This may take a while as hundreds of megabytes will be downloaded.
21
22As of MAAS 2.1 bootloaders are now included in the simplestream. In order for
23MAAS to work bootloaders must be mirrored as well. It is recommended that all
24bootloaders are mirrored::
25
26 $ sudo sstream-mirror --keyring=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg https://images.maas.io/ephemeral-v3/daily/ /var/www/html/maas/images/ephemeral-v3/daily 'os~(grub*|pxelinux)' --max=1
27
28The images will be written to the local disk and you can verify their
29presence by browsing to
30``http://<server>/maas/images/ephemeral-v3/daily/streams/v1/index.sjson``
31(replace ``<server>`` with your own server's name).
32
33It is a good idea to configure a ``cron`` job to repeat this import on a
34regular basis to keep your mirror up-to-date.
35
36
37Configuring MAAS to use the local mirror
38----------------------------------------
39
40You can do this using the API or the web UI. To do this via the API you
41can use the ``maas`` (see :doc:`maascli`) command, logged in as the admin
42user::
43
44 $ maas <profile> boot-sources create url=http://<server>/images/ephemeral-v3/daily/ keyring_filename=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg
45
46Note that if you wish to use older images (which change far less frequently,
47but will be lacking security updates), you can use the ``releases`` stream,
48such as::
49
50 $ maas <profile> boot-sources create url=http://<server>/images/ephemeral-v3/releases/ keyring_filename=/usr/share/keyrings/ubuntu-cloudimage-keyring.gpg
51
52And then initiate the download with::
53
54 $ maas <profile> boot-resources import
55
56See :doc:`bootsources` for more detail.
57
58In the web UI, browse to the Settings tab as the admin user and scroll down
59to the "Boot Images" section. There you will find input boxes for the
60Sync URL and the keyring path, which should be set as the values in the API
61example above.
62
63The import is initiated by browsing to the Images tab and following the
64instructions on that page.
650
=== removed file 'docs/static-ips.rst'
--- docs/static-ips.rst 2016-03-28 13:54:47 +0000
+++ docs/static-ips.rst 1970-01-01 00:00:00 +0000
@@ -1,53 +0,0 @@
1.. _static-ips:
2
3Static IPs
4==========
5
6.. note::
7
8 This feature is available in MAAS versions 1.6 and above.
9 If you're writing a client application, you can check if MAAS
10 supports this feature via the web API; see the documentation for the
11 ``static-ipaddresses`` capability :ref:`here<cap-static-ipaddresses>`.
12
13Previously, MAAS relied on the DHCP server to allocate its own IP
14addresses to nodes, using the IP range defined on the relevant cluster
15interface. This was found to be unreliable since the IPs were only known
16once the node had booted and requested an address, and had race conditions
17when the lease expired and another machine was looking for its own IP.
18
19MAAS now defines an additional range on the cluster for static IPs that
20are allocated by MAAS itself (see :doc:`rack-configuration` for more
21information about this).
22
23In normal operation, MAAS will automatically choose and allocate a static IP to
24any node network interfaces where it knows on which cluster interface that node
25interface is connected.
26
27The :doc:`api` contains functions to request additional static IPs, which are
28summarised here:
29
30Sticky IPs
31----------
32Synopsis:
33 ``POST /api/2.0/nodes/{system_id}/`` ``op=claim_sticky_ip_address``
34
35Normally, IPs are released back into the pool of available IPs once a node
36is released by a user. A "Sticky" IP is one which is allocated to an interface
37on a node that does not change unless the sticky IP is removed. This enables
38more predictable IPs at the cost of wasting IPs when the node is not in use.
39
40Unmanaged User-allocated IPs
41----------------------------
42Synopsis:
43 ``GET /api/2.0/ipaddresses/``
44
45 ``POST /api/2.0/ipaddresses/`` ``op=release``
46
47 ``POST /api/2.0/ipaddresses/`` ``op=reserve``
48
49This API allows users to request an ad-hoc IP address for use in any way they
50see fit. The IP is not tied to any node in MAAS and is guaranteed not to be
51in use by MAAS itself.
52
53See the full :doc:`api` documentation for precise technical details.
540
=== removed file 'docs/storage.rst'
--- docs/storage.rst 2016-01-25 14:10:29 +0000
+++ docs/storage.rst 1970-01-01 00:00:00 +0000
@@ -1,679 +0,0 @@
1.. -*- mode: rst -*-
2
3.. _storage:
4
5=========================
6Storage
7=========================
8
9.. note::
10
11 This feature is available in MAAS versions 1.9 and above on Ubuntu
12 deployments. If you're writing a client application, you can check
13 if MAAS supports this feature via the web API; see the documentation
14 for the ``storage-deployment-ubuntu`` capability
15 :ref:`here<cap-storage-deployment-ubuntu>`.
16
17MAAS has the ability to configure any storage layout during node deployment.
18MAAS doesn't just do simple partitioning it supports complex storage layouts,
19including setting up and configuring Bcache, RAID, and LVM. This gives users
20unlimited possibilities on the storage configurations they want to deploy.
21
22Layouts
23-------
24
25When a node is acquired by a user it gets a default storage layout. This layout
26provides the basic storage configuration to allow a node to deploy
27successfully. The default storage layout can also be adjusted allowing an
28administrator to make the decision on which layout will be the default.
29
30The users deploying nodes are not limited by the default. They can set an
31explicit storage layout when they acquire a node or after they have acquried a
32node with the set-storage-layout API. The user acquiring a node or performing
33the set-storage-layout API calls can also customize the layout generation. Each
34layout has a set of options that can be set to adjust the generated layout.
35
36Below list all the available storage layouts and the available options for
37each.
38
39LVM Layout
40^^^^^^^^^^
41
42Creates a volume group `vgroot` on a partition that spans the entire boot disk.
43A logical volume `lvroot` is created for the full size of the volume group. The
44`lvroot` is formatted with `ext4` and set as the `/` mount point.
45::
46
47 NAME SIZE TYPE FSTYPE MOUNTPOINT
48 sda 100G disk
49 sda1 512M part fat32 /boot/efi
50 sda2 99.5G part lvm-pv(vgroot)
51 vgroot 99.5G lvm
52 lvroot 99.5G lvm ext4 /
53
54The following options are supported for this layout.
55::
56
57 boot_size: Size of the boot partition on the boot disk. Default is 0,
58 meaning not to create the boot partition. The '/boot' will be placed
59 on the root filesystem.
60 root_device: The block device to place the root partition on. Default is
61 the boot disk.
62 root_size: Size of the root partition. Default is 100%, meaning the
63 entire size of the root device.
64 vg_name: Name of the created volume group. Default is `vgroot`.
65 lv_name: Name of the created logical volume. Default is `lvroot`.
66 lv_size: Size of the created logical volume. Default is 100%, meaning
67 the entire size of the volume group.
68
69Flat Layout
70^^^^^^^^^^^
71
72Creates a partition that spans the entire boot disk. The partition is formatted
73with `ext4` and set as the `/` mount point.
74::
75
76 NAME SIZE TYPE FSTYPE MOUNTPOINT
77 sda 100G disk
78 sda1 512M part fat32 /boot/efi
79 sda2 99.5G part ext4 /
80
81The following options are supported for this layout.
82::
83
84 boot_size: Size of the boot partition on the boot disk. Default is 0,
85 meaning not to create the boot partition. The '/boot' will be placed
86 on the root filesystem.
87 root_device: The block device to place the root partition on. Default is
88 the boot disk.
89 root_size: Size of the root partition. Default is 100%, meaning the
90 entire size of the root device.
91
92Bcache Layout
93^^^^^^^^^^^^^
94
95Creates a Bcache using a partition that spans the entire boot disk as the
96backing device. Uses the smallest block device tagged with `ssd` as the cache
97device. The Bcache device is formatted with `ext4` and set as the `/` mount
98point. If no block devices exists on the node that are tagged with `ssd` then
99the Bcache device will not be created and the `flat` layout will be used.
100::
101
102 NAME SIZE TYPE FSTYPE MOUNTPOINT
103 sda 100G disk
104 sda1 512M part fat32 /boot/efi
105 sda2 99.5G part bc-backing
106 sdb 50G disk
107 sdb1 50G part bc-cache
108 bcache0 99.5G disk ext4 /
109
110The following options are supported for this layout.
111::
112
113 boot_size: Size of the boot partition on the boot disk. Default is 0,
114 meaning not to create the boot partition. The '/boot' will be placed
115 on the root filesystem.
116 root_device: The block device to place the root partition on. Default is
117 the boot disk.
118 root_size: Size of the root partition. Default is 100%, meaning the
119 entire size of the root device.
120 cache_device: The block device to use as the cache device. Default
121 is the smallest block device tagged ssd.
122 cache_mode: The cache mode to set the created Bcache device to. Default
123 is `writethrough`.
124 cache_size: The size of the partition on the cache device. Default is
125 100%, meaning the entire size of the cache device.
126 cache_no_part: Whether or not to create a partition on the cache device.
127 Default is false, meaning to create a partition using the given
128 `cache_size`. If set to true no partition will be created and the raw
129 cache device will be used as the cache.
130
131.. note::
132
133 The `/boot/efi` partition on all layouts will only be created on nodes that
134 deploy with UEFI.
135
136
137Setting the Layout
138------------------
139
140The following are a couple of was the storage layout can be changed either
141globally, on acquire, or after acquire.
142
143Globally
144^^^^^^^^
145
146The global default storage layout can be set using the API and the UI. This
147will change the default storage layout for when a node is acquired. `It will
148not adjust the layout of any node that is already passed the acquire stage.`::
149
150 $ maas my-maas-session maas set_config name=default_storage_layout value=flat
151
152Set Storage Layout
153^^^^^^^^^^^^^^^^^^
154
155If a node is already acquired and you want to adjust the storage layout the
156set_storage_layout API call can be used. The options for this API call do not
157require the `storage_layout_` prefix.::
158
159 $ maas my-maas-session node set-storage-layout <system-id> storage_layout=lvm lv_size=50%
160
161.. note::
162
163 This will completely remove any previous storage configuration on all block
164 devices.
165
166Block Devices
167-------------
168
169Once the initial storage layout has been configure on a node you can perform
170many operations to view and adjust the entire storage layout for the node. In
171MAAS there are two different types of block devices.
172
173**Physical**
174
175A physical block device is a physically attached block device. This being true
176storage on a machine. E.g. A 100G hard drive in a server.
177
178**Virtual**
179
180A virtual block device is a block device that is exposed by the Linux kernel
181when an operation is performed. Almost all the operations on a physical block
182device can be performed on a virtual block device. E.g. A RAID device exposed
183as `md0`.
184
185List Block Devices
186^^^^^^^^^^^^^^^^^^
187To view all block devices on a node use the `read` operation. This list both
188physical and virtual block devices.::
189
190 $ maas my-maas-session block-devices read node-f4e2281c-d19a-11e4-a5ac-00163edde41f
191 [
192 {
193 "size": 21474836480,
194 "resource_uri": "/MAAS/api/2.0/nodes/node-f4e2281c-d19a-11e4-a5ac-00163edde41f/blockdevices/6/",
195 "uuid": null,
196 "tags": [
197 "ssd",
198 "rotary"
199 ],
200 "name": "sda",
201 "partition_table_type": "MBR",
202 "id_path": "/dev/disk/by-id/ata-QEMU_HARDDISK_QM00001",
203 "path": "/dev/disk/by-dname/sda",
204 "model": "QEMU HARDDISK",
205 "block_size": 4096,
206 "type": "physical",
207 "id": 6,
208 "serial": "QM00001",
209 "partitions": [
210 {
211 "uuid": "e94ca09a-d83e-4521-8bac-833da2ed0b3e",
212 "bootable": false,
213 "filesystem": {
214 "label": null,
215 "mount_point": null,
216 "uuid": "61d447c2-387d-4fb1-885a-65eeef91e92a",
217 "fstype": "lvm-pv"
218 },
219 "path": "/dev/disk/by-dname/sda-part1",
220 "resource_uri": "/MAAS/api/2.0/nodes/node-f4e2281c-d19a-11e4-a5ac-00163edde41f/blockdevices/6/partition/1",
221 "type": "partition",
222 "id": 1,
223 "size": 21471690752
224 }
225 ]
226 },
227 {
228 "resource_uri": "/MAAS/api/2.0/nodes/node-f4e2281c-d19a-11e4-a5ac-00163edde41f/blockdevices/11/",
229 "uuid": "f58b8fb2-dcf2-4ba9-a01c-60409829a64e",
230 "tags": [],
231 "partitions": [],
232 "name": "vgroot-lvroot",
233 "partition_table_type": null,
234 "filesystem": {
235 "label": "root",
236 "mount_point": "/",
237 "uuid": "9f09e3fd-2484-4da5-bb56-a72a0c478d06",
238 "fstype": "ext4"
239 },
240 "id_path": null,
241 "path": "/dev/disk/by-dname/lvroot",
242 "model": null,
243 "block_size": 4096,
244 "type": "virtual",
245 "id": 11,
246 "serial": null,
247 "size": 21470642176
248 }
249 ]
250
251Read Block Device
252^^^^^^^^^^^^^^^^^
253
254If you want to read just one block device instead of listing all block devices
255the `read` operation on the `block-device` endpoint provides that information.
256::
257
258 $ maas my-maas-session block-device read node-f4e2281c-d19a-11e4-a5ac-00163edde41f 12
259 {
260 "size": 21474836480,
261 "resource_uri": "/MAAS/api/2.0/nodes/node-f4e2281c-d19a-11e4-a5ac-00163edde41f/blockdevices/12/",
262 "uuid": null,
263 "tags": [],
264 "name": "sdb",
265 "partition_table_type": null,
266 "id_path": "",
267 "path": "/dev/disk/by-dname/sdb",
268 "model": "QEMU HARDDISK",
269 "block_size": 4096,
270 "type": "physical",
271 "id": 12,
272 "serial": "QM00001",
273 "partitions": []
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches