Merge lp:~allenap/maas/markdownify into lp:~maas-committers/maas/trunk

Proposed by Gavin Panella
Status: Rejected
Rejected by: MAAS Lander
Proposed branch: lp:~allenap/maas/markdownify
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 13972 lines (+4839/-7644)
84 files modified
.bzrignore (+0/-3)
.gitignore (+0/-3)
Makefile (+14/-31)
buildout.cfg (+0/-17)
docs/_static/versions.js (+0/-91)
docs/_templates/maas/layout.html (+0/-31)
docs/_templates/maas/localtoc.html (+0/-3)
docs/_templates/maas/relations.html (+0/-31)
docs/_templates/maas/static/css/main.css (+0/-75)
docs/_templates/maas/static/flasky.css_t (+0/-564)
docs/_templates/maas/theme.conf (+0/-6)
docs/about.md (+6/-39)
docs/api_authentication.md (+49/-63)
docs/bootsources.md (+12/-28)
docs/capabilities.md (+16/-34)
docs/changelog.md (+665/-1101)
docs/cluster-configuration.md (+52/-127)
docs/conf.py (+0/-305)
docs/configure.md (+137/-230)
docs/development/building-packages.md (+58/-73)
docs/development/cluster-bootstrap.md (+35/-67)
docs/development/cluster-registration.md (+28/-54)
docs/development/lease-scanning-and-dns.md (+17/-29)
docs/development/metadata.md (+52/-108)
docs/development/philosophy.md (+14/-40)
docs/development/preseeds.md (+61/-103)
docs/development/rpc.md (+74/-150)
docs/development/security.md (+11/-36)
docs/development/tagging.md (+42/-78)
docs/development/transactions.md (+36/-82)
docs/enum.md (+0/-17)
docs/getting-help.md (+24/-35)
docs/hacking.md (+164/-343)
docs/hardware-enablement-kernels.md (+25/-55)
docs/index.md (+32/-138)
docs/install.md (+147/-282)
docs/installing-ubuntu.md (+32/-63)
docs/ipv6.md (+57/-132)
docs/juju-quick-start.md (+90/-131)
docs/kernel-options.md (+18/-24)
docs/maascli.md (+427/-583)
docs/man/maas-region-admin.8.md (+21/-32)
docs/man/maas.8.md (+404/-538)
docs/models.md (+0/-17)
docs/networks.md (+69/-164)
docs/nodes.md (+28/-58)
docs/orientation.md (+42/-89)
docs/physical-zones.md (+46/-113)
docs/plugins/gfm/LICENSE (+24/-0)
docs/plugins/gfm/README.md (+6/-0)
docs/plugins/gfm/gfm/__init__.py (+17/-0)
docs/plugins/gfm/gfm/autolink.py (+44/-0)
docs/plugins/gfm/gfm/automail.py (+24/-0)
docs/plugins/gfm/gfm/hidden_hilite.py (+16/-0)
docs/plugins/gfm/gfm/semi_sane_lists.py (+30/-0)
docs/plugins/gfm/gfm/spaced_link.py (+41/-0)
docs/plugins/gfm/gfm/strikethrough.py (+17/-0)
docs/plugins/gfm/mdx_gfm/__init__.py (+28/-0)
docs/plugins/gfm/mdx_partial_gfm/__init__.py (+44/-0)
docs/plugins/gfm/test.py (+31/-0)
docs/plugins/gfm/tests/test_autolink.py (+46/-0)
docs/plugins/gfm/tests/test_automail.py (+32/-0)
docs/plugins/gfm/tests/test_case.py (+29/-0)
docs/plugins/gfm/tests/test_gfm.py (+111/-0)
docs/plugins/gfm/tests/test_hidden_hilite.py (+49/-0)
docs/plugins/gfm/tests/test_semi_sane_lists.py (+40/-0)
docs/plugins/gfm/tests/test_spaced_link.py (+147/-0)
docs/plugins/gfm/tests/test_strikethrough.py (+39/-0)
docs/plugins/mdx_anchors_away/__init__.py (+37/-0)
docs/plugins/mdx_callouts/__init__.py (+42/-0)
docs/plugins/mdx_foldouts/__init__.py (+54/-0)
docs/sstreams-mirror.md (+26/-42)
docs/static-ips.md (+28/-44)
docs/tags.md (+53/-102)
docs/troubleshooting.md (+111/-173)
docs/versions.py (+0/-47)
man/maas-region-admin.8 (+43/-70)
man/maas.8 (+571/-699)
required-packages/doc (+2/-3)
schema/README.md (+13/-31)
setup.py (+0/-4)
utilities/convert-rst-docs-to-markdown (+22/-0)
utilities/doc-lint (+17/-6)
versions.cfg (+0/-7)
To merge this branch: bzr merge lp:~allenap/maas/markdownify
Reviewer Review Type Date Requested Status
MAAS Maintainers Pending
Review via email: mp+256718@code.launchpad.net

Description of the change

Convert MAAS docs from ReStructuredText using Sphinx to GitHub-Flavoured Markdown, with some extensions. This approach is taken from the Juju documentation (http://github.com/juju/docs).

Still to do:

* Convert template/doc.txt

* Render api.rst as Markdown instead.

* Convert README.

* Check for remaining references to RST, SPHINX, and so on.

* Move rendering of pages into the region server, done on the fly.

* Static rendering should perhaps be done in a separate branch.
   This would pull in the docs for 1.5, 1.7, 1.8, and trunk.

To post a comment you must log in.
Revision history for this message
MAAS Lander (maas-lander) wrote :

Transitioned to Git.

lp:maas has now moved from Bzr to Git.
Please propose your branches with Launchpad using Git.

git clone https://git.launchpad.net/maas

Unmerged revisions

3842. By Gavin Panella

Remove remaining Sphinx machinery.

3841. By Gavin Panella

Include the rst-to-md convertion script.

3840. By Gavin Panella

3rd attempt at converting the docs from rst to markdown.

3839. By Gavin Panella

Undo 1st conversion of docs.

3838. By Gavin Panella

Undo 2nd conversion of docs.

3837. By Gavin Panella

Render docs into HTML.

3836. By Gavin Panella

Documentation plugins borrowed from http://github.com/juju/docs.

3835. By Gavin Panella

Update Makefile.

3834. By Gavin Panella

Update rendered man pages.

3833. By Gavin Panella

Convert all documentation to Markdown using pandoc, 2nd attempt.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file '.bzrignore'
--- .bzrignore 2015-03-25 20:32:06 +0000
+++ .bzrignore 2015-04-17 21:06:27 +0000
@@ -19,15 +19,12 @@
19./db19./db
20./develop-eggs20./develop-eggs
21./dist21./dist
22./docs/_autosummary
23./docs/_build
24./docs/api.rst22./docs/api.rst
25./eggs23./eggs
26./include24./include
27./lib25./lib
28./local26./local
29./logs/*27./logs/*
30./man/.doctrees
31./media/demo/*28./media/demo/*
32./media/development29./media/development
33./parts30./parts
3431
=== modified file '.gitignore'
--- .gitignore 2015-03-23 15:15:54 +0000
+++ .gitignore 2015-04-17 21:06:27 +0000
@@ -19,15 +19,12 @@
19/db19/db
20/develop-eggs20/develop-eggs
21/dist21/dist
22/docs/_autosummary
23/docs/_build
24/docs/api.rst22/docs/api.rst
25/eggs23/eggs
26/include24/include
27/lib25/lib
28/local26/local
29/logs/*27/logs/*
30/man/.doctrees
31/media/demo/*28/media/demo/*
32/media/development29/media/development
33/parts30/parts
3431
=== modified symlink 'CHANGELOG'
=== target changed u'docs/changelog.rst' => u'docs/changelog.md'
=== added symlink 'HACKING'
=== target is u'docs/hacking.md'
=== added symlink 'INSTALL'
=== target is u'docs/install.md'
=== modified file 'Makefile'
--- Makefile 2015-04-16 11:51:27 +0000
+++ Makefile 2015-04-17 21:06:27 +0000
@@ -141,14 +141,6 @@
141 $(buildout) install flake8141 $(buildout) install flake8
142 @touch --no-create $@142 @touch --no-create $@
143143
144bin/rst-lint: bin/buildout buildout.cfg versions.cfg setup.py
145 $(buildout) install rst-lint
146 @touch --no-create $@
147
148bin/sphinx bin/sphinx-build: bin/buildout buildout.cfg versions.cfg setup.py
149 $(buildout) install sphinx
150 @touch --no-create $@
151
152bin/py bin/ipy: bin/buildout buildout.cfg versions.cfg setup.py144bin/py bin/ipy: bin/buildout buildout.cfg versions.cfg setup.py
153 $(buildout) install repl145 $(buildout) install repl
154 @touch --no-create bin/py bin/ipy146 @touch --no-create bin/py bin/ipy
@@ -206,7 +198,7 @@
206 @$(error Use `$(MAKE) test` to generate coverage data, or invoke a \198 @$(error Use `$(MAKE) test` to generate coverage data, or invoke a \
207 test script using the `--with-coverage` flag)199 test script using the `--with-coverage` flag)
208200
209lint: lint-py lint-js lint-doc lint-rst201lint: lint-py lint-js lint-doc
210202
211pocketlint = $(call available,pocketlint,python-pocket-lint)203pocketlint = $(call available,pocketlint,python-pocket-lint)
212204
@@ -230,16 +222,6 @@
230lint-doc:222lint-doc:
231 @utilities/doc-lint223 @utilities/doc-lint
232224
233# lint-rst 0.11.1 shouldn't be used on our documentation because it
234# doesn't understand Sphinx's extensions, and doesn't grok linking
235# between documents, hence complaints about broken links. However,
236# Sphinx itself warns about lint when building the docs.
237lint-rst: sources = README HACKING.txt schema/README.rst
238lint-rst: bin/rst-lint
239 @find $(sources) -type f \
240 -printf 'Linting %p...\n' \
241 -exec bin/rst-lint --encoding=utf8 {} \;
242
243# JavaScript lint is checked in parallel for speed. The -n20 -P4 seetting225# JavaScript lint is checked in parallel for speed. The -n20 -P4 seetting
244# worked well on a multicore SSD machine with the files cached, roughly226# worked well on a multicore SSD machine with the files cached, roughly
245# doubling the speed, but it may need tuning for slower systems or cold caches.227# doubling the speed, but it may need tuning for slower systems or cold caches.
@@ -260,16 +242,19 @@
260sampledata: bin/maas-region-admin bin/database syncdb242sampledata: bin/maas-region-admin bin/database syncdb
261 $(dbrun) bin/maas-region-admin loaddata src/maasserver/fixtures/dev_fixture.yaml243 $(dbrun) bin/maas-region-admin loaddata src/maasserver/fixtures/dev_fixture.yaml
262244
263doc: bin/sphinx docs/api.rst245doc: $(patsubst %.md,%.html,$(shell find docs -name '*.md'))
264 bin/sphinx246
265247%.html: %.md
266doc-with-versions: bin/sphinx docs/api.rst248 PYTHONPATH="docs/plugins:docs/plugins/gfm" markdown_py \
267 cd docs/_build; make SPHINXOPTS="-A add_version_switcher=true" html249 -x callouts -x anchors_away -x foldouts -x meta -x def_list \
268250 -x attr_list -e utf8 --file=$@ $^
269man: $(patsubst docs/man/%.rst,man/%,$(wildcard docs/man/*.rst))251 @# FIXME: broken plugin: partial_gfm
270252 @# FIXME: render these pages on-the-fly into a template.
271man/%: docs/man/%.rst | bin/sphinx-build253
272 bin/sphinx-build -b man docs man $^254man: $(patsubst docs/man/%.md,man/%,$(wildcard docs/man/*.md))
255
256man/%: docs/man/%.md
257 pandoc -s -f markdown_github -t man $^ -o $@
273258
274enums: $(js_enums)259enums: $(js_enums)
275260
@@ -290,8 +275,6 @@
290 $(RM) $(js_enums)275 $(RM) $(js_enums)
291 $(RM) *.log276 $(RM) *.log
292 $(RM) docs/api.rst277 $(RM) docs/api.rst
293 $(RM) -r docs/_autosummary docs/_build
294 $(RM) -r man/.doctrees
295 $(RM) coverage.data coverage.xml278 $(RM) coverage.data coverage.xml
296 $(RM) -r coverage279 $(RM) -r coverage
297280
298281
=== modified file 'buildout.cfg'
--- buildout.cfg 2015-04-10 13:58:31 +0000
+++ buildout.cfg 2015-04-17 21:06:27 +0000
@@ -9,7 +9,6 @@
9 region9 region
10 region-test10 region-test
11 repl11 repl
12 sphinx
13 testing-test12 testing-test
14extensions = buildout-versions13extensions = buildout-versions
15buildout_versions_file = versions.cfg14buildout_versions_file = versions.cfg
@@ -245,22 +244,6 @@
245entry-points =244entry-points =
246 flake8=flake8.run:main245 flake8=flake8.run:main
247246
248[rst-lint]
249recipe = zc.recipe.egg
250eggs =
251 restructuredtext-lint
252scripts =
253 rst-lint
254
255[sphinx]
256recipe = collective.recipe.sphinxbuilder
257source = ${buildout:directory}/docs
258build = ${buildout:directory}/docs/_build
259extra-paths = ${common:extra-paths}
260eggs =
261 ${region:eggs}
262 ${cluster:eggs}
263
264# Convenient REPLs with all eggs available.247# Convenient REPLs with all eggs available.
265[repl]248[repl]
266recipe = z3c.recipe.scripts249recipe = z3c.recipe.scripts
267250
=== removed directory 'docs/_static'
=== removed file 'docs/_static/versions.js'
--- docs/_static/versions.js 2014-04-14 21:42:00 +0000
+++ docs/_static/versions.js 1970-01-01 00:00:00 +0000
@@ -1,91 +0,0 @@
1/* Javascript utilities to create a version switcher widget.
2
3This is mostly done, but not limited to support creating links
4between the different versions of the MAAS documentation on
5maas.ubuntu.com.
6
7*/
8
9function page_exists(url) {
10 // Returns wether a page at the give URL exists or not.
11 var result = false;
12 $.ajax({
13 type: 'HEAD',
14 url: url,
15 async: false,
16 success: function () {
17 result = true;
18 }
19 });
20 return result;
21};
22
23function doc_page(version, doc_prefix) {
24 // Returns the URL of the page equivalent to the current page but from
25 // the given version of the documentation.
26 // e.g. if the current page is 'http://host/<doc_prefix>1.6/somepage.html', calling
27 // doc_page('1.7') will return 'http://host/<doc_prefix>1.7/somepage.html'.
28 var pattern = new RegExp('\/' + doc_prefix + '([\\d\\.]*)\/')
29 var newpathname = window.location.pathname.replace(
30 pattern, '/' + doc_prefix + version + '/');
31 return window.location.origin + newpathname + window.location.hash;
32};
33
34function doc_homepage(version, doc_prefix) {
35 // Returns the URL of the homepage for the documentation of the given
36 // version.
37 return window.location.origin + '/' + doc_prefix + version + '/';
38};
39
40
41function set_up_version_switcher(selector, doc_prefix) {
42 // Create version switcher widget.
43 $(selector).replaceWith($('\
44 <h3>Version</h3> \
45 <select id="id_sidebar_release" name="release"> \
46 </select>'));
47
48 release_select = $("#id_sidebar_release");
49
50 // Request version list and populate version switcher widget with it.
51 var json_url = "/" + doc_prefix + "/_static/versions.json";
52 var jqxhr = $.getJSON(json_url, function(data) {
53 var first = true;
54 $.each(data, function (value, text) {
55 var option_value = value;
56 if (first) {
57 // The first element corresponds to the documentation for trunk.
58 option_value = '';
59 first = false;
60 }
61 var option = $("<option></option>").attr("value", option_value).text(text);
62 if (value == DOCUMENTATION_OPTIONS.VERSION) {
63 option.attr('selected', 'selected');
64 }
65 release_select.append(option);
66 });
67 });
68
69 // jqxhr.fail only exists in recent versions of jQuery;
70 // it's not there with the version shipped with Sphinx
71 // on Precise.
72 if ($.isFunction(jqxhr.fail)) {
73 jqxhr.fail(function(jqXHR) {
74 console.log("error requesting versions file");
75 console.log(jqXHR);
76 });
77 }
78
79 // Handle version switcher change: redirect to the equivalent page in the
80 // selected version of the documentation if that page exists, redirects to the
81 // homepage of the selected version of the documentation otherwise.
82 $("#id_sidebar_release").change(function () {
83 var version = $(this).find('option:selected').val();
84 var same_page_in_other_version = doc_page(version, doc_prefix);
85 if (page_exists(same_page_in_other_version)) {
86 window.location = same_page_in_other_version;
87 } else {
88 window.location = doc_homepage(version, doc_prefix);
89 }
90 });
91};
920
=== removed directory 'docs/_templates'
=== removed directory 'docs/_templates/maas'
=== removed file 'docs/_templates/maas/layout.html'
--- docs/_templates/maas/layout.html 2014-06-11 15:27:54 +0000
+++ docs/_templates/maas/layout.html 1970-01-01 00:00:00 +0000
@@ -1,31 +0,0 @@
1{%- extends "basic/layout.html" %}
2{% set css_files = ['https://assets.ubuntu.com/sites/guidelines/css/latest/ubuntu-styles.css', 'https://assets.ubuntu.com/sites/ubuntu/latest/u/css/global.css', '_static/css/main.css'] %}
3
4{% block sidebarlogo %}
5<a style="border:0" title="MAAS Documentation Homepage" href="{{ pathto('index.html', 1) }}"><img src="{{ pathto('_static/maas-logo-200.png',1) }}" alt="MAAS logo"/></a>
6<h2 style="text-align:center;">MAAS</h2>
7<p style="font-style:italic;font-size:0.9em; text-align:center; margin-bottom:1.5em">Metal As A Service.</p>
8<span id="version_switcher"></span>
9<br/>
10<br/>
11{% endblock %}
12
13{# Remove 'modules' and 'index' from rellinks: they point to
14 autogenerated code documentation pages that we don't want
15 to advertise too much.
16#}
17{%- set rellinks = rellinks[2:] %}
18
19{%- block footer %}
20<footer class="global clearfix">
21 <div class="legal clearfix">
22 <p>&copy; Copyright {{ copyright }}. Ubuntu and Canonical are registered trademarks of
23 <a href="http://canonical.com">Canonical Ltd</a>.
24 </p>
25 <p>
26 Revision {{ bzr_last_revision_number}} ({{ bzr_last_revision_date }}).
27 Documentation generation date: {{ bzr_build_date }}.
28 </p>
29 </div>
30</footer>
31{%- endblock %}
320
=== removed file 'docs/_templates/maas/localtoc.html'
--- docs/_templates/maas/localtoc.html 2013-12-06 19:26:05 +0000
+++ docs/_templates/maas/localtoc.html 1970-01-01 00:00:00 +0000
@@ -1,3 +0,0 @@
1{%- if display_toc %}
2 {{ toc }}
3{%- endif %}
40
=== removed file 'docs/_templates/maas/relations.html'
--- docs/_templates/maas/relations.html 2014-04-08 20:58:05 +0000
+++ docs/_templates/maas/relations.html 1970-01-01 00:00:00 +0000
@@ -1,31 +0,0 @@
1<script type="text/javascript">
2$(document).ready(function () {
3 if ({{ add_version_switcher }}) {
4 $.ajaxSetup({cache: true});
5 $.getScript('{{ versions_json_path }}', function() {
6 console.log( "Versions script loaded." );
7 set_up_version_switcher('#version_switcher', '{{ doc_prefix }}');
8 });
9}
10});
11</script>
12
13<h3>Related Topics</h3>
14<ul>
15 <li><a href="{{ pathto(master_doc) }}">Documentation overview</a><ul>
16 {%- for parent in parents %}
17 <li><a href="{{ parent.link|e }}">{{ parent.title }}</a><ul>
18 {%- endfor %}
19 {%- if prev %}
20 <li>Previous: <a href="{{ prev.link|e }}" title="{{ _('previous chapter')
21 }}">{{ prev.title }}</a></li>
22 {%- endif %}
23 {%- if next %}
24 <li>Next: <a href="{{ next.link|e }}" title="{{ _('next chapter')
25 }}">{{ next.title }}</a></li>
26 {%- endif %}
27 {%- for parent in parents %}
28 </ul></li>
29 {%- endfor %}
30 </ul></li>
31</ul>
320
=== removed directory 'docs/_templates/maas/static'
=== removed directory 'docs/_templates/maas/static/css'
=== removed 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 1970-01-01 00:00:00 +0000
@@ -1,75 +0,0 @@
1pre {
2 background-color:#EEEEEE;
3 background-position:initial initial;
4 background-repeat:initial initial;
5 line-height:1.3em;
6 margin:15px 0px;
7 padding:7px 30px;
8}
9
10div.document {
11 width: 984px;
12 margin: 10px auto 0 auto;
13}
14
15div.body h1 {
16 margin-top: 20px;
17 padding-top: 0;
18 font-size: 250%;
19}
20
21.bodywrapper ul ul {
22 margin-top: .4em;
23 margin-bottom: .4em;
24}
25
26div.sphinxsidebar ul ul {
27 margin-top: .4em;
28 margin-bottom: .4em;
29}
30
31body {
32 padding-top: 0px;
33}
34
35div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6, div.admonition p.admonition-title {
36 font-family: Ubuntu,Arial,"libra sans",sans-serif;
37}
38
39div.admonition {
40 margin: 20px 0px;
41 color: #3E4349;
42}
43
44div.admonition p.admonition-title {
45 font-size: 20px;
46}
47
48.document {
49 -moz-box-sizing: border-box;
50 background: none repeat scroll 0 0 #FFFFFF;
51 border-radius: 4px;
52 box-shadow: 0 0 3px #C9C9C9;
53}
54
55div.sphinxsidebarwrapper {
56 padding: 18px 10px 18px 20px;
57}
58
59form input[type="text"] {
60 display: inline;
61}
62
63div.sphinxsidebar #searchbox input[type="text"] {
64 width: 110px;
65 padding: 4px 3px;
66}
67
68div.sphinxsidebar #searchbox input[type="submit"] {
69 width: 40px;
70}
71
72a:active, a:focus, a:hover {
73 text-decoration: none;
74 border-bottom: 1px solid #6D4100;
75}
760
=== removed file 'docs/_templates/maas/static/flasky.css_t'
--- docs/_templates/maas/static/flasky.css_t 2014-06-09 16:25:19 +0000
+++ docs/_templates/maas/static/flasky.css_t 1970-01-01 00:00:00 +0000
@@ -1,564 +0,0 @@
1/*
2 * flasky.css_t
3 * ~~~~~~~~~~~~
4 *
5 * :copyright: Copyright 2010 by Armin Ronacher. Modifications by Kenneth Reitz.
6 * :license: Flask Design License, see LICENSE for details.
7 */
8
9{% set page_width = '940px' %}
10{% set sidebar_width = '220px' %}
11
12@import url("basic.css");
13
14/* -- page layout ----------------------------------------------------------- */
15
16body {
17 font-family: "Georgia", "Open Sans", OpenSansRegular, sans-serif;
18 font-size: 16px;
19 background: #fff;
20 font-weight: 400;
21 color: #000;
22 margin: 0;
23 padding: 0;
24}
25
26div.document {
27 width: {{ page_width }};
28 margin: 10px auto 0 auto;
29}
30
31div.documentwrapper {
32 float: left;
33 width: 100%;
34}
35
36div.bodywrapper {
37 margin: 0 0 0 {{ sidebar_width }};
38}
39
40div.sphinxsidebar {
41 width: {{ sidebar_width }};
42}
43
44hr {
45 border: 1px solid #B1B4B6;
46}
47
48div.body {
49 background-color: white;
50 color: #3E4349;
51 padding: 0 30px 0 30px;
52}
53
54img.floatingflask {
55 padding: 0 0 10px 10px;
56 float: right;
57}
58
59div.footer {
60 width: {{ page_width }};
61 margin: 20px auto 30px auto;
62 font-size: 14px;
63 color: #888;
64 text-align: right;
65}
66
67div.footer a {
68 color: #888;
69}
70
71div.related {
72 width: {{ page_width }};
73 margin: 10px auto 0 auto;
74}
75
76div.related h3 {
77 display: none;
78}
79
80div.sphinxsidebar a {
81 color: #444;
82 text-decoration: none;
83 border-bottom: 1px dotted #999;
84}
85
86div.sphinxsidebar a:hover {
87 border-bottom: 1px solid #999;
88}
89
90div.sphinxsidebar {
91 font-size: 14px;
92 line-height: 1.5;
93}
94
95div.sphinxsidebarwrapper {
96 padding: 18px 10px;
97}
98
99div.sphinxsidebarwrapper p.logo {
100 padding: 0;
101 margin: -10px 0 0 -20px;
102 text-align: center;
103}
104
105div.sphinxsidebar h3,
106div.sphinxsidebar h4 {
107 font-family: 'Antic Slab' ,'Garamond', 'Georgia', serif;
108 color: #000;
109 font-size: 24px;
110 font-weight: normal;
111 margin: 30px 0 5px 0;
112 padding: 0;
113}
114
115div.sphinxsidebar h4 {
116 font-size: 20px;
117}
118
119div.sphinxsidebar h3 a {
120 color: #000;
121}
122
123div.sphinxsidebar p.logo a,
124div.sphinxsidebar h3 a,
125div.sphinxsidebar p.logo a:hover,
126div.sphinxsidebar h3 a:hover {
127 border: none;
128}
129
130div.sphinxsidebar p {
131 color: #555;
132 margin: 10px 0;
133}
134
135div.sphinxsidebar ul {
136 margin: 10px 0px;
137 padding: 0;
138 color: #000;
139}
140
141div.sphinxsidebar input {
142 border: 1px solid #ccc;
143 font-family: 'Georgia', serif;
144 font-size: 1em;
145}
146
147/* -- body styles ----------------------------------------------------------- */
148
149a {
150 color: #004B6B;
151 text-decoration: underline;
152}
153
154a:hover {
155 color: #6D4100;
156 text-decoration: underline;
157}
158
159div.body h1,
160div.body h2,
161div.body h3,
162div.body h4,
163div.body h5,
164div.body h6 {
165 font-family: 'Antic Slab', serif;
166 font-weight: normal;
167 margin: 30px 0px 10px 0px;
168 padding: 0;
169 text-shadow: 1px 1px 3px #ddd;
170 color: #000;
171}
172
173div.body h1 { margin-top: 0; padding-top: 0; font-size: 250%; }
174div.body h2 { font-size: 190%; }
175div.body h3 { font-size: 160%; }
176div.body h4 { font-size: 140%; }
177div.body h5 { font-size: 110%; }
178div.body h6 { font-size: 110%; }
179
180a.headerlink {
181 color: #ddd;
182 padding: 0 4px;
183 text-decoration: none;
184}
185
186a.headerlink:hover {
187 color: #444;
188 background: #eaeaea;
189}
190
191div.body p, div.body dd, div.body li {
192 line-height: 1.4em;
193}
194
195div.admonition {
196 background: #fafafa;
197 margin: 20px -30px;
198 padding: 10px 30px;
199 border-top: 1px solid #ccc;
200 border-bottom: 1px solid #ccc;
201}
202
203div.admonition tt.xref, div.admonition a tt {
204 border-bottom: 1px solid #fafafa;
205}
206
207dd div.admonition {
208 margin-left: -60px;
209 padding-left: 60px;
210}
211
212div.admonition p.admonition-title {
213 font-family: 'Garamond', 'Georgia', serif;
214 font-weight: normal;
215 font-size: 24px;
216 margin: 0 0 10px 0;
217 padding: 0;
218 line-height: 1;
219}
220
221div.admonition p.last {
222 margin-bottom: 0;
223}
224
225div.highlight {
226 background-color: white;
227}
228
229dt:target, .highlight {
230 background: #FAF3E8;
231}
232
233div.note {
234 background-color: #eee;
235 border: 1px solid #ccc;
236}
237
238div.seealso {
239 background-color: #ffc;
240 border: 1px solid #ff6;
241}
242
243div.topic {
244 background-color: #eee;
245}
246
247p.admonition-title {
248 display: inline;
249}
250
251p.admonition-title:after {
252 content: ":";
253}
254
255pre {
256 font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
257 font-size: 0.88em;
258}
259
260tt {
261 font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
262 font-size: 0.95em;
263}
264
265img.screenshot {
266}
267
268tt.descname, tt.descclassname {
269 font-size: 0.95em;
270}
271
272tt.descname {
273 padding-right: 0.08em;
274}
275
276img.screenshot {
277 -moz-box-shadow: 2px 2px 4px #eee;
278 -webkit-box-shadow: 2px 2px 4px #eee;
279 box-shadow: 2px 2px 4px #eee;
280}
281
282table.docutils {
283 border: 1px solid #888;
284 -moz-box-shadow: 2px 2px 4px #eee;
285 -webkit-box-shadow: 2px 2px 4px #eee;
286 box-shadow: 2px 2px 4px #eee;
287}
288
289table.docutils td, table.docutils th {
290 border: 1px solid #888;
291 padding: 0.25em 0.7em;
292}
293
294table.field-list, table.footnote {
295 border: none;
296 -moz-box-shadow: none;
297 -webkit-box-shadow: none;
298 box-shadow: none;
299}
300
301table.footnote {
302 margin: 15px 0;
303 width: 100%;
304 border: 1px solid #eee;
305 background: #fdfdfd;
306 font-size: 0.9em;
307}
308
309table.footnote + table.footnote {
310 margin-top: -15px;
311 border-top: none;
312}
313
314table.field-list th {
315 padding: 0 0.8em 0 0;
316}
317
318table.field-list td {
319 padding: 0;
320}
321
322table.footnote td.label {
323 width: 0px;
324 padding: 0.3em 0 0.3em 0.5em;
325}
326
327table.footnote td {
328 padding: 0.3em 0.5em;
329}
330
331dl {
332 margin: 0;
333 padding: 0;
334}
335
336dl dd {
337 margin-left: 30px;
338}
339
340blockquote {
341 margin: 0 0 0 30px;
342 padding: 0;
343}
344
345ul, ol {
346 margin: 10px 0 10px 30px;
347 padding: 0;
348}
349
350pre {
351 background: #eee;
352 padding: 7px 30px;
353 margin: 15px -30px;
354 line-height: 1.3em;
355}
356
357dl pre, blockquote pre, li pre {
358 margin-left: 0px;
359 padding-left: 15px;
360}
361
362dl dl pre {
363 margin-left: 0px;
364 padding-left: 15px;
365}
366
367tt {
368 background-color: #ecf0f3;
369 color: #222;
370 /* padding: 1px 2px; */
371}
372
373tt.xref, a tt {
374 background-color: #FBFBFB;
375 color: #2277bb;
376 border-bottom: 1px solid white;
377}
378
379a.reference {
380 text-decoration: none;
381 border-bottom: 1px dotted #004B6B;
382}
383
384a.reference:hover {
385 border-bottom: 1px solid #6D4100;
386}
387
388a.footnote-reference {
389 text-decoration: none;
390 font-size: 0.7em;
391 vertical-align: top;
392 border-bottom: 1px dotted #004B6B;
393}
394
395a.footnote-reference:hover {
396 border-bottom: 1px solid #6D4100;
397}
398
399a:hover tt {
400 background: #EEE;
401}
402
403li {
404 margin-bottom: 0.3em;
405}
406
407
408@media screen and (max-width: 870px) {
409
410 div.sphinxsidebar {
411 display: none;
412 }
413
414 div.document {
415 width: 100%;
416
417 }
418
419 div.documentwrapper {
420 margin-left: 0;
421 margin-top: 0;
422 margin-right: 0;
423 margin-bottom: 0;
424 }
425
426 div.bodywrapper {
427 margin-top: 0;
428 margin-right: 0;
429 margin-bottom: 0;
430 margin-left: 0;
431 }
432
433 ul {
434 margin-left: 0;
435 }
436
437 .document {
438 width: auto;
439 }
440
441 .footer {
442 width: auto;
443 }
444
445 .bodywrapper {
446 margin: 0;
447 }
448
449 .footer {
450 width: auto;
451 }
452
453 .github {
454 display: none;
455 }
456
457
458
459}
460
461
462
463@media screen and (max-width: 875px) {
464
465 body {
466 margin: 0;
467 padding: 20px 30px;
468 }
469
470 div.documentwrapper {
471 float: none;
472 background: white;
473 }
474
475 div.sphinxsidebar {
476 display: block;
477 float: none;
478 width: 102.5%;
479 margin: 50px -30px -20px -30px;
480 padding: 10px 20px;
481 background: #333;
482 color: white;
483 }
484
485 div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
486 div.sphinxsidebar h3 a {
487 color: white;
488 }
489
490 div.sphinxsidebar a {
491 color: #aaa;
492 }
493
494 div.sphinxsidebar p.logo {
495 display: none;
496 }
497
498 div.document {
499 width: 100%;
500 margin: 0;
501 }
502
503 div.related {
504 display: block;
505 margin: 0;
506 padding: 10px 0 20px 0;
507 }
508
509 div.related ul,
510 div.related ul li {
511 margin: 0;
512 padding: 0;
513 }
514
515 div.footer {
516 display: none;
517 }
518
519 div.bodywrapper {
520 margin: 0;
521 }
522
523 div.body {
524 min-height: 0;
525 padding: 0;
526 }
527
528
529 .rtd_doc_footer {
530 display: none;
531 }
532
533 .document {
534 width: auto;
535 }
536
537 .footer {
538 width: auto;
539 }
540
541 .footer {
542 width: auto;
543 }
544
545 .github {
546 display: none;
547 }
548}
549
550
551/* misc. */
552
553.revsys-inline {
554 display: none!important;
555}
556
557div.sphinxsidebar #searchbox input[type="text"] {
558 width: 140px;
559 padding: 4px 3px;
560}
561
562.highlight .nv {
563 color: #C65D09!important;
564}
5650
=== removed file 'docs/_templates/maas/theme.conf'
--- docs/_templates/maas/theme.conf 2013-12-06 15:11:12 +0000
+++ docs/_templates/maas/theme.conf 1970-01-01 00:00:00 +0000
@@ -1,6 +0,0 @@
1[theme]
2inherit = basic
3stylesheet = flasky.css
4
5headfont = Ubuntu
6bodyfont = free-sans,sans,sans-serif
70
=== renamed file 'docs/about.rst' => 'docs/about.md'
--- docs/about.rst 2014-11-10 16:39:12 +0000
+++ docs/about.md 2015-04-17 21:06:27 +0000
@@ -1,50 +1,17 @@
1About this documentation1About this documentation
2========================2========================
33
4This is the documentation for Canonical's MAAS software. If you aren't4This is the documentation for Canonical's MAAS software. If you aren't sure what that is, you should probably skip everything else and head straight to the orientation section where it is explained. Like any software though, it can be frustrating if you don't know how bits of it work, how to achieve certain goals or what to do when things go wrong. Amongst its various sections, this manual aims to answer all those questions and plenty more you haven't even thought of yet.
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
135
14Getting it6Getting it
15----------7----------
168
17In a cunning move, the current documentation always lives, and is9In a cunning move, the current documentation always lives, and is built from, the main MAAS source code (in the top-level `docs/` directory). That means that whatever MAAS package you have installed, or even if you are really living life on the edge and have checked out a development version from Launchpad, this documentation should be the latest and most appropriate version for the software you are running. However, it is also possible that there have been additional sections, or more helpful and clearer bits added since the package you are using was made. For this reason you can always find the latest documentation online here: http://maas.ubuntu.com\_.
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.ubuntu.com`_.
27
28.. _http://maas.ubuntu.com:
29 http://maas.ubuntu.com
30
3110
32Contributing11Contributing
33------------12------------
3413
35If you have some extra information to add, or think you have spotted14If you have some extra information to add, or think you have spotted an error or something out of date, we really want to hear about it. Please [File a bug report](https://bugs.launchpad.net/maas/+filebug) or [contact us directly](https://launchpad.net/~maas-maintainers/+contactuser). In addition you can talk to us on the Freenode IRC channel \#maas.
36an error or something out of date, we really want to hear about15
37it. Please `File a bug report`_ or `contact us directly`_. In addition16If you see something wrong with this documentation, you can help us fix it. Download the source to MAAS by following the instructions in the hacking guide \<hacking\>, make your changes, and propose a merge against lp:maas on Launchpad. The documentation source lives in the top-level `docs/` directory.
38you can talk to us on the Freenode IRC channel #maas.17
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.
5118
=== renamed file 'docs/api_authentication.rst' => 'docs/api_authentication.md'
--- docs/api_authentication.rst 2015-02-13 10:11:07 +0000
+++ docs/api_authentication.md 2015-04-17 21:06:27 +0000
@@ -1,78 +1,64 @@
1.. -*- mode: rst -*-
2
3.. _api_authentication:
4
5API authentication1API authentication
6==================2==================
73
8MAAS's API uses OAuth_ as its authentication mechanism. There isn't a third4MAAS's API uses [OAuth](http://en.wikipedia.org/wiki/OAuth) as its authentication mechanism. There isn't a third party involved (as in 3-legged OAuth) and so the process used is what's commonly referred to as 0-legged OAuth: the consumer accesses protected resources by submitting OAuth signed requests.
9party involved (as in 3-legged OAuth) and so the process used is what's5
10commonly referred to as 0-legged OAuth: the consumer accesses protected6Note that some API endpoints support unauthenticated requests (i.e. anonymous access). See the API documentation \<api\> for details.
11resources by submitting OAuth signed requests.
12
13.. _OAuth: http://en.wikipedia.org/wiki/OAuth
14
15Note that some API endpoints support unauthenticated requests (i.e.
16anonymous access). See the :doc:`API documentation <api>` for details.
17
187
19Examples8Examples
20========9========
2110
22Here are two examples on how to perform an authenticated GET request to11Here are two examples on how to perform an authenticated GET request to retrieve the list of nodes. The \<key\>, \<secret\>, \<consumer\_key\> tokens are the three elements that compose the API key (API key = '\<consumer\_key\>:\<key\>:\<secret\>').
23retrieve the list of nodes. The <key>, <secret>, <consumer_key> tokens
24are the three elements that compose the API key (API key =
25'<consumer_key>:<key>:<secret>').
2612
27Python13Python
28------14------
2915
30.. code:: python16``` {.sourceCode .python}
3117import oauth.oauth as oauth
32 import oauth.oauth as oauth18import httplib2
33 import httplib219import uuid
34 import uuid20
3521def perform_API_request(site, uri, method, key, secret, consumer_key):
36 def perform_API_request(site, uri, method, key, secret, consumer_key):22 resource_tok_string = "oauth_token_secret=%s&oauth_token=%s" % (
37 resource_tok_string = "oauth_token_secret=%s&oauth_token=%s" % (23 secret, key)
38 secret, key)24 resource_token = oauth.OAuthToken.from_string(resource_tok_string)
39 resource_token = oauth.OAuthToken.from_string(resource_tok_string)25 consumer_token = oauth.OAuthConsumer(consumer_key, "")
40 consumer_token = oauth.OAuthConsumer(consumer_key, "")26
4127 oauth_request = oauth.OAuthRequest.from_consumer_and_token(
42 oauth_request = oauth.OAuthRequest.from_consumer_and_token(28 consumer_token, token=resource_token, http_url=site,
43 consumer_token, token=resource_token, http_url=site,29 parameters={'oauth_nonce': uuid.uuid4().get_hex()})
44 parameters={'oauth_nonce': uuid.uuid4().get_hex()})30 oauth_request.sign_request(
45 oauth_request.sign_request(31 oauth.OAuthSignatureMethod_PLAINTEXT(), consumer_token,
46 oauth.OAuthSignatureMethod_PLAINTEXT(), consumer_token,32 resource_token)
47 resource_token)33 headers = oauth_request.to_header()
48 headers = oauth_request.to_header()34 url = "%s%s" % (site, uri)
49 url = "%s%s" % (site, uri)35 http = httplib2.Http()
50 http = httplib2.Http()36 return http.request(url, method, body=None, headers=headers)
51 return http.request(url, method, body=None, headers=headers)37
5238# API key = '<consumer_key>:<key>:<secret>'
53 # API key = '<consumer_key>:<key>:<secret>'39response = perform_API_request(
54 response = perform_API_request(40 'http://server/MAAS/api/1.0', '/nodes/?op=list', 'GET', '<key>', '<secret>',
55 'http://server/MAAS/api/1.0', '/nodes/?op=list', 'GET', '<key>', '<secret>',41 '<consumer_key>')
56 '<consumer_key>')42```
5743
58Ruby44Ruby
59----45----
6046
61.. code:: ruby47``` {.sourceCode .ruby}
6248require 'oauth'
63 require 'oauth'49require 'oauth/signature/plaintext'
64 require 'oauth/signature/plaintext'50
6551def perform_API_request(site, uri, key, secret, consumer_key)
66 def perform_API_request(site, uri, key, secret, consumer_key)52 consumer = OAuth::Consumer.new(
67 consumer = OAuth::Consumer.new(53 consumer_key, "",
68 consumer_key, "",54 { :site => "http://localhost/MAAS/api/1.0",
69 { :site => "http://localhost/MAAS/api/1.0",55 :scheme => :header, :signature_method => "PLAINTEXT"})
70 :scheme => :header, :signature_method => "PLAINTEXT"})56 access_token = OAuth::AccessToken.new(consumer, key, secret)
71 access_token = OAuth::AccessToken.new(consumer, key, secret)57 return access_token.request(:get, "/nodes/?op=list")
72 return access_token.request(:get, "/nodes/?op=list")58end
73 end59
7460# API key = "<consumer_key>:<key>:<secret>"
75 # API key = "<consumer_key>:<key>:<secret>"61response = perform_API_request(
76 response = perform_API_request(62 "http://server/MAAS/api/1.0", "/nodes/?op=list", "<key>", "<secret>",
77 "http://server/MAAS/api/1.0", "/nodes/?op=list", "<key>", "<secret>",63 "consumer_key>")
78 "consumer_key>")64```
7965
=== renamed file 'docs/bootsources.rst' => 'docs/bootsources.md'
--- docs/bootsources.rst 2015-02-06 17:07:56 +0000
+++ docs/bootsources.md 2015-04-17 21:06:27 +0000
@@ -1,21 +1,9 @@
1.. -*- mode: rst -*-
2
3.. _bootsources:
4
5Boot images import configuration1Boot images import configuration
6================================2================================
73
8The configuration for where a region downloads its images is defined by4The configuration for where a region downloads its images is defined by a set of "sources". Each "source" defines a Simplestreams repository location (`url`) from which images can be downloaded and a `keyring_filename` (or `keyring_data`) for validating index and image signatures from that location. For each source, you can define a series of filters (`selections`) specifying which images should be downloaded from that source.
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.
155
16The following example use the MAAS CLI to list the boot sources and the boot6The following example use the MAAS CLI to list the boot sources and the boot source selections. Assuming the CLI `PROFILE` is the name of the profile under which you're logged in to the server:
17source selections. Assuming the CLI ``PROFILE`` is the name of the profile
18under which you're logged in to the server::
197
20 $ maas $PROFILE boot-sources read8 $ maas $PROFILE boot-sources read
21 [9 [
@@ -46,22 +34,19 @@
46 }34 }
47 ]35 ]
4836
49
50Restricting the images being downloaded37Restricting the images being downloaded
51---------------------------------------38---------------------------------------
5239
53Let's say you want to add a previous LTS release to images being downloaded.40Let's say you want to add a previous LTS release to images being downloaded. Starting from the configuration described above, you would need to:
54Starting from the configuration described above, you would need to:41
5542- Add the "Precise" selection (the selection '1' of the source '1'):
56- Add the "Precise" selection (the selection '1' of the source '1')::43
5744 $ maas $PROFILE boot-source-selection create 1 os="ubuntu" release="precise" arches="amd64" subarches="*" labels="*"
58 $ maas $PROFILE boot-source-selection create 1 os="ubuntu" release="precise" arches="amd64" subarches="*" labels="*"
5945
60Downloading the images from a different source46Downloading the images from a different source
61----------------------------------------------47----------------------------------------------
6248
63Let's say you want to import the images from a different location. You would49Let's say you want to import the images from a different location. You would need to to change the source's url and keyring:
64need to to change the source's url and keyring::
6550
66 $ maas $PROFILE boot-source update 1 url="http://custom.url" keyring_filename="" keyring_data@=./custom_keyring_file51 $ maas $PROFILE boot-source update 1 url="http://custom.url" keyring_filename="" keyring_data@=./custom_keyring_file
67 {52 {
@@ -75,7 +60,7 @@
75Adding a source60Adding a source
76---------------61---------------
7762
78You can also add a new source::63You can also add a new source:
7964
80 $ maas $PROFILE boot-sources create url=http://my.url keyring_filename="" keyring_data@=./ custom_keyring_file65 $ maas $PROFILE boot-sources create url=http://my.url keyring_filename="" keyring_data@=./ custom_keyring_file
81 {66 {
@@ -86,7 +71,7 @@
86 "resource_uri": "<url omitted for readability>"71 "resource_uri": "<url omitted for readability>"
87 }72 }
8873
89Inside that newly created source ('2') you can add selections::74Inside that newly created source ('2') you can add selections:
9075
91 $ maas $PROFILE boot-source-selections create 2 os="ubuntu" release="trusty" arches="amd64" subarches="*" labels='*'76 $ maas $PROFILE boot-source-selections create 2 os="ubuntu" release="trusty" arches="amd64" subarches="*" labels='*'
92 {77 {
@@ -98,11 +83,10 @@
98 "resource_uri": "<url omitted for readability>"83 "resource_uri": "<url omitted for readability>"
99 }84 }
10085
101Deleting a source86Deleting a source ---------------
102---------------
10387
104Let's say you need to delete the newly added source.88Let's say you need to delete the newly added source.
10589
106To delete the source::90To delete the source:
10791
108 $ maas $PROFILE boot-source delete 292 $ maas $PROFILE boot-source delete 2
10993
=== renamed file 'docs/capabilities.rst' => 'docs/capabilities.md'
--- docs/capabilities.rst 2014-10-09 06:30:29 +0000
+++ docs/capabilities.md 2015-04-17 21:06:27 +0000
@@ -1,44 +1,26 @@
1.. -*- mode: rst -*-
2
3.. _capabilities:
4
5Capabilities1Capabilities
6============2============
73
8MAAS publishes a special view at ``.../api/1.0/version/`` that returns a4MAAS publishes a special view at `.../api/1.0/version/` that returns a list of the server's capabilities. It's transferred as a JSON document:
9list of the server's capabilities. It's transferred as a JSON document::
105
11 {"capabilities": ["name-of-capability", ...]}6 {"capabilities": ["name-of-capability", ...]}
127
13.. note::8> **note**
149>
15 The view is called ``version`` because this will, later, include10> The view is called `version` because this will, later, include version information too.
16 version information too.
17
1811
19List of capabilities12List of capabilities
20--------------------13--------------------
2114
22Check for the following strings in the capabilities list to see what15Check for the following strings in the capabilities list to see what features the MAAS server supports. Use these in preference to gating on the version when creating a client application.
23features the MAAS server supports. Use these in preference to gating on16
24the version when creating a client application.17`networks-management`
2518Passive modelling of the network environment that cluster controllers nodes are in, including network interfaces, subnets, VLAN tags, and connectivity between them. See networks for more information.
26.. _cap-networks-management:19
2720`static-ipaddresses`
28``networks-management``21Static IP address allocation to nodes, including user-reserved IPs and admin-allocated 'sticky' IPs. Available since version 1.6. See static-ips for more information.
29 Passive modelling of the network environment that cluster controllers22
30 nodes are in, including network interfaces, subnets, VLAN tags, and23`ipv6-deployment-ubuntu`
31 connectivity between them. See :ref:`networks` for more information.24Deploy Ubuntu nodes with IPv6 networking enabled. See ipv6 for more about this feature.
3225
33.. _cap-static-ipaddresses:26
34
35``static-ipaddresses``
36 Static IP address allocation to nodes, including user-reserved IPs and admin-
37 allocated 'sticky' IPs. Available since version 1.6. See :ref:`static-ips`
38 for more information.
39
40.. _cap-ipv6-deployment-ubuntu:
41
42``ipv6-deployment-ubuntu``
43 Deploy Ubuntu nodes with IPv6 networking enabled. See :ref:`ipv6` for more
44 about this feature.
4527
=== renamed file 'docs/changelog.rst' => 'docs/changelog.md'
--- docs/changelog.rst 2015-04-09 15:48:49 +0000
+++ docs/changelog.md 2015-04-17 21:06:27 +0000
@@ -1,1132 +1,696 @@
1=========
2Changelog1Changelog
3=========2=========
43
51.7.341.7.3
6=====5-----
76
8Bug Fix Update7### Bug Fix Update
9--------------8
109\#1441933 Internal Server Error when saving a cluster without Router IP \#1441133 MAAS version not exposed over the API \#1437094 Sorting by mac address on webui causes internal server error \#1439359 Automatically set correct boot resources selection and start import after upgrade from MAAS 1.5; Ensures MAAS is usable after upgrade. \#1439366 Backwards compatibility with MAAS 1.5 preseeds and custom preseeds. Ensures that users dont have to manually change preseeds names.
11#1441933 Internal Server Error when saving a cluster without Router IP
12#1441133 MAAS version not exposed over the API
13#1437094 Sorting by mac address on webui causes internal server error
14#1439359 Automatically set correct boot resources selection and start import
15 after upgrade from MAAS 1.5; Ensures MAAS is usable after upgrade.
16#1439366 Backwards compatibility with MAAS 1.5 preseeds and custom preseeds.
17 Ensures that users dont have to manually change preseeds names.
1810
191.7.2111.7.2
20=====12-----
2113
22Bug Fix Update14### Bug Fix Update
23--------------15
2416\#1331214 Support AMT Version \> 8 \#1397567 Fix call to amttool when restarting a node to not fail disk erasing. \#1415538 Do not generate the 'option routers' stanza if router IP is None. \#1403909 Do not deallocate StaticIPAddress before node has powered off. \#1405998 Remove all OOPS reporting. \#1423931 Update the nodes host maps when a sticky ip address is claimed over the API. \#1433697 Look for bootloaders in /usr/lib/EXTLINUX
25#1331214 Support AMT Version > 8
26#1397567 Fix call to amttool when restarting a node to not fail disk erasing.
27#1415538 Do not generate the 'option routers' stanza if router IP is None.
28#1403909 Do not deallocate StaticIPAddress before node has powered off.
29#1405998 Remove all OOPS reporting.
30#1423931 Update the nodes host maps when a sticky ip address is claimed over the API.
31#1433697 Look for bootloaders in /usr/lib/EXTLINUX
32
3317
341.7.1181.7.1
35=====19-----
3620
37Minor feature improvements21### Minor feature improvements
38--------------------------22
3923New CentOS Release support.
40New CentOS Release support.24Further to the work done in the 1.7.0 MAAS Release, MAAS now supports uploading various versions of CentOS. Previously MAAS would only officially support 6.5.
41 Further to the work done in the 1.7.0 MAAS Release, MAAS now supports25
42 uploading various versions of CentOS. Previously MAAS would only26Power Monitoring for Seamicro 15000, Cisco UCS and HP Moonshot Chassis
43 officially support 6.5.27Further the work done in the 1.7.0 MAAS release, it now supports power query and monitoring for the Seamicro 15000 Chassis, the Cisco UCS Chassis Manager and the HP Moonshot Chassis Manager.
4428
45Power Monitoring for Seamicro 15000, Cisco UCS and HP Moonshot Chassis29Node Listing Page and Node Event Log live refresh
46 Further the work done in the 1.7.0 MAAS release, it now supports power30The Node Listing page and the Node Event Log now have live refresh every 10 seconds. This allows MAAS to display the latest node status and events without forcing a browser refresh.
47 query and monitoring for the Seamicro 15000 Chassis, the Cisco UCS31
48 Chassis Manager and the HP Moonshot Chassis Manager.32IP Address Reservation
4933The static IP address reservation API now has an optional "mac" parameter. Specifying a MAC address here will link the new static IP to that MAC address. A DHCP host map will be created for the MAC address. No other IPs may be reserved for that MAC address until the current one is released.
50Node Listing Page and Node Event Log live refresh34
51 The Node Listing page and the Node Event Log now have live refresh35### Bug fix update
52 every 10 seconds. This allows MAAS to display the latest node status36
53 and events without forcing a browser refresh.37For full details see <https://launchpad.net/maas/+milestone/1.7.1>
5438
55IP Address Reservation39\#1330765 If start\_nodes() fails, it doesn't clean up after itself. \#1373261 pserv.yaml rewrite breaks when previous generator URL uses IPv6 address \#1386432 After update to the latest curtin that changes the log to install.log MAAS show's two installation logs \#1386488 If rndc fails, you get an Internal Server Error page \#1386502 No "failed" transition from "new" \#1386914 twisted Unhandled Error when region can't reach upstream boot resource \#1391139 Tagged VLAN on aliased NIC breaks migration 0099 \#1391161 Failure: twisted.internet.error.ConnectionDone: Connection was closed cleanly. \#1391411 metadata API signal() is releasing host maps at the end of installation \#1391897 Network names with dots cause internal server error when on node pages \#1394382 maas does not know about VM "paused" state \#1396308 Removing managed interface causes maas to delete nodes \#1397356 Disk Wiping fails if installation is not Ubuntu \#1398405 MAAS UI reports storage size in Gibibytes (base 2) but is labeled GB - Gigabytes (base 10). \#1399331 MAAS leaking sensitive information in ps ax output \#1400849 Check Power State disappears after upgrade to 1.7 bzr 3312 \#1401241 custom dd-tgz format images looked for in wrong path, so they don't work \#1401983 Exception: deadlock detected \#1403609 can not enlist chassis with maas admin node-group probe-and-enlist-mscm \#1283106 MAAS allows the same subnet to be defined on two managed interfaces of the same cluster \#1303925 commissioning fails silently if a node can't reach the region controller \#1357073 power state changes are not reflected quickly enough in the UI \#1360280 boot-source-selections api allows adding bogus and duplicated values \#1368400 Can't power off nodes that are in Ready state but on \#1370897 The node power monitoring service does not check nodes in parallel \#1376024 gpg --batch [...]\` error caused by race in BootSourceCacheService \#1376716 AMT NUC stuck at boot prompt instead of powering down (no ACPI support in syslinux poweroff) \#1378835 Config does not have a unique index on name \#1379370 Consider removing transaction in claim\_static\_ip\_addresses(). \#1379556 Panicky log warning that is irrelevant \#1381444 Misleading error message in log "Unknown power\_type 'sm15k'" \#1382166 Message disclosing image import necessary visible while not logged in \#1382237 UnicodeEncodeError when unable to create host maps \#1383231 Error message when trying to reserve the same static IP twice is unhelpful \#1383237 Error message trying to reserve an IP address when no static range is defined is misleading \#1384424 Seamicro Machines do not have Power Status Tracking \#1384428 HP Moonshot Chassis Manager lacks power status monitoring \#1384924 need to provide a better upgrade message for images on the cluster but not on the region \#1386517 DHCP leases are not released at the end of commissioning and possibly enlistment \#1387239 MAAS does not provide an API for reserving a static IP for a given MAC address \#1387414 Race when registering new event type \#1388033 Trying to reserve a static IP when no more IPs are available results in 503 Service Unavailable with no error text \#1389602 Inconsistent behavior in the checks to delete a node \#1389733 node listing does not update the status and power of nodes \#1390144 Node 'releasing' should have a timeout \#1391193 API error documentation \#1391421 Names of custom boot-resources not visible in the web UI \#1391891 Spurious test failure: TestDNSForwardZoneConfig\_GetGenerateDirectives.test\_returns\_single\_entry\_for\_tiny\_network \#1393423 PowerKVM / VIrsh import should allow you to specify a prefix to filter VM's to import \#1393953 dd-format images fail to deploy \#1400909 Networks are being autocreated like eth0-eth0 instead of maas-eth0 \#1401349 Memory size changes to incorrect size when page is refreshed \#1402237 Node event log queries are slow (over 1 second) \#1402243 Nodes in 'Broken' state are being power queried constantly \#1402736 clicking on zone link from node page - requested URL was not found on this server \#1403043 Wrong top-level tab is selected when viewing a node \#1381609 Misleading log message when a node has a MAC address not attached to a cluster interface \#1386909 Misleading Error: Unable to identify boot image for (ubuntu/amd64/generic/trusty/local): cluster 'maas' does not have matching boot image. \#1388373 Fresh image import of 3 archs displaying multiple rows for armhf and amd64 \#1398159 TFTP into MAAS server to get pxelinux.0 causes unhandled error \#1383651 Node.start() and Node.stop() raise MulltipleFailures unnecessarily \#1383668 null" when releasing an IP address is confusing \#1389416 Power querying for UCSM not working \#1399676 UX bug: mac address on the nodes page should be the MAC address it pxe booted from \#1399736 MAAS should display memory sizes in properly labeld base 2 units - MiB, GiB, etc. \#1401643 Documentation has wrong pattern for user provided preseeds \#1401707 Slow web performance (5+ minute response time) on MAAS with many nodes \#1403609 Fix MSCM chassis enlistment. \#1409952 Correctly parse MAC Address for Power8 VM enlistment. \#1409852 Do not fail when trying to perform an IP Address Reservation. \#1413030 OS and Release no longer populate on Add Node page \#1414036 Trying to add an empty network crashes (AddrFormatError)
56 The static IP address reservation API now has an optional "mac"
57 parameter. Specifying a MAC address here will link the new static IP
58 to that MAC address. A DHCP host map will be created for the MAC
59 address. No other IPs may be reserved for that MAC address until the
60 current one is released.
61
62Bug fix update
63--------------
64
65For full details see https://launchpad.net/maas/+milestone/1.7.1
66
67#1330765 If start_nodes() fails, it doesn't clean up after itself.
68#1373261 pserv.yaml rewrite breaks when previous generator URL uses IPv6 address
69#1386432 After update to the latest curtin that changes the log to install.log MAAS show's two installation logs
70#1386488 If rndc fails, you get an Internal Server Error page
71#1386502 No "failed" transition from "new"
72#1386914 twisted Unhandled Error when region can't reach upstream boot resource
73#1391139 Tagged VLAN on aliased NIC breaks migration 0099
74#1391161 Failure: twisted.internet.error.ConnectionDone: Connection was closed cleanly.
75#1391411 metadata API signal() is releasing host maps at the end of installation
76#1391897 Network names with dots cause internal server error when on node pages
77#1394382 maas does not know about VM "paused" state
78#1396308 Removing managed interface causes maas to delete nodes
79#1397356 Disk Wiping fails if installation is not Ubuntu
80#1398405 MAAS UI reports storage size in Gibibytes (base 2) but is labeled GB - Gigabytes (base 10).
81#1399331 MAAS leaking sensitive information in ps ax output
82#1400849 Check Power State disappears after upgrade to 1.7 bzr 3312
83#1401241 custom dd-tgz format images looked for in wrong path, so they don't work
84#1401983 Exception: deadlock detected
85#1403609 can not enlist chassis with maas admin node-group probe-and-enlist-mscm
86#1283106 MAAS allows the same subnet to be defined on two managed interfaces of the same cluster
87#1303925 commissioning fails silently if a node can't reach the region controller
88#1357073 power state changes are not reflected quickly enough in the UI
89#1360280 boot-source-selections api allows adding bogus and duplicated values
90#1368400 Can't power off nodes that are in Ready state but on
91#1370897 The node power monitoring service does not check nodes in parallel
92#1376024 gpg --batch [...]` error caused by race in BootSourceCacheService
93#1376716 AMT NUC stuck at boot prompt instead of powering down (no ACPI support in syslinux poweroff)
94#1378835 Config does not have a unique index on name
95#1379370 Consider removing transaction in claim_static_ip_addresses().
96#1379556 Panicky log warning that is irrelevant
97#1381444 Misleading error message in log "Unknown power_type 'sm15k'"
98#1382166 Message disclosing image import necessary visible while not logged in
99#1382237 UnicodeEncodeError when unable to create host maps
100#1383231 Error message when trying to reserve the same static IP twice is unhelpful
101#1383237 Error message trying to reserve an IP address when no static range is defined is misleading
102#1384424 Seamicro Machines do not have Power Status Tracking
103#1384428 HP Moonshot Chassis Manager lacks power status monitoring
104#1384924 need to provide a better upgrade message for images on the cluster but not on the region
105#1386517 DHCP leases are not released at the end of commissioning and possibly enlistment
106#1387239 MAAS does not provide an API for reserving a static IP for a given MAC address
107#1387414 Race when registering new event type
108#1388033 Trying to reserve a static IP when no more IPs are available results in 503 Service Unavailable with no error text
109#1389602 Inconsistent behavior in the checks to delete a node
110#1389733 node listing does not update the status and power of nodes
111#1390144 Node 'releasing' should have a timeout
112#1391193 API error documentation
113#1391421 Names of custom boot-resources not visible in the web UI
114#1391891 Spurious test failure: TestDNSForwardZoneConfig_GetGenerateDirectives.test_returns_single_entry_for_tiny_network
115#1393423 PowerKVM / VIrsh import should allow you to specify a prefix to filter VM's to import
116#1393953 dd-format images fail to deploy
117#1400909 Networks are being autocreated like eth0-eth0 instead of maas-eth0
118#1401349 Memory size changes to incorrect size when page is refreshed
119#1402237 Node event log queries are slow (over 1 second)
120#1402243 Nodes in 'Broken' state are being power queried constantly
121#1402736 clicking on zone link from node page - requested URL was not found on this server
122#1403043 Wrong top-level tab is selected when viewing a node
123#1381609 Misleading log message when a node has a MAC address not attached to a cluster interface
124#1386909 Misleading Error: Unable to identify boot image for (ubuntu/amd64/generic/trusty/local): cluster 'maas' does not have matching boot image.
125#1388373 Fresh image import of 3 archs displaying multiple rows for armhf and amd64
126#1398159 TFTP into MAAS server to get pxelinux.0 causes unhandled error
127#1383651 Node.start() and Node.stop() raise MulltipleFailures unnecessarily
128#1383668 null" when releasing an IP address is confusing
129#1389416 Power querying for UCSM not working
130#1399676 UX bug: mac address on the nodes page should be the MAC address it pxe booted from
131#1399736 MAAS should display memory sizes in properly labeld base 2 units - MiB, GiB, etc.
132#1401643 Documentation has wrong pattern for user provided preseeds
133#1401707 Slow web performance (5+ minute response time) on MAAS with many nodes
134#1403609 Fix MSCM chassis enlistment.
135#1409952 Correctly parse MAC Address for Power8 VM enlistment.
136#1409852 Do not fail when trying to perform an IP Address Reservation.
137#1413030 OS and Release no longer populate on Add Node page
138#1414036 Trying to add an empty network crashes (AddrFormatError)
139
14040
1411.7.0411.7.0
142=====42-----
14343
144Important announcements44### Important announcements
145-----------------------45
14646**Re-import your boot images**
147**Re-import your boot images**47You must re-import your boot images, see below for details.
148 You must re-import your boot images, see below for details.48
14949**Update Curtin preseed files**
150**Update Curtin preseed files**50Two changes were made to Curtin preseed files that need your attention if you made any customisations:
151 Two changes were made to Curtin preseed files that need your attention51
152 if you made any customisations:52- The OS name must now appear in the filename. The new schema is shown here, each file pattern is tried in turn until a match is found:
15353
154 * The OS name must now appear in the filename. The new schema is shown54 {prefix}\_{osystem}\_{node\_arch}\_{node\_subarch}\_{release}\_{node\_name} {prefix}\_{osystem}\_{node\_arch}\_{node\_subarch}\_{release} {prefix}\_{osystem}\_{node\_arch}\_{node\_subarch} {prefix}\_{osystem}\_{node\_arch} {prefix}\_{osystem} {prefix}
155 here, each file pattern is tried in turn until a match is found::55
15656- If you are modifying `/etc/network/interfaces` in the preseed, it must be moved so it is processed last in `late_commands` since MAAS now writes to this file itself as part of IPv6 setup. For example:
157 {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}_{node_name}57
158 {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}58 late_commands:
159 {prefix}_{osystem}_{node_arch}_{node_subarch}59 bonding_02: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"]
160 {prefix}_{osystem}_{node_arch}60
161 {prefix}_{osystem}61 must now look like this:
162 {prefix}62
16363 late_commands:
164 * If you are modifying ``/etc/network/interfaces`` in the preseed, it must be64 zz_write_ifaces: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"]
165 moved so it is processed last in ``late_commands`` since MAAS now writes65
166 to this file itself as part of IPv6 setup. For example::66 The leading `zz` ensures the command sorts to the end of the `late_commands` list.
16767
168 late_commands:68### Major new features
169 bonding_02: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"]69
17070**Improved image downloading and reporting.**
171 must now look like this::71MAAS boot images are now downloaded centrally by the region controller and disseminated to all registered cluster controllers. This change includes a new web UI under the Images tab that allows the admin to select which images to import and shows the progress of the ongoing download. This completely replaces any file-based configuration that used to take place on cluster controllers. The cluster page now shows whether it has synchronised all the images from the region controller.
17272
173 late_commands:73This process is also completely controllable using the API.
174 zz_write_ifaces: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"]74
17575> **note**
176 The leading ``zz`` ensures the command sorts to the end of the76
177 ``late_commands`` list.77> Unfortunately due to a format change in the way images are stored, it was not possible to migrate previously downloaded images to the new region storage. The cluster(s) will still be able to use the existing images, however the region controller will be unaware of them until an import is initiated. When the import is finished, the cluster(s) will remove older image resources.
17878>
17979> This means that the first thing to do after upgrading to 1.7 is go to the Images tab and re-import the images.
180Major new features80
181------------------81**Increased robustness.**
18282A large amount of effort has been given to ensuring that MAAS remains robust in the face of adversity. An updated node state model has been implemented that takes into account more of the situations in which a node can be found including any failures at each stage.
183**Improved image downloading and reporting.**83
184 MAAS boot images are now downloaded centrally by the region controller84When a node is getting deployed, it is now monitored to check that each stage is reached in a timely fashion; if it does not then it is marked as failed.
185 and disseminated to all registered cluster controllers. This change includes85
186 a new web UI under the `Images` tab that allows the admin to select86The core power driver was updated to check the state of the power on each node and is reported in the web UI and API. The core driver now also handles retries when changing the power state of hardware, removing the requirement that each power template handle it individually.
187 which images to import and shows the progress of the ongoing download.87
188 This completely replaces any file-based configuration that used to take88**RPC security.**
189 place on cluster controllers. The cluster page now shows whether it has89As a step towards mutually verified TLS connections between MAAS's components, 1.7 introduces a simple shared-secret mechanism to authenticate the region with the clusters and vice-versa. For those clusters that run on the same machine as the region controller (which will account for most people), everything will continue to work without intervention. However, if you're running a cluster on a separate machine, you must install the secret:
190 synchronised all the images from the region controller.90
191911. After upgrading the region controller, view /var/lib/maas/secret (it's text) and copy it.
192 This process is also completely controllable using the API.922. On each cluster, run:
19393
194.. Note::94 > sudo -u maas maas-provision install-shared-secret
195 Unfortunately due to a format change in the way images are stored, it95
196 was not possible to migrate previously downloaded images to the new region96 You'll be prompted for the secret; paste it in and press enter. It is a password prompt, so the secret will not be echoed back to you.
197 storage. The cluster(s) will still be able to use the existing images,97
198 however the region controller will be unaware of them until an import98That's it; the upgraded cluster controller will find the secret without needing to be told.
199 is initiated. When the import is finished, the cluster(s) will remove99
200 older image resources.100**RPC connections.**
201101Each cluster maintains a persistent connection to each region controller process that's running. The ports on which the region is listening are all high-numbered, and they are allocated randomly by the OS. In a future release of MAAS we will narrow this down. For now, each cluster controller needs unfiltered access to each machine in the region on all high-numbered TCP ports.
202 This means that the first thing to do after upgrading to 1.7 is go to the102
203 `Images` tab and re-import the images.103**Node event log.**
204104For every major event on nodes, it is now logged in a node-specific log. This includes events such as power changes, deployments and any failures.
205**Increased robustness.**105
206 A large amount of effort has been given to ensuring that MAAS remains106**IPv6.**
207 robust in the face of adversity. An updated node state model has been107It is now possible to deploy Ubuntu nodes that have IPv6 enabled. See ipv6 for more details.
208 implemented that takes into account more of the situations in which a108
209 node can be found including any failures at each stage.109**Removal of Celery and RabbitMQ.**
210110While Celery was found to be very reliable it ultimately did not suit the project's requirements as it is a largely fire-and-forget mechanism. Additionally it was another moving part that caused some headaches for users and admins alike, so the decision was taken to remove it and implement a custom communications mechanism between the region controller and cluster controllers. The new mechanism is bidirectional and allowed the complex interactions to take place that are required as part of the robustness improvements.
211 When a node is getting deployed, it is now monitored to check that each111
212 stage is reached in a timely fashion; if it does not then it is marked112Since a constant connection is maintained, as a side effect the web UI now shows whether each cluster is connected or not.
213 as failed.113
214114**Support for other OSes.**
215 The core power driver was updated to check the state of the power on each115Non-Ubuntu OSes are fully supported now. This includes:
216 node and is reported in the web UI and API. The core driver now also116- Windows
217 handles retries when changing the power state of hardware, removing the117- Centos
218 requirement that each power template handle it individually.118- SuSE
219119
220**RPC security.**120**Custom Images.**
221 As a step towards mutually verified TLS connections between MAAS's121MAAS now supports the deployment of Custom Images. Custom images can be uploaded via the API. The usage of custom images allows the deployment of other Ubuntu Flavors, such as Ubuntu Desktop.
222 components, 1.7 introduces a simple shared-secret mechanism to122
223 authenticate the region with the clusters and vice-versa. For those123**maas-proxy.**
224 clusters that run on the same machine as the region controller (which124MAAS now uses maas-proxy as the default proxy solution instead of squid-deb-proxy. On a fresh install, MAAS will use maas-proxy by default. On upgrades from previous releases, MAAS will install maas-proxy instead of squid-deb-proxy.
225 will account for most people), everything will continue to work125
226 without intervention. However, if you're running a cluster on a126### Minor notable changes
227 separate machine, you must install the secret:127
228128**Better handling of networks.**
229 1. After upgrading the region controller, view /var/lib/maas/secret129All networks referred to by cluster interfaces are now automatically registered on the Network page. Any node network interfaces are automatically linked to the relevant Network.
230 (it's text) and copy it.130
231131> **note**
232 2. On each cluster, run:132
233133> Commissioning currently requires an IP address to be available for each network interface on a network that MAAS manages; this allows MAAS to auto-populate its networks database. In general you should use a well-sized network (/16 recommended if you will be using containers and VMs) and dynamic pool. If this feature risks causing IP exhaustion for your deployment and you do not need the auto-populate functionality, you can disable it by running the following command on your region controller:
234 sudo -u maas maas-provision install-shared-secret134>
235135> sudo maas <profile> maas set-config name=enable_dhcp_discovery_on_unconfigured_interfaces value=False
236 You'll be prompted for the secret; paste it in and press enter. It136
237 is a password prompt, so the secret will not be echoed back to you.137**Improved logging.**
238138A total overhaul of where logging is produced was undertaken, and now all the main events in MAAS are selectively reported to syslog with the "maas" prefix from both the region and cluster controllers alike. If MAAS is installed using the standard Ubuntu packaging, its syslog entries are redirected to /var/log/maas/maas.log.
239 That's it; the upgraded cluster controller will find the secret139
240 without needing to be told.140On the clusters, pserv.log is now less chatty and contains only errors. On the region controller appservers, maas-django.log contains only appserver errors.
241141
242**RPC connections.**142**Static IP selection.**
243 Each cluster maintains a persistent connection to each region143The API was extended so that specific IPs can be pre-allocated for network interfaces on nodes and for user-allocated IPs.
244 controller process that's running. The ports on which the region is144
245 listening are all high-numbered, and they are allocated randomly by145**Pronounceable random hostnames.**
246 the OS. In a future release of MAAS we will narrow this down. For now,146The old auto-generated 5-letter names were replaced with a pseudo-random name that is produced from a dictionary giving names of the form 'adjective-noun'.
247 each cluster controller needs unfiltered access to each machine in the147
248 region on all high-numbered TCP ports.148### Known Problems & Workarounds
249149
250**Node event log.**150**Upgrade issues**
251 For every major event on nodes, it is now logged in a node-specific log.151There may be upgrade issues for users currently on MAAS 1.5 and 1.6; while we have attempted to reproduce and address all the issues reported, some bugs remain inconclusive. We recommend a full, tested backup of the MAAS servers before attempting the upgrade to 1.7. If you do encounter issues, please file these and flag them to the attention of the MAAS team and we will address them in point-releases. See bugs [1381058](https://launchpad.net/bugs/1381058), [1382266](https://launchpad.net/bugs/1382266), [1379890](https://launchpad.net/bugs/1379890), [1379532](https://launchpad.net/bugs/1379532), and [1379144](https://launchpad.net/bugs/1379144).
252 This includes events such as power changes, deployments and any failures.152
253153**Split Region/Cluster set-ups**
254**IPv6.**154If you site your cluster on a separate host to the region, it needs a security key to be manually installed by running `maas-provision install-shared-secret` on the cluster host.
255 It is now possible to deploy Ubuntu nodes that have IPv6 enabled.155
256 See :doc:`ipv6` for more details.156**Private boot streams**
257157If you had private boot image stream information configured in MAAS 1.5 or 1.6, upgrading to 1.7 will not take that into account and it will need to be manually entered on the settings page in the MAAS UI (bug [1379890](https://launchpad.net/bugs/1379890))
258**Removal of Celery and RabbitMQ.**158
259 While Celery was found to be very reliable it ultimately did not suit159**Concurrency issues**
260 the project's requirements as it is a largely fire-and-forget mechanism.160Concurrency issues expose us to races when simultaneous operations are triggered. This is the source of many hard to reproduce issues which will require us to change the default database isolation level. We intend to address this in the first point release of 1.7.
261 Additionally it was another moving part that caused some headaches for161
262 users and admins alike, so the decision was taken to remove it and implement162**Destroying a Juju environment**
263 a custom communications mechanism between the region controller and cluster163When attempting to "juju destroy" an environment, nodes must be in the DEPLOYED state; otherwise, the destroy will fail. You should wait for all in-progress actions on the MAAS cluster to conclude before issuing the command. (bug [1381619](https://launchpad.net/bugs/1381619))
264 controllers. The new mechanism is bidirectional and allowed the complex164
265 interactions to take place that are required as part of the robustness165**AMT power control**
266 improvements.166A few AMT-related issues remain, with workarounds:
267167
268 Since a constant connection is maintained, as a side effect the web UI now168> - Commissioning NUC reboots instead of shutting down (bug [1368685](https://bugs.launchpad.net/maas/+bug/1368685)). There is [a workaround in the power template](https://bugs.launchpad.net/maas/+bug/1368685/comments/8)
269 shows whether each cluster is connected or not.169> - MAAS (amttool) cannot control AMT version \> 8. See [workaround described in bug 1331214](https://bugs.launchpad.net/maas/+bug/1331214/comments/18)
270170> - AMT NUC stuck at boot prompt instead of powering down (no ACPI support in syslinux poweroff) (bug [1376716](https://bugs.launchpad.net/maas/+bug/1376716)). See the [ACPI-only workaround](https://bugs.launchpad.net/maas/+bug/1376716/comments/12)
271**Support for other OSes.**171
272 Non-Ubuntu OSes are fully supported now. This includes:172**Disk wiping**
273 - Windows173If you enable disk wiping, juju destroy-environment may fail for you. The current workaround is to wait and re-issue the command. This will be fixed in future versions of MAAS & Juju. (bug [1386327](https://bugs.launchpad.net/maas/+bug/1386327))
274 - Centos174
275 - SuSE175**BIND with DNSSEC**
276176If you are using BIND with a forwarder that uses DNSSEC and have not configured certificates, you will need to explicitly disable that feature in your BIND configuration (1384334)
277**Custom Images.**177
278 MAAS now supports the deployment of Custom Images. Custom images can be178**Boot source selections on the API**
279 uploaded via the API. The usage of custom images allows the deployment of179Use of API to change image selections can leave DB in a bad state (bug [1376812](https://bugs.launchpad.net/maas/+bug/1376812)). It can be fixed by issuing direct database updates.
280 other Ubuntu Flavors, such as Ubuntu Desktop.180
281181**Disabling DNS**
282**maas-proxy.**182Disabling DNS may not work (bug [1383768](https://bugs.launchpad.net/maas/+bug/1383768))
283 MAAS now uses maas-proxy as the default proxy solution instead of183
284 squid-deb-proxy. On a fresh install, MAAS will use maas-proxy by default.184**Stale DNS zone files**
285 On upgrades from previous releases, MAAS will install maas-proxy instead of185Stale DNS zone files may be left behind if the MAAS domainname is changed (bug [1383329](https://bugs.launchpad.net/maas/+bug/1383329))
286 squid-deb-proxy.186
287187### Major bugs fixed in this release
288Minor notable changes188
289---------------------189See <https://launchpad.net/maas/+milestone/1.7.0> for full details.
290190
291**Better handling of networks.**191\#1081660 If maas-enlist fails to reach a DNS server, the node will be named ";; connection timed out; no servers could be reached"
292 All networks referred to by cluster interfaces are now automatically192
293 registered on the Network page. Any node network interfaces are193\#1087183 MaaS cloud-init configuration specifies 'manage\_etc\_hosts: localhost'
294 automatically linked to the relevant Network.194
295195\#1328351 ConstipationError: When the cluster runs the "import boot images" task it blocks other tasks
296.. Note::196
297 Commissioning currently requires an IP address to be available for each197\#1342117 CLI command to set up node-group-interface fails with /usr/lib/python2.7/dist-packages/maascli/\_\_main\_\_.py: error: u'name'
298 network interface on a network that MAAS manages; this allows MAAS to198
299 auto-populate its networks database. In general you should use a199\#1349254 Duplicate FQDN can be configured on MAAS via CLI or API
300 well-sized network (/16 recommended if you will be using containers and200
301 VMs) and dynamic pool. If this feature risks causing IP exhaustion for201\#1352575 BMC password showing in the apache2 logs
302 your deployment and you do not need the auto-populate functionality, you202
303 can disable it by running the following command on your region controller::203\#1355534 UnknownPowerType traceback in appserver log
304204
305 sudo maas <profile> maas set-config name=enable_dhcp_discovery_on_unconfigured_interfaces value=False205\#1363850 Auto-enlistment not reporting power parameters
306206
307**Improved logging.**207\#1363900 Dev server errors while trying to write to '/var/lib/maas'
308 A total overhaul of where logging is produced was undertaken, and now208
309 all the main events in MAAS are selectively reported to syslog with the209\#1363999 Not assigning static IP addresses
310 "maas" prefix from both the region and cluster controllers alike. If MAAS210
311 is installed using the standard Ubuntu packaging, its syslog entries are211\#1364481 http 500 error doesn't contain a stack trace
312 redirected to /var/log/maas/maas.log.212
313213\#1364993 500 error when trying to acquire a commissioned node (AddrFormatError: failed to detect a valid IP address from None)
314 On the clusters, pserv.log is now less chatty and contains only errors.214
315 On the region controller appservers, maas-django.log contains only appserver215\#1365130 django-admin prints spurious messages to stdout, breaking scripts
316 errors.216
317217\#1365850 DHCP scan using cluster interface name as network interface?
318**Static IP selection.**218
319 The API was extended so that specific IPs can be pre-allocated for network219\#1366172 NUC does not boot after power off/power on
320 interfaces on nodes and for user-allocated IPs.220
321221\#1366212 Large dhcp leases file leads to tftp timeouts
322**Pronounceable random hostnames.**222
323 The old auto-generated 5-letter names were replaced with a pseudo-random223\#1366652 Leaking temporary directories
324 name that is produced from a dictionary giving names of the form224
325 'adjective-noun'.225\#1368269 internal server error when deleting a node
326226
327227\#1368590 Power actions are not serialized.
328Known Problems & Workarounds228
329----------------------------229\#1370534 Recurrent update of the power state of nodes crashes if the connection to the BMC fails.
330230
331**Upgrade issues**231\#1370958 excessive pserv logging
332 There may be upgrade issues for users currently on MAAS 1.5 and 1.6; while we232
333 have attempted to reproduce and address all the issues reported, some bugs233\#1372767 Twisted web client does not support IPv6 address
334 remain inconclusive. We recommend a full, tested backup of the MAAS servers234
335 before attempting the upgrade to 1.7. If you do encounter issues, please file235\#1372944 Twisted web client fails looking up IPv6 address hostname
336 these and flag them to the attention of the MAAS team and we will address them236
337 in point-releases. See bugs `1381058`_, `1382266`_, `1379890`_, `1379532`_,237\#1373031 Cannot register cluster
338 and `1379144`_.238
339239\#1373103 compose\_curtin\_network\_preseed breaks installation of all other operating systems
340.. _1381058:240
341 https://launchpad.net/bugs/1381058241\#1373368 Conflicting power actions being dropped on the floor can result in leaving a node in an inconsistent state
342.. _1382266:242
343 https://launchpad.net/bugs/1382266243\#1373699 Cluster Listing Page lacks feedback about the images each cluster has
344.. _1379890:244
345 https://launchpad.net/bugs/1379890245\#1374102 No retries for AMT power?
346.. _1379532:246
347 https://launchpad.net/bugs/1379532247\#1375980 Nodes failed to transition out of "New" state on bulk commission
348.. _1379144:248
349 https://launchpad.net/bugs/1379144249\#1376023 After performing bulk action on maas nodes, Internal Server Error
350250
351**Split Region/Cluster set-ups**251\#1376888 Nodes can't be deleted if DHCP management is off.
352 If you site your cluster on a separate host to the region, it needs a252
353 security key to be manually installed by running253\#1377099 Bulk operation leaves nodes in inconsistent state
354 ``maas-provision install-shared-secret`` on the cluster host.254
355255\#1379209 When a node has multiple interfaces on a network MAAS manages, MAAS assigns static IP addresses to all of them
356**Private boot streams**256
357 If you had private boot image stream information configured in MAAS 1.5 or257\#1379744 Cluster registration is fragile and insecure
358 1.6, upgrading to 1.7 will not take that into account and it will need to be258
359 manually entered on the settings page in the MAAS UI (bug `1379890`_)259\#1380932 MAAS does not cope with changes of the dhcp daemons
360260
361.. _1379890:261\#1381605 Not all the DNS records are being added when deploying multiple nodes
362 https://launchpad.net/bugs/1379890262
363263\#1012954 If a power script fails, there is no UI feedback
364**Concurrency issues**264
365 Concurrency issues expose us to races when simultaneous operations are265\#1186196 "Starting a node" has different meanings in the UI and in the API.
366 triggered. This is the source of many hard to reproduce issues which will266
367 require us to change the default database isolation level. We intend to address267\#1237215 maas and curtin do not indicate failure reasonably
368 this in the first point release of 1.7.268
369269\#1273222 MAAS doesn't check return values of power actions
370**Destroying a Juju environment**270
371 When attempting to "juju destroy" an environment, nodes must be in the DEPLOYED271\#1288502 archive and proxy settings not honoured for commissioning
372 state; otherwise, the destroy will fail. You should wait for all in-progress272
373 actions on the MAAS cluster to conclude before issuing the command. (bug273\#1316919 Checks don't exist to confirm a node will actually boot
374 `1381619`_)274
375275\#1321885 IPMI detection and automatic setting fail in ubuntu 14.04 maas
376.. _1381619:276
377 https://launchpad.net/bugs/1381619277\#1325610 node marked "Ready" before poweroff complete
378278
379**AMT power control**279\#1340188 unallocated node started manually, causes AssertionError for purpose poweroff
380 A few AMT-related issues remain, with workarounds:280
381281\#1341118 No feedback when IPMI credentials fail
382 * Commissioning NUC reboots instead of shutting down (bug `1368685`_). There282
383 is `a workaround in the power template`_283\#1341121 No feedback to user when cluster is not running
384284
385 * MAAS (amttool) cannot control AMT version > 8. See `workaround described in285\#1341581 power state is not represented in api and ui
386 bug 1331214`_286
387287\#1341800 MAAS doesn't support soft power off through the API
388 * AMT NUC stuck at boot prompt instead of powering down (no ACPI support in288
389 syslinux poweroff) (bug `1376716`_). See the `ACPI-only workaround`_289\#1344177 hostnames can't be changed while a node is acquired
390290
391.. _1368685:291\#1347518 Confusing error message when API key is wrong
392 https://bugs.launchpad.net/maas/+bug/1368685292
393.. _a workaround in the power template:293\#1349496 Unable to request a specific static IP on the API
394 https://bugs.launchpad.net/maas/+bug/1368685/comments/8294
395.. _workaround described in bug 1331214:295\#1349736 MAAS logging is too verbose and not very useful
396 https://bugs.launchpad.net/maas/+bug/1331214/comments/18296
397.. _1376716:297\#1349917 guess\_server\_address() can return IPAddress or hostname
398 https://bugs.launchpad.net/maas/+bug/1376716298
399.. _ACPI-only workaround:299\#1350103 No support for armhf/keystone architecture
400 https://bugs.launchpad.net/maas/+bug/1376716/comments/12300
401301\#1350856 Can't constrain acquisition of nodes by not having a tag
402302
403**Disk wiping**303\#1356880 MAAS shouldn't allow changing the hostname of a deployed node
404 If you enable disk wiping, juju destroy-environment may fail for you. The304
405 current workaround is to wait and re-issue the command. This will be fixed in305\#1357714 Virsh power driver does not seem to work at all
406 future versions of MAAS & Juju. (bug `1386327`_)306
407307\#1358859 Commissioning output xml is hard to understand, would be nice to have yaml as an output option.
408.. _1386327:308
409 https://bugs.launchpad.net/maas/+bug/1386327309\#1359169 MAAS should handle invalid consumers gracefully
410310
411**BIND with DNSSEC**311\#1359822 Gateway is missing in network definition
412 If you are using BIND with a forwarder that uses DNSSEC and have not312
413 configured certificates, you will need to explicitly disable that feature in313\#1363913 Impossible to remove last MAC from network in UI
414 your BIND configuration (1384334)314
415315\#1364228 Help text for node hostname is wrong
416.. _1384334:316
417 https://bugs.launchpad.net/maas/+bug/1384334317\#1364591 MAAS Archive Mirror does not respect non-default port
418318
419**Boot source selections on the API**319\#1365616 Non-admin access to cluster controller config
420 Use of API to change image selections can leave DB in a bad state320
421 (bug `1376812`_). It can be fixed by issuing direct database updates.321\#1365619 DNS should be an optional field in the network definition
422322
423.. _1376812:323\#1365776 commissioning results view for a node also shows installation results
424 https://bugs.launchpad.net/maas/+bug/1376812324
425325\#1366812 Old boot resources are not being removed on clusters
426**Disabling DNS**326
427 Disabling DNS may not work (bug `1383768`_)327\#1367455 MAC address for node's IPMI is reversed looked up to yield IP address using case sensitive comparison
428328
429.. _1383768:329\#1373580 [SRU] Glen m700 cartridge list as ARM64/generic after enlist
430 https://bugs.launchpad.net/maas/+bug/1383768330
431331\#1373723 Releasing a node without power parameters ends up in not being able to release a node
432**Stale DNS zone files**332
433 Stale DNS zone files may be left behind if the MAAS domainname is changed333\#1233158 no way to get power parameters in api
434 (bug `1383329`_)334
435335\#1319854 maas login tells you you're logged in successfully when you're not
436.. _1383329:336
437 https://bugs.launchpad.net/maas/+bug/1383329337\#1368480 Need API to gather image metadata across all of MAAS
438338
439339\#1281406 Disk/memory space on Node edit page have no units
440340
441Major bugs fixed in this release341\#1299231 MAAS DHCP/DNS can't manage more than a /16 network
442--------------------------------342
443343\#1357381 maas-region-admin createadmin shows error if not params given
444See https://launchpad.net/maas/+milestone/1.7.0 for full details.344
445345\#1376393 powerkvm boot loader installs even when not needed
446#1081660 If maas-enlist fails to reach a DNS server, the node will be named ";; connection timed out; no servers could be reached"346
447347\#1287224 MAAS random generated hostnames are not pronounceable
448#1087183 MaaS cloud-init configuration specifies 'manage_etc_hosts: localhost'348
449349\#1348364 non-maas managed subnets cannot query maas DNS
450#1328351 ConstipationError: When the cluster runs the "import boot images" task it blocks other tasks
451
452#1342117 CLI command to set up node-group-interface fails with /usr/lib/python2.7/dist-packages/maascli/__main__.py: error: u'name'
453
454#1349254 Duplicate FQDN can be configured on MAAS via CLI or API
455
456#1352575 BMC password showing in the apache2 logs
457
458#1355534 UnknownPowerType traceback in appserver log
459
460#1363850 Auto-enlistment not reporting power parameters
461
462#1363900 Dev server errors while trying to write to '/var/lib/maas'
463
464#1363999 Not assigning static IP addresses
465
466#1364481 http 500 error doesn't contain a stack trace
467
468#1364993 500 error when trying to acquire a commissioned node (AddrFormatError: failed to detect a valid IP address from None)
469
470#1365130 django-admin prints spurious messages to stdout, breaking scripts
471
472#1365850 DHCP scan using cluster interface name as network interface?
473
474#1366172 NUC does not boot after power off/power on
475
476#1366212 Large dhcp leases file leads to tftp timeouts
477
478#1366652 Leaking temporary directories
479
480#1368269 internal server error when deleting a node
481
482#1368590 Power actions are not serialized.
483
484#1370534 Recurrent update of the power state of nodes crashes if the connection to the BMC fails.
485
486#1370958 excessive pserv logging
487
488#1372767 Twisted web client does not support IPv6 address
489
490#1372944 Twisted web client fails looking up IPv6 address hostname
491
492#1373031 Cannot register cluster
493
494#1373103 compose_curtin_network_preseed breaks installation of all other operating systems
495
496#1373368 Conflicting power actions being dropped on the floor can result in leaving a node in an inconsistent state
497
498#1373699 Cluster Listing Page lacks feedback about the images each cluster has
499
500#1374102 No retries for AMT power?
501
502#1375980 Nodes failed to transition out of "New" state on bulk commission
503
504#1376023 After performing bulk action on maas nodes, Internal Server Error
505
506#1376888 Nodes can't be deleted if DHCP management is off.
507
508#1377099 Bulk operation leaves nodes in inconsistent state
509
510#1379209 When a node has multiple interfaces on a network MAAS manages, MAAS assigns static IP addresses to all of them
511
512#1379744 Cluster registration is fragile and insecure
513
514#1380932 MAAS does not cope with changes of the dhcp daemons
515
516#1381605 Not all the DNS records are being added when deploying multiple nodes
517
518#1012954 If a power script fails, there is no UI feedback
519
520#1186196 "Starting a node" has different meanings in the UI and in the API.
521
522#1237215 maas and curtin do not indicate failure reasonably
523
524#1273222 MAAS doesn't check return values of power actions
525
526#1288502 archive and proxy settings not honoured for commissioning
527
528#1316919 Checks don't exist to confirm a node will actually boot
529
530#1321885 IPMI detection and automatic setting fail in ubuntu 14.04 maas
531
532#1325610 node marked "Ready" before poweroff complete
533
534#1340188 unallocated node started manually, causes AssertionError for purpose poweroff
535
536#1341118 No feedback when IPMI credentials fail
537
538#1341121 No feedback to user when cluster is not running
539
540#1341581 power state is not represented in api and ui
541
542#1341800 MAAS doesn't support soft power off through the API
543
544#1344177 hostnames can't be changed while a node is acquired
545
546#1347518 Confusing error message when API key is wrong
547
548#1349496 Unable to request a specific static IP on the API
549
550#1349736 MAAS logging is too verbose and not very useful
551
552#1349917 guess_server_address() can return IPAddress or hostname
553
554#1350103 No support for armhf/keystone architecture
555
556#1350856 Can't constrain acquisition of nodes by not having a tag
557
558#1356880 MAAS shouldn't allow changing the hostname of a deployed node
559
560#1357714 Virsh power driver does not seem to work at all
561
562#1358859 Commissioning output xml is hard to understand, would be nice to have yaml as an output option.
563
564#1359169 MAAS should handle invalid consumers gracefully
565
566#1359822 Gateway is missing in network definition
567
568#1363913 Impossible to remove last MAC from network in UI
569
570#1364228 Help text for node hostname is wrong
571
572#1364591 MAAS Archive Mirror does not respect non-default port
573
574#1365616 Non-admin access to cluster controller config
575
576#1365619 DNS should be an optional field in the network definition
577
578#1365776 commissioning results view for a node also shows installation results
579
580#1366812 Old boot resources are not being removed on clusters
581
582#1367455 MAC address for node's IPMI is reversed looked up to yield IP address using case sensitive comparison
583
584#1373580 [SRU] Glen m700 cartridge list as ARM64/generic after enlist
585
586#1373723 Releasing a node without power parameters ends up in not being able to release a node
587
588#1233158 no way to get power parameters in api
589
590#1319854 `maas login` tells you you're logged in successfully when you're not
591
592#1368480 Need API to gather image metadata across all of MAAS
593
594#1281406 Disk/memory space on Node edit page have no units
595
596#1299231 MAAS DHCP/DNS can't manage more than a /16 network
597
598#1357381 maas-region-admin createadmin shows error if not params given
599
600#1376393 powerkvm boot loader installs even when not needed
601
602#1287224 MAAS random generated hostnames are not pronounceable
603
604#1348364 non-maas managed subnets cannot query maas DNS
605
606350
6071.6.13511.6.1
608=====352-----
609353
610Bug fix update354### Bug fix update
611--------------355
612356- Auto-link node MACs to Networks (LP: \#1341619) MAAS will now auto-create a Network from a cluster interface, and if an active lease exists for a node's MAC then it will be linked to that Network.
613- Auto-link node MACs to Networks (LP: #1341619)
614 MAAS will now auto-create a Network from a cluster interface, and
615 if an active lease exists for a node's MAC then it will be linked to
616 that Network.
617
618357
6191.6.03581.6.0
620=====359-----
621360
622Special notice:361Special notice:
623 Cluster interfaces now have static IP ranges in order to give nodes stable362Cluster interfaces now have static IP ranges in order to give nodes stable IP addresses. You need to set the range in each interface to turn on this feature. See below for details.
624 IP addresses. You need to set the range in each interface to turn on this363
625 feature. See below for details.364### Major new features
626365
627366IP addresses overhaul.
628Major new features367This release contains a total reworking of IP address allocation. You can now define a separate "static" range in each cluster interface configuration that is separate from the DHCP server's dynamic range. Any node in use by a user will receive an IP address from the static range that is guaranteed not to change during its allocated lifetime. Previously, this was at the whim of the DHCP server despite MAAS placing host maps in its configuration.
629------------------368
630369Currently, dynamic IP addresses will continue to receive DNS entries so as to maintain backward compatibility with installations being upgraded from 1.5. However, this will be changed in a future release to only give DNS entries to static IPs.
631IP addresses overhaul.370
632 This release contains a total reworking of IP address allocation. You can371You can also use the API to [reserve IP addresses](http://maas.ubuntu.com/docs1.6/api.html#ip-addresses) on a per-user basis.
633 now define a separate "static" range in each cluster interface configuration372
634 that is separate from the DHCP server's dynamic range. Any node in use by373Support for additional OSes.
635 a user will receive an IP address from the static range that is guaranteed374MAAS can now install operating systems other than Ubuntu on nodes. Preliminary beta support exists for CentOS and SuSE via the [Curtin](https://launchpad.net/curtin) "fast" installer. This has not been thoroughly tested yet and has been provided in case anyone finds this useful and is willing to help find and report bugs.
636 not to change during its allocated lifetime. Previously, this was at the375
637 whim of the DHCP server despite MAAS placing host maps in its configuration.376### Minor notable changes
638377
639 Currently, dynamic IP addresses will continue to receive DNS entries so as378DNS entries
640 to maintain backward compatibility with installations being upgraded from379In 1.5 DNS entries for nodes were a CNAME record. As of 1.6, they are now all "A" records, which allows for reliable reverse look-ups.
641 1.5. However, this will be changed in a future release to only give380
642 DNS entries to static IPs.381Only nodes that are allocated to a user and started will receive "A" record entries. Unallocated nodes no longer have DNS entries.
643382
644 You can also use the API to `reserve IP addresses`_ on a per-user basis.383Removal of bootresources.yaml
645384The bootresources.yaml file, which had to be configured separately on each cluster controller, is no longer in use. Instead, the configuration for which images to download is now held by the region controller, and defaults to downloading all images for LTS releases. A [rudimentary API](http://maas.ubuntu.com/docs1.6/api.html#boot-source) is available to manipulate this configuration.
646.. _reserve IP addresses: http://maas.ubuntu.com/docs1.6/api.html#ip-addresses385
647386Fast installer is now the default
648Support for additional OSes.387Prevously, the slower Debian installer was used by default. Any newly-enlisted nodes will now use the newer [fast installer](https://launchpad.net/curtin). Existing nodes will keep the installer setting that they already have.
649 MAAS can now install operating systems other than Ubuntu on nodes.388
650 Preliminary beta support exists for CentOS and SuSE via the `Curtin`_ "fast"389### Bugs fixed in this release
651 installer. This has not been thoroughly tested yet and has been provided390
652 in case anyone finds this useful and is willing to help find and report bugs.391\#1307779 fallback from specific to generic subarch broken \#1310082 d-i with precise+hwe-s stops at "Architecture not supported" \#1314174 Autodetection of the IPMI IP address fails when the 'power\_address' of the power parameters is empty. \#1314267 MAAS dhcpd will re-issue leases for nodes \#1317675 Exception powering down a virsh machine \#1322256 Import boot resources failing to verify keyring \#1322336 import\_boot\_images crashes with KeyError on 'keyring' \#1322606 maas-import-pxe-files fails when run from the command line \#1324237 call\_and\_check does not report error output \#1328659 import\_boot\_images task fails on utopic \#1332596 AddrFormatError: failed to detect a valid IP address from None executing upload\_dhcp\_leases task \#1250370 "sudo maas-import-ephemerals" steps on \~/.gnupg/pubring.gpg \#1250435 CNAME record leaks into juju's private-address, breaks host based access control \#1305758 Import fails while writing maas.meta: No such file or directory \#1308292 Unhelpful error when re-enlisting a previously enlisted node \#1309601 maas-enlist prints "successfully enlisted" even when enlistment fail s. \#1309729 Fast path installer is not the default \#1310844 find\_ip\_via\_arp() results in unpredictable, and in some cases, incorrect IP addresses \#1310846 amt template gives up way too easily \#1312863 MAAS fails to detect SuperMicro-based server's power type \#1314536 Copyright date in web UI is 2012 \#1315160 no support for different operating systems \#1316627 API needed to allocate and return an extra IP for a container \#1323291 Can't re-commission a commissioning node \#1324268 maas-cli 'nodes list' or 'node read \<system\_id\>' doesn't display the osystem or distro\_series node fields \#1325093 install centos using curtin \#1325927 YUI.Array.each not working as expected \#1328656 MAAS sends multiple stop\_dhcp\_server tasks even though there's no dhcp server running. \#1331139 IP is inconsistently capitalized on the 'edit a cluster interface' p age \#1331148 When editing a cluster interface, last 3 fields are unintuitive \#1331165 Please do not hardcode the IP address of Canonical services into MAAS managed DHCP configs \#1338851 Add MAAS arm64/xgene support \#1307693 Enlisting a SeaMicro or Virsh chassis twice will not replace the missing entries \#1311726 No documentation about the supported power types and the related power parameters \#1331982 API documentation for nodegroup op=details missing parameter \#1274085 error when maas can't meet juju constraints is confusing and not helpful \#1330778 MAAS needs support for managing nodes via the Moonshot HP iLO Chassis Manager CLI \#1337683 The API client MAASClient doesn't encode list parameters when doing a GET \#1190986 ERROR Nonce already used \#1342135 Allow domains to be used for NTP server configuration, not just IPs \#1337437 Allow 14.10 Utopic Unicorn as a deployable series \#1350235 Package fails to install when the default route is through an aliased/tagged interface \#1353597 PowerNV: format\_bootif should make sure mac address is all lowercase
653
654
655Minor notable changes
656---------------------
657
658DNS entries
659 In 1.5 DNS entries for nodes were a CNAME record. As of 1.6, they are now
660 all "A" records, which allows for reliable reverse look-ups.
661
662 Only nodes that are allocated to a user and started will receive "A" record
663 entries. Unallocated nodes no longer have DNS entries.
664
665Removal of bootresources.yaml
666 The bootresources.yaml file, which had to be configured separately on each
667 cluster controller, is no longer in use. Instead, the configuration for
668 which images to download is now held by the region controller, and defaults
669 to downloading all images for LTS releases. A `rudimentary API`_ is
670 available to manipulate this configuration.
671
672.. _rudimentary API: http://maas.ubuntu.com/docs1.6/api.html#boot-source
673
674Fast installer is now the default
675 Prevously, the slower Debian installer was used by default. Any newly-
676 enlisted nodes will now use the newer `fast installer`_. Existing nodes
677 will keep the installer setting that they already have.
678
679.. _fast installer: https://launchpad.net/curtin
680
681
682Bugs fixed in this release
683--------------------------
684#1307779 fallback from specific to generic subarch broken
685#1310082 d-i with precise+hwe-s stops at "Architecture not supported"
686#1314174 Autodetection of the IPMI IP address fails when the 'power_address'
687of the power parameters is empty.
688#1314267 MAAS dhcpd will re-issue leases for nodes
689#1317675 Exception powering down a virsh machine
690#1322256 Import boot resources failing to verify keyring
691#1322336 import_boot_images crashes with KeyError on 'keyring'
692#1322606 maas-import-pxe-files fails when run from the command line
693#1324237 call_and_check does not report error output
694#1328659 import_boot_images task fails on utopic
695#1332596 AddrFormatError: failed to detect a valid IP address from None executing upload_dhcp_leases task
696#1250370 "sudo maas-import-ephemerals" steps on ~/.gnupg/pubring.gpg
697#1250435 CNAME record leaks into juju's private-address, breaks host based access control
698#1305758 Import fails while writing maas.meta: No such file or directory
699#1308292 Unhelpful error when re-enlisting a previously enlisted node
700#1309601 maas-enlist prints "successfully enlisted" even when enlistment fail
701s.
702#1309729 Fast path installer is not the default
703#1310844 find_ip_via_arp() results in unpredictable, and in some cases, incorrect IP addresses
704#1310846 amt template gives up way too easily
705#1312863 MAAS fails to detect SuperMicro-based server's power type
706#1314536 Copyright date in web UI is 2012
707#1315160 no support for different operating systems
708#1316627 API needed to allocate and return an extra IP for a container
709#1323291 Can't re-commission a commissioning node
710#1324268 maas-cli 'nodes list' or 'node read <system_id>' doesn't display the osystem or distro_series node fields
711#1325093 install centos using curtin
712#1325927 YUI.Array.each not working as expected
713#1328656 MAAS sends multiple stop_dhcp_server tasks even though there's no dhcp server running.
714#1331139 IP is inconsistently capitalized on the 'edit a cluster interface' p
715age
716#1331148 When editing a cluster interface, last 3 fields are unintuitive
717#1331165 Please do not hardcode the IP address of Canonical services into MAAS managed DHCP configs
718#1338851 Add MAAS arm64/xgene support
719#1307693 Enlisting a SeaMicro or Virsh chassis twice will not replace the missing entries
720#1311726 No documentation about the supported power types and the related power parameters
721#1331982 API documentation for nodegroup op=details missing parameter
722#1274085 error when maas can't meet juju constraints is confusing and not helpful
723#1330778 MAAS needs support for managing nodes via the Moonshot HP iLO Chassis Manager CLI
724#1337683 The API client MAASClient doesn't encode list parameters when doing a GET
725#1190986 ERROR Nonce already used
726#1342135 Allow domains to be used for NTP server configuration, not just IPs
727#1337437 Allow 14.10 Utopic Unicorn as a deployable series
728#1350235 Package fails to install when the default route is through an aliased/tagged interface
729#1353597 PowerNV: format_bootif should make sure mac address is all lowercase
730392
7311.5.33931.5.3
732=====394-----
733395
734Bug fix update396### Bug fix update
735--------------397
736398> - Reduce number of celery tasks emitted when updating a cluster controller (LP: \#1324944)
737 - Reduce number of celery tasks emitted when updating a cluster controller399> - Fix VirshSSH template which was referencing invalid attributes (LP: \#1324966)
738 (LP: #1324944)400> - Fix a start up problem where a database lock was being taken outside of a transaction (LP: \#1325759)
739 - Fix VirshSSH template which was referencing invalid attributes401> - Reformat badly formatted Architecture error message (LP: \#1301465)
740 (LP: #1324966)402> - Final changes to support ppc64el (now known as PowerNV) (LP: \#1315154)
741 - Fix a start up problem where a database lock was being taken outside of
742 a transaction (LP: #1325759)
743 - Reformat badly formatted Architecture error message (LP: #1301465)
744 - Final changes to support ppc64el (now known as PowerNV) (LP: #1315154)
745
746403
7471.5.24041.5.2
748=====405-----
749406
750Minor feature changes407### Minor feature changes
751---------------------408
752409Boot resource download changes.
753Boot resource download changes.410Further to the work done in the 1.5 (Ubuntu 14.04) release, MAAS no longer stores the configuration for downloading boot resources in `/etc/maas/bootresources.yaml`; this file is now obsolete. The sources list is now stored on the region controller and passed to the cluster controller when the job to download boot resources is started. It is still possible to pass a list of sources to `maas-import-pxe-files` when running the script manually.
754 Further to the work done in the 1.5 (Ubuntu 14.04) release, MAAS no
755 longer stores the configuration for downloading boot resources in
756 ``/etc/maas/bootresources.yaml``; this file is now obsolete. The
757 sources list is now stored on the region controller and passed to the
758 cluster controller when the job to download boot resources is started.
759 It is still possible to pass a list of sources to
760 ``maas-import-pxe-files`` when running the script manually.
761
762411
7631.5.14121.5.1
764=====413-----
765414
766Bug fix update415### Bug fix update
767--------------416
768417For full details see <https://launchpad.net/maas/+milestone/1.5.1>
769For full details see https://launchpad.net/maas/+milestone/1.5.1418
770419\#1303915 Powering SM15k RESTAPI v2.0 doesn't force PXE boot \#1307780 no armhf commissioning template \#1310076 lost connectivity to a node when using fastpath-installer with precise+hwe-s \#1310082 d-i with precise+hwe-s stops at "Architecture not supported" \#1311151 MAAS imports Trusty's 'rc' images by default. \#1311433 REGRESSION: AttributeError: 'functools.partial' object has no attribute '\_\_module\_\_' \#1313556 API client blocks when deleting a resource \#1314409 parallel juju deployments race on the same maas \#1316396 When stopping a node from the web UI that was started from the API, distro\_series is not cleared \#1298784 Vulnerable to user-interface redressing (e.g. clickjacking) \#1308772 maas has no way to specify alternate IP addresses for AMT template \#1300476 Unable to setup BMC/UCS user on Cisco B200 M3
771#1303915 Powering SM15k RESTAPI v2.0 doesn't force PXE boot
772#1307780 no armhf commissioning template
773#1310076 lost connectivity to a node when using fastpath-installer with precise+hwe-s
774#1310082 d-i with precise+hwe-s stops at "Architecture not supported"
775#1311151 MAAS imports Trusty's 'rc' images by default.
776#1311433 REGRESSION: AttributeError: 'functools.partial' object has no attribute '__module__'
777#1313556 API client blocks when deleting a resource
778#1314409 parallel juju deployments race on the same maas
779#1316396 When stopping a node from the web UI that was started from the API, distro_series is not cleared
780#1298784 Vulnerable to user-interface redressing (e.g. clickjacking)
781#1308772 maas has no way to specify alternate IP addresses for AMT template
782#1300476 Unable to setup BMC/UCS user on Cisco B200 M3
783420
7841.54211.5
785===422---
786423
787(released in Ubuntu 14.04)424(released in Ubuntu 14.04)
788425
789Major new features426### Major new features
790------------------427
791428Advanced Networking.
792Advanced Networking.429MAAS will now support multiple managed network interfaces on a single cluster. It will track networks (including tagged VLANs) to which each node is able to connect and provides this information in the API. API clients may also use networking information in acquisition constraints when asking for a new node allocation.
793 MAAS will now support multiple managed network interfaces on a single430
794 cluster. It will track networks (including tagged VLANs) to which each node431See The full Networking documentation \<networks\>.
795 is able to connect and provides this information in the API. API clients may432
796 also use networking information in acquisition constraints when asking for a433Zones.
797 new node allocation.434A Zone is an arbitrary grouping of nodes. MAAS now allows admins to define Zones, and place in them any of the region's nodes. Once defined, API clients can use the zone name as acquisition constraints for new node allocations.
798435
799 See :ref:`The full Networking documentation <networks>`.436See physical-zones for more detail.
800437
801Zones.438Hardware Enablement Kernels.
802 A Zone is an arbitrary grouping of nodes. MAAS now allows admins to define439MAAS is now able to fetch and use hardware enablement kernels which allow kernels for newer Ubuntu releases to be used on older releases.
803 Zones, and place in them any of the region's nodes. Once defined, API440
804 clients can use the zone name as acquisition constraints for new node441See hardware-enablement-kernels
805 allocations.442
806443### Minor feature changes
807 See :doc:`physical-zones` for more detail.444
808445Maas-Test.
809Hardware Enablement Kernels.446A new project [maas-test](https://launchpad.net/maas-test/) was created to put a piece of hardware through MAAS's test suite to see if it's suitable for use in MAAS, and optionally report the results to a bug in Launchpad's maas-test project.
810 MAAS is now able to fetch and use hardware enablement kernels which allow447
811 kernels for newer Ubuntu releases to be used on older releases.448IPMI improvements.
812449Many improvements were made to IPMI handling, including better detection during enlistment. Many IPMI-based systems that previously failed to work with MAAS will now work correctly.
813 See :doc:`hardware-enablement-kernels`450
814451Completion of image downloading changes.
815Minor feature changes452Further to the work done in the 1.4 (Ubuntu 13.10) release, MAAS now uses indexed "simplestreams" data published by Canonical to fetch not only the ephemeral images, but now also the kernels and ramdisks. The resource download configuration is now in a new file `/etc/maas/bootresources.yaml` on each cluster controller. All previous configuration files for image downloads are now obsolete. The new file will be pre-configured based on images that are already present on the cluster.
816---------------------453
817454This change also enables end-users to provide their own simplestreams data and thusly their own custom images.
818Maas-Test.455
819 A new project `maas-test`_ was created to put a piece of hardware through MAAS's456Cluster-driven hardware availability.
820 test suite to see if it's suitable for use in MAAS, and optionally report the results457When adding or editing node hardware in the region controller, MAAS will contact the relevant cluster controller to validate the node's settings. As of release, the only validation made is the architecture and the power settings. Available architectures are based on which images have been imported on the cluster. In the future, this will enable new cluster controllers to be added that contain drivers for new hardware without restarting the region controller.
821 to a bug in Launchpad's maas-test project.458
822459Seamicro hardware.
823.. _maas-test: https://launchpad.net/maas-test/460MAAS now supports the Seamicro 15000 hardware for power control and API-based enlistment.
824461
825IPMI improvements.462AMT.
826 Many improvements were made to IPMI handling, including better detection463MAAS now supports power control using [Intel AMT](http://www.intel.com/content/www/us/en/architecture-and-technology/intel-active-management-technology.html).
827 during enlistment. Many IPMI-based systems that previously failed to work464
828 with MAAS will now work correctly.465DNS forwarders.
829466In MAAS's settings it's now possible to configure an upstream DNS, which will be set in the bind daemon's 'forwarders' option.
830Completion of image downloading changes.467
831 Further to the work done in the 1.4 (Ubuntu 13.10) release, MAAS now uses indexed468Foreign DHCP servers.
832 "simplestreams" data published by Canonical to fetch not only the ephemeral469MAAS detects and shows you if any other DHCP servers are active on the networks that are on the cluster controller.
833 images, but now also the kernels and ramdisks. The resource download470
834 configuration is now in a new file ``/etc/maas/bootresources.yaml`` on471Commissioning Results.
835 each cluster controller. All previous configuration files for image472A node's commissioning results are now shown in the UI.
836 downloads are now obsolete. The new file will be pre-configured based on473
837 images that are already present on the cluster.474Renamed commands.
838475`maas` is renamed to `maas-region-admin`. `maas-cli` is now just `maas`.
839 This change also enables end-users to provide their own simplestreams data476
840 and thusly their own custom images.477### Bugs fixed in this release
841478
842Cluster-driven hardware availability.479For full details see <https://launchpad.net/maas/+milestone/14.04>
843 When adding or editing node hardware in the region controller, MAAS will480
844 contact the relevant cluster controller to validate the node's settings.481\#1227035 If a template substitution fails, the appserver crashes
845 As of release, the only validation made is the architecture and the power482
846 settings. Available architectures are based on which images have been483\#1255479 MaaS Internal Server Error 500 while parsing tags with namespaces in definition upon commissioning
847 imported on the cluster. In the future, this will enable new cluster484
848 controllers to be added that contain drivers for new hardware without485\#1269648 OAuth unauthorised errors mask the actual error text
849 restarting the region controller.486
850487\#1270052 Adding an SSH key fails due to a UnicodeDecodeError
851Seamicro hardware.488
852 MAAS now supports the Seamicro 15000 hardware for power control and API-based489\#1274024 kernel parameters are not set up in the installed OS's grub cfg
853 enlistment.490
854491\#1274190 periodic\_probe\_dhcp task raises IOError('No such device')
855AMT.492
856 MAAS now supports power control using `Intel AMT`_.493\#1274912 Internal server error when trying to stop a node with no power type
857494
858.. _Intel AMT: http://www.intel.com/content/www/us/en/architecture-and-technology/intel-active-management-technology.html495\#1274926 A node's nodegroup is autodetected using the request's IP even when the request is a manual
859496
860DNS forwarders.497\#1278895 When any of the commissioning scripts fails, the error reported contains the list of the scripts that *didn't* fail
861 In MAAS's settings it's now possible to configure an upstream DNS, which will498
862 be set in the bind daemon's 'forwarders' option.499\#1279107 maas\_ipmi\_autodetect.py ignores command failures
863500
864Foreign DHCP servers.501\#1282828 Almost impossible to provide a valid nodegroup ID when enlisting new node on API
865 MAAS detects and shows you if any other DHCP servers are active on the502
866 networks that are on the cluster controller.503\#1283114 MAAS' DHCP server is not stopped when the number of managed interfaces is zero
867504
868Commissioning Results.505\#1285244 Deleting a node sometimes fails with omshell error
869 A node's commissioning results are now shown in the UI.506
870507\#1285607 maas\_ipmi\_autodetect mistakes empty slot for taken slot
871Renamed commands.508
872 ``maas`` is renamed to ``maas-region-admin``. ``maas-cli`` is now just509\#1287274 On OCPv3 Roadrunner, maas\_ipmi\_autodetect fails because LAN Channel settings can't be changed
873 ``maas``.510
874511\#1287512 OCPv3 roadrunner detects IPMI as 1.5
875512
876Bugs fixed in this release513\#1289456 maas IPMI user creation fails on some DRAC systems
877--------------------------514
878For full details see https://launchpad.net/maas/+milestone/14.04515\#1290622 report\_boot\_images does not remove images that were deleted from the cluster
879516
880#1227035 If a template substitution fails, the appserver crashes517\#1293676 internal server error when marking nodes as using fast-path installer
881518
882#1255479 MaaS Internal Server Error 500 while parsing tags with namespaces in definition upon commissioning519\#1300587 Cloud-archive selection widget is obsolete
883520
884#1269648 OAuth unauthorised errors mask the actual error text521\#1301809 Report boot images no directory traceback
885522
886#1270052 Adding an SSH key fails due to a UnicodeDecodeError523\#1052339 MAAS only supports one "managed" (DNS/DHCP) interface per cluster controller.
887524
888#1274024 kernel parameters are not set up in the installed OS's grub cfg525\#1058126 maas dbshell stacktraces in package
889526
890#1274190 periodic_probe_dhcp task raises IOError('No such device')527\#1064212 If a machine is booted manually when in status "Declared" or "Ready", TFTP server tracebacks
891528
892#1274912 Internal server error when trying to stop a node with no power type529\#1073460 Node-specific kernel and ramdisk is not possible
893530
894#1274926 A node's nodegroup is autodetected using the request's IP even when the request is a manual531\#1177932 Unable to select which pxe files to download by both series and architecture.
895532
896#1278895 When any of the commissioning scripts fails, the error reported contains the list of the scripts that *didn't* fail533\#1181334 i386 required to install amd64
897534
898#1279107 maas_ipmi_autodetect.py ignores command failures535\#1184589 When external commands, issued by MAAS, fail, the log output does not give any information about the failure.
899536
900#1282828 Almost impossible to provide a valid nodegroup ID when enlisting new node on API537\#1187851 Newline added to end of files obtained with maas-cli
901538
902#1283114 MAAS' DHCP server is not stopped when the number of managed interfaces is zero539\#1190986 ERROR Nonce already used
903540
904#1285244 Deleting a node sometimes fails with omshell error541\#1191735 TFTP server not listening on all interfaces
905542
906#1285607 maas_ipmi_autodetect mistakes empty slot for taken slot543\#1210393 MAAS ipmi fails on OCPv3 Roadrunner
907544
908#1287274 On OCPv3 Roadrunner, maas_ipmi_autodetect fails because LAN Channel settings can't be changed545\#1228205 piston hijacks any TypeError raised by MAAS
909546
910#1287512 OCPv3 roadrunner detects IPMI as 1.5547\#1234880 HP ilo4 consoles default to autodetect protocol, which doesn't work
911548
912#1289456 maas IPMI user creation fails on some DRAC systems549\#1237197 No scheduled job for images download
913550
914#1290622 report_boot_images does not remove images that were deleted from the cluster551\#1238284 multiple ip address displayed for a node
915552
916#1293676 internal server error when marking nodes as using fast-path installer553\#1243917 'maas createsuperuser' errors out if no email address is entered.
917554
918#1300587 Cloud-archive selection widget is obsolete555\#1246531 dhcpd.conf not updated when user hits "Save cluster controller"
919556
920#1301809 Report boot images no directory traceback557\#1246625 The power parameters used by the virsh power template are inconsistent.
921558
922#1052339 MAAS only supports one "managed" (DNS/DHCP) interface per cluster controller.559\#1247708 Cluster interface shows up with no interface name
923560
924#1058126 maas dbshell stacktraces in package561\#1248893 maas-cli listing nodes filtered by hostname doesn't work
925562
926#1064212 If a machine is booted manually when in status "Declared" or "Ready", TFTP server tracebacks563\#1249435 kernel options not showing up in WebUI and not being passed at install time to one node
927564
928#1073460 Node-specific kernel and ramdisk is not possible565\#1250410 Search box renders incorrectly in Firefox
929566
930#1177932 Unable to select which pxe files to download by both series and architecture.567\#1268795 unable to automatically commission Cisco UCS server due to BMC user permissions
931568
932#1181334 i386 required to install amd64569\#1270131 1 CPU when there are multiple cores on Intel NUC
933570
934#1184589 When external commands, issued by MAAS, fail, the log output does not give any information about the failure.571\#1271056 API call for listing nodes filtered by zone
935572
936#1187851 Newline added to end of files obtained with maas-cli573\#1273650 Fastpath installer does not pick up package mirror settings from MAAS
937574
938#1190986 ERROR Nonce already used575\#1274017 MAAS new user creation requires E-Mail address, throws wrong error when not provided
939576
940#1191735 TFTP server not listening on all interfaces577\#1274465 Network identity shows broadcast address instead of the network's address
941578
942#1210393 MAAS ipmi fails on OCPv3 Roadrunner579\#1274499 dhcp lease rollover causes loss of access to management IP
943580
944#1228205 piston hijacks any TypeError raised by MAAS581\#1275643 When both IPMI 1.5 and 2.0 are available, MAAS should use 2.0
945582
946#1234880 HP ilo4 consoles default to autodetect protocol, which doesn't work583\#1279304 Node commissioning results are not displayed in the UI
947584
948#1237197 No scheduled job for images download585\#1279728 Storage capacity isn't always detected
949586
950#1238284 multiple ip address displayed for a node587\#1287964 MAAS incorrectly detects / sets-up BMC information on Dell PowerEdge servers
951588
952#1243917 'maas createsuperuser' errors out if no email address is entered.589\#1292491 pserv traceback when region controller not yet ready
953590
954#1246531 dhcpd.conf not updated when user hits "Save cluster controller"591\#1293661 cannot use fast path installer to deploy other than trusty
955592
956#1246625 The power parameters used by the virsh power template are inconsistent.593\#1294302 fast installer fails to PXE boot on armhf/highbank
957594
958#1247708 Cluster interface shows up with no interface name595\#1295035 The UI doesn't display the list of available boot images
959596
960#1248893 maas-cli listing nodes filtered by hostname doesn't work597\#1297814 MAAS does not advertise its capabilities
961598
962#1249435 kernel options not showing up in WebUI and not being passed at install time to one node599\#1298790 Logout page vulnerable to CSRF
963600
964#1250410 Search box renders incorrectly in Firefox601\#1271189 support switching image streams in import ephemerals
965602
966#1268795 unable to automatically commission Cisco UCS server due to BMC user permissions603\#1287310 hard to determine valid values for power parameters
967604
968#1270131 1 CPU when there are multiple cores on Intel NUC605\#1272014 MAAS prompts user to run maas createadmin; instead of maas createsuperuser
969606
970#1271056 API call for listing nodes filtered by zone607\#1108319 maascli could have a way to tell which cluster controllers don't have the pxe files
971
972#1273650 Fastpath installer does not pick up package mirror settings from MAAS
973
974#1274017 MAAS new user creation requires E-Mail address, throws wrong error when not provided
975
976#1274465 Network identity shows broadcast address instead of the network's address
977
978#1274499 dhcp lease rollover causes loss of access to management IP
979
980#1275643 When both IPMI 1.5 and 2.0 are available, MAAS should use 2.0
981
982#1279304 Node commissioning results are not displayed in the UI
983
984#1279728 Storage capacity isn't always detected
985
986#1287964 MAAS incorrectly detects / sets-up BMC information on Dell PowerEdge servers
987
988#1292491 pserv traceback when region controller not yet ready
989
990#1293661 cannot use fast path installer to deploy other than trusty
991
992#1294302 fast installer fails to PXE boot on armhf/highbank
993
994#1295035 The UI doesn't display the list of available boot images
995
996#1297814 MAAS does not advertise its capabilities
997
998#1298790 Logout page vulnerable to CSRF
999
1000#1271189 support switching image streams in import ephemerals
1001
1002#1287310 hard to determine valid values for power parameters
1003
1004#1272014 MAAS prompts user to run `maas createadmin`; instead of `maas createsuperuser`
1005
1006#1108319 maascli could have a way to tell which cluster controllers don't have the pxe files
1007
1008608
10091.46091.4
1010===610---
1011611
1012(released in Ubuntu 13.10)612(released in Ubuntu 13.10)
1013613
1014Major new features614### Major new features
1015------------------615
1016616LLDP collection.
1017LLDP collection.617MAAS now collects LLDP data on each node during its commissioning cycle. The router to which the node is connected will have its MAC address parsed out of the data and made available for using as a placement constraint (passing connected\_to or not\_connected\_to to the acquire() API call), or you can define tags using expressions such as `//lldp:chassis/lldp:id[@type="mac"]/text() = "20:4e:7f:94:2e:10"` which would tag nodes with a router using that MAC address.
1018 MAAS now collects LLDP data on each node during its618
1019 commissioning cycle. The router to which the node is connected will have619New faster installer for nodes.
1020 its MAC address parsed out of the data and made available for using as a620MAAS will now make use of the new [Curtin](https://launchpad.net/curtin) installer which is much quicker than the old Debian Installer process. Typically an installation now takes a couple of minutes instead of upwards of 10 minutes. To have a node use the faster installer, add the `use-fastpath-installer` tag to it, or click the "Use the fast installer" button on the node page.
1021 placement constraint (passing connected_to or not_connected_to to the621
1022 acquire() API call), or you can define tags using expressions such as622More extensible templates for DHCP, power control, PXE and DNS.
1023 ``//lldp:chassis/lldp:id[@type="mac"]/text() = "20:4e:7f:94:2e:10"``623Templates supplied for these activities are now all in their own template file that is customisable by the user. The files now generally live under /etc/maas/ rather than embedded in the code tree itself.
1024 which would tag nodes with a router using that MAC address.624
1025625### Minor feature changes
1026New faster installer for nodes.626
1027 MAAS will now make use of the new Curtin_ installer which is much quicker627Reworked ephemeral downloading
1028 than the old Debian Installer process. Typically an installation now628While there is no end-user visible change, the ephemeral image download process is now driven by a data stream published by Canonical at <http://maas.ubuntu.com/images/streams>. In the future this will allow end users to use their own customised images by creating their own stream. The configuration for this is now also part of `pserv.yaml`, obsoleting the maas\_import\_ephemerals configuration file. The config will be auto-migrated on the first run of the `maas-import-ephemerals` script.
1029 takes a couple of minutes instead of upwards of 10 minutes. To have a node629
1030 use the faster installer, add the ``use-fastpath-installer`` tag to it,630Improved maas-cli support
1031 or click the "Use the fast installer" button on the node page.631Users can now manage their SSH keys and API credentials via the maas-cli tool.
1032632
1033.. _Curtin: https://launchpad.net/curtin633Django 1.5
1034634MAAS is updated to work with Django 1.5
1035More extensible templates for DHCP, power control, PXE and DNS.635
1036 Templates supplied for these activities are now all in their own template636HP Moonshot Systems support.
1037 file that is customisable by the user. The files now generally live under637MAAS can now manage HP Moonshot Systems as any other hardware. However, in order for MAAS to power manage these systems, it requires the user to manually specify the iLO credentials before the enlistment process begins. This can be done in the `maas_moonshot_autodetect.py` template under `/etc/maas/templates/commissioning-user-data/snippets/`.
1038 /etc/maas/ rather than embedded in the code tree itself.638
1039639### Bugs fixed in this release
1040Minor feature changes640
1041---------------------641\#1039513 maas-import-pxe-files doesn't cryptographically verify what it downloads
1042642
1043Reworked ephemeral downloading643\#1158425 maas-import-pxe-files sources path-relative config
1044 While there is no end-user visible change, the ephemeral image download644
1045 process is now driven by a data stream published by Canonical at645\#1204507 MAAS rejects empty files
1046 http://maas.ubuntu.com/images/streams. In the future this will allow end646
1047 users to use their own customised images by creating their own stream.647\#1208497 netboot flag defaults to 'true' on upgrade, even for allocated nodes
1048 The configuration for this is now also part of ``pserv.yaml``, obsoleting648
1049 the maas_import_ephemerals configuration file. The config will be auto-649\#1227644 Releasing a node using the API errors with "TypeError: 00:e0:81:dd:d1:0b is not JSON serializable"
1050 migrated on the first run of the ``maas-import-ephemerals`` script.650
1051651\#1234853 MAAS returns HTTP/500 when adding a second managed interface to cluster controller
1052Improved maas-cli support652
1053 Users can now manage their SSH keys and API credentials via the maas-cli653\#971349 With 100% of nodes in 'declared' state, pie chart is white on white
1054 tool.654
1055655\#974035 Node listing does not support bulk operations
1056Django 1.5656
1057 MAAS is updated to work with Django 1.5657\#1045725 SAY clauses in PXE configs are being evaluated as they're encountered, not when the label is branched to
1058658
1059HP Moonshot Systems support.659\#1054518 distro\_series can be None or ""
1060 MAAS can now manage HP Moonshot Systems as any other hardware. However,660
1061 in order for MAAS to power manage these systems, it requires the user661\#1064777 If a node's IP address is known, it's not shown anywhere
1062 to manually specify the iLO credentials before the enlistment process662
1063 begins. This can be done in the ``maas_moonshot_autodetect.py``663\#1084807 Users are editing the machine-generated dhcpd.conf
1064 template under ``/etc/maas/templates/commissioning-user-data/snippets/``.664
1065665\#1155607 Conflict between "DNS zone name" in Cluster controller and "Default domain for new nodes" in settings
1066Bugs fixed in this release666
1067--------------------------667\#1172336 MAAS server reference to AvahiBoot wiki page that does not exist
1068#1039513 maas-import-pxe-files doesn't cryptographically verify what668
1069it downloads669\#1185160 no way to see what user has a node allocated
1070670
1071#1158425 maas-import-pxe-files sources path-relative config671\#1202314 Discrepancy between docs and behavior
1072672
1073#1204507 MAAS rejects empty files673\#1206222 Documentation Feedback and Site suggestions
1074674
1075#1208497 netboot flag defaults to 'true' on upgrade, even for allocated675\#1209039 Document that MAAS requires 'portfast' on switch ports connected to nodes
1076nodes676
1077677\#1215750 No way of tracing/debugging http traffic content in the appserver.
1078#1227644 Releasing a node using the API errors with "TypeError:678
107900:e0:81:dd:d1:0b is not JSON serializable"679\#1223157 start\_commissioning needlessly sets owner on commissioning nodes
1080680
1081#1234853 MAAS returns HTTP/500 when adding a second managed interface681\#1227081 Error in apache's log "No handlers could be found for logger "maasserver""
1082to cluster controller682
1083683\#1233069 maas-import-pxe-files fails when md5 checksums can't be downloaded
1084#971349 With 100% of nodes in 'declared' state, pie chart is white on white684
1085685\#1117415 maas dhcp responses do not have domain-name or domain-search
1086#974035 Node listing does not support bulk operations686
1087687\#1136449 maas-cli get-config and set-config documentation
1088#1045725 SAY clauses in PXE configs are being evaluated as they're688
1089encountered, not when the label is branched to689\#1175405 Pie chart says "deployed" which is inconsistent with the node list's "allocated"
1090690
1091#1054518 distro_series can be None or ""691\#1233833 Usability: deleting nodes is too easy
1092692
1093#1064777 If a node's IP address is known, it's not shown anywhere693\#1185897 expose ability to re-commission node in api and cli
1094694
1095#1084807 Users are editing the machine-generated dhcpd.conf695\#997092 Can't delete allocated node even if owned by self
1096
1097#1155607 Conflict between "DNS zone name" in Cluster controller and
1098"Default domain for new nodes" in settings
1099
1100#1172336 MAAS server reference to AvahiBoot wiki page that does not exist
1101
1102#1185160 no way to see what user has a node allocated
1103
1104#1202314 Discrepancy between docs and behavior
1105
1106#1206222 Documentation Feedback and Site suggestions
1107
1108#1209039 Document that MAAS requires 'portfast' on switch ports connected
1109to nodes
1110
1111#1215750 No way of tracing/debugging http traffic content in the appserver.
1112
1113#1223157 start_commissioning needlessly sets owner on commissioning nodes
1114
1115#1227081 Error in apache's log "No handlers could be found for logger
1116"maasserver""
1117
1118#1233069 maas-import-pxe-files fails when md5 checksums can't be downloaded
1119
1120#1117415 maas dhcp responses do not have domain-name or domain-search
1121
1122#1136449 maas-cli get-config and set-config documentation
1123
1124#1175405 Pie chart says "deployed" which is inconsistent with the node
1125list's "allocated"
1126
1127#1233833 Usability: deleting nodes is too easy
1128
1129#1185897 expose ability to re-commission node in api and cli
1130
1131#997092 Can't delete allocated node even if owned by self
1132696
1133697
=== renamed file 'docs/cluster-configuration.rst' => 'docs/cluster-configuration.md'
--- docs/cluster-configuration.rst 2014-08-22 00:13:24 +0000
+++ docs/cluster-configuration.md 2015-04-17 21:06:27 +0000
@@ -1,146 +1,71 @@
1.. -*- mode: rst -*-
2
3.. _cluster-configuration:
4
5Cluster Configuration1Cluster Configuration
6=====================2=====================
73
8Before any of MAAS's features can be used for the first time, you must have4Before any of MAAS's features can be used for the first time, you must have a cluster controller and configure it to manage at least one network of nodes. Each node in the cluster should be attached to one of these networks. (In addition, a node can be attached to any number of networks that are not managed by MAAS.)
9a cluster controller and configure it to manage at least one network of5
10nodes. Each node in the cluster should be attached to one of these networks.6Managing a network normally means that MAAS will serve DHCP from the cluster controller. **Do this only on a network that was set up with this in mind.** Running your own DHCP server that competes with an existing one that's already managing the network can cause serious disruption, and it can be hard for administrators to track the source of the problem. Worse, the problems may not become immediately noticeable. Make sure you understand the implications of running a DHCP server before doing this. If MAAS detects any DHCP servers already running on these networks, it will show them on the cluster's configuration page.
11(In addition, a node can be attached to any number of networks that are not
12managed by MAAS.)
13
14Managing a network normally means that MAAS will serve DHCP from the cluster
15controller. **Do this only on a network that was set up with this in mind.**
16Running your own DHCP server that competes with an existing one that's
17already managing the network can cause serious disruption, and it can be hard
18for administrators to track the source of the problem. Worse, the problems
19may not become immediately noticeable. Make sure you understand the
20implications of running a DHCP server before doing this. If MAAS detects any
21DHCP servers already running on these networks, it will show them on the
22cluster's configuration page.
23
247
25Network requirements8Network requirements
26--------------------9--------------------
2710
28The cluster controller manages a network of nodes through one of its interfaces11The cluster controller manages a network of nodes through one of its interfaces as defined in MAAS. Cluster interfaces are discovered automatically, though this may not happen e.g. if the network interface was down when MAAS was installed.
29as defined in MAAS. Cluster interfaces are discovered automatically, though12
30this may not happen e.g. if the network interface was down when MAAS was13When a cluster controller manages nodes on a network through one of its interfaces, the nodes must be on the same subnet as the cluster interface. This is for two reasons:
31installed.14
32151. If the cluster controller is configured to manage DHCP, the nodes must be able to configure their own network interfaces using MAAS's DHCP server. This means that either they must be on the same subnet, or that DHCP packets are being specially routed between the nodes' subnet and MAAS's DHCP server.
33When a cluster controller manages nodes on a network through one of its162. The cluster controller must be able to find nodes' IP addresses based on their MAC addresses, by inspecting its ARP cache. This implies that the nodes and the cluster controller must be on the same physical subnet.
34interfaces, the nodes must be on the same subnet as the cluster interface.
35This is for two reasons:
36
371. If the cluster controller is configured to manage DHCP, the nodes must be
38 able to configure their own network interfaces using MAAS's DHCP server.
39 This means that either they must be on the same subnet, or that DHCP packets
40 are being specially routed between the nodes' subnet and MAAS's DHCP server.
412. The cluster controller must be able to find nodes' IP addresses based on
42 their MAC addresses, by inspecting its ARP cache. This implies that the
43 nodes and the cluster controller must be on the same physical subnet.
44
4517
46Cluster acceptance18Cluster acceptance
47------------------19------------------
4820
49If you install your first cluster controller on the same system as the region21If you install your first cluster controller on the same system as the region controller, as is the case when you install the full "maas" ubuntu package, it will be automatically accepted by default (but not yet configured, see below). Any other cluster controllers you set up will show up in the user interface as "pending," until you manually accept them into the MAAS.
50controller, as is the case when you install the full "maas" ubuntu package,22
51it will be automatically accepted by default (but not yet configured, see23To accept a cluster controller, visit the "pending clusters" section of the Clusters page:
52below). Any other cluster controllers you set up will show up in the user24
53interface as "pending," until you manually accept them into the MAAS.25![image](media/cluster-accept.png)
5426
55To accept a cluster controller, visit the "pending clusters" section of the27You can either click on "Accept all" or click on the edit icon to edit the cluster. After clicking on the edit icon, you will see this page:
56Clusters page:28
5729![image](media/cluster-edit.png)
58.. image:: media/cluster-accept.png30
5931Here you can change the cluster's name as it appears in the UI, its DNS zone, and its status. Accepting the cluster changes its status from "pending" to "accepted."
60You can either click on "Accept all" or click on the edit icon to edit32
61the cluster. After clicking on the edit icon, you will see this page:33Now that the cluster controller is accepted, you can configure one or more of its network interfaces to be managed by MAAS. This will enable the cluster controller to manage nodes attached to those networks. The next section explains how to do this and what choices are to be made.
62
63.. image:: media/cluster-edit.png
64
65Here you can change the cluster's name as it appears in the UI, its DNS
66zone, and its status. Accepting the cluster changes its status from
67"pending" to "accepted."
68
69Now that the cluster controller is accepted, you can configure one or more of
70its network interfaces to be managed by MAAS. This will enable the cluster
71controller to manage nodes attached to those networks. The next section
72explains how to do this and what choices are to be made.
73
7434
75Cluster interface management35Cluster interface management
76----------------------------36----------------------------
7737
78MAAS automatically recognises the network interfaces on each cluster38MAAS automatically recognises the network interfaces on each cluster controller. Some (though not necessarily all) of these will be connected to networks where you want to manage nodes. A connection between a cluster controller and a network is called a cluster interface. Each cluster interface is built on exactly one network interface, though it's possible for two cluster interfaces to use the same network interface card.
79controller. Some (though not necessarily all) of these will be connected to39
80networks where you want to manage nodes. A connection between a cluster40We recommend letting your cluster controller act as a DHCP server for the networks it manages, by configuring the corresponding cluster interfaces in the MAAS user interface.
81controller and a network is called a `cluster interface`. Each cluster41
82interface is built on exactly one network interface, though it's possible for42As an example, we will configure the cluster controller to manage a network on interface `eth0`. Click on the edit icon for the cluster interface on network interface `eth0`, which takes us to this page:
83two cluster interfaces to use the same network interface card.43
8444![image](media/cluster-interface-edit.png)
85We recommend letting your cluster controller act as a DHCP server for the45
86networks it manages, by configuring the corresponding cluster interfaces in46Here you can select to what extent you want the cluster controller to manage the network:
87the MAAS user interface.47
88481. DHCP only - this will run a DHCP server on your cluster
89As an example, we will configure the cluster controller to manage a network492. DHCP and DNS - this will run a DHCP server on the cluster *and* configure the DNS server included with the region controller so that it can be used to look up hosts on this network by name.
90on interface ``eth0``. Click on the edit icon for the cluster interface on50
91network interface ``eth0``, which takes us to this page:51If you set the interface to be managed, you now need to provide all of the usual DHCP details in the input fields below. Once done, click "Save interface". The cluster controller will now be able to boot nodes on this network.
9252
93.. image:: media/cluster-interface-edit.png53There is also an option to leave the network unmanaged. Use this for networks where you don't want to manage any nodes. Or, if you do want to manage nodes but don't want the cluster controller to serve DHCP, you may be able to get by without it. This is explained in manual-dhcp.
9454
95Here you can select to what extent you want the cluster controller to manage55### Static vs Dynamic IP Addresses
96the network:56
9757On the cluster interface edit page, there are fields to enter both a dynamic and a static range of IP addresses. It is mandatory to enter the dynamic range if you are managing DHCP on this interface, but the static range is optional.
98#. DHCP only - this will run a DHCP server on your cluster58
99#. DHCP and DNS - this will run a DHCP server on the cluster *and* configure59Dynamic addresses are given to both unknown devices booting on this network, and Nodes that are commissioning. Dynamic addresses are allocated by the DHCP server and may change at any time.
100 the DNS server included with the region controller so that it can be used60
101 to look up hosts on this network by name.61Static addresses are given to Nodes when they are allocated to a user and started up, and returned to the pool only when the Node is de-allocated. Static addresses are allocated by MAAS, and are guaranteed not to change while allocated. If you are managing DNS on this network, only static IP addresses are given DNS entries with the Node's name.
10262
103If you set the interface to be managed, you now need to provide all of the63If you do not configure the static range, then nodes will only get dynamic IP addresses and will never get a DNS entry.
104usual DHCP details in the input fields below. Once done, click "Save64
105interface". The cluster controller will now be able to boot nodes on this65IP addresses in the static range are also available for reservation by users using the api. This prevents MAAS from allocating the reserved IP to any Nodes or other devices, which allows users to assign it freely to their own hosts/devices on the same network, such as LXC containers.
106network.
107
108There is also an option to leave the network unmanaged. Use this for
109networks where you don't want to manage any nodes. Or, if you do want to
110manage nodes but don't want the cluster controller to serve DHCP, you may be
111able to get by without it. This is explained in :ref:`manual-dhcp`.
112
113.. _static-ip-address:
114
115Static vs Dynamic IP Addresses
116^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
117
118On the cluster interface edit page, there are fields to enter both a dynamic
119and a static range of IP addresses. It is mandatory to enter the dynamic range
120if you are managing DHCP on this interface, but the static range is optional.
121
122Dynamic addresses are given to both unknown devices booting on this network,
123and Nodes that are commissioning. Dynamic addresses are allocated by the
124DHCP server and may change at any time.
125
126Static addresses are given to Nodes when they are allocated to a user and
127started up, and returned to the pool only when the Node is de-allocated.
128Static addresses are allocated by MAAS, and are guaranteed not to change while
129allocated. If you are managing DNS on this network, only static IP addresses
130are given DNS entries with the Node's name.
131
132If you do not configure the static range, then nodes will only get dynamic
133IP addresses and will never get a DNS entry.
134
135IP addresses in the static range are also available for reservation by users
136using the :doc:`api`. This prevents MAAS from allocating the reserved
137IP to any Nodes or other devices, which allows users to assign it freely
138to their own hosts/devices on the same network, such as LXC containers.
139
14066
141Multiple networks67Multiple networks
142-----------------68-----------------
14369
144A single cluster controller can manage more than one network, each from a70A single cluster controller can manage more than one network, each from a different cluster interface. This may help you scale your cluster to larger numbers of nodes, or it may be a requirement of your network architecture.
145different cluster interface. This may help you scale your cluster to larger71
146numbers of nodes, or it may be a requirement of your network architecture.
14772
=== removed file 'docs/conf.py'
--- docs/conf.py 2015-03-25 13:22:48 +0000
+++ docs/conf.py 1970-01-01 00:00:00 +0000
@@ -1,305 +0,0 @@
1# -*- coding: utf-8 -*-
2#
3# MAAS documentation build configuration file, created by
4# sphinx-quickstart on Thu Jan 19 14:48:25 2012.
5#
6# This file is execfile()d with the current directory set to its containing dir.
7#
8# Note that not all possible configuration values are present in this
9# autogenerated file.
10#
11# All configuration values have a default; values that are commented out
12# serve to show the default.
13
14# Import maas' settings.
15from os import environ
16
17
18environ.setdefault("DJANGO_SETTINGS_MODULE", "maas.settings")
19
20# If extensions (or modules to document with autodoc) are in another directory,
21# add these directories to sys.path here. If the directory is relative to the
22# documentation root, use os.path.abspath to make it absolute, like shown here.
23
24import sys, os
25# Include '.' in the path so that our custom extension, 'versions', can
26# be found.
27sys.path.insert(0, os.path.abspath('.'))
28
29# -- Multiple documentation options.
30
31# Add a widget to switch between different versions of the documentation to
32# each generated page.
33add_version_switcher = False
34
35# In order for the version widget to be able to redirect correctly to the
36# other versions of the documentation, each version of the documentation
37# has to be accessible at the following addresses:
38# /<doc_prefix>/ -> documentation for trunk.
39# /<doc_prefix>1.4/ -> documentation for 1.4.
40# etc.
41doc_prefix = 'docs'
42
43# Path of the JSON document, relative to homepage of the documentation for trunk
44# (i.e. '/<doc_prefix>/'), with the list of the versions to include in the
45# version switcher widget.
46versions_path = '_static/versions.js'
47
48# Versions to include in the version switcher.
49# Note that the version switcher fetches the list of the documentation versions
50# from the list published by the trunk documentation (i.e. in '/<doc_prefix>/').
51# This means the following list is meaningful only for trunk.
52# The first item should be the development version.
53from collections import OrderedDict
54doc_versions = OrderedDict([
55 ('dev', 'Development trunk'),
56 ('1.7', 'MAAS 1.7'),
57 ('1.6', 'MAAS 1.6'),
58 ('1.5', 'MAAS 1.5'),
59 ('1.4', 'MAAS 1.4'),
60 ('1.3', 'MAAS 1.3'),
61 ('1.2', 'MAAS 1.2'),
62])
63
64# -- General configuration -----------------------------------------------------
65
66# If your documentation needs a minimal Sphinx version, state it here.
67#needs_sphinx = '1.0'
68
69# Add any Sphinx extension module names here, as strings. They can be extensions
70# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
71extensions = [
72 'sphinx.ext.autodoc',
73 'sphinx.ext.autosummary',
74 'sphinx.ext.doctest',
75 'sphinx.ext.intersphinx',
76 'sphinx.ext.pngmath',
77 'sphinx.ext.viewcode',
78 'versions',
79 ]
80
81# Add any paths that contain templates here, relative to this directory.
82templates_path = ['_templates']
83
84# The suffix of source filenames.
85source_suffix = '.rst'
86
87# The encoding of source files.
88#source_encoding = 'utf-8-sig'
89
90# The master toctree document.
91master_doc = 'index'
92
93# General information about the project.
94project = u'MAAS'
95copyright = u'2012-2014, MAAS Developers'
96
97# The version info for the project you're documenting, acts as replacement for
98# |version| and |release|, also used in various other places throughout the
99# built documents.
100#
101# The short X.Y version.
102version = doc_versions.items()[0][0]
103# The full version, including alpha/beta/rc tags.
104release = version
105
106# The language for content autogenerated by Sphinx. Refer to documentation
107# for a list of supported languages.
108#language = None
109
110# There are two options for replacing |today|: either, you set today to some
111# non-false value, then it is used:
112#today = ''
113# Else, today_fmt is used as the format for a strftime call.
114#today_fmt = '%B %d, %Y'
115
116# List of patterns, relative to source directory, that match files and
117# directories to ignore when looking for source files.
118exclude_patterns = ['_build', '_templates']
119
120# The reST default role (used for this markup: `text`) to use for all documents.
121#default_role = None
122
123# If true, '()' will be appended to :func: etc. cross-reference text.
124#add_function_parentheses = True
125
126# If true, the current module name will be prepended to all description
127# unit titles (such as .. function::).
128#add_module_names = True
129
130# If true, sectionauthor and moduleauthor directives will be shown in the
131# output. They are ignored by default.
132#show_authors = False
133
134# The name of the Pygments (syntax highlighting) style to use.
135pygments_style = 'sphinx'
136
137# A list of ignored prefixes for module index sorting.
138#modindex_common_prefix = []
139
140# AutoDoc <http://sphinx.pocoo.org/ext/autodoc.html>
141autodoc_default_flags = ['members', 'show-inheritance']
142autodoc_member_order = 'bysource'
143autodoc_docstring_signature = True
144
145# AutoSummary <http://sphinx.pocoo.org/ext/autosummary.html>
146autosummary_generate = True
147
148# -- Options for HTML output ---------------------------------------------------
149
150# The theme to use for HTML and HTML Help pages. See the documentation for
151# a list of builtin themes.
152html_theme = 'maas'
153
154# Theme options are theme-specific and customize the look and feel of a theme
155# further. For a list of options available for each theme, see the
156# documentation.
157#html_theme_options = {}
158
159# Add any paths that contain custom themes here, relative to this directory.
160#html_theme_path = []
161
162html_theme_path = ['_templates']
163
164# The name for this set of Sphinx documents. If None, it defaults to
165# "<project> v<release> documentation".
166#html_title = None
167
168# A shorter title for the navigation bar. Default is the same as html_title.
169#html_short_title = None
170
171# The name of an image file (relative to this directory) to place at the top
172# of the sidebar.
173html_logo = 'media/maas-logo-200.png'
174
175# The name of an image file (within the static path) to use as favicon of the
176# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
177# pixels large.
178html_favicon = 'media/maas.ico'
179
180# Add any paths that contain custom static files (such as style sheets) here,
181# relative to this directory. They are copied after the builtin static files,
182# so a file named "default.css" will overwrite the builtin "default.css".
183html_static_path = ['_static']
184
185# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
186# using the given strftime format.
187html_last_updated_fmt = '%b %d, %Y'
188
189# If true, SmartyPants will be used to convert quotes and dashes to
190# typographically correct entities.
191#html_use_smartypants = True
192
193# Custom sidebar templates, maps document names to template names.
194#html_sidebars = {}
195
196# Additional templates that should be rendered to pages, maps page names to
197# template names.
198#html_additional_pages = {}
199
200# If false, no module index is generated.
201#html_domain_indices = True
202
203# If false, no index is generated.
204#html_use_index = True
205
206# If true, the index is split into individual pages for each letter.
207#html_split_index = False
208
209# If true, links to the reST sources are added to the pages.
210#html_show_sourcelink = True
211
212# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
213html_show_sphinx = True
214
215# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
216html_show_copyright = True
217
218# If true, an OpenSearch description file will be output, and all pages will
219# contain a <link> tag referring to it. The value of this option must be the
220# base URL from which the finished HTML is served.
221#html_use_opensearch = ''
222
223# This is the file name suffix for HTML files (e.g. ".xhtml").
224#html_file_suffix = None
225
226# Output file base name for HTML help builder.
227htmlhelp_basename = 'MAASdoc'
228
229
230# -- Options for LaTeX output --------------------------------------------------
231
232# The paper size ('letter' or 'a4').
233latex_paper_size = 'a4'
234
235# The font size ('10pt', '11pt' or '12pt').
236#latex_font_size = '10pt'
237
238# Grouping the document tree into LaTeX files. List of tuples
239# (source start file, target name, title, author, documentclass [howto/manual]).
240latex_documents = [
241 ('index', 'MAAS.tex', u'MAAS Documentation',
242 u'MAAS Developers', 'manual'),
243]
244
245# The name of an image file (relative to this directory) to place at the top of
246# the title page.
247#latex_logo = None
248
249# For "manual" documents, if this is true, then toplevel headings are parts,
250# not chapters.
251#latex_use_parts = False
252
253# If true, show page references after internal links.
254#latex_show_pagerefs = False
255
256# If true, show URL addresses after external links.
257#latex_show_urls = False
258
259# Additional stuff for the LaTeX preamble.
260#latex_preamble = ''
261
262# Documents to append as an appendix to all manuals.
263#latex_appendices = []
264
265# If false, no module index is generated.
266#latex_domain_indices = True
267
268
269# -- Options for manual page output --------------------------------------------
270
271# One entry per manual page. List of tuples
272# (source start file, name, description, authors, manual section).
273man_pages = [
274 ('man/maas.8', 'maas', u'MAAS API commandline utility',
275 [u'Canonical 2013-2014'], 8),
276 ('man/maas-region-admin.8', 'maas-region-admin', u'MAAS administration tool',
277 [u'Canonical 2013-2014'], 8)
278]
279
280
281# Example configuration for intersphinx: refer to the Python standard library.
282intersphinx_mapping = {'http://docs.python.org/': None}
283
284# Gather information about the branch and the build date.
285from subprocess import check_output, CalledProcessError
286try:
287 bzr_last_revision_number = check_output(['bzr', 'revno'])
288 bzr_last_revision_date = check_output(['bzr', 'version-info', '--template={date}', '--custom'])
289 bzr_build_date = check_output(['bzr', 'version-info', '--template={build_date}', '--custom'])
290except (CalledProcessError):
291 # not a bzr repository
292 bzr_last_revision_number = 'unknown'
293 bzr_last_revision_date = check_output(['date', '-u', '+%Y-%m-%d %H:%M:%S %z'])
294 bzr_build_date = bzr_last_revision_date
295
296
297# Populate html_context with the variables used in the templates.
298html_context = {
299 'add_version_switcher': 'true' if add_version_switcher else 'false',
300 'versions_json_path': '/'.join(['', doc_prefix, versions_path]),
301 'doc_prefix': doc_prefix,
302 'bzr_last_revision_date': bzr_last_revision_date,
303 'bzr_last_revision_number': bzr_last_revision_number,
304 'bzr_build_date': bzr_build_date,
305}
3060
=== renamed file 'docs/configure.rst' => 'docs/configure.md'
--- docs/configure.rst 2015-03-25 13:22:48 +0000
+++ docs/configure.md 2015-04-17 21:06:27 +0000
@@ -1,268 +1,175 @@
1Additional Configuration1Additional Configuration
2========================2========================
33
4
5.. _manual-dhcp:
6
7Manual DHCP configuration4Manual DHCP configuration
8-------------------------5-------------------------
96
10DHCP is needed in order for MAAS to boot and control nodes. However, there7DHCP is needed in order for MAAS to boot and control nodes. However, there are some circumstances under which you may not wish a cluster controller to handle DHCP address assignments for the network. In these instances, the existing DHCP server for the network will need its configuration altered to allow MAAS to enlist and control nodes automatically.
11are some circumstances under which you may not wish a cluster controller to8
12handle DHCP address assignments for the network. In these instances, the9> **note**
13existing DHCP server for the network will need its configuration altered to10
14allow MAAS to enlist and control nodes automatically.11> If you don't let MAAS manage DHCP, then MAAS will not be able to allocate its static IP addresses \<static-ip-address\> to Nodes.
15
16.. note::
17 If you don't let MAAS manage DHCP, then MAAS will not be able to allocate
18 its :ref:`static IP addresses <static-ip-address>` to Nodes.
1912
20At the very least the "filename" option should be set to "pxelinux.0".13At the very least the "filename" option should be set to "pxelinux.0".
2114
22How to configure this depends on what software you use as a DHCP server. If15How to configure this depends on what software you use as a DHCP server. If you are using the ISC DHCP server, for example, the configuration entry might look something like this:
23you are using the ISC DHCP server, for example, the configuration entry might16
24look something like this::17 subnet 192.168.122.0 netmask 255.255.255.0 {
2518 filename "pxelinux.0";
26 subnet 192.168.122.0 netmask 255.255.255.0 {19 option subnet-mask 255.255.255.0;
27 filename "pxelinux.0";20 option broadcast-address 192.168.122.255;
28 option subnet-mask 255.255.255.0;21 option domain-name-servers 192.168.122.136;
29 option broadcast-address 192.168.122.255;22 range dynamic-bootp 192.168.122.5 192.168.122.135;
30 option domain-name-servers 192.168.122.136;23 }
31 range dynamic-bootp 192.168.122.5 192.168.122.135;24
32 }25When doing this, leave the cluster controller's interface in the "unmanaged" state.
3326
34When doing this, leave the cluster controller's interface in the "unmanaged"27If your cluster controller is in charge of nodes on more than one network through different network interfaces, there is an additional complication. Without the DHCP server built into the cluster controller, MAAS may not know which of the cluster controller's IP addresses each node should use for downloading its installer image. If you want to support this situation, ensure that all of the nodes can reach all of the cluster controller's network addresses.
35state.
36
37If your cluster controller is in charge of nodes on more than one network
38through different network interfaces, there is an additional complication.
39Without the DHCP server built into the cluster controller, MAAS may not
40know which of the cluster controller's IP addresses each node should use
41for downloading its installer image. If you want to support this situation,
42ensure that all of the nodes can reach all of the cluster controller's
43network addresses.
44
45
46.. _ssl:
4728
48SSL Support29SSL Support
49-----------30-----------
5031
51If you want secure access to your MAAS web UI/API, you need to do a few32If you want secure access to your MAAS web UI/API, you need to do a few things. First, turn on SSL support in Apache:
52things. First, turn on SSL support in Apache::33
5334 $ sudo a2enmod ssl
54 $ sudo a2enmod ssl35
5536Ensure that the Apache config file from `etc/maas/maas-http.conf` is included in `/etc/apache2/conf.d/`, then edit `/etc/maas/maas_local_settings.py` and change DEFAULT\_MAAS\_URL so that it uses https instead of http.
56Ensure that the Apache config file from ``etc/maas/maas-http.conf`` is37
57included in ``/etc/apache2/conf.d/``, then edit38Now, restart Apache:
58``/etc/maas/maas_local_settings.py`` and change DEFAULT_MAAS_URL so that it39
59uses https instead of http.40 $ sudo service apache2 restart
6041
61Now, restart Apache::42At this point you will be able to access the MAAS web server using https but the default SSL certificate is insecure. Please generate your own and then edit `/etc/apache2/conf.d/maas-http.conf` to set the location of the certificate.
62
63 $ sudo service apache2 restart
64
65At this point you will be able to access the MAAS web server using https but
66the default SSL certificate is insecure. Please generate your own and then
67edit ``/etc/apache2/conf.d/maas-http.conf`` to set the location of the
68certificate.
69
7043
71Choosing a series to install44Choosing a series to install
72----------------------------45----------------------------
7346
74You may have some specific reason to choose a particular version of Ubuntu47You may have some specific reason to choose a particular version of Ubuntu to install on your nodes, perhaps based around package availability, hardware support or some other reason.
75to install on your nodes, perhaps based around package availability,48
76hardware support or some other reason.49It is possible to choose a specific series from those available in a number of ways.
7750
78It is possible to choose a specific series from those available in a51### From the user interface
79number of ways.52
8053The web-based user interface makes it easy to select which Ubuntu series you wish to install on an individual node. When either adding a node manually, or on the node page when the node has been automatically discovered but before it is accepted, there is a drop down menu to select the version of Ubuntu you wish to install.
81From the user interface54
82^^^^^^^^^^^^^^^^^^^^^^^55![image](media/series.*)
8356
84The web-based user interface makes it easy to select which Ubuntu series you57The menu will always list all the currently available series according to which boot images are available.
85wish to install on an individual node. When either adding a node58
86manually, or on the node page when the node has been automatically59### Using the maas command
87discovered but before it is accepted, there is a drop down menu to select60
88the version of Ubuntu you wish to install.61It is also possible to select a series using the maas command. This can be done on a per node basis with:
8962
90.. image:: media/series.*63 $ maas <profile> node update <system_id> distro_series="<value>"
9164
92The menu will always list all the currently available series according65Where the string contains one of the valid, available distro series (e.g. "trusty") or is empty for the default value.
93to which boot images are available.
94
95Using the maas command
96^^^^^^^^^^^^^^^^^^^^^^
97
98It is also possible to select a series using the maas command. This
99can be done on a per node basis with::
100
101 $ maas <profile> node update <system_id> distro_series="<value>"
102
103Where the string contains one of the valid, available distro series (e.g.
104"trusty") or is empty for the default value.
105
106
107.. _preseed:
10866
109Altering the Preseed file67Altering the Preseed file
110-------------------------68-------------------------
11169
112.. warning::70> **warning**
113 Do not try to alter the preseed files if you don't have a good71
114 understanding of what you are doing. Altering the installed version72> Do not try to alter the preseed files if you don't have a good understanding of what you are doing. Altering the installed version of Ubuntu can prevent MAAS from working as intended, and may have security and stability consequences.
115 of Ubuntu can prevent MAAS from working as intended, and may have73
116 security and stability consequences.74When MAAS commissions a node it installs a version of Ubuntu. The installation is performed using a 'preseed' file, which is effectively a list of answers to the questions you would get were you to run the installer manually. The preseed file used by MAAS is carefully made so that the target node can be brought up and do all the jobs expected of it. However, in exceptional circumstances, you may wish to alter the pressed file to work around some issue. There are actually two preseed files, stored here:
11775
118When MAAS commissions a node it installs a version of Ubuntu. The76 /etc/maas/preseeds/generic
119installation is performed using a 'preseed' file, which is77 /etc/maas/preseeds/preseed-master
120effectively a list of answers to the questions you would get were78
121you to run the installer manually.79The generic file actually references the preseed-master file, and is used to set conditional parameters based on the type of series and architecture to install as well as to define the minimum set of install packages and to tidy up the PXE boot process if that has been used for the node. Unless you have a specific need to change where install packages come from, you should not need to edit this file.
122The preseed file used by MAAS is carefully made so that the80
123target node can be brought up and do all the jobs expected of it.81For the more usual sorts of things you may wish to change, you should edit the preseed-master file. For example, depending on your network you may wish to change the clock settings:
124However, in exceptional circumstances, you may wish to alter the
125pressed file to work around some issue.
126There are actually two preseed files, stored here::
127
128 /etc/maas/preseeds/generic
129 /etc/maas/preseeds/preseed-master
130
131The generic file actually references the preseed-master file, and is
132used to set conditional parameters based on the type of series and
133architecture to install as well as to define the minimum set of install
134packages and to tidy up the PXE boot process if that has been used for
135the node. Unless you have a specific need to change where install
136packages come from, you should not need to edit this file.
137
138For the more usual sorts of things you may wish to change, you should
139edit the preseed-master file. For example, depending on your network
140you may wish to change the clock settings::
14182
142 # Local clock (set to UTC and use ntp)83 # Local clock (set to UTC and use ntp)
143 d-i clock-setup/utc boolean true84 d-i clock-setup/utc boolean true
144 d-i clock-setup/ntp boolean true85 d-i clock-setup/ntp boolean true
145 d-i clock-setup/ntp-server string ntp.ubuntu.com86 d-i clock-setup/ntp-server string ntp.ubuntu.com
14687
147Having consistent clocks is very important to the working of your MAAS88Having consistent clocks is very important to the working of your MAAS system overall. If your nodes however cannot freely access the Internet, the supplied NTP server is not going to be very useful, and you may find it better to run an ntp service on the MAAS controller and change the ntp.ubuntu.com in the last line for a more appropriate server.
148system overall. If your nodes however cannot freely access the Internet,89
149the supplied NTP server is not going to be very useful, and you may90One thing you may wish to alter in the preseed file is the disk partitioning. This is a simple recipe that creates a swap partition and uses the rest of the disk for one large root filesystem:
150find it better to run an ntp service on the MAAS controller and change91
151the `ntp.ubuntu.com` in the last line for a more appropriate server.92 partman-auto/text/atomic_scheme ::
15293
153One thing you may wish to alter in the preseed file is the disk94 500 10000 1000000 ext3
154partitioning. This is a simple recipe that creates a swap partition and95 $primary{ }
155uses the rest of the disk for one large root filesystem::96 $bootable{ }
15697 method{ format }
157 partman-auto/text/atomic_scheme ::98 format{ }
15899 use_filesystem{ }
159 500 10000 1000000 ext3100 filesystem{ ext3 }
160 $primary{ }101 mountpoint{ / } .
161 $bootable{ }102
162 method{ format }103 64 512 300% linux-swap
163 format{ }104 method{ swap }
164 use_filesystem{ }105 format{ } .
165 filesystem{ ext3 }106
166 mountpoint{ / } .107Here the root partition must be at least 500 mb, and has effectively no maximum size. The swap partition ranges from 64 MB to 3 times the system's ram. Adding \$bootable{ } to make the partition bootable, and \$primary{ } marks it as the primary partition. The other specifiers used are:
167108
168 64 512 300% linux-swap109*method{ format }*
169 method{ swap }110Used to make the partition be formatted. For swap partitions, change it to "swap". To create a new partition but do not format it, change "format" to "keep" (such a partition can be used to reserve for future use some disk space).
170 format{ } .111
171112*format{ }*
172113Also needed to make the partition be formatted.
173Here the root partition must be at least 500 mb, and has effectively no114
174maximum size. The swap partition ranges from 64 MB to 3 times the system's115*use\_filesystem{ }*
175ram.116Specifies that the partition has a filesystem on it.
176Adding `$bootable{ }` to make the partition bootable, and $primary{ }117
177marks it as the primary partition. The other specifiers used are:118*filesystem{ ext3 }*
178119Specifies the filesystem to put on the partition.
179*method{ format }*120
180 Used to make the partition be formatted. For swap partitions,121*mountpoint{ / }*
181 change it to "swap". To create a new partition but do not122Where to mount the partition.
182 format it, change "format" to "keep" (such a partition can be123
183 used to reserve for future use some disk space).124For more information on preseed options, you should refer to [the official Ubuntu documentation](https://help.ubuntu.com/12.04/installation-guide/i386/preseed-contents.html)
184*format{ }*125
185 Also needed to make the partition be formatted.126> **note**
186*use_filesystem{ }*127
187 Specifies that the partition has a filesystem on it.128> Future versions of MAAS are likely to replace this type of automatic installation with a different installer.
188*filesystem{ ext3 }*
189 Specifies the filesystem to put on the partition.
190*mountpoint{ / }*
191 Where to mount the partition.
192
193For more information on preseed options, you should refer to
194`the official Ubuntu documentation
195<https://help.ubuntu.com/12.04/installation-guide/i386/preseed-contents.html>`_
196
197.. note::
198 Future versions of MAAS are likely to replace this type of automatic
199 installation with a different installer.
200
201129
202Installing additional clusters130Installing additional clusters
203------------------------------131------------------------------
204132
205In an environment comprising large numbers of nodes, it is likely that you will133In an environment comprising large numbers of nodes, it is likely that you will want to organise the nodes on a more distributed basis. The standard install of the MAAS region controller includes a cluster controller, but it is possible to add additional cluster controllers to the configuration, as shown in the diagram below:
206want to organise the nodes on a more distributed basis. The standard install of134
207the MAAS region controller includes a cluster controller, but it is135![image](media/orientation_architecture-diagram.*)
208possible to add additional cluster controllers to the configuration, as136
209shown in the diagram below:137Each cluster controller will need to run on a separate Ubuntu server. Installing and configuring the software is straightforward though:
210138
211.. image:: media/orientation_architecture-diagram.*139 $ sudo apt-get install maas-cluster-controller
212140
213Each cluster controller will need to run on a separate Ubuntu server.141This meta-package will install all the basic requirements of the system. However, you may also wish or need to run DHCP and/or DNS services, in which case you should also specify these:
214Installing and configuring the software is straightforward though::142
215143 $ sudo apt-get install maas-cluster-controller maas-dhcp maas-dns
216 $ sudo apt-get install maas-cluster-controller144
217145### Configuring the cluster controller
218This meta-package will install all the basic requirements of the system.146
219However, you may also wish or need to run DHCP and/or DNS services, in147Once the packages are installed, the cluster controller needs to know where to look for the region controller. This is achieved using dpkg to configure the software:
220which case you should also specify these::148
221149 $ dpkg-reconfigure maas-cluster-controller
222 $ sudo apt-get install maas-cluster-controller maas-dhcp maas-dns150
223151![image](media/cluster-config.*)
224152
225Configuring the cluster controller153The configuration script should then bring up a screen where you can enter the IP address of the region controller. Additionally, you will need to import the distro image files locally for commissioning:
226^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^154
227155 $ maas maas node-groups import-boot-images
228Once the packages are installed, the cluster controller needs to know
229where to look for the region controller. This is achieved using `dpkg` to
230configure the software::
231
232 $ dpkg-reconfigure maas-cluster-controller
233
234.. image:: media/cluster-config.*
235
236The configuration script should then bring up a screen where you can
237enter the IP address of the region controller. Additionally, you will
238need to import the distro image files locally for commissioning::
239
240 $ maas maas node-groups import-boot-images
241156
242…and optionally set up the DHCP and DNS for the cluster by either:157…and optionally set up the DHCP and DNS for the cluster by either:
243158
244*Using the web UI*159*Using the web UI*
245 Follow the instructions at :doc:`cluster-configuration` to160Follow the instructions at cluster-configuration to use the web UI to set up your cluster controller.
246 use the web UI to set up your cluster controller.161
247162*Using the command line client*
248*Using the command line client*163First logging in to the API \<api-key\> and then following this procedure \<cli-dhcp\>
249 First :ref:`logging in to the API <api-key>` and then
250 :ref:`following this procedure <cli-dhcp>`
251
252164
253Client-side DNS configuration165Client-side DNS configuration
254-----------------------------166-----------------------------
255167
256When using a third party tool such as ``juju`` it will need to be able to168When using a third party tool such as `juju` it will need to be able to resolve the hostnames that the MAAS API returns to it. In order for this to happen, *client-side DNS* must be configured to point to MAAS's DNS server. Generally speaking, this is a simple case of adding the following line to the `/etc/resolv.conf` file on your client host:
257resolve the hostnames that the MAAS API returns to it. In order for this to169
258happen, *client-side DNS* must be configured to point to MAAS's DNS170 nameserver <IP OF MAAS DNS HOST>
259server. Generally speaking, this is a simple case of adding the following171
260line to the ``/etc/resolv.conf`` file on your client host::172replacing the \<IP OF MAAS DNS HOST\> with the actual IP address of the host running the MAAS DNS server.
261173
262 nameserver <IP OF MAAS DNS HOST>174However, for hosts using the `resolvconf` package, please read its documentation for more information.
263175
264replacing the <IP OF MAAS DNS HOST> with the actual IP address of the host
265running the MAAS DNS server.
266
267However, for hosts using the ``resolvconf`` package, please read its
268documentation for more information.
269176
=== renamed file 'docs/development/building-packages.rst' => 'docs/development/building-packages.md'
--- docs/development/building-packages.rst 2014-02-26 16:56:23 +0000
+++ docs/development/building-packages.md 2015-04-17 21:06:27 +0000
@@ -1,76 +1,61 @@
1Building Ubuntu packages of MAAS1Building Ubuntu packages of MAAS
2================================2================================
33
4Using a virtual machine from a cloud provider seems to be easier and4Using a virtual machine from a cloud provider seems to be easier and less hassle than using a local VM or LXC container, but the same recipe ought to apply.
5less hassle than using a local VM or LXC container, but the same5
6recipe ought to apply.6You need to build on the same OS that the package will be targeted to, so use a Precise instance to make packages for Precise, for example.
77
8You need to build on the same OS that the package will be targeted to,81. Start up an instance, log in, and bring it up to date:
9so use a Precise instance to make packages for Precise, for example.9
1010 sudo apt-get update && sudo apt-get upgrade
11#. Start up an instance, log in, and bring it up to date::11
12122. Get the appropriate packaging branch:
13 sudo apt-get update && sudo apt-get upgrade13
1414 bzr branch lp:~maas-maintainers/maas/packaging{...}
15#. Get the appropriate packaging branch::15
1616 The [MAAS Maintainers](https://launchpad.net/~maas-maintainers) own all the [official MAAS branches](https://code.launchpad.net/~maas-maintainers).
17 bzr branch lp:~maas-maintainers/maas/packaging{...}17
18183. Move into the new branch directory.
19 The `MAAS Maintainers <https://launchpad.net/~maas-maintainers>`_194. Check that all the build dependencies are installed. The dependencies are defined in `debian/control`:
20 own all the `official MAAS branches`_.20
2121 fgrep -i build-depends -A 10 debian/control
22#. Move into the new branch directory.22
2323 This will yield, for example:
24#. Check that all the build dependencies are installed. The24
25 dependencies are defined in ``debian/control``::25 Build-Depends: debhelper (>= 8.1.0~),
2626 dh-apport,
27 fgrep -i build-depends -A 10 debian/control27 po-debconf,
2828 python (>= 2.7),
29 This will yield, for example::29 python-distribute,
3030 python-django
31 Build-Depends: debhelper (>= 8.1.0~),31 Standards-Version: 3.9.3
32 dh-apport,32 ...
33 po-debconf,33
34 python (>= 2.7),34 Install these dependencies:
35 python-distribute,35
36 python-django36 sudo apt get install \
37 Standards-Version: 3.9.337 debhelper dh-apport po-debconf python \
38 ...38 python-distribute python-django
3939
40 Install these dependencies::405. Edit `debian/changelog` so it contains:
4141 - the right upstream revision number in the version,
42 sudo apt get install \42 - the series you're building for; if `UNRELEASED` appears in the first entry, `s/UNRELEASED/trusty/` (or the series you want),
43 debhelper dh-apport po-debconf python \43 - the name and email address that correspond to the PGP key you want to use to sign the package; these appear near the end of the topmost entry.
44 python-distribute python-django44
45456. Build:
46#. Edit ``debian/changelog`` so it contains:46
4747 bzr bd -S -- -uc -us
48 * the right upstream revision number in the version,48
4949 The latter options tell it not to sign the files. You need to do this because the remote machine will not have your GPG key.
50 * the series you're building for; if ``UNRELEASED`` appears in the50
51 first entry, ``s/UNRELEASED/trusty/`` (or the series you want),517. Sign the build on your local machine:
5252
53 * the name and email address that correspond to the PGP key you53 debsign -r user@host '~/*.changes'
54 want to use to sign the package; these appear near the end of the54
55 topmost entry.55 where `user@host` is an SSH string for accessing the remote instance. This will scp the changes and dsc locally, sign them, and put them back.
5656
57#. Build::578. On the remote instance you can optionally upload to a PPA:
5858
59 bzr bd -S -- -uc -us59 dput -fu ppa:maas-maintainers/name-of-ppa *.changes
6060
61 The latter options tell it not to sign the files. You need to do61
62 this because the remote machine will not have your GPG key.
63
64#. Sign the build on your local machine::
65
66 debsign -r user@host '~/*.changes'
67
68 where ``user@host`` is an SSH string for accessing the remote
69 instance. This will scp the changes and dsc locally, sign them, and
70 put them back.
71
72#. On the remote instance you can optionally upload to a PPA::
73
74 dput -fu ppa:maas-maintainers/name-of-ppa *.changes
75
76.. _official MAAS branches: https://code.launchpad.net/~maas-maintainers
7762
=== renamed file 'docs/development/cluster-bootstrap.rst' => 'docs/development/cluster-bootstrap.md'
--- docs/development/cluster-bootstrap.rst 2015-01-14 16:24:44 +0000
+++ docs/development/cluster-bootstrap.md 2015-04-17 21:06:27 +0000
@@ -1,81 +1,49 @@
1Bootstrapping a cluster1Bootstrapping a cluster
2=======================2=======================
33
4
5Considerations4Considerations
6--------------5--------------
76
8A new cluster needs to register itself with the region. At the same7A new cluster needs to register itself with the region. At the same moment that it's accepted by the region, the region starts configuring it via RPC, so we need an RPC connection open when registering.
9moment that it's accepted by the region, the region starts configuring8
10it via RPC, so we need an RPC connection open when registering.9Before a cluster is accepted, we want to restrict the available RPC calls to a small set, both on the region and the cluster.
1110
12Before a cluster is accepted, we want to restrict the available RPC11Before a cluster is accepted, we also do not want to start some services on the cluster, like lease uploads, DHCP scanning, and so forth, because the region will reject interaction from them.
13calls to a small set, both on the region and the cluster.
14
15Before a cluster is accepted, we also do not want to start some services
16on the cluster, like lease uploads, DHCP scanning, and so forth, because
17the region will reject interaction from them.
18
1912
20Start-up procedure13Start-up procedure
21------------------14------------------
2215
23This procedure will be followed by existing clusters and new clusters16This procedure will be followed by existing clusters and new clusters alike:
24alike:17
25181. Cluster starts.
26#. Cluster starts.192. If shared secret not available, shutdown, **DONE**.
27203. `ClusterClientService` starts.
28#. If shared secret not available, shutdown, **DONE**.214. Services other than `log` are **not** started.
29225. Wait for a connection to the region to become available.
30#. ``ClusterClientService`` starts.236. Do not allow any RPC calls other than `Identify` and `Authenticate`.
31247. Call `Identify`.
32#. Services other than ``log`` are **not** started.258. Call `Authenticate`.
3326 - On success, continue.
34#. Wait for a connection to the region to become available.27 - On failure, shutdown, **DONE**.
3528
36#. Do not allow any RPC calls other than ``Identify`` and ``Authenticate``.299. Permit all other RPC calls.
3730 - This allows for side-effects from calling `Register` next, like DHCP configuration.
38#. Call ``Identify``.31
393210. Call `Register`. Region accepts cluster.
40#. Call ``Authenticate``.3311. Start all services.
413412. **DONE**.
42 - On success, continue.
43
44 - On failure, shutdown, **DONE**.
45
46#. Permit all other RPC calls.
47
48 - This allows for side-effects from calling ``Register`` next, like DHCP
49 configuration.
50
51#. Call ``Register``. Region accepts cluster.
52
53#. Start all services.
54
55#. **DONE**.
56
5735
58Work items36Work items
59----------37----------
6038
61#. **DONE:** Add ``Authenticate`` RPC call.391. **DONE:** Add `Authenticate` RPC call.
62402. **DONE:** Add `Register` RPC call.
63#. **DONE:** Add ``Register`` RPC call.413. **DONE:** Command-line to install shared-secret.
64424. **DONE:** Check for shared-secret during start-up (packaging change too?).
65#. **DONE:** Command-line to install shared-secret.435. **DONE:** Perform `Authenticate` handshake.
66446. **DONE:** Perform `Register` handshake.
67#. **DONE:** Check for shared-secret during start-up (packaging change too?).457. **DONE:** Pass MAAS\_URL in `Register` call. This replicates functionality found in `update_nodegroup_maas_url`, which is no longer used.
68468. Display secret to admins in UI, or provide tool to obtain secret locally on region controller's machine.
69#. **DONE:** Perform ``Authenticate`` handshake.479. Mechanism to limit available RPC calls.
704810. Mechanism to defer start-up of "full" services.
71#. **DONE:** Perform ``Register`` handshake.49
72
73#. **DONE:** Pass MAAS_URL in ``Register`` call. This replicates functionality
74 found in ``update_nodegroup_maas_url``, which is no longer used.
75
76#. Display secret to admins in UI, or provide tool to obtain secret
77 locally on region controller's machine.
78
79#. Mechanism to limit available RPC calls.
80
81#. Mechanism to defer start-up of "full" services.
8250
=== renamed file 'docs/development/cluster-registration.rst' => 'docs/development/cluster-registration.md'
--- docs/development/cluster-registration.rst 2015-02-19 21:49:54 +0000
+++ docs/development/cluster-registration.md 2015-04-17 21:06:27 +0000
@@ -1,72 +1,46 @@
1======================================
2How cluster registration works in MAAS1How cluster registration works in MAAS
3======================================2======================================
43
5A region controller associates with one or more cluster controllers, each4A region controller associates with one or more cluster controllers, each of which is responsible for contacting the region controller itself and announcing its presence. An admin must accept or reject each cluster that registers itself with the region controller, except in the special circumstance mentioned in first-cluster.
6of which is responsible for contacting the region controller itself and5
7announcing its presence. An admin must accept or reject each cluster that6There is always at least one cluster controller in MAAS (known as a NodeGroup in the code) which is known as the 'master'. The Nodegroup entry always exists even if no cluster controllers have contacted the region controller yet, so that it can be used as a default when adding nodes in the API or UI before the cluster controller is defined. Once a real cluster controller connects it will become this master.
8registers itself with the region controller, except in the special7
9circumstance mentioned in :ref:`first-cluster`.8This logic was originally implemented as an easy way to upgrade older installations that were created before nodegroups were introduced.
10
11There is always at least one cluster controller in MAAS (known as a
12NodeGroup in the code) which is known as the 'master'. The Nodegroup entry
13always exists even if no cluster controllers have contacted the region
14controller yet, so that it can be used as a default when adding nodes in the
15API or UI before the cluster controller is defined. Once a real cluster
16controller connects it will become this master.
17
18This logic was originally implemented as an easy way to upgrade older
19installations that were created before nodegroups were introduced.
209
21Region Controller Location10Region Controller Location
22--------------------------11--------------------------
2312
24The cluster obviously needs to know where the region controller is, and this is13The cluster obviously needs to know where the region controller is, and this is configured in a file `/etc/maas/maas_cluster.conf` (or `etc/demo_maas_cluster.conf` for development environments).
25configured in a file ``/etc/maas/maas_cluster.conf`` (or
26``etc/demo_maas_cluster.conf`` for development environments).
2714
28Cluster configuration file15Cluster configuration file
29--------------------------16--------------------------
3017
31This config file generally contains two items like this::18This config file generally contains two items like this:
3219
33 MAAS_URL=http://0.0.0.0:5240/20 MAAS_URL=http://0.0.0.0:5240/
34 CLUSTER_UUID="adfd3977-f251-4f2c-8d61-745dbd690bf2"21 CLUSTER_UUID="adfd3977-f251-4f2c-8d61-745dbd690bf2"
3522
36The values here are the defaults in the development environment. MAAS_URL23The values here are the defaults in the development environment. MAAS\_URL tells the cluster controller where to find the region controller.
37tells the cluster controller where to find the region controller.24
3825`CLUSTER_UUID` is what the region uses to tell clusters apart when they connect. Each cluster is free to generate its own UUID but the development environment fixes it in advance. The Ubuntu packaging generates a new UUID for a cluster controller each time it is installed.
39``CLUSTER_UUID`` is what the region uses to tell clusters apart when they26
40connect. Each cluster is free to generate its own UUID but the development27> **warning**
41environment fixes it in advance. The Ubuntu packaging generates a new UUID for28
42a cluster controller each time it is installed.29> The format of this config file is very sensitive due to the code that parses it. It will not accept quoting, or any kind of comments.
43
44.. warning::
45 The format of this config file is very sensitive due to the code that parses
46 it. It will not accept quoting, or any kind of comments.
47
48.. _first-cluster:
4930
50First cluster to connect31First cluster to connect
51------------------------32------------------------
5233
53For the convenience of small setups (and the development environment), the34For the convenience of small setups (and the development environment), the first cluster controller to connect to the region controller becomes the 'master' nodegroup, and if the cluster connects *from the same host*, it is automatically accepted.
54first cluster controller to connect to the region controller becomes the
55'master' nodegroup, and if the cluster connects *from the same host*, it
56is automatically accepted.
5735
58The logic currently looks like this:36The logic currently looks like this:
5937
60#. If there is one, the oldest nodegroup is the master.381. If there is one, the oldest nodegroup is the master.
61392. If none exists, the code creates a placeholder master nodegroup on the fly, pre-accepted but without a UUID.
62#. If none exists, the code creates a placeholder master nodegroup on the fly,403. If the placeholder is the only nodegroup, the first cluster controller to register becomes the master.
63 pre-accepted but without a UUID.41
6442Sadly, there is some code complexity to clear up here as this logic is not encapsulated in a single place, but instead in both:
65#. If the placeholder is the only nodegroup, the first cluster controller to43
66 register becomes the master.44- `NodeGroup.objects.ensure_data()` and
6745- `AnonNodeGroupsHandler.register()`.
68Sadly, there is some code complexity to clear up here as this logic is not46
69encapsulated in a single place, but instead in both:
70
71* ``NodeGroup.objects.ensure_data()`` and
72* ``AnonNodeGroupsHandler.register()``.
7347
=== renamed file 'docs/development/lease-scanning-and-dns.rst' => 'docs/development/lease-scanning-and-dns.md'
--- docs/development/lease-scanning-and-dns.rst 2014-11-14 22:03:20 +0000
+++ docs/development/lease-scanning-and-dns.md 2015-04-17 21:06:27 +0000
@@ -1,36 +1,24 @@
1.. -*- mode: rst -*-
2
3***************************
4DHCP lease scanning and DNS1DHCP lease scanning and DNS
5***************************2===========================
63
7Overview4Overview
8========5--------
96
10In a MAAS system, cluster controllers may optionally manage the DHCP, and the7In a MAAS system, cluster controllers may optionally manage the DHCP, and the region controller may optionally manage the DNS.
11region controller may optionally manage the DNS.8
129The region controller periodically tells the cluster controllers to report their DCHP leases. When a cluster controller reports new leases, the region controller creates DNS records for them, and instructs the cluster controller to convert the leases to static host mappings.
13The region controller periodically tells the cluster controllers to report
14their DCHP leases. When a cluster controller reports new leases, the region
15controller creates DNS records for them, and instructs the cluster controller
16to convert the leases to static host mappings.
17
1810
19Leases scanning11Leases scanning
20===============12---------------
2113
22MAAS will periodically scan the DHCP leases file using the14MAAS will periodically scan the DHCP leases file using the `LeaseUploadService()` pserv service.
23``LeaseUploadService()`` pserv service.15
2416As leases are discovered, it calls the RPC function `UpdateLeases` which stores the active leases in the DHCPLease table.
25As leases are discovered, it calls the RPC function ``UpdateLeases`` which
26stores the active leases in the DHCPLease table.
27
2817
29Updating one or more DNS zone files18Updating one or more DNS zone files
30===================================19-----------------------------------
3120
32If a new lease is found then the dns.dns_update_zones() function gets called21If a new lease is found then the dns.dns\_update\_zones() function gets called which takes two steps:
33which takes two steps::22
3423 #. Write out updated zone files.
35 #. Write out updated zone files.24 #. Ask BIND to reload the zone.
36 #. Ask BIND to reload the zone.
3725
=== renamed file 'docs/development/metadata.rst' => 'docs/development/metadata.md'
--- docs/development/metadata.rst 2014-08-21 20:10:47 +0000
+++ docs/development/metadata.md 2015-04-17 21:06:27 +0000
@@ -1,127 +1,71 @@
1The Metadata API1The Metadata API
2================2================
33
4A MAAS region controller provides a separate API (the metadata API) for the4A MAAS region controller provides a separate API (the metadata API) for the benefit of the nodes themselves. This is where a node obtains the details of how it should be set up, such as which SSH keys should be installed in order to give a particular user remote access to the system.
5benefit of the nodes themselves. This is where a node obtains the details of5
6how it should be set up, such as which SSH keys should be installed in order to6As a MAAS user or administrator, you do not need to request this information yourself. It is normally up to `cloud-init` to do this while setting up the node. You'll find more about how this works in cloud-init's [datasources](http://cloudinit.readthedocs.org/en/latest/topics/datasources.html) documentation.
7give a particular user remote access to the system.
8
9As a MAAS user or administrator, you do not need to request this information
10yourself. It is normally up to ``cloud-init`` to do this while setting up the
11node. You'll find more about how this works in cloud-init's datasources_
12documentation.
13
14.. _datasources: http://cloudinit.readthedocs.org/en/latest/topics/datasources.html
15
167
17Similarity to EC28Similarity to EC2
18-----------------9-----------------
1910
20The metadata API is very similar, and partly identical, to the EC2 metadata11The metadata API is very similar, and partly identical, to the EC2 metadata service. It follows a similar directory structure and provides several items in the same formats. For example, in order to find out its own host name, a node would perform an http GET request for:
21service. It follows a similar directory structure and provides several items12
22in the same formats. For example, in order to find out its own host name, a13 /2012-03-01/meta-data/local-hostname
23node would perform an http GET request for::14
2415The first item in the path is the API version. The API has been extended since March 2012, but not changed incompatibly and so that date is still the current version number.
25 /2012-03-01/meta-data/local-hostname16
2617The items following that form a directory hierarchy based on that of the EC2 metadata service. The metadata service "knows" which node makes the request, and so there is no need for the request URL to identify the node whose hostname should be retrieved. The request automatically returns the hostname for the node which requested it.
27The first item in the path is the API version. The API has been extended since18
28March 2012, but not changed incompatibly and so that date is still the current19Just like EC2, the MAAS metadata API will accept GET requests to:
29version number.20
3021 /
31The items following that form a directory hierarchy based on that of the EC222 /2012-03-01/
32metadata service. The metadata service "knows" which node makes the request,23 /2012-03-01/meta-data/
33and so there is no need for the request URL to identify the node whose hostname24 /2012-03-01/meta-data/instance-id
34should be retrieved. The request automatically returns the hostname for the25 /2012-03-01/meta-data/local-hostname
35node which requested it.26 /2012-03-01/meta-data/public-keys
3627 /2012-03-01/user-data
37Just like EC2, the MAAS metadata API will accept GET requests to::28
3829Hopefully their meanings are fairly obvious. The `public-keys` will contain the user's SSH keys.
39 /30
40 /2012-03-01/31MAAS adds a tarball of scripts that a node should run during its commissioning phase:
41 /2012-03-01/meta-data/32
42 /2012-03-01/meta-data/instance-id33 /2012-03-01/meta-data/maas-commissioning-scripts
43 /2012-03-01/meta-data/local-hostname34
44 /2012-03-01/meta-data/public-keys35There are other differences. Where EC2 makes the metadata service available at a fixed IP address, MAAS configures the location of the metadata service on the node while installing its operating system. It does this through installation preseeds \<preseeds\>. These preseeds also include the node's access credentials.
45 /2012-03-01/user-data
46
47Hopefully their meanings are fairly obvious. The ``public-keys`` will contain
48the user's SSH keys.
49
50MAAS adds a tarball of scripts that a node should run during its commissioning
51phase::
52
53 /2012-03-01/meta-data/maas-commissioning-scripts
54
55There are other differences. Where EC2 makes the metadata service available at
56a fixed IP address, MAAS configures the location of the metadata service on the
57node while installing its operating system. It does this through installation
58:ref:`preseeds <preseeds>`. These preseeds also include the node's access
59credentials.
60
6136
62Additional Directory Trees37Additional Directory Trees
63--------------------------38--------------------------
6439
65.. _enlistment-tree:40MAAS adds some entirely new directories as well. An enlisting node (which does not have access credentials for the metadata API yet) can anonymously request the same items for itself under `/enlist/`, e.g.:
6641
67MAAS adds some entirely new directories as well. An enlisting node42 /enlist/2012-03-01/meta-data/local-hostname
68(which does not have access credentials for the metadata API yet) can43
69anonymously request the same items for itself under ``/enlist/``, e.g.::44If you set the `ALLOW_UNSAFE_METADATA_ACCESS` configuration item, the metadata service will also provide the information on arbitrary nodes to authenticated users under a separate sub-tree. For security reasons this is not recommended, but it may be useful in debugging. With this option enabled, the information for the node with MAC address 99:99:99:99:99:99 is available at:
7045
71 /enlist/2012-03-01/meta-data/local-hostname46 /2012-03-01/by-mac/99:99:99:99:99:99/meta-data/local-hostname
7247
73If you set the ``ALLOW_UNSAFE_METADATA_ACCESS`` configuration item, the48And so on for the other information. There is a similar facility keyed by MAAS system identifiers.
74metadata service will also provide the information on arbitrary nodes to49
75authenticated users under a separate sub-tree. For security reasons this is50Finally, a curtin-specific metadata API with largely the same information lives in the `/curtin/` subtree:
76not recommended, but it may be useful in debugging. With this option enabled,51
77the information for the node with MAC address 99:99:99:99:99:99 is available52 /curtin/2012-03-01/meta-data/local-hostname
78at::53
7954The curtin subtree however differs in the `user-data` endpoint. It returns a curtin-specific form of user data.
80 /2012-03-01/by-mac/99:99:99:99:99:99/meta-data/local-hostname
81
82And so on for the other information. There is a similar facility keyed by
83MAAS system identifiers.
84
85.. _curtin-tree:
86
87Finally, a curtin-specific metadata API with largely the same information lives
88in the ``/curtin/`` subtree::
89
90 /curtin/2012-03-01/meta-data/local-hostname
91
92The curtin subtree however differs in the ``user-data`` endpoint. It returns a
93curtin-specific form of user data.
94
9555
96Authentication56Authentication
97--------------57--------------
9858
99Most metadata requests are authenticated similar to ones to the59Most metadata requests are authenticated similar to ones to the region-controller API, through OAuth. Every node in a MAAS has its own OAuth key. (On the region controller side, these keys collectively belong to a single special user called `node-init`. You will not see such special users listed in the UI, however.) When a node asks for information about itself, the OAuth key is what tells the metadata service which node that is.
100region-controller API, through OAuth. Every node in a MAAS has its own OAuth60
101key. (On the region controller side, these keys collectively belong to a61Not all requests are authenticated in this way. For instance, a node can access the items under the enlistment subdirectory (see above \<enlistment-tree\>) anonymously. The metadata service will identify the requesting node by its IP address.
102single special user called ``node-init``. You will not see such special users
103listed in the UI, however.) When a node asks for information about itself, the
104OAuth key is what tells the metadata service which node that is.
105
106Not all requests are authenticated in this way. For instance, a node can
107access the items under the enlistment subdirectory (see
108:ref:`above <enlistment-tree>`) anonymously. The metadata service will
109identify the requesting node by its IP address.
110
11162
112API Operations63API Operations
113--------------64--------------
11465
115The MAAS metadata API supports a few non-GET operations. These work just like66The MAAS metadata API supports a few non-GET operations. These work just like the ones on the main region-controller API \<region-controller-api\>, but they are meant to be invoked by nodes. The URL for these calls is `/2013-03-01/`, and the operation name is passed as a multipart form item called "op". Other parameters are passed in the same way.
116the ones on the main :ref:`region-controller API <region-controller-api>`, but they are meant to be invoked by67
117nodes. The URL for these calls is ``/2013-03-01/``, and the operation name is68The `signal` call notifies the region controller of the state of a commissioning node. The node sends running updates, as well as output produced by the commissioning scripts, and finally completion information through this call.
118passed as a multipart form item called "op". Other parameters are passed in69
119the same way.70When a node is done installing, it may call POST operations `netboot_on` and `netboot_off` to instruct MAAS to enable or disable its network boot setting.
12071
121The ``signal`` call notifies the region controller of the state of a
122commissioning node. The node sends running updates, as well as output produced
123by the commissioning scripts, and finally completion information through this
124call.
125
126When a node is done installing, it may call POST operations ``netboot_on`` and
127``netboot_off`` to instruct MAAS to enable or disable its network boot setting.
12872
=== renamed file 'docs/development/philosophy.rst' => 'docs/development/philosophy.md'
--- docs/development/philosophy.rst 2013-12-06 15:12:09 +0000
+++ docs/development/philosophy.md 2015-04-17 21:06:27 +0000
@@ -1,51 +1,25 @@
1------------------
2Philosophy of MAAS1Philosophy of MAAS
3------------------2==================
43
5This is a declaration of what we’re aiming for while designing and4This is a declaration of what we’re aiming for while designing and developing MAAS. We may fall short in many regards right now, but this is where we’re heading. Each fix, enhancement, and feature is conceived and built with these principles in mind.
6developing MAAS. We may fall short in many regards right now, but this5
7is where we’re heading. Each fix, enhancement, and feature is6It is concise and to the point. If in doubt about including something, don’t, or talk about it first. Think of it as a reference point for the core development team, as well as a starting point for external contributors.
8conceived and built with these principles in mind.
9
10It is concise and to the point. If in doubt about including something,
11don’t, or talk about it first. Think of it as a reference point for
12the core development team, as well as a starting point for external
13contributors.
14
157
16Feedback loops8Feedback loops
17--------------9--------------
1810
19When MAAS modifies an external system there should be a feedback loop11When MAAS modifies an external system there should be a feedback loop so it can know the actual state of the external system, take periodic or continuous action to converge the external system towards its notion of truth, and notice when there are problems influencing the external system.
20so it can know the actual state of the external system, take periodic12
21or continuous action to converge the external system towards its13For example, when sending out a command to boot a machine from the network, MAAS should know that (a) the machine has actually powered on, and (b) that it has obtained boot instructions from the TFTP server.
22notion of truth, and notice when there are problems influencing the
23external system.
24
25For example, when sending out a command to boot a machine from the
26network, MAAS should know that (a) the machine has actually powered
27on, and (b) that it has obtained boot instructions from the TFTP
28server.
29
3014
31UI15UI
32---16--
3317
34It should be possible to decompose all operations in the UI down to18It should be possible to decompose all operations in the UI down to API calls.
35API calls.
3619
37The UI need not have the same granularity as the API.20The UI need not have the same granularity as the API.
3821
39The UI should never do something that is not possible in the API22The UI should never do something that is not possible in the API unless it is entirely specific to its medium (i.e. HTTP + browser).
40unless it is entirely specific to its medium (i.e. HTTP + browser).23
4124Addendum: though the UI should be decomposable down to API calls, it does not need to be implemented as such (even though it would be great if it was).
42Addendum: though the UI should be decomposable down to API calls, it25
43does not need to be implemented as such (even though it would be great
44if it was).
45
46
47.. TODO
48 ----
49 Security
50 Persistence
51 Testing
5226
=== renamed file 'docs/development/preseeds.rst' => 'docs/development/preseeds.md'
--- docs/development/preseeds.rst 2015-04-03 11:36:37 +0000
+++ docs/development/preseeds.md 2015-04-17 21:06:27 +0000
@@ -1,71 +1,55 @@
1.. _preseeds:
2
3=========================
4How preseeds work in MAAS1How preseeds work in MAAS
5=========================2=========================
63
7A preseed is what MAAS sends to the ``cloud-init`` process that starts up4A preseed is what MAAS sends to the `cloud-init` process that starts up as part of node enlistment, commissioning and installation. It is a specially formatted chunk of text. MAAS does not care what that formatting is, it just knows it is text and uses [Tempita](http://pythonpaste.org/tempita/) templates to render a final file based on variables that are required depending on the context.
8as part of node enlistment, commissioning and installation. It is a
9specially formatted chunk of text. MAAS does not care what that formatting
10is, it just knows it is text and uses Tempita_ templates to render a final
11file based on variables that are required depending on the context.
12
13.. _Tempita: http://pythonpaste.org/tempita/
14
155
16Preseed templates6Preseed templates
17-----------------7-----------------
188
19On a live system, the preseed templates live in ``/etc/maas/preseeds/``.9On a live system, the preseed templates live in `/etc/maas/preseeds/`.
2010
21Each template uses a prefix that corresponds to a particular "phase":11Each template uses a prefix that corresponds to a particular "phase":
2212
23+---------------+--------------------------+13<table>
24| Phase | Prefix used |14<colgroup>
25+===============+==========================+15<col width="22%" />
26| Enlistment | enlist |16<col width="37%" />
27+---------------+--------------------------+17</colgroup>
28| Commissioning | commissioning |18<thead>
29+---------------+--------------------------+19<tr class="header">
30| Installation | preseed_master (DI_) or |20<th align="left">Phase</th>
31| | curtin (Curtin_) |21<th align="left">Prefix used</th>
32+---------------+--------------------------+22</tr>
3323</thead>
34.. _DI: https://www.debian.org/devel/debian-installer/24<tbody>
3525<tr class="odd">
36.. _Curtin: https://launchpad.net/curtin26<td align="left">Enlistment</td>
3727<td align="left">enlist</td>
38Note that the preseed information is in fact composed of two files: the28</tr>
39preseed file per se which usually contains little more than a URL and the29<tr class="even">
40credentials where to get the "user data" which, in turn, contains most of30<td align="left">Commissioning</td>
41the logic to be executed.31<td align="left">commissioning</td>
32</tr>
33<tr class="odd">
34<td align="left">Installation</td>
35<td align="left">preseed_master (<a href="https://www.debian.org/devel/debian-installer/">DI</a>) or curtin (<a href="https://launchpad.net/curtin">Curtin</a>)</td>
36</tr>
37</tbody>
38</table>
39
40Note that the preseed information is in fact composed of two files: the preseed file per se which usually contains little more than a URL and the credentials where to get the "user data" which, in turn, contains most of the logic to be executed.
4241
43Installation preseed42Installation preseed
44--------------------43--------------------
4544
46The installation preseed is broken into the three files because the45The installation preseed is broken into the three files because the requirements are different depending on the installer being used. The [Debian Installer](https://www.debian.org/devel/debian-installer/) uses `preseed_master` and the newer [Curtin](https://launchpad.net/curtin) installer uses `curtin_userdata`.
47requirements are different depending on the installer being used. The46
48`Debian Installer`_ uses ``preseed_master`` and the newer Curtin_ installer47The base of both of these is `generic`, which defines some variables and then selects the right one depending on the installer being used. Note that Tempita's inheritance mechanism is a little weird; the `generic` template inherits the right file but in effect this is in reverse, the inherited file becomes the new template and it can then reference the variables defined in `generic`.
49uses ``curtin_userdata``.
50
51.. _Debian Installer: https://www.debian.org/devel/debian-installer/
52
53.. _Curtin: https://launchpad.net/curtin
54
55The base of both of these is ``generic``, which defines some variables
56and then selects the right one depending on the installer being used. Note
57that Tempita's inheritance mechanism is a little weird; the ``generic``
58template inherits the right file but in effect this is in reverse, the
59inherited file becomes the new template and it can then reference the
60variables defined in ``generic``.
61
6248
63User-provided preseeds49User-provided preseeds
64----------------------50----------------------
6551
66In addition to the standard preseed files, the base preseeds can be52In addition to the standard preseed files, the base preseeds can be overridden on a per-OS, architecture, subarchitecture, OS release and node name basis. The templates are looked up in the following order:
67overridden on a per-OS, architecture, subarchitecture, OS release and
68node name basis. The templates are looked up in the following order::
6953
70 {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}_{node_name}54 {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}_{node_name}
71 {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}55 {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}
@@ -90,60 +74,34 @@
90 {prefix}74 {prefix}
91 'generic'75 'generic'
9276
93``prefix`` is either empty (in which case the following underscore is also77`prefix` is either empty (in which case the following underscore is also ommitted: e.g. {osystem}\_{node\_arch}\_{node\_subarch}\_{release}) or one of `enlist`, `enlist_userdata`, `commissioning`, `curtin`, `curtin_userdata` or `preseed_master`.
94ommitted: e.g. {osystem}_{node_arch}_{node_subarch}_{release}) or one of78
95``enlist``, ``enlist_userdata``, ``commissioning``, ``curtin``,79As you can see this mechanism is also used to calculate the base preseeds for all of installation, enlistment and commissioning. It allows end users to add, for example, a file named `curtin_ubuntu_amd64_generic` that would be used at installation time.
96``curtin_userdata`` or ``preseed_master``.
97
98As you can see this mechanism is also used to calculate the base preseeds for
99all of installation, enlistment and commissioning. It allows end users to
100add, for example, a file named ``curtin_ubuntu_amd64_generic`` that would be
101used at installation time.
102
10380
104Curtin configuration81Curtin configuration
105--------------------82--------------------
10683
107Curtin_ is the tool responsible for performing the OS installation. If you84[Curtin](https://launchpad.net/curtin) is the tool responsible for performing the OS installation. If you need to customize the installation, you need to change Curtin's user data (by either changing the existing `curtin_userdata` file or adding a custom version as described above).
108need to customize the installation, you need to change Curtin's user data85
109(by either changing the existing ``curtin_userdata`` file or adding a custom86There isn't a complete documentation on how to customize Curtin at the time of this writing but the following instructions and examples should cover most of the use cases.
110version as described above).87
11188Curtin provides hooks to execute custom code before (early) or after (late) the installation takes place. You can override these hooks to execute code, either code that will run in the ephemeral environment or in the machine being installed itself (in-target). Note that you can execute in-target code only in a late command.
112.. _Curtin: https://launchpad.net/curtin89
11390### Example: early command
114There isn't a complete documentation on how to customize Curtin at the time of91
115this writing but the following instructions and examples should cover most of92Here is an example of an early command (i.e. one that will run before the installation takes place) that runs in the ephemeral environment and pings an external machine to signal that the installation is about to start.
116the use cases.93
11794``` {.sourceCode .yaml}
118Curtin provides hooks to execute custom code before (`early`) or after (`late`)95early_commands:
119the installation takes place. You can override these hooks to execute code,96 signal: [wget, '--no-proxy', 'http://example.com/', '--post-data', 'system_id={{node.system_id}}&signal=starting_install', '-O', '/dev/null']
120either code that will run in the ephemeral environment or in the machine being97```
121installed itself (`in-target`). Note that you can execute `in-target` code98
122only in a `late` command.99### Example: late command
123100
124Example: early command101Here is an example of two late commands (i.e. commands that will run after the installation has been performed). Both run in-target (i.e. in the machine being installed). The first command adds a PPA to the machine. The second command create a file containing the node's system\_id. (Note that these are just examples of the things that can be done.)
125======================102
126103``` {.sourceCode .yaml}
127Here is an example of an early command (i.e. one that will run before the104late_commands:
128installation takes place) that runs in the ephemeral environment and105 add_repo: ["curtin", "in-target", "--", "add-apt-repository", "-y", "ppa:my/ppa"]
129pings an external machine to signal that the installation is about to start.106 custom: curtin in-target -- sh -c "/bin/echo -en 'Installed {{node.system_id}}' > /tmp/maas_system_id"
130107```
131.. code:: yaml
132
133 early_commands:
134 signal: [wget, '--no-proxy', 'http://example.com/', '--post-data', 'system_id={{node.system_id}}&signal=starting_install', '-O', '/dev/null']
135
136Example: late command
137======================
138
139Here is an example of two late commands (i.e. commands that will run after the
140installation has been performed). Both run `in-target` (i.e. in the machine
141being installed). The first command adds a PPA to the machine. The second
142command create a file containing the node's system_id. (Note that these are
143just examples of the things that can be done.)
144
145.. code:: yaml
146
147 late_commands:
148 add_repo: ["curtin", "in-target", "--", "add-apt-repository", "-y", "ppa:my/ppa"]
149 custom: curtin in-target -- sh -c "/bin/echo -en 'Installed {{node.system_id}}' > /tmp/maas_system_id"
150108
=== renamed file 'docs/development/rpc.rst' => 'docs/development/rpc.md'
--- docs/development/rpc.rst 2014-08-21 20:10:47 +0000
+++ docs/development/rpc.md 2015-04-17 21:06:27 +0000
@@ -1,181 +1,105 @@
1.. -*- mode: rst -*-
2
3RPC HOWTO1RPC HOWTO
4=========2=========
53
6MAAS contains an RPC mechanism such that every process in the region is4MAAS contains an RPC mechanism such that every process in the region is connected to every process in the cluster (strictly, every pserv process). It's based on [AMP](http://amp-protocol.net/), specifically [Twisted's implementation](http://twistedmatrix.com/documents/current/core/howto/amp.html).
7connected to every process in the cluster (strictly, every pserv
8process). It's based on AMP_, specifically `Twisted's implementation`_.
9
10.. _AMP:
11 http://amp-protocol.net/
12
13.. _Twisted's implementation:
14 http://twistedmatrix.com/documents/current/core/howto/amp.html
15
165
17Where do I start?6Where do I start?
18-----------------7-----------------
198
20Start in the :py:mod:`provisioningserver.rpc` package. The first two files to
21look at are ``cluster.py`` and ``region.py``. This contain the
22declarations of what commands are available on clusters and regions
23respectively.
24
25A new command could be declared like so::
26
27 from twisted.protocols import amp
28
29 class EatCheez(amp.Command):
30 arguments = [
31 (b"name", amp.Unicode()),
32 (b"origin", amp.Unicode()),
33 ]
34 response = [
35 (b"rating", amp.Integer()),
36 ]
37
38It's also possible to map exceptions across the wire using an ``errors``
39attribute; see the docs or code for more information.
40
41Note that byte-strings are used for parameter names. Twisted gets quite
42fussy about this, so remember to do it.
The diff has been truncated for viewing.