Merge lp:~allenap/maas/markdownify into lp:~maas-committers/maas/trunk
- markdownify
- Merge into trunk
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 |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
MAAS Maintainers | Pending | ||
Review via email: mp+256718@code.launchpad.net |
Commit message
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://
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.
MAAS Lander (maas-lander) wrote : | # |
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
1 | === modified file '.bzrignore' | |||
2 | --- .bzrignore 2015-03-25 20:32:06 +0000 | |||
3 | +++ .bzrignore 2015-04-17 21:06:27 +0000 | |||
4 | @@ -19,15 +19,12 @@ | |||
5 | 19 | ./db | 19 | ./db |
6 | 20 | ./develop-eggs | 20 | ./develop-eggs |
7 | 21 | ./dist | 21 | ./dist |
8 | 22 | ./docs/_autosummary | ||
9 | 23 | ./docs/_build | ||
10 | 24 | ./docs/api.rst | 22 | ./docs/api.rst |
11 | 25 | ./eggs | 23 | ./eggs |
12 | 26 | ./include | 24 | ./include |
13 | 27 | ./lib | 25 | ./lib |
14 | 28 | ./local | 26 | ./local |
15 | 29 | ./logs/* | 27 | ./logs/* |
16 | 30 | ./man/.doctrees | ||
17 | 31 | ./media/demo/* | 28 | ./media/demo/* |
18 | 32 | ./media/development | 29 | ./media/development |
19 | 33 | ./parts | 30 | ./parts |
20 | 34 | 31 | ||
21 | === modified file '.gitignore' | |||
22 | --- .gitignore 2015-03-23 15:15:54 +0000 | |||
23 | +++ .gitignore 2015-04-17 21:06:27 +0000 | |||
24 | @@ -19,15 +19,12 @@ | |||
25 | 19 | /db | 19 | /db |
26 | 20 | /develop-eggs | 20 | /develop-eggs |
27 | 21 | /dist | 21 | /dist |
28 | 22 | /docs/_autosummary | ||
29 | 23 | /docs/_build | ||
30 | 24 | /docs/api.rst | 22 | /docs/api.rst |
31 | 25 | /eggs | 23 | /eggs |
32 | 26 | /include | 24 | /include |
33 | 27 | /lib | 25 | /lib |
34 | 28 | /local | 26 | /local |
35 | 29 | /logs/* | 27 | /logs/* |
36 | 30 | /man/.doctrees | ||
37 | 31 | /media/demo/* | 28 | /media/demo/* |
38 | 32 | /media/development | 29 | /media/development |
39 | 33 | /parts | 30 | /parts |
40 | 34 | 31 | ||
41 | === modified symlink 'CHANGELOG' | |||
42 | === target changed u'docs/changelog.rst' => u'docs/changelog.md' | |||
43 | === added symlink 'HACKING' | |||
44 | === target is u'docs/hacking.md' | |||
45 | === added symlink 'INSTALL' | |||
46 | === target is u'docs/install.md' | |||
47 | === modified file 'Makefile' | |||
48 | --- Makefile 2015-04-16 11:51:27 +0000 | |||
49 | +++ Makefile 2015-04-17 21:06:27 +0000 | |||
50 | @@ -141,14 +141,6 @@ | |||
51 | 141 | $(buildout) install flake8 | 141 | $(buildout) install flake8 |
52 | 142 | @touch --no-create $@ | 142 | @touch --no-create $@ |
53 | 143 | 143 | ||
54 | 144 | bin/rst-lint: bin/buildout buildout.cfg versions.cfg setup.py | ||
55 | 145 | $(buildout) install rst-lint | ||
56 | 146 | @touch --no-create $@ | ||
57 | 147 | |||
58 | 148 | bin/sphinx bin/sphinx-build: bin/buildout buildout.cfg versions.cfg setup.py | ||
59 | 149 | $(buildout) install sphinx | ||
60 | 150 | @touch --no-create $@ | ||
61 | 151 | |||
62 | 152 | bin/py bin/ipy: bin/buildout buildout.cfg versions.cfg setup.py | 144 | bin/py bin/ipy: bin/buildout buildout.cfg versions.cfg setup.py |
63 | 153 | $(buildout) install repl | 145 | $(buildout) install repl |
64 | 154 | @touch --no-create bin/py bin/ipy | 146 | @touch --no-create bin/py bin/ipy |
65 | @@ -206,7 +198,7 @@ | |||
66 | 206 | @$(error Use `$(MAKE) test` to generate coverage data, or invoke a \ | 198 | @$(error Use `$(MAKE) test` to generate coverage data, or invoke a \ |
67 | 207 | test script using the `--with-coverage` flag) | 199 | test script using the `--with-coverage` flag) |
68 | 208 | 200 | ||
70 | 209 | lint: lint-py lint-js lint-doc lint-rst | 201 | lint: lint-py lint-js lint-doc |
71 | 210 | 202 | ||
72 | 211 | pocketlint = $(call available,pocketlint,python-pocket-lint) | 203 | pocketlint = $(call available,pocketlint,python-pocket-lint) |
73 | 212 | 204 | ||
74 | @@ -230,16 +222,6 @@ | |||
75 | 230 | lint-doc: | 222 | lint-doc: |
76 | 231 | @utilities/doc-lint | 223 | @utilities/doc-lint |
77 | 232 | 224 | ||
78 | 233 | # lint-rst 0.11.1 shouldn't be used on our documentation because it | ||
79 | 234 | # doesn't understand Sphinx's extensions, and doesn't grok linking | ||
80 | 235 | # between documents, hence complaints about broken links. However, | ||
81 | 236 | # Sphinx itself warns about lint when building the docs. | ||
82 | 237 | lint-rst: sources = README HACKING.txt schema/README.rst | ||
83 | 238 | lint-rst: bin/rst-lint | ||
84 | 239 | @find $(sources) -type f \ | ||
85 | 240 | -printf 'Linting %p...\n' \ | ||
86 | 241 | -exec bin/rst-lint --encoding=utf8 {} \; | ||
87 | 242 | |||
88 | 243 | # JavaScript lint is checked in parallel for speed. The -n20 -P4 seetting | 225 | # JavaScript lint is checked in parallel for speed. The -n20 -P4 seetting |
89 | 244 | # worked well on a multicore SSD machine with the files cached, roughly | 226 | # worked well on a multicore SSD machine with the files cached, roughly |
90 | 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. |
91 | @@ -260,16 +242,19 @@ | |||
92 | 260 | sampledata: bin/maas-region-admin bin/database syncdb | 242 | sampledata: bin/maas-region-admin bin/database syncdb |
93 | 261 | $(dbrun) bin/maas-region-admin loaddata src/maasserver/fixtures/dev_fixture.yaml | 243 | $(dbrun) bin/maas-region-admin loaddata src/maasserver/fixtures/dev_fixture.yaml |
94 | 262 | 244 | ||
105 | 263 | doc: bin/sphinx docs/api.rst | 245 | doc: $(patsubst %.md,%.html,$(shell find docs -name '*.md')) |
106 | 264 | bin/sphinx | 246 | |
107 | 265 | 247 | %.html: %.md | |
108 | 266 | doc-with-versions: bin/sphinx docs/api.rst | 248 | PYTHONPATH="docs/plugins:docs/plugins/gfm" markdown_py \ |
109 | 267 | cd docs/_build; make SPHINXOPTS="-A add_version_switcher=true" html | 249 | -x callouts -x anchors_away -x foldouts -x meta -x def_list \ |
110 | 268 | 250 | -x attr_list -e utf8 --file=$@ $^ | |
111 | 269 | man: $(patsubst docs/man/%.rst,man/%,$(wildcard docs/man/*.rst)) | 251 | @# FIXME: broken plugin: partial_gfm |
112 | 270 | 252 | @# FIXME: render these pages on-the-fly into a template. | |
113 | 271 | man/%: docs/man/%.rst | bin/sphinx-build | 253 | |
114 | 272 | bin/sphinx-build -b man docs man $^ | 254 | man: $(patsubst docs/man/%.md,man/%,$(wildcard docs/man/*.md)) |
115 | 255 | |||
116 | 256 | man/%: docs/man/%.md | ||
117 | 257 | pandoc -s -f markdown_github -t man $^ -o $@ | ||
118 | 273 | 258 | ||
119 | 274 | enums: $(js_enums) | 259 | enums: $(js_enums) |
120 | 275 | 260 | ||
121 | @@ -290,8 +275,6 @@ | |||
122 | 290 | $(RM) $(js_enums) | 275 | $(RM) $(js_enums) |
123 | 291 | $(RM) *.log | 276 | $(RM) *.log |
124 | 292 | $(RM) docs/api.rst | 277 | $(RM) docs/api.rst |
125 | 293 | $(RM) -r docs/_autosummary docs/_build | ||
126 | 294 | $(RM) -r man/.doctrees | ||
127 | 295 | $(RM) coverage.data coverage.xml | 278 | $(RM) coverage.data coverage.xml |
128 | 296 | $(RM) -r coverage | 279 | $(RM) -r coverage |
129 | 297 | 280 | ||
130 | 298 | 281 | ||
131 | === modified file 'buildout.cfg' | |||
132 | --- buildout.cfg 2015-04-10 13:58:31 +0000 | |||
133 | +++ buildout.cfg 2015-04-17 21:06:27 +0000 | |||
134 | @@ -9,7 +9,6 @@ | |||
135 | 9 | region | 9 | region |
136 | 10 | region-test | 10 | region-test |
137 | 11 | repl | 11 | repl |
138 | 12 | sphinx | ||
139 | 13 | testing-test | 12 | testing-test |
140 | 14 | extensions = buildout-versions | 13 | extensions = buildout-versions |
141 | 15 | buildout_versions_file = versions.cfg | 14 | buildout_versions_file = versions.cfg |
142 | @@ -245,22 +244,6 @@ | |||
143 | 245 | entry-points = | 244 | entry-points = |
144 | 246 | flake8=flake8.run:main | 245 | flake8=flake8.run:main |
145 | 247 | 246 | ||
146 | 248 | [rst-lint] | ||
147 | 249 | recipe = zc.recipe.egg | ||
148 | 250 | eggs = | ||
149 | 251 | restructuredtext-lint | ||
150 | 252 | scripts = | ||
151 | 253 | rst-lint | ||
152 | 254 | |||
153 | 255 | [sphinx] | ||
154 | 256 | recipe = collective.recipe.sphinxbuilder | ||
155 | 257 | source = ${buildout:directory}/docs | ||
156 | 258 | build = ${buildout:directory}/docs/_build | ||
157 | 259 | extra-paths = ${common:extra-paths} | ||
158 | 260 | eggs = | ||
159 | 261 | ${region:eggs} | ||
160 | 262 | ${cluster:eggs} | ||
161 | 263 | |||
162 | 264 | # Convenient REPLs with all eggs available. | 247 | # Convenient REPLs with all eggs available. |
163 | 265 | [repl] | 248 | [repl] |
164 | 266 | recipe = z3c.recipe.scripts | 249 | recipe = z3c.recipe.scripts |
165 | 267 | 250 | ||
166 | === removed directory 'docs/_static' | |||
167 | === removed file 'docs/_static/versions.js' | |||
168 | --- docs/_static/versions.js 2014-04-14 21:42:00 +0000 | |||
169 | +++ docs/_static/versions.js 1970-01-01 00:00:00 +0000 | |||
170 | @@ -1,91 +0,0 @@ | |||
171 | 1 | /* Javascript utilities to create a version switcher widget. | ||
172 | 2 | |||
173 | 3 | This is mostly done, but not limited to support creating links | ||
174 | 4 | between the different versions of the MAAS documentation on | ||
175 | 5 | maas.ubuntu.com. | ||
176 | 6 | |||
177 | 7 | */ | ||
178 | 8 | |||
179 | 9 | function page_exists(url) { | ||
180 | 10 | // Returns wether a page at the give URL exists or not. | ||
181 | 11 | var result = false; | ||
182 | 12 | $.ajax({ | ||
183 | 13 | type: 'HEAD', | ||
184 | 14 | url: url, | ||
185 | 15 | async: false, | ||
186 | 16 | success: function () { | ||
187 | 17 | result = true; | ||
188 | 18 | } | ||
189 | 19 | }); | ||
190 | 20 | return result; | ||
191 | 21 | }; | ||
192 | 22 | |||
193 | 23 | function doc_page(version, doc_prefix) { | ||
194 | 24 | // Returns the URL of the page equivalent to the current page but from | ||
195 | 25 | // the given version of the documentation. | ||
196 | 26 | // e.g. if the current page is 'http://host/<doc_prefix>1.6/somepage.html', calling | ||
197 | 27 | // doc_page('1.7') will return 'http://host/<doc_prefix>1.7/somepage.html'. | ||
198 | 28 | var pattern = new RegExp('\/' + doc_prefix + '([\\d\\.]*)\/') | ||
199 | 29 | var newpathname = window.location.pathname.replace( | ||
200 | 30 | pattern, '/' + doc_prefix + version + '/'); | ||
201 | 31 | return window.location.origin + newpathname + window.location.hash; | ||
202 | 32 | }; | ||
203 | 33 | |||
204 | 34 | function doc_homepage(version, doc_prefix) { | ||
205 | 35 | // Returns the URL of the homepage for the documentation of the given | ||
206 | 36 | // version. | ||
207 | 37 | return window.location.origin + '/' + doc_prefix + version + '/'; | ||
208 | 38 | }; | ||
209 | 39 | |||
210 | 40 | |||
211 | 41 | function set_up_version_switcher(selector, doc_prefix) { | ||
212 | 42 | // Create version switcher widget. | ||
213 | 43 | $(selector).replaceWith($('\ | ||
214 | 44 | <h3>Version</h3> \ | ||
215 | 45 | <select id="id_sidebar_release" name="release"> \ | ||
216 | 46 | </select>')); | ||
217 | 47 | |||
218 | 48 | release_select = $("#id_sidebar_release"); | ||
219 | 49 | |||
220 | 50 | // Request version list and populate version switcher widget with it. | ||
221 | 51 | var json_url = "/" + doc_prefix + "/_static/versions.json"; | ||
222 | 52 | var jqxhr = $.getJSON(json_url, function(data) { | ||
223 | 53 | var first = true; | ||
224 | 54 | $.each(data, function (value, text) { | ||
225 | 55 | var option_value = value; | ||
226 | 56 | if (first) { | ||
227 | 57 | // The first element corresponds to the documentation for trunk. | ||
228 | 58 | option_value = ''; | ||
229 | 59 | first = false; | ||
230 | 60 | } | ||
231 | 61 | var option = $("<option></option>").attr("value", option_value).text(text); | ||
232 | 62 | if (value == DOCUMENTATION_OPTIONS.VERSION) { | ||
233 | 63 | option.attr('selected', 'selected'); | ||
234 | 64 | } | ||
235 | 65 | release_select.append(option); | ||
236 | 66 | }); | ||
237 | 67 | }); | ||
238 | 68 | |||
239 | 69 | // jqxhr.fail only exists in recent versions of jQuery; | ||
240 | 70 | // it's not there with the version shipped with Sphinx | ||
241 | 71 | // on Precise. | ||
242 | 72 | if ($.isFunction(jqxhr.fail)) { | ||
243 | 73 | jqxhr.fail(function(jqXHR) { | ||
244 | 74 | console.log("error requesting versions file"); | ||
245 | 75 | console.log(jqXHR); | ||
246 | 76 | }); | ||
247 | 77 | } | ||
248 | 78 | |||
249 | 79 | // Handle version switcher change: redirect to the equivalent page in the | ||
250 | 80 | // selected version of the documentation if that page exists, redirects to the | ||
251 | 81 | // homepage of the selected version of the documentation otherwise. | ||
252 | 82 | $("#id_sidebar_release").change(function () { | ||
253 | 83 | var version = $(this).find('option:selected').val(); | ||
254 | 84 | var same_page_in_other_version = doc_page(version, doc_prefix); | ||
255 | 85 | if (page_exists(same_page_in_other_version)) { | ||
256 | 86 | window.location = same_page_in_other_version; | ||
257 | 87 | } else { | ||
258 | 88 | window.location = doc_homepage(version, doc_prefix); | ||
259 | 89 | } | ||
260 | 90 | }); | ||
261 | 91 | }; | ||
262 | 92 | 0 | ||
263 | === removed directory 'docs/_templates' | |||
264 | === removed directory 'docs/_templates/maas' | |||
265 | === removed file 'docs/_templates/maas/layout.html' | |||
266 | --- docs/_templates/maas/layout.html 2014-06-11 15:27:54 +0000 | |||
267 | +++ docs/_templates/maas/layout.html 1970-01-01 00:00:00 +0000 | |||
268 | @@ -1,31 +0,0 @@ | |||
269 | 1 | {%- extends "basic/layout.html" %} | ||
270 | 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'] %} | ||
271 | 3 | |||
272 | 4 | {% block sidebarlogo %} | ||
273 | 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> | ||
274 | 6 | <h2 style="text-align:center;">MAAS</h2> | ||
275 | 7 | <p style="font-style:italic;font-size:0.9em; text-align:center; margin-bottom:1.5em">Metal As A Service.</p> | ||
276 | 8 | <span id="version_switcher"></span> | ||
277 | 9 | <br/> | ||
278 | 10 | <br/> | ||
279 | 11 | {% endblock %} | ||
280 | 12 | |||
281 | 13 | {# Remove 'modules' and 'index' from rellinks: they point to | ||
282 | 14 | autogenerated code documentation pages that we don't want | ||
283 | 15 | to advertise too much. | ||
284 | 16 | #} | ||
285 | 17 | {%- set rellinks = rellinks[2:] %} | ||
286 | 18 | |||
287 | 19 | {%- block footer %} | ||
288 | 20 | <footer class="global clearfix"> | ||
289 | 21 | <div class="legal clearfix"> | ||
290 | 22 | <p>© Copyright {{ copyright }}. Ubuntu and Canonical are registered trademarks of | ||
291 | 23 | <a href="http://canonical.com">Canonical Ltd</a>. | ||
292 | 24 | </p> | ||
293 | 25 | <p> | ||
294 | 26 | Revision {{ bzr_last_revision_number}} ({{ bzr_last_revision_date }}). | ||
295 | 27 | Documentation generation date: {{ bzr_build_date }}. | ||
296 | 28 | </p> | ||
297 | 29 | </div> | ||
298 | 30 | </footer> | ||
299 | 31 | {%- endblock %} | ||
300 | 32 | 0 | ||
301 | === removed file 'docs/_templates/maas/localtoc.html' | |||
302 | --- docs/_templates/maas/localtoc.html 2013-12-06 19:26:05 +0000 | |||
303 | +++ docs/_templates/maas/localtoc.html 1970-01-01 00:00:00 +0000 | |||
304 | @@ -1,3 +0,0 @@ | |||
305 | 1 | {%- if display_toc %} | ||
306 | 2 | {{ toc }} | ||
307 | 3 | {%- endif %} | ||
308 | 4 | 0 | ||
309 | === removed file 'docs/_templates/maas/relations.html' | |||
310 | --- docs/_templates/maas/relations.html 2014-04-08 20:58:05 +0000 | |||
311 | +++ docs/_templates/maas/relations.html 1970-01-01 00:00:00 +0000 | |||
312 | @@ -1,31 +0,0 @@ | |||
313 | 1 | <script type="text/javascript"> | ||
314 | 2 | $(document).ready(function () { | ||
315 | 3 | if ({{ add_version_switcher }}) { | ||
316 | 4 | $.ajaxSetup({cache: true}); | ||
317 | 5 | $.getScript('{{ versions_json_path }}', function() { | ||
318 | 6 | console.log( "Versions script loaded." ); | ||
319 | 7 | set_up_version_switcher('#version_switcher', '{{ doc_prefix }}'); | ||
320 | 8 | }); | ||
321 | 9 | } | ||
322 | 10 | }); | ||
323 | 11 | </script> | ||
324 | 12 | |||
325 | 13 | <h3>Related Topics</h3> | ||
326 | 14 | <ul> | ||
327 | 15 | <li><a href="{{ pathto(master_doc) }}">Documentation overview</a><ul> | ||
328 | 16 | {%- for parent in parents %} | ||
329 | 17 | <li><a href="{{ parent.link|e }}">{{ parent.title }}</a><ul> | ||
330 | 18 | {%- endfor %} | ||
331 | 19 | {%- if prev %} | ||
332 | 20 | <li>Previous: <a href="{{ prev.link|e }}" title="{{ _('previous chapter') | ||
333 | 21 | }}">{{ prev.title }}</a></li> | ||
334 | 22 | {%- endif %} | ||
335 | 23 | {%- if next %} | ||
336 | 24 | <li>Next: <a href="{{ next.link|e }}" title="{{ _('next chapter') | ||
337 | 25 | }}">{{ next.title }}</a></li> | ||
338 | 26 | {%- endif %} | ||
339 | 27 | {%- for parent in parents %} | ||
340 | 28 | </ul></li> | ||
341 | 29 | {%- endfor %} | ||
342 | 30 | </ul></li> | ||
343 | 31 | </ul> | ||
344 | 32 | 0 | ||
345 | === removed directory 'docs/_templates/maas/static' | |||
346 | === removed directory 'docs/_templates/maas/static/css' | |||
347 | === removed file 'docs/_templates/maas/static/css/main.css' | |||
348 | --- docs/_templates/maas/static/css/main.css 2014-06-09 16:25:19 +0000 | |||
349 | +++ docs/_templates/maas/static/css/main.css 1970-01-01 00:00:00 +0000 | |||
350 | @@ -1,75 +0,0 @@ | |||
351 | 1 | pre { | ||
352 | 2 | background-color:#EEEEEE; | ||
353 | 3 | background-position:initial initial; | ||
354 | 4 | background-repeat:initial initial; | ||
355 | 5 | line-height:1.3em; | ||
356 | 6 | margin:15px 0px; | ||
357 | 7 | padding:7px 30px; | ||
358 | 8 | } | ||
359 | 9 | |||
360 | 10 | div.document { | ||
361 | 11 | width: 984px; | ||
362 | 12 | margin: 10px auto 0 auto; | ||
363 | 13 | } | ||
364 | 14 | |||
365 | 15 | div.body h1 { | ||
366 | 16 | margin-top: 20px; | ||
367 | 17 | padding-top: 0; | ||
368 | 18 | font-size: 250%; | ||
369 | 19 | } | ||
370 | 20 | |||
371 | 21 | .bodywrapper ul ul { | ||
372 | 22 | margin-top: .4em; | ||
373 | 23 | margin-bottom: .4em; | ||
374 | 24 | } | ||
375 | 25 | |||
376 | 26 | div.sphinxsidebar ul ul { | ||
377 | 27 | margin-top: .4em; | ||
378 | 28 | margin-bottom: .4em; | ||
379 | 29 | } | ||
380 | 30 | |||
381 | 31 | body { | ||
382 | 32 | padding-top: 0px; | ||
383 | 33 | } | ||
384 | 34 | |||
385 | 35 | div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6, div.admonition p.admonition-title { | ||
386 | 36 | font-family: Ubuntu,Arial,"libra sans",sans-serif; | ||
387 | 37 | } | ||
388 | 38 | |||
389 | 39 | div.admonition { | ||
390 | 40 | margin: 20px 0px; | ||
391 | 41 | color: #3E4349; | ||
392 | 42 | } | ||
393 | 43 | |||
394 | 44 | div.admonition p.admonition-title { | ||
395 | 45 | font-size: 20px; | ||
396 | 46 | } | ||
397 | 47 | |||
398 | 48 | .document { | ||
399 | 49 | -moz-box-sizing: border-box; | ||
400 | 50 | background: none repeat scroll 0 0 #FFFFFF; | ||
401 | 51 | border-radius: 4px; | ||
402 | 52 | box-shadow: 0 0 3px #C9C9C9; | ||
403 | 53 | } | ||
404 | 54 | |||
405 | 55 | div.sphinxsidebarwrapper { | ||
406 | 56 | padding: 18px 10px 18px 20px; | ||
407 | 57 | } | ||
408 | 58 | |||
409 | 59 | form input[type="text"] { | ||
410 | 60 | display: inline; | ||
411 | 61 | } | ||
412 | 62 | |||
413 | 63 | div.sphinxsidebar #searchbox input[type="text"] { | ||
414 | 64 | width: 110px; | ||
415 | 65 | padding: 4px 3px; | ||
416 | 66 | } | ||
417 | 67 | |||
418 | 68 | div.sphinxsidebar #searchbox input[type="submit"] { | ||
419 | 69 | width: 40px; | ||
420 | 70 | } | ||
421 | 71 | |||
422 | 72 | a:active, a:focus, a:hover { | ||
423 | 73 | text-decoration: none; | ||
424 | 74 | border-bottom: 1px solid #6D4100; | ||
425 | 75 | } | ||
426 | 76 | 0 | ||
427 | === removed file 'docs/_templates/maas/static/flasky.css_t' | |||
428 | --- docs/_templates/maas/static/flasky.css_t 2014-06-09 16:25:19 +0000 | |||
429 | +++ docs/_templates/maas/static/flasky.css_t 1970-01-01 00:00:00 +0000 | |||
430 | @@ -1,564 +0,0 @@ | |||
431 | 1 | /* | ||
432 | 2 | * flasky.css_t | ||
433 | 3 | * ~~~~~~~~~~~~ | ||
434 | 4 | * | ||
435 | 5 | * :copyright: Copyright 2010 by Armin Ronacher. Modifications by Kenneth Reitz. | ||
436 | 6 | * :license: Flask Design License, see LICENSE for details. | ||
437 | 7 | */ | ||
438 | 8 | |||
439 | 9 | {% set page_width = '940px' %} | ||
440 | 10 | {% set sidebar_width = '220px' %} | ||
441 | 11 | |||
442 | 12 | @import url("basic.css"); | ||
443 | 13 | |||
444 | 14 | /* -- page layout ----------------------------------------------------------- */ | ||
445 | 15 | |||
446 | 16 | body { | ||
447 | 17 | font-family: "Georgia", "Open Sans", OpenSansRegular, sans-serif; | ||
448 | 18 | font-size: 16px; | ||
449 | 19 | background: #fff; | ||
450 | 20 | font-weight: 400; | ||
451 | 21 | color: #000; | ||
452 | 22 | margin: 0; | ||
453 | 23 | padding: 0; | ||
454 | 24 | } | ||
455 | 25 | |||
456 | 26 | div.document { | ||
457 | 27 | width: {{ page_width }}; | ||
458 | 28 | margin: 10px auto 0 auto; | ||
459 | 29 | } | ||
460 | 30 | |||
461 | 31 | div.documentwrapper { | ||
462 | 32 | float: left; | ||
463 | 33 | width: 100%; | ||
464 | 34 | } | ||
465 | 35 | |||
466 | 36 | div.bodywrapper { | ||
467 | 37 | margin: 0 0 0 {{ sidebar_width }}; | ||
468 | 38 | } | ||
469 | 39 | |||
470 | 40 | div.sphinxsidebar { | ||
471 | 41 | width: {{ sidebar_width }}; | ||
472 | 42 | } | ||
473 | 43 | |||
474 | 44 | hr { | ||
475 | 45 | border: 1px solid #B1B4B6; | ||
476 | 46 | } | ||
477 | 47 | |||
478 | 48 | div.body { | ||
479 | 49 | background-color: white; | ||
480 | 50 | color: #3E4349; | ||
481 | 51 | padding: 0 30px 0 30px; | ||
482 | 52 | } | ||
483 | 53 | |||
484 | 54 | img.floatingflask { | ||
485 | 55 | padding: 0 0 10px 10px; | ||
486 | 56 | float: right; | ||
487 | 57 | } | ||
488 | 58 | |||
489 | 59 | div.footer { | ||
490 | 60 | width: {{ page_width }}; | ||
491 | 61 | margin: 20px auto 30px auto; | ||
492 | 62 | font-size: 14px; | ||
493 | 63 | color: #888; | ||
494 | 64 | text-align: right; | ||
495 | 65 | } | ||
496 | 66 | |||
497 | 67 | div.footer a { | ||
498 | 68 | color: #888; | ||
499 | 69 | } | ||
500 | 70 | |||
501 | 71 | div.related { | ||
502 | 72 | width: {{ page_width }}; | ||
503 | 73 | margin: 10px auto 0 auto; | ||
504 | 74 | } | ||
505 | 75 | |||
506 | 76 | div.related h3 { | ||
507 | 77 | display: none; | ||
508 | 78 | } | ||
509 | 79 | |||
510 | 80 | div.sphinxsidebar a { | ||
511 | 81 | color: #444; | ||
512 | 82 | text-decoration: none; | ||
513 | 83 | border-bottom: 1px dotted #999; | ||
514 | 84 | } | ||
515 | 85 | |||
516 | 86 | div.sphinxsidebar a:hover { | ||
517 | 87 | border-bottom: 1px solid #999; | ||
518 | 88 | } | ||
519 | 89 | |||
520 | 90 | div.sphinxsidebar { | ||
521 | 91 | font-size: 14px; | ||
522 | 92 | line-height: 1.5; | ||
523 | 93 | } | ||
524 | 94 | |||
525 | 95 | div.sphinxsidebarwrapper { | ||
526 | 96 | padding: 18px 10px; | ||
527 | 97 | } | ||
528 | 98 | |||
529 | 99 | div.sphinxsidebarwrapper p.logo { | ||
530 | 100 | padding: 0; | ||
531 | 101 | margin: -10px 0 0 -20px; | ||
532 | 102 | text-align: center; | ||
533 | 103 | } | ||
534 | 104 | |||
535 | 105 | div.sphinxsidebar h3, | ||
536 | 106 | div.sphinxsidebar h4 { | ||
537 | 107 | font-family: 'Antic Slab' ,'Garamond', 'Georgia', serif; | ||
538 | 108 | color: #000; | ||
539 | 109 | font-size: 24px; | ||
540 | 110 | font-weight: normal; | ||
541 | 111 | margin: 30px 0 5px 0; | ||
542 | 112 | padding: 0; | ||
543 | 113 | } | ||
544 | 114 | |||
545 | 115 | div.sphinxsidebar h4 { | ||
546 | 116 | font-size: 20px; | ||
547 | 117 | } | ||
548 | 118 | |||
549 | 119 | div.sphinxsidebar h3 a { | ||
550 | 120 | color: #000; | ||
551 | 121 | } | ||
552 | 122 | |||
553 | 123 | div.sphinxsidebar p.logo a, | ||
554 | 124 | div.sphinxsidebar h3 a, | ||
555 | 125 | div.sphinxsidebar p.logo a:hover, | ||
556 | 126 | div.sphinxsidebar h3 a:hover { | ||
557 | 127 | border: none; | ||
558 | 128 | } | ||
559 | 129 | |||
560 | 130 | div.sphinxsidebar p { | ||
561 | 131 | color: #555; | ||
562 | 132 | margin: 10px 0; | ||
563 | 133 | } | ||
564 | 134 | |||
565 | 135 | div.sphinxsidebar ul { | ||
566 | 136 | margin: 10px 0px; | ||
567 | 137 | padding: 0; | ||
568 | 138 | color: #000; | ||
569 | 139 | } | ||
570 | 140 | |||
571 | 141 | div.sphinxsidebar input { | ||
572 | 142 | border: 1px solid #ccc; | ||
573 | 143 | font-family: 'Georgia', serif; | ||
574 | 144 | font-size: 1em; | ||
575 | 145 | } | ||
576 | 146 | |||
577 | 147 | /* -- body styles ----------------------------------------------------------- */ | ||
578 | 148 | |||
579 | 149 | a { | ||
580 | 150 | color: #004B6B; | ||
581 | 151 | text-decoration: underline; | ||
582 | 152 | } | ||
583 | 153 | |||
584 | 154 | a:hover { | ||
585 | 155 | color: #6D4100; | ||
586 | 156 | text-decoration: underline; | ||
587 | 157 | } | ||
588 | 158 | |||
589 | 159 | div.body h1, | ||
590 | 160 | div.body h2, | ||
591 | 161 | div.body h3, | ||
592 | 162 | div.body h4, | ||
593 | 163 | div.body h5, | ||
594 | 164 | div.body h6 { | ||
595 | 165 | font-family: 'Antic Slab', serif; | ||
596 | 166 | font-weight: normal; | ||
597 | 167 | margin: 30px 0px 10px 0px; | ||
598 | 168 | padding: 0; | ||
599 | 169 | text-shadow: 1px 1px 3px #ddd; | ||
600 | 170 | color: #000; | ||
601 | 171 | } | ||
602 | 172 | |||
603 | 173 | div.body h1 { margin-top: 0; padding-top: 0; font-size: 250%; } | ||
604 | 174 | div.body h2 { font-size: 190%; } | ||
605 | 175 | div.body h3 { font-size: 160%; } | ||
606 | 176 | div.body h4 { font-size: 140%; } | ||
607 | 177 | div.body h5 { font-size: 110%; } | ||
608 | 178 | div.body h6 { font-size: 110%; } | ||
609 | 179 | |||
610 | 180 | a.headerlink { | ||
611 | 181 | color: #ddd; | ||
612 | 182 | padding: 0 4px; | ||
613 | 183 | text-decoration: none; | ||
614 | 184 | } | ||
615 | 185 | |||
616 | 186 | a.headerlink:hover { | ||
617 | 187 | color: #444; | ||
618 | 188 | background: #eaeaea; | ||
619 | 189 | } | ||
620 | 190 | |||
621 | 191 | div.body p, div.body dd, div.body li { | ||
622 | 192 | line-height: 1.4em; | ||
623 | 193 | } | ||
624 | 194 | |||
625 | 195 | div.admonition { | ||
626 | 196 | background: #fafafa; | ||
627 | 197 | margin: 20px -30px; | ||
628 | 198 | padding: 10px 30px; | ||
629 | 199 | border-top: 1px solid #ccc; | ||
630 | 200 | border-bottom: 1px solid #ccc; | ||
631 | 201 | } | ||
632 | 202 | |||
633 | 203 | div.admonition tt.xref, div.admonition a tt { | ||
634 | 204 | border-bottom: 1px solid #fafafa; | ||
635 | 205 | } | ||
636 | 206 | |||
637 | 207 | dd div.admonition { | ||
638 | 208 | margin-left: -60px; | ||
639 | 209 | padding-left: 60px; | ||
640 | 210 | } | ||
641 | 211 | |||
642 | 212 | div.admonition p.admonition-title { | ||
643 | 213 | font-family: 'Garamond', 'Georgia', serif; | ||
644 | 214 | font-weight: normal; | ||
645 | 215 | font-size: 24px; | ||
646 | 216 | margin: 0 0 10px 0; | ||
647 | 217 | padding: 0; | ||
648 | 218 | line-height: 1; | ||
649 | 219 | } | ||
650 | 220 | |||
651 | 221 | div.admonition p.last { | ||
652 | 222 | margin-bottom: 0; | ||
653 | 223 | } | ||
654 | 224 | |||
655 | 225 | div.highlight { | ||
656 | 226 | background-color: white; | ||
657 | 227 | } | ||
658 | 228 | |||
659 | 229 | dt:target, .highlight { | ||
660 | 230 | background: #FAF3E8; | ||
661 | 231 | } | ||
662 | 232 | |||
663 | 233 | div.note { | ||
664 | 234 | background-color: #eee; | ||
665 | 235 | border: 1px solid #ccc; | ||
666 | 236 | } | ||
667 | 237 | |||
668 | 238 | div.seealso { | ||
669 | 239 | background-color: #ffc; | ||
670 | 240 | border: 1px solid #ff6; | ||
671 | 241 | } | ||
672 | 242 | |||
673 | 243 | div.topic { | ||
674 | 244 | background-color: #eee; | ||
675 | 245 | } | ||
676 | 246 | |||
677 | 247 | p.admonition-title { | ||
678 | 248 | display: inline; | ||
679 | 249 | } | ||
680 | 250 | |||
681 | 251 | p.admonition-title:after { | ||
682 | 252 | content: ":"; | ||
683 | 253 | } | ||
684 | 254 | |||
685 | 255 | pre { | ||
686 | 256 | font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; | ||
687 | 257 | font-size: 0.88em; | ||
688 | 258 | } | ||
689 | 259 | |||
690 | 260 | tt { | ||
691 | 261 | font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; | ||
692 | 262 | font-size: 0.95em; | ||
693 | 263 | } | ||
694 | 264 | |||
695 | 265 | img.screenshot { | ||
696 | 266 | } | ||
697 | 267 | |||
698 | 268 | tt.descname, tt.descclassname { | ||
699 | 269 | font-size: 0.95em; | ||
700 | 270 | } | ||
701 | 271 | |||
702 | 272 | tt.descname { | ||
703 | 273 | padding-right: 0.08em; | ||
704 | 274 | } | ||
705 | 275 | |||
706 | 276 | img.screenshot { | ||
707 | 277 | -moz-box-shadow: 2px 2px 4px #eee; | ||
708 | 278 | -webkit-box-shadow: 2px 2px 4px #eee; | ||
709 | 279 | box-shadow: 2px 2px 4px #eee; | ||
710 | 280 | } | ||
711 | 281 | |||
712 | 282 | table.docutils { | ||
713 | 283 | border: 1px solid #888; | ||
714 | 284 | -moz-box-shadow: 2px 2px 4px #eee; | ||
715 | 285 | -webkit-box-shadow: 2px 2px 4px #eee; | ||
716 | 286 | box-shadow: 2px 2px 4px #eee; | ||
717 | 287 | } | ||
718 | 288 | |||
719 | 289 | table.docutils td, table.docutils th { | ||
720 | 290 | border: 1px solid #888; | ||
721 | 291 | padding: 0.25em 0.7em; | ||
722 | 292 | } | ||
723 | 293 | |||
724 | 294 | table.field-list, table.footnote { | ||
725 | 295 | border: none; | ||
726 | 296 | -moz-box-shadow: none; | ||
727 | 297 | -webkit-box-shadow: none; | ||
728 | 298 | box-shadow: none; | ||
729 | 299 | } | ||
730 | 300 | |||
731 | 301 | table.footnote { | ||
732 | 302 | margin: 15px 0; | ||
733 | 303 | width: 100%; | ||
734 | 304 | border: 1px solid #eee; | ||
735 | 305 | background: #fdfdfd; | ||
736 | 306 | font-size: 0.9em; | ||
737 | 307 | } | ||
738 | 308 | |||
739 | 309 | table.footnote + table.footnote { | ||
740 | 310 | margin-top: -15px; | ||
741 | 311 | border-top: none; | ||
742 | 312 | } | ||
743 | 313 | |||
744 | 314 | table.field-list th { | ||
745 | 315 | padding: 0 0.8em 0 0; | ||
746 | 316 | } | ||
747 | 317 | |||
748 | 318 | table.field-list td { | ||
749 | 319 | padding: 0; | ||
750 | 320 | } | ||
751 | 321 | |||
752 | 322 | table.footnote td.label { | ||
753 | 323 | width: 0px; | ||
754 | 324 | padding: 0.3em 0 0.3em 0.5em; | ||
755 | 325 | } | ||
756 | 326 | |||
757 | 327 | table.footnote td { | ||
758 | 328 | padding: 0.3em 0.5em; | ||
759 | 329 | } | ||
760 | 330 | |||
761 | 331 | dl { | ||
762 | 332 | margin: 0; | ||
763 | 333 | padding: 0; | ||
764 | 334 | } | ||
765 | 335 | |||
766 | 336 | dl dd { | ||
767 | 337 | margin-left: 30px; | ||
768 | 338 | } | ||
769 | 339 | |||
770 | 340 | blockquote { | ||
771 | 341 | margin: 0 0 0 30px; | ||
772 | 342 | padding: 0; | ||
773 | 343 | } | ||
774 | 344 | |||
775 | 345 | ul, ol { | ||
776 | 346 | margin: 10px 0 10px 30px; | ||
777 | 347 | padding: 0; | ||
778 | 348 | } | ||
779 | 349 | |||
780 | 350 | pre { | ||
781 | 351 | background: #eee; | ||
782 | 352 | padding: 7px 30px; | ||
783 | 353 | margin: 15px -30px; | ||
784 | 354 | line-height: 1.3em; | ||
785 | 355 | } | ||
786 | 356 | |||
787 | 357 | dl pre, blockquote pre, li pre { | ||
788 | 358 | margin-left: 0px; | ||
789 | 359 | padding-left: 15px; | ||
790 | 360 | } | ||
791 | 361 | |||
792 | 362 | dl dl pre { | ||
793 | 363 | margin-left: 0px; | ||
794 | 364 | padding-left: 15px; | ||
795 | 365 | } | ||
796 | 366 | |||
797 | 367 | tt { | ||
798 | 368 | background-color: #ecf0f3; | ||
799 | 369 | color: #222; | ||
800 | 370 | /* padding: 1px 2px; */ | ||
801 | 371 | } | ||
802 | 372 | |||
803 | 373 | tt.xref, a tt { | ||
804 | 374 | background-color: #FBFBFB; | ||
805 | 375 | color: #2277bb; | ||
806 | 376 | border-bottom: 1px solid white; | ||
807 | 377 | } | ||
808 | 378 | |||
809 | 379 | a.reference { | ||
810 | 380 | text-decoration: none; | ||
811 | 381 | border-bottom: 1px dotted #004B6B; | ||
812 | 382 | } | ||
813 | 383 | |||
814 | 384 | a.reference:hover { | ||
815 | 385 | border-bottom: 1px solid #6D4100; | ||
816 | 386 | } | ||
817 | 387 | |||
818 | 388 | a.footnote-reference { | ||
819 | 389 | text-decoration: none; | ||
820 | 390 | font-size: 0.7em; | ||
821 | 391 | vertical-align: top; | ||
822 | 392 | border-bottom: 1px dotted #004B6B; | ||
823 | 393 | } | ||
824 | 394 | |||
825 | 395 | a.footnote-reference:hover { | ||
826 | 396 | border-bottom: 1px solid #6D4100; | ||
827 | 397 | } | ||
828 | 398 | |||
829 | 399 | a:hover tt { | ||
830 | 400 | background: #EEE; | ||
831 | 401 | } | ||
832 | 402 | |||
833 | 403 | li { | ||
834 | 404 | margin-bottom: 0.3em; | ||
835 | 405 | } | ||
836 | 406 | |||
837 | 407 | |||
838 | 408 | @media screen and (max-width: 870px) { | ||
839 | 409 | |||
840 | 410 | div.sphinxsidebar { | ||
841 | 411 | display: none; | ||
842 | 412 | } | ||
843 | 413 | |||
844 | 414 | div.document { | ||
845 | 415 | width: 100%; | ||
846 | 416 | |||
847 | 417 | } | ||
848 | 418 | |||
849 | 419 | div.documentwrapper { | ||
850 | 420 | margin-left: 0; | ||
851 | 421 | margin-top: 0; | ||
852 | 422 | margin-right: 0; | ||
853 | 423 | margin-bottom: 0; | ||
854 | 424 | } | ||
855 | 425 | |||
856 | 426 | div.bodywrapper { | ||
857 | 427 | margin-top: 0; | ||
858 | 428 | margin-right: 0; | ||
859 | 429 | margin-bottom: 0; | ||
860 | 430 | margin-left: 0; | ||
861 | 431 | } | ||
862 | 432 | |||
863 | 433 | ul { | ||
864 | 434 | margin-left: 0; | ||
865 | 435 | } | ||
866 | 436 | |||
867 | 437 | .document { | ||
868 | 438 | width: auto; | ||
869 | 439 | } | ||
870 | 440 | |||
871 | 441 | .footer { | ||
872 | 442 | width: auto; | ||
873 | 443 | } | ||
874 | 444 | |||
875 | 445 | .bodywrapper { | ||
876 | 446 | margin: 0; | ||
877 | 447 | } | ||
878 | 448 | |||
879 | 449 | .footer { | ||
880 | 450 | width: auto; | ||
881 | 451 | } | ||
882 | 452 | |||
883 | 453 | .github { | ||
884 | 454 | display: none; | ||
885 | 455 | } | ||
886 | 456 | |||
887 | 457 | |||
888 | 458 | |||
889 | 459 | } | ||
890 | 460 | |||
891 | 461 | |||
892 | 462 | |||
893 | 463 | @media screen and (max-width: 875px) { | ||
894 | 464 | |||
895 | 465 | body { | ||
896 | 466 | margin: 0; | ||
897 | 467 | padding: 20px 30px; | ||
898 | 468 | } | ||
899 | 469 | |||
900 | 470 | div.documentwrapper { | ||
901 | 471 | float: none; | ||
902 | 472 | background: white; | ||
903 | 473 | } | ||
904 | 474 | |||
905 | 475 | div.sphinxsidebar { | ||
906 | 476 | display: block; | ||
907 | 477 | float: none; | ||
908 | 478 | width: 102.5%; | ||
909 | 479 | margin: 50px -30px -20px -30px; | ||
910 | 480 | padding: 10px 20px; | ||
911 | 481 | background: #333; | ||
912 | 482 | color: white; | ||
913 | 483 | } | ||
914 | 484 | |||
915 | 485 | div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, | ||
916 | 486 | div.sphinxsidebar h3 a { | ||
917 | 487 | color: white; | ||
918 | 488 | } | ||
919 | 489 | |||
920 | 490 | div.sphinxsidebar a { | ||
921 | 491 | color: #aaa; | ||
922 | 492 | } | ||
923 | 493 | |||
924 | 494 | div.sphinxsidebar p.logo { | ||
925 | 495 | display: none; | ||
926 | 496 | } | ||
927 | 497 | |||
928 | 498 | div.document { | ||
929 | 499 | width: 100%; | ||
930 | 500 | margin: 0; | ||
931 | 501 | } | ||
932 | 502 | |||
933 | 503 | div.related { | ||
934 | 504 | display: block; | ||
935 | 505 | margin: 0; | ||
936 | 506 | padding: 10px 0 20px 0; | ||
937 | 507 | } | ||
938 | 508 | |||
939 | 509 | div.related ul, | ||
940 | 510 | div.related ul li { | ||
941 | 511 | margin: 0; | ||
942 | 512 | padding: 0; | ||
943 | 513 | } | ||
944 | 514 | |||
945 | 515 | div.footer { | ||
946 | 516 | display: none; | ||
947 | 517 | } | ||
948 | 518 | |||
949 | 519 | div.bodywrapper { | ||
950 | 520 | margin: 0; | ||
951 | 521 | } | ||
952 | 522 | |||
953 | 523 | div.body { | ||
954 | 524 | min-height: 0; | ||
955 | 525 | padding: 0; | ||
956 | 526 | } | ||
957 | 527 | |||
958 | 528 | |||
959 | 529 | .rtd_doc_footer { | ||
960 | 530 | display: none; | ||
961 | 531 | } | ||
962 | 532 | |||
963 | 533 | .document { | ||
964 | 534 | width: auto; | ||
965 | 535 | } | ||
966 | 536 | |||
967 | 537 | .footer { | ||
968 | 538 | width: auto; | ||
969 | 539 | } | ||
970 | 540 | |||
971 | 541 | .footer { | ||
972 | 542 | width: auto; | ||
973 | 543 | } | ||
974 | 544 | |||
975 | 545 | .github { | ||
976 | 546 | display: none; | ||
977 | 547 | } | ||
978 | 548 | } | ||
979 | 549 | |||
980 | 550 | |||
981 | 551 | /* misc. */ | ||
982 | 552 | |||
983 | 553 | .revsys-inline { | ||
984 | 554 | display: none!important; | ||
985 | 555 | } | ||
986 | 556 | |||
987 | 557 | div.sphinxsidebar #searchbox input[type="text"] { | ||
988 | 558 | width: 140px; | ||
989 | 559 | padding: 4px 3px; | ||
990 | 560 | } | ||
991 | 561 | |||
992 | 562 | .highlight .nv { | ||
993 | 563 | color: #C65D09!important; | ||
994 | 564 | } | ||
995 | 565 | 0 | ||
996 | === removed file 'docs/_templates/maas/theme.conf' | |||
997 | --- docs/_templates/maas/theme.conf 2013-12-06 15:11:12 +0000 | |||
998 | +++ docs/_templates/maas/theme.conf 1970-01-01 00:00:00 +0000 | |||
999 | @@ -1,6 +0,0 @@ | |||
1000 | 1 | [theme] | ||
1001 | 2 | inherit = basic | ||
1002 | 3 | stylesheet = flasky.css | ||
1003 | 4 | |||
1004 | 5 | headfont = Ubuntu | ||
1005 | 6 | bodyfont = free-sans,sans,sans-serif | ||
1006 | 7 | 0 | ||
1007 | === renamed file 'docs/about.rst' => 'docs/about.md' | |||
1008 | --- docs/about.rst 2014-11-10 16:39:12 +0000 | |||
1009 | +++ docs/about.md 2015-04-17 21:06:27 +0000 | |||
1010 | @@ -1,50 +1,17 @@ | |||
1011 | 1 | About this documentation | 1 | About this documentation |
1012 | 2 | ======================== | 2 | ======================== |
1013 | 3 | 3 | ||
1023 | 4 | This is the documentation for Canonical's MAAS software. If you aren't | 4 | This 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. |
1015 | 5 | sure what that is, you should probably skip everything else and head | ||
1016 | 6 | straight to the :ref:`orientation` section where it is explained. | ||
1017 | 7 | Like any software though, it can be frustrating if you don't know how | ||
1018 | 8 | bits of it work, how to achieve certain goals or what to do when | ||
1019 | 9 | things go wrong. Amongst its various sections, this manual aims to | ||
1020 | 10 | answer all those questions and plenty more you haven't even thought of | ||
1021 | 11 | yet. | ||
1022 | 12 | |||
1024 | 13 | 5 | ||
1025 | 14 | Getting it | 6 | Getting it |
1026 | 15 | ---------- | 7 | ---------- |
1027 | 16 | 8 | ||
1042 | 17 | In a cunning move, the current documentation always lives, and is | 9 | In 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\_. |
1029 | 18 | built from, the main MAAS source code (in the top-level ``docs/`` | ||
1030 | 19 | directory). That means that whatever MAAS package you have installed, | ||
1031 | 20 | or even if you are really living life on the edge and have checked out | ||
1032 | 21 | a development version from Launchpad, this documentation should be the | ||
1033 | 22 | latest and most appropriate version for the software you are running. | ||
1034 | 23 | However, it is also possible that there have been additional sections, | ||
1035 | 24 | or more helpful and clearer bits added since the package you are using | ||
1036 | 25 | was made. For this reason you can always find the latest documentation | ||
1037 | 26 | online here: `http://maas.ubuntu.com`_. | ||
1038 | 27 | |||
1039 | 28 | .. _http://maas.ubuntu.com: | ||
1040 | 29 | http://maas.ubuntu.com | ||
1041 | 30 | |||
1043 | 31 | 10 | ||
1044 | 32 | Contributing | 11 | Contributing |
1045 | 33 | ------------ | 12 | ------------ |
1046 | 34 | 13 | ||
1063 | 35 | If you have some extra information to add, or think you have spotted | 14 | If 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. |
1064 | 36 | an error or something out of date, we really want to hear about | 15 | |
1065 | 37 | it. Please `File a bug report`_ or `contact us directly`_. In addition | 16 | If 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. |
1066 | 38 | you can talk to us on the Freenode IRC channel #maas. | 17 | |
1051 | 39 | |||
1052 | 40 | .. _File a bug report: | ||
1053 | 41 | https://bugs.launchpad.net/maas/+filebug | ||
1054 | 42 | |||
1055 | 43 | .. _contact us directly: | ||
1056 | 44 | https://launchpad.net/~maas-maintainers/+contactuser | ||
1057 | 45 | |||
1058 | 46 | If you see something wrong with this documentation, you can help us fix it. | ||
1059 | 47 | Download the source to MAAS by following the instructions in | ||
1060 | 48 | :doc:`the hacking guide <hacking>`, make your changes, and propose a merge | ||
1061 | 49 | against lp:maas on Launchpad. The documentation source lives in the top-level | ||
1062 | 50 | ``docs/`` directory. | ||
1067 | 51 | 18 | ||
1068 | === renamed file 'docs/api_authentication.rst' => 'docs/api_authentication.md' | |||
1069 | --- docs/api_authentication.rst 2015-02-13 10:11:07 +0000 | |||
1070 | +++ docs/api_authentication.md 2015-04-17 21:06:27 +0000 | |||
1071 | @@ -1,78 +1,64 @@ | |||
1072 | 1 | .. -*- mode: rst -*- | ||
1073 | 2 | |||
1074 | 3 | .. _api_authentication: | ||
1075 | 4 | |||
1076 | 5 | API authentication | 1 | API authentication |
1077 | 6 | ================== | 2 | ================== |
1078 | 7 | 3 | ||
1089 | 8 | MAAS's API uses OAuth_ as its authentication mechanism. There isn't a third | 4 | MAAS'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. |
1090 | 9 | party involved (as in 3-legged OAuth) and so the process used is what's | 5 | |
1091 | 10 | commonly referred to as 0-legged OAuth: the consumer accesses protected | 6 | Note that some API endpoints support unauthenticated requests (i.e. anonymous access). See the API documentation \<api\> for details. |
1082 | 11 | resources by submitting OAuth signed requests. | ||
1083 | 12 | |||
1084 | 13 | .. _OAuth: http://en.wikipedia.org/wiki/OAuth | ||
1085 | 14 | |||
1086 | 15 | Note that some API endpoints support unauthenticated requests (i.e. | ||
1087 | 16 | anonymous access). See the :doc:`API documentation <api>` for details. | ||
1088 | 17 | |||
1092 | 18 | 7 | ||
1093 | 19 | Examples | 8 | Examples |
1094 | 20 | ======== | 9 | ======== |
1095 | 21 | 10 | ||
1100 | 22 | Here are two examples on how to perform an authenticated GET request to | 11 | Here 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\>'). |
1097 | 23 | retrieve the list of nodes. The <key>, <secret>, <consumer_key> tokens | ||
1098 | 24 | are the three elements that compose the API key (API key = | ||
1099 | 25 | '<consumer_key>:<key>:<secret>'). | ||
1101 | 26 | 12 | ||
1102 | 27 | Python | 13 | Python |
1103 | 28 | ------ | 14 | ------ |
1104 | 29 | 15 | ||
1132 | 30 | .. code:: python | 16 | ``` {.sourceCode .python} |
1133 | 31 | 17 | import oauth.oauth as oauth | |
1134 | 32 | import oauth.oauth as oauth | 18 | import httplib2 |
1135 | 33 | import httplib2 | 19 | import uuid |
1136 | 34 | import uuid | 20 | |
1137 | 35 | 21 | def perform_API_request(site, uri, method, key, secret, consumer_key): | |
1138 | 36 | def perform_API_request(site, uri, method, key, secret, consumer_key): | 22 | resource_tok_string = "oauth_token_secret=%s&oauth_token=%s" % ( |
1139 | 37 | resource_tok_string = "oauth_token_secret=%s&oauth_token=%s" % ( | 23 | secret, key) |
1140 | 38 | secret, key) | 24 | resource_token = oauth.OAuthToken.from_string(resource_tok_string) |
1141 | 39 | resource_token = oauth.OAuthToken.from_string(resource_tok_string) | 25 | consumer_token = oauth.OAuthConsumer(consumer_key, "") |
1142 | 40 | consumer_token = oauth.OAuthConsumer(consumer_key, "") | 26 | |
1143 | 41 | 27 | oauth_request = oauth.OAuthRequest.from_consumer_and_token( | |
1144 | 42 | oauth_request = oauth.OAuthRequest.from_consumer_and_token( | 28 | consumer_token, token=resource_token, http_url=site, |
1145 | 43 | consumer_token, token=resource_token, http_url=site, | 29 | parameters={'oauth_nonce': uuid.uuid4().get_hex()}) |
1146 | 44 | parameters={'oauth_nonce': uuid.uuid4().get_hex()}) | 30 | oauth_request.sign_request( |
1147 | 45 | oauth_request.sign_request( | 31 | oauth.OAuthSignatureMethod_PLAINTEXT(), consumer_token, |
1148 | 46 | oauth.OAuthSignatureMethod_PLAINTEXT(), consumer_token, | 32 | resource_token) |
1149 | 47 | resource_token) | 33 | headers = oauth_request.to_header() |
1150 | 48 | headers = oauth_request.to_header() | 34 | url = "%s%s" % (site, uri) |
1151 | 49 | url = "%s%s" % (site, uri) | 35 | http = httplib2.Http() |
1152 | 50 | http = httplib2.Http() | 36 | return http.request(url, method, body=None, headers=headers) |
1153 | 51 | return http.request(url, method, body=None, headers=headers) | 37 | |
1154 | 52 | 38 | # API key = '<consumer_key>:<key>:<secret>' | |
1155 | 53 | # API key = '<consumer_key>:<key>:<secret>' | 39 | response = perform_API_request( |
1156 | 54 | response = perform_API_request( | 40 | 'http://server/MAAS/api/1.0', '/nodes/?op=list', 'GET', '<key>', '<secret>', |
1157 | 55 | 'http://server/MAAS/api/1.0', '/nodes/?op=list', 'GET', '<key>', '<secret>', | 41 | '<consumer_key>') |
1158 | 56 | '<consumer_key>') | 42 | ``` |
1159 | 57 | 43 | ||
1160 | 58 | Ruby | 44 | Ruby |
1161 | 59 | ---- | 45 | ---- |
1162 | 60 | 46 | ||
1181 | 61 | .. code:: ruby | 47 | ``` {.sourceCode .ruby} |
1182 | 62 | 48 | require 'oauth' | |
1183 | 63 | require 'oauth' | 49 | require 'oauth/signature/plaintext' |
1184 | 64 | require 'oauth/signature/plaintext' | 50 | |
1185 | 65 | 51 | def perform_API_request(site, uri, key, secret, consumer_key) | |
1186 | 66 | def perform_API_request(site, uri, key, secret, consumer_key) | 52 | consumer = OAuth::Consumer.new( |
1187 | 67 | consumer = OAuth::Consumer.new( | 53 | consumer_key, "", |
1188 | 68 | consumer_key, "", | 54 | { :site => "http://localhost/MAAS/api/1.0", |
1189 | 69 | { :site => "http://localhost/MAAS/api/1.0", | 55 | :scheme => :header, :signature_method => "PLAINTEXT"}) |
1190 | 70 | :scheme => :header, :signature_method => "PLAINTEXT"}) | 56 | access_token = OAuth::AccessToken.new(consumer, key, secret) |
1191 | 71 | access_token = OAuth::AccessToken.new(consumer, key, secret) | 57 | return access_token.request(:get, "/nodes/?op=list") |
1192 | 72 | return access_token.request(:get, "/nodes/?op=list") | 58 | end |
1193 | 73 | end | 59 | |
1194 | 74 | 60 | # API key = "<consumer_key>:<key>:<secret>" | |
1195 | 75 | # API key = "<consumer_key>:<key>:<secret>" | 61 | response = perform_API_request( |
1196 | 76 | response = perform_API_request( | 62 | "http://server/MAAS/api/1.0", "/nodes/?op=list", "<key>", "<secret>", |
1197 | 77 | "http://server/MAAS/api/1.0", "/nodes/?op=list", "<key>", "<secret>", | 63 | "consumer_key>") |
1198 | 78 | "consumer_key>") | 64 | ``` |
1199 | 79 | 65 | ||
1200 | === renamed file 'docs/bootsources.rst' => 'docs/bootsources.md' | |||
1201 | --- docs/bootsources.rst 2015-02-06 17:07:56 +0000 | |||
1202 | +++ docs/bootsources.md 2015-04-17 21:06:27 +0000 | |||
1203 | @@ -1,21 +1,9 @@ | |||
1204 | 1 | .. -*- mode: rst -*- | ||
1205 | 2 | |||
1206 | 3 | .. _bootsources: | ||
1207 | 4 | |||
1208 | 5 | Boot images import configuration | 1 | Boot images import configuration |
1209 | 6 | ================================ | 2 | ================================ |
1210 | 7 | 3 | ||
1218 | 8 | The configuration for where a region downloads its images is defined by | 4 | The 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. |
1212 | 9 | a set of "sources". Each "source" defines a Simplestreams repository | ||
1213 | 10 | location (``url``) from which images can be downloaded and a | ||
1214 | 11 | ``keyring_filename`` (or ``keyring_data``) for validating index and image | ||
1215 | 12 | signatures from that location. For each source, you can define a series of | ||
1216 | 13 | filters (``selections``) specifying which images should be downloaded from | ||
1217 | 14 | that source. | ||
1219 | 15 | 5 | ||
1223 | 16 | The following example use the MAAS CLI to list the boot sources and the boot | 6 | The 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: |
1221 | 17 | source selections. Assuming the CLI ``PROFILE`` is the name of the profile | ||
1222 | 18 | under which you're logged in to the server:: | ||
1224 | 19 | 7 | ||
1225 | 20 | $ maas $PROFILE boot-sources read | 8 | $ maas $PROFILE boot-sources read |
1226 | 21 | [ | 9 | [ |
1227 | @@ -46,22 +34,19 @@ | |||
1228 | 46 | } | 34 | } |
1229 | 47 | ] | 35 | ] |
1230 | 48 | 36 | ||
1231 | 49 | |||
1232 | 50 | Restricting the images being downloaded | 37 | Restricting the images being downloaded |
1233 | 51 | --------------------------------------- | 38 | --------------------------------------- |
1234 | 52 | 39 | ||
1241 | 53 | Let's say you want to add a previous LTS release to images being downloaded. | 40 | Let's say you want to add a previous LTS release to images being downloaded. Starting from the configuration described above, you would need to: |
1242 | 54 | Starting from the configuration described above, you would need to: | 41 | |
1243 | 55 | 42 | - Add the "Precise" selection (the selection '1' of the source '1'): | |
1244 | 56 | - Add the "Precise" selection (the selection '1' of the source '1'):: | 43 | |
1245 | 57 | 44 | $ maas $PROFILE boot-source-selection create 1 os="ubuntu" release="precise" arches="amd64" subarches="*" labels="*" | |
1240 | 58 | $ maas $PROFILE boot-source-selection create 1 os="ubuntu" release="precise" arches="amd64" subarches="*" labels="*" | ||
1246 | 59 | 45 | ||
1247 | 60 | Downloading the images from a different source | 46 | Downloading the images from a different source |
1248 | 61 | ---------------------------------------------- | 47 | ---------------------------------------------- |
1249 | 62 | 48 | ||
1252 | 63 | Let's say you want to import the images from a different location. You would | 49 | Let's say you want to import the images from a different location. You would need to to change the source's url and keyring: |
1251 | 64 | need to to change the source's url and keyring:: | ||
1253 | 65 | 50 | ||
1254 | 66 | $ maas $PROFILE boot-source update 1 url="http://custom.url" keyring_filename="" keyring_data@=./custom_keyring_file | 51 | $ maas $PROFILE boot-source update 1 url="http://custom.url" keyring_filename="" keyring_data@=./custom_keyring_file |
1255 | 67 | { | 52 | { |
1256 | @@ -75,7 +60,7 @@ | |||
1257 | 75 | Adding a source | 60 | Adding a source |
1258 | 76 | --------------- | 61 | --------------- |
1259 | 77 | 62 | ||
1261 | 78 | You can also add a new source:: | 63 | You can also add a new source: |
1262 | 79 | 64 | ||
1263 | 80 | $ maas $PROFILE boot-sources create url=http://my.url keyring_filename="" keyring_data@=./ custom_keyring_file | 65 | $ maas $PROFILE boot-sources create url=http://my.url keyring_filename="" keyring_data@=./ custom_keyring_file |
1264 | 81 | { | 66 | { |
1265 | @@ -86,7 +71,7 @@ | |||
1266 | 86 | "resource_uri": "<url omitted for readability>" | 71 | "resource_uri": "<url omitted for readability>" |
1267 | 87 | } | 72 | } |
1268 | 88 | 73 | ||
1270 | 89 | Inside that newly created source ('2') you can add selections:: | 74 | Inside that newly created source ('2') you can add selections: |
1271 | 90 | 75 | ||
1272 | 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='*' |
1273 | 92 | { | 77 | { |
1274 | @@ -98,11 +83,10 @@ | |||
1275 | 98 | "resource_uri": "<url omitted for readability>" | 83 | "resource_uri": "<url omitted for readability>" |
1276 | 99 | } | 84 | } |
1277 | 100 | 85 | ||
1280 | 101 | Deleting a source | 86 | Deleting a source --------------- |
1279 | 102 | --------------- | ||
1281 | 103 | 87 | ||
1282 | 104 | Let's say you need to delete the newly added source. | 88 | Let's say you need to delete the newly added source. |
1283 | 105 | 89 | ||
1285 | 106 | To delete the source:: | 90 | To delete the source: |
1286 | 107 | 91 | ||
1287 | 108 | $ maas $PROFILE boot-source delete 2 | 92 | $ maas $PROFILE boot-source delete 2 |
1288 | 109 | 93 | ||
1289 | === renamed file 'docs/capabilities.rst' => 'docs/capabilities.md' | |||
1290 | --- docs/capabilities.rst 2014-10-09 06:30:29 +0000 | |||
1291 | +++ docs/capabilities.md 2015-04-17 21:06:27 +0000 | |||
1292 | @@ -1,44 +1,26 @@ | |||
1293 | 1 | .. -*- mode: rst -*- | ||
1294 | 2 | |||
1295 | 3 | .. _capabilities: | ||
1296 | 4 | |||
1297 | 5 | Capabilities | 1 | Capabilities |
1298 | 6 | ============ | 2 | ============ |
1299 | 7 | 3 | ||
1302 | 8 | MAAS publishes a special view at ``.../api/1.0/version/`` that returns a | 4 | MAAS 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: |
1301 | 9 | list of the server's capabilities. It's transferred as a JSON document:: | ||
1303 | 10 | 5 | ||
1304 | 11 | {"capabilities": ["name-of-capability", ...]} | 6 | {"capabilities": ["name-of-capability", ...]} |
1305 | 12 | 7 | ||
1311 | 13 | .. note:: | 8 | > **note** |
1312 | 14 | 9 | > | |
1313 | 15 | The view is called ``version`` because this will, later, include | 10 | > The view is called `version` because this will, later, include version information too. |
1309 | 16 | version information too. | ||
1310 | 17 | |||
1314 | 18 | 11 | ||
1315 | 19 | List of capabilities | 12 | List of capabilities |
1316 | 20 | -------------------- | 13 | -------------------- |
1317 | 21 | 14 | ||
1341 | 22 | Check for the following strings in the capabilities list to see what | 15 | Check 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. |
1342 | 23 | features the MAAS server supports. Use these in preference to gating on | 16 | |
1343 | 24 | the version when creating a client application. | 17 | `networks-management` |
1344 | 25 | 18 | Passive 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. | |
1345 | 26 | .. _cap-networks-management: | 19 | |
1346 | 27 | 20 | `static-ipaddresses` | |
1347 | 28 | ``networks-management`` | 21 | Static 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. |
1348 | 29 | Passive modelling of the network environment that cluster controllers | 22 | |
1349 | 30 | nodes are in, including network interfaces, subnets, VLAN tags, and | 23 | `ipv6-deployment-ubuntu` |
1350 | 31 | connectivity between them. See :ref:`networks` for more information. | 24 | Deploy Ubuntu nodes with IPv6 networking enabled. See ipv6 for more about this feature. |
1351 | 32 | 25 | ||
1352 | 33 | .. _cap-static-ipaddresses: | 26 | |
1330 | 34 | |||
1331 | 35 | ``static-ipaddresses`` | ||
1332 | 36 | Static IP address allocation to nodes, including user-reserved IPs and admin- | ||
1333 | 37 | allocated 'sticky' IPs. Available since version 1.6. See :ref:`static-ips` | ||
1334 | 38 | for more information. | ||
1335 | 39 | |||
1336 | 40 | .. _cap-ipv6-deployment-ubuntu: | ||
1337 | 41 | |||
1338 | 42 | ``ipv6-deployment-ubuntu`` | ||
1339 | 43 | Deploy Ubuntu nodes with IPv6 networking enabled. See :ref:`ipv6` for more | ||
1340 | 44 | about this feature. | ||
1353 | 45 | 27 | ||
1354 | === renamed file 'docs/changelog.rst' => 'docs/changelog.md' | |||
1355 | --- docs/changelog.rst 2015-04-09 15:48:49 +0000 | |||
1356 | +++ docs/changelog.md 2015-04-17 21:06:27 +0000 | |||
1357 | @@ -1,1132 +1,696 @@ | |||
1358 | 1 | ========= | ||
1359 | 2 | Changelog | 1 | Changelog |
1360 | 3 | ========= | 2 | ========= |
1361 | 4 | 3 | ||
1362 | 5 | 1.7.3 | 4 | 1.7.3 |
1375 | 6 | ===== | 5 | ----- |
1376 | 7 | 6 | ||
1377 | 8 | Bug Fix Update | 7 | ### Bug Fix Update |
1378 | 9 | -------------- | 8 | |
1379 | 10 | 9 | \#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. | |
1368 | 11 | #1441933 Internal Server Error when saving a cluster without Router IP | ||
1369 | 12 | #1441133 MAAS version not exposed over the API | ||
1370 | 13 | #1437094 Sorting by mac address on webui causes internal server error | ||
1371 | 14 | #1439359 Automatically set correct boot resources selection and start import | ||
1372 | 15 | after upgrade from MAAS 1.5; Ensures MAAS is usable after upgrade. | ||
1373 | 16 | #1439366 Backwards compatibility with MAAS 1.5 preseeds and custom preseeds. | ||
1374 | 17 | Ensures that users dont have to manually change preseeds names. | ||
1380 | 18 | 10 | ||
1381 | 19 | 1.7.2 | 11 | 1.7.2 |
1395 | 20 | ===== | 12 | ----- |
1396 | 21 | 13 | ||
1397 | 22 | Bug Fix Update | 14 | ### Bug Fix Update |
1398 | 23 | -------------- | 15 | |
1399 | 24 | 16 | \#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 | |
1387 | 25 | #1331214 Support AMT Version > 8 | ||
1388 | 26 | #1397567 Fix call to amttool when restarting a node to not fail disk erasing. | ||
1389 | 27 | #1415538 Do not generate the 'option routers' stanza if router IP is None. | ||
1390 | 28 | #1403909 Do not deallocate StaticIPAddress before node has powered off. | ||
1391 | 29 | #1405998 Remove all OOPS reporting. | ||
1392 | 30 | #1423931 Update the nodes host maps when a sticky ip address is claimed over the API. | ||
1393 | 31 | #1433697 Look for bootloaders in /usr/lib/EXTLINUX | ||
1394 | 32 | |||
1400 | 33 | 17 | ||
1401 | 34 | 1.7.1 | 18 | 1.7.1 |
1507 | 35 | ===== | 19 | ----- |
1508 | 36 | 20 | ||
1509 | 37 | Minor feature improvements | 21 | ### Minor feature improvements |
1510 | 38 | -------------------------- | 22 | |
1511 | 39 | 23 | New CentOS Release support. | |
1512 | 40 | New CentOS Release support. | 24 | Further 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. |
1513 | 41 | Further to the work done in the 1.7.0 MAAS Release, MAAS now supports | 25 | |
1514 | 42 | uploading various versions of CentOS. Previously MAAS would only | 26 | Power Monitoring for Seamicro 15000, Cisco UCS and HP Moonshot Chassis |
1515 | 43 | officially support 6.5. | 27 | Further 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. |
1516 | 44 | 28 | ||
1517 | 45 | Power Monitoring for Seamicro 15000, Cisco UCS and HP Moonshot Chassis | 29 | Node Listing Page and Node Event Log live refresh |
1518 | 46 | Further the work done in the 1.7.0 MAAS release, it now supports power | 30 | The 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. |
1519 | 47 | query and monitoring for the Seamicro 15000 Chassis, the Cisco UCS | 31 | |
1520 | 48 | Chassis Manager and the HP Moonshot Chassis Manager. | 32 | IP Address Reservation |
1521 | 49 | 33 | The 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. | |
1522 | 50 | Node Listing Page and Node Event Log live refresh | 34 | |
1523 | 51 | The Node Listing page and the Node Event Log now have live refresh | 35 | ### Bug fix update |
1524 | 52 | every 10 seconds. This allows MAAS to display the latest node status | 36 | |
1525 | 53 | and events without forcing a browser refresh. | 37 | For full details see <https://launchpad.net/maas/+milestone/1.7.1> |
1526 | 54 | 38 | ||
1527 | 55 | IP Address Reservation | 39 | \#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) |
1423 | 56 | The static IP address reservation API now has an optional "mac" | ||
1424 | 57 | parameter. Specifying a MAC address here will link the new static IP | ||
1425 | 58 | to that MAC address. A DHCP host map will be created for the MAC | ||
1426 | 59 | address. No other IPs may be reserved for that MAC address until the | ||
1427 | 60 | current one is released. | ||
1428 | 61 | |||
1429 | 62 | Bug fix update | ||
1430 | 63 | -------------- | ||
1431 | 64 | |||
1432 | 65 | For full details see https://launchpad.net/maas/+milestone/1.7.1 | ||
1433 | 66 | |||
1434 | 67 | #1330765 If start_nodes() fails, it doesn't clean up after itself. | ||
1435 | 68 | #1373261 pserv.yaml rewrite breaks when previous generator URL uses IPv6 address | ||
1436 | 69 | #1386432 After update to the latest curtin that changes the log to install.log MAAS show's two installation logs | ||
1437 | 70 | #1386488 If rndc fails, you get an Internal Server Error page | ||
1438 | 71 | #1386502 No "failed" transition from "new" | ||
1439 | 72 | #1386914 twisted Unhandled Error when region can't reach upstream boot resource | ||
1440 | 73 | #1391139 Tagged VLAN on aliased NIC breaks migration 0099 | ||
1441 | 74 | #1391161 Failure: twisted.internet.error.ConnectionDone: Connection was closed cleanly. | ||
1442 | 75 | #1391411 metadata API signal() is releasing host maps at the end of installation | ||
1443 | 76 | #1391897 Network names with dots cause internal server error when on node pages | ||
1444 | 77 | #1394382 maas does not know about VM "paused" state | ||
1445 | 78 | #1396308 Removing managed interface causes maas to delete nodes | ||
1446 | 79 | #1397356 Disk Wiping fails if installation is not Ubuntu | ||
1447 | 80 | #1398405 MAAS UI reports storage size in Gibibytes (base 2) but is labeled GB - Gigabytes (base 10). | ||
1448 | 81 | #1399331 MAAS leaking sensitive information in ps ax output | ||
1449 | 82 | #1400849 Check Power State disappears after upgrade to 1.7 bzr 3312 | ||
1450 | 83 | #1401241 custom dd-tgz format images looked for in wrong path, so they don't work | ||
1451 | 84 | #1401983 Exception: deadlock detected | ||
1452 | 85 | #1403609 can not enlist chassis with maas admin node-group probe-and-enlist-mscm | ||
1453 | 86 | #1283106 MAAS allows the same subnet to be defined on two managed interfaces of the same cluster | ||
1454 | 87 | #1303925 commissioning fails silently if a node can't reach the region controller | ||
1455 | 88 | #1357073 power state changes are not reflected quickly enough in the UI | ||
1456 | 89 | #1360280 boot-source-selections api allows adding bogus and duplicated values | ||
1457 | 90 | #1368400 Can't power off nodes that are in Ready state but on | ||
1458 | 91 | #1370897 The node power monitoring service does not check nodes in parallel | ||
1459 | 92 | #1376024 gpg --batch [...]` error caused by race in BootSourceCacheService | ||
1460 | 93 | #1376716 AMT NUC stuck at boot prompt instead of powering down (no ACPI support in syslinux poweroff) | ||
1461 | 94 | #1378835 Config does not have a unique index on name | ||
1462 | 95 | #1379370 Consider removing transaction in claim_static_ip_addresses(). | ||
1463 | 96 | #1379556 Panicky log warning that is irrelevant | ||
1464 | 97 | #1381444 Misleading error message in log "Unknown power_type 'sm15k'" | ||
1465 | 98 | #1382166 Message disclosing image import necessary visible while not logged in | ||
1466 | 99 | #1382237 UnicodeEncodeError when unable to create host maps | ||
1467 | 100 | #1383231 Error message when trying to reserve the same static IP twice is unhelpful | ||
1468 | 101 | #1383237 Error message trying to reserve an IP address when no static range is defined is misleading | ||
1469 | 102 | #1384424 Seamicro Machines do not have Power Status Tracking | ||
1470 | 103 | #1384428 HP Moonshot Chassis Manager lacks power status monitoring | ||
1471 | 104 | #1384924 need to provide a better upgrade message for images on the cluster but not on the region | ||
1472 | 105 | #1386517 DHCP leases are not released at the end of commissioning and possibly enlistment | ||
1473 | 106 | #1387239 MAAS does not provide an API for reserving a static IP for a given MAC address | ||
1474 | 107 | #1387414 Race when registering new event type | ||
1475 | 108 | #1388033 Trying to reserve a static IP when no more IPs are available results in 503 Service Unavailable with no error text | ||
1476 | 109 | #1389602 Inconsistent behavior in the checks to delete a node | ||
1477 | 110 | #1389733 node listing does not update the status and power of nodes | ||
1478 | 111 | #1390144 Node 'releasing' should have a timeout | ||
1479 | 112 | #1391193 API error documentation | ||
1480 | 113 | #1391421 Names of custom boot-resources not visible in the web UI | ||
1481 | 114 | #1391891 Spurious test failure: TestDNSForwardZoneConfig_GetGenerateDirectives.test_returns_single_entry_for_tiny_network | ||
1482 | 115 | #1393423 PowerKVM / VIrsh import should allow you to specify a prefix to filter VM's to import | ||
1483 | 116 | #1393953 dd-format images fail to deploy | ||
1484 | 117 | #1400909 Networks are being autocreated like eth0-eth0 instead of maas-eth0 | ||
1485 | 118 | #1401349 Memory size changes to incorrect size when page is refreshed | ||
1486 | 119 | #1402237 Node event log queries are slow (over 1 second) | ||
1487 | 120 | #1402243 Nodes in 'Broken' state are being power queried constantly | ||
1488 | 121 | #1402736 clicking on zone link from node page - requested URL was not found on this server | ||
1489 | 122 | #1403043 Wrong top-level tab is selected when viewing a node | ||
1490 | 123 | #1381609 Misleading log message when a node has a MAC address not attached to a cluster interface | ||
1491 | 124 | #1386909 Misleading Error: Unable to identify boot image for (ubuntu/amd64/generic/trusty/local): cluster 'maas' does not have matching boot image. | ||
1492 | 125 | #1388373 Fresh image import of 3 archs displaying multiple rows for armhf and amd64 | ||
1493 | 126 | #1398159 TFTP into MAAS server to get pxelinux.0 causes unhandled error | ||
1494 | 127 | #1383651 Node.start() and Node.stop() raise MulltipleFailures unnecessarily | ||
1495 | 128 | #1383668 null" when releasing an IP address is confusing | ||
1496 | 129 | #1389416 Power querying for UCSM not working | ||
1497 | 130 | #1399676 UX bug: mac address on the nodes page should be the MAC address it pxe booted from | ||
1498 | 131 | #1399736 MAAS should display memory sizes in properly labeld base 2 units - MiB, GiB, etc. | ||
1499 | 132 | #1401643 Documentation has wrong pattern for user provided preseeds | ||
1500 | 133 | #1401707 Slow web performance (5+ minute response time) on MAAS with many nodes | ||
1501 | 134 | #1403609 Fix MSCM chassis enlistment. | ||
1502 | 135 | #1409952 Correctly parse MAC Address for Power8 VM enlistment. | ||
1503 | 136 | #1409852 Do not fail when trying to perform an IP Address Reservation. | ||
1504 | 137 | #1413030 OS and Release no longer populate on Add Node page | ||
1505 | 138 | #1414036 Trying to add an empty network crashes (AddrFormatError) | ||
1506 | 139 | |||
1528 | 140 | 40 | ||
1529 | 141 | 1.7.0 | 41 | 1.7.0 |
1994 | 142 | ===== | 42 | ----- |
1995 | 143 | 43 | ||
1996 | 144 | Important announcements | 44 | ### Important announcements |
1997 | 145 | ----------------------- | 45 | |
1998 | 146 | 46 | **Re-import your boot images** | |
1999 | 147 | **Re-import your boot images** | 47 | You must re-import your boot images, see below for details. |
2000 | 148 | You must re-import your boot images, see below for details. | 48 | |
2001 | 149 | 49 | **Update Curtin preseed files** | |
2002 | 150 | **Update Curtin preseed files** | 50 | Two changes were made to Curtin preseed files that need your attention if you made any customisations: |
2003 | 151 | Two changes were made to Curtin preseed files that need your attention | 51 | |
2004 | 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: |
2005 | 153 | 53 | ||
2006 | 154 | * The OS name must now appear in the filename. The new schema is shown | 54 | {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} |
2007 | 155 | here, each file pattern is tried in turn until a match is found:: | 55 | |
2008 | 156 | 56 | - 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: | |
2009 | 157 | {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}_{node_name} | 57 | |
2010 | 158 | {prefix}_{osystem}_{node_arch}_{node_subarch}_{release} | 58 | late_commands: |
2011 | 159 | {prefix}_{osystem}_{node_arch}_{node_subarch} | 59 | bonding_02: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"] |
2012 | 160 | {prefix}_{osystem}_{node_arch} | 60 | |
2013 | 161 | {prefix}_{osystem} | 61 | must now look like this: |
2014 | 162 | {prefix} | 62 | |
2015 | 163 | 63 | late_commands: | |
2016 | 164 | * If you are modifying ``/etc/network/interfaces`` in the preseed, it must be | 64 | zz_write_ifaces: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"] |
2017 | 165 | moved so it is processed last in ``late_commands`` since MAAS now writes | 65 | |
2018 | 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. |
2019 | 167 | 67 | ||
2020 | 168 | late_commands: | 68 | ### Major new features |
2021 | 169 | bonding_02: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"] | 69 | |
2022 | 170 | 70 | **Improved image downloading and reporting.** | |
2023 | 171 | must now look like this:: | 71 | MAAS 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. |
2024 | 172 | 72 | ||
2025 | 173 | late_commands: | 73 | This process is also completely controllable using the API. |
2026 | 174 | zz_write_ifaces: ["curtin", "in-target", "--", "wget", "-O", "/etc/network/interfaces", "http://[...snip...]"] | 74 | |
2027 | 175 | 75 | > **note** | |
2028 | 176 | The leading ``zz`` ensures the command sorts to the end of the | 76 | |
2029 | 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. |
2030 | 178 | 78 | > | |
2031 | 179 | 79 | > This means that the first thing to do after upgrading to 1.7 is go to the Images tab and re-import the images. | |
2032 | 180 | Major new features | 80 | |
2033 | 181 | ------------------ | 81 | **Increased robustness.** |
2034 | 182 | 82 | A 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. | |
2035 | 183 | **Improved image downloading and reporting.** | 83 | |
2036 | 184 | MAAS boot images are now downloaded centrally by the region controller | 84 | When 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. |
2037 | 185 | and disseminated to all registered cluster controllers. This change includes | 85 | |
2038 | 186 | a new web UI under the `Images` tab that allows the admin to select | 86 | The 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. |
2039 | 187 | which images to import and shows the progress of the ongoing download. | 87 | |
2040 | 188 | This completely replaces any file-based configuration that used to take | 88 | **RPC security.** |
2041 | 189 | place on cluster controllers. The cluster page now shows whether it has | 89 | As 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: |
2042 | 190 | synchronised all the images from the region controller. | 90 | |
2043 | 191 | 91 | 1. After upgrading the region controller, view /var/lib/maas/secret (it's text) and copy it. | |
2044 | 192 | This process is also completely controllable using the API. | 92 | 2. On each cluster, run: |
2045 | 193 | 93 | ||
2046 | 194 | .. Note:: | 94 | > sudo -u maas maas-provision install-shared-secret |
2047 | 195 | Unfortunately due to a format change in the way images are stored, it | 95 | |
2048 | 196 | was not possible to migrate previously downloaded images to the new region | 96 | 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. |
2049 | 197 | storage. The cluster(s) will still be able to use the existing images, | 97 | |
2050 | 198 | however the region controller will be unaware of them until an import | 98 | That's it; the upgraded cluster controller will find the secret without needing to be told. |
2051 | 199 | is initiated. When the import is finished, the cluster(s) will remove | 99 | |
2052 | 200 | older image resources. | 100 | **RPC connections.** |
2053 | 201 | 101 | Each 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. | |
2054 | 202 | This means that the first thing to do after upgrading to 1.7 is go to the | 102 | |
2055 | 203 | `Images` tab and re-import the images. | 103 | **Node event log.** |
2056 | 204 | 104 | For 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. | |
2057 | 205 | **Increased robustness.** | 105 | |
2058 | 206 | A large amount of effort has been given to ensuring that MAAS remains | 106 | **IPv6.** |
2059 | 207 | robust in the face of adversity. An updated node state model has been | 107 | It is now possible to deploy Ubuntu nodes that have IPv6 enabled. See ipv6 for more details. |
2060 | 208 | implemented that takes into account more of the situations in which a | 108 | |
2061 | 209 | node can be found including any failures at each stage. | 109 | **Removal of Celery and RabbitMQ.** |
2062 | 210 | 110 | While 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. | |
2063 | 211 | When a node is getting deployed, it is now monitored to check that each | 111 | |
2064 | 212 | stage is reached in a timely fashion; if it does not then it is marked | 112 | Since a constant connection is maintained, as a side effect the web UI now shows whether each cluster is connected or not. |
2065 | 213 | as failed. | 113 | |
2066 | 214 | 114 | **Support for other OSes.** | |
2067 | 215 | The core power driver was updated to check the state of the power on each | 115 | Non-Ubuntu OSes are fully supported now. This includes: |
2068 | 216 | node and is reported in the web UI and API. The core driver now also | 116 | - Windows |
2069 | 217 | handles retries when changing the power state of hardware, removing the | 117 | - Centos |
2070 | 218 | requirement that each power template handle it individually. | 118 | - SuSE |
2071 | 219 | 119 | ||
2072 | 220 | **RPC security.** | 120 | **Custom Images.** |
2073 | 221 | As a step towards mutually verified TLS connections between MAAS's | 121 | MAAS 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. |
2074 | 222 | components, 1.7 introduces a simple shared-secret mechanism to | 122 | |
2075 | 223 | authenticate the region with the clusters and vice-versa. For those | 123 | **maas-proxy.** |
2076 | 224 | clusters that run on the same machine as the region controller (which | 124 | MAAS 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. |
2077 | 225 | will account for most people), everything will continue to work | 125 | |
2078 | 226 | without intervention. However, if you're running a cluster on a | 126 | ### Minor notable changes |
2079 | 227 | separate machine, you must install the secret: | 127 | |
2080 | 228 | 128 | **Better handling of networks.** | |
2081 | 229 | 1. After upgrading the region controller, view /var/lib/maas/secret | 129 | All 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. |
2082 | 230 | (it's text) and copy it. | 130 | |
2083 | 231 | 131 | > **note** | |
2084 | 232 | 2. On each cluster, run: | 132 | |
2085 | 233 | 133 | > 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: | |
2086 | 234 | sudo -u maas maas-provision install-shared-secret | 134 | > |
2087 | 235 | 135 | > sudo maas <profile> maas set-config name=enable_dhcp_discovery_on_unconfigured_interfaces value=False | |
2088 | 236 | You'll be prompted for the secret; paste it in and press enter. It | 136 | |
2089 | 237 | is a password prompt, so the secret will not be echoed back to you. | 137 | **Improved logging.** |
2090 | 238 | 138 | A 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. | |
2091 | 239 | That's it; the upgraded cluster controller will find the secret | 139 | |
2092 | 240 | without needing to be told. | 140 | On the clusters, pserv.log is now less chatty and contains only errors. On the region controller appservers, maas-django.log contains only appserver errors. |
2093 | 241 | 141 | ||
2094 | 242 | **RPC connections.** | 142 | **Static IP selection.** |
2095 | 243 | Each cluster maintains a persistent connection to each region | 143 | The API was extended so that specific IPs can be pre-allocated for network interfaces on nodes and for user-allocated IPs. |
2096 | 244 | controller process that's running. The ports on which the region is | 144 | |
2097 | 245 | listening are all high-numbered, and they are allocated randomly by | 145 | **Pronounceable random hostnames.** |
2098 | 246 | the OS. In a future release of MAAS we will narrow this down. For now, | 146 | The 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'. |
2099 | 247 | each cluster controller needs unfiltered access to each machine in the | 147 | |
2100 | 248 | region on all high-numbered TCP ports. | 148 | ### Known Problems & Workarounds |
2101 | 249 | 149 | ||
2102 | 250 | **Node event log.** | 150 | **Upgrade issues** |
2103 | 251 | For every major event on nodes, it is now logged in a node-specific log. | 151 | There 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). |
2104 | 252 | This includes events such as power changes, deployments and any failures. | 152 | |
2105 | 253 | 153 | **Split Region/Cluster set-ups** | |
2106 | 254 | **IPv6.** | 154 | If 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. |
2107 | 255 | It is now possible to deploy Ubuntu nodes that have IPv6 enabled. | 155 | |
2108 | 256 | See :doc:`ipv6` for more details. | 156 | **Private boot streams** |
2109 | 257 | 157 | If 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)) | |
2110 | 258 | **Removal of Celery and RabbitMQ.** | 158 | |
2111 | 259 | While Celery was found to be very reliable it ultimately did not suit | 159 | **Concurrency issues** |
2112 | 260 | the project's requirements as it is a largely fire-and-forget mechanism. | 160 | Concurrency 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. |
2113 | 261 | Additionally it was another moving part that caused some headaches for | 161 | |
2114 | 262 | users and admins alike, so the decision was taken to remove it and implement | 162 | **Destroying a Juju environment** |
2115 | 263 | a custom communications mechanism between the region controller and cluster | 163 | When 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)) |
2116 | 264 | controllers. The new mechanism is bidirectional and allowed the complex | 164 | |
2117 | 265 | interactions to take place that are required as part of the robustness | 165 | **AMT power control** |
2118 | 266 | improvements. | 166 | A few AMT-related issues remain, with workarounds: |
2119 | 267 | 167 | ||
2120 | 268 | Since a constant connection is maintained, as a side effect the web UI now | 168 | > - 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) |
2121 | 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) |
2122 | 270 | 170 | > - 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) | |
2123 | 271 | **Support for other OSes.** | 171 | |
2124 | 272 | Non-Ubuntu OSes are fully supported now. This includes: | 172 | **Disk wiping** |
2125 | 273 | - Windows | 173 | If 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)) |
2126 | 274 | - Centos | 174 | |
2127 | 275 | - SuSE | 175 | **BIND with DNSSEC** |
2128 | 276 | 176 | If 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) | |
2129 | 277 | **Custom Images.** | 177 | |
2130 | 278 | MAAS now supports the deployment of Custom Images. Custom images can be | 178 | **Boot source selections on the API** |
2131 | 279 | uploaded via the API. The usage of custom images allows the deployment of | 179 | Use 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. |
2132 | 280 | other Ubuntu Flavors, such as Ubuntu Desktop. | 180 | |
2133 | 281 | 181 | **Disabling DNS** | |
2134 | 282 | **maas-proxy.** | 182 | Disabling DNS may not work (bug [1383768](https://bugs.launchpad.net/maas/+bug/1383768)) |
2135 | 283 | MAAS now uses maas-proxy as the default proxy solution instead of | 183 | |
2136 | 284 | squid-deb-proxy. On a fresh install, MAAS will use maas-proxy by default. | 184 | **Stale DNS zone files** |
2137 | 285 | On upgrades from previous releases, MAAS will install maas-proxy instead of | 185 | Stale DNS zone files may be left behind if the MAAS domainname is changed (bug [1383329](https://bugs.launchpad.net/maas/+bug/1383329)) |
2138 | 286 | squid-deb-proxy. | 186 | |
2139 | 287 | 187 | ### Major bugs fixed in this release | |
2140 | 288 | Minor notable changes | 188 | |
2141 | 289 | --------------------- | 189 | See <https://launchpad.net/maas/+milestone/1.7.0> for full details. |
2142 | 290 | 190 | ||
2143 | 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" |
2144 | 292 | All networks referred to by cluster interfaces are now automatically | 192 | |
2145 | 293 | registered on the Network page. Any node network interfaces are | 193 | \#1087183 MaaS cloud-init configuration specifies 'manage\_etc\_hosts: localhost' |
2146 | 294 | automatically linked to the relevant Network. | 194 | |
2147 | 295 | 195 | \#1328351 ConstipationError: When the cluster runs the "import boot images" task it blocks other tasks | |
2148 | 296 | .. Note:: | 196 | |
2149 | 297 | Commissioning currently requires an IP address to be available for each | 197 | \#1342117 CLI command to set up node-group-interface fails with /usr/lib/python2.7/dist-packages/maascli/\_\_main\_\_.py: error: u'name' |
2150 | 298 | network interface on a network that MAAS manages; this allows MAAS to | 198 | |
2151 | 299 | auto-populate its networks database. In general you should use a | 199 | \#1349254 Duplicate FQDN can be configured on MAAS via CLI or API |
2152 | 300 | well-sized network (/16 recommended if you will be using containers and | 200 | |
2153 | 301 | VMs) and dynamic pool. If this feature risks causing IP exhaustion for | 201 | \#1352575 BMC password showing in the apache2 logs |
2154 | 302 | your deployment and you do not need the auto-populate functionality, you | 202 | |
2155 | 303 | can disable it by running the following command on your region controller:: | 203 | \#1355534 UnknownPowerType traceback in appserver log |
2156 | 304 | 204 | ||
2157 | 305 | sudo maas <profile> maas set-config name=enable_dhcp_discovery_on_unconfigured_interfaces value=False | 205 | \#1363850 Auto-enlistment not reporting power parameters |
2158 | 306 | 206 | ||
2159 | 307 | **Improved logging.** | 207 | \#1363900 Dev server errors while trying to write to '/var/lib/maas' |
2160 | 308 | A total overhaul of where logging is produced was undertaken, and now | 208 | |
2161 | 309 | all the main events in MAAS are selectively reported to syslog with the | 209 | \#1363999 Not assigning static IP addresses |
2162 | 310 | "maas" prefix from both the region and cluster controllers alike. If MAAS | 210 | |
2163 | 311 | is installed using the standard Ubuntu packaging, its syslog entries are | 211 | \#1364481 http 500 error doesn't contain a stack trace |
2164 | 312 | redirected to /var/log/maas/maas.log. | 212 | |
2165 | 313 | 213 | \#1364993 500 error when trying to acquire a commissioned node (AddrFormatError: failed to detect a valid IP address from None) | |
2166 | 314 | On the clusters, pserv.log is now less chatty and contains only errors. | 214 | |
2167 | 315 | On the region controller appservers, maas-django.log contains only appserver | 215 | \#1365130 django-admin prints spurious messages to stdout, breaking scripts |
2168 | 316 | errors. | 216 | |
2169 | 317 | 217 | \#1365850 DHCP scan using cluster interface name as network interface? | |
2170 | 318 | **Static IP selection.** | 218 | |
2171 | 319 | The API was extended so that specific IPs can be pre-allocated for network | 219 | \#1366172 NUC does not boot after power off/power on |
2172 | 320 | interfaces on nodes and for user-allocated IPs. | 220 | |
2173 | 321 | 221 | \#1366212 Large dhcp leases file leads to tftp timeouts | |
2174 | 322 | **Pronounceable random hostnames.** | 222 | |
2175 | 323 | The old auto-generated 5-letter names were replaced with a pseudo-random | 223 | \#1366652 Leaking temporary directories |
2176 | 324 | name that is produced from a dictionary giving names of the form | 224 | |
2177 | 325 | 'adjective-noun'. | 225 | \#1368269 internal server error when deleting a node |
2178 | 326 | 226 | ||
2179 | 327 | 227 | \#1368590 Power actions are not serialized. | |
2180 | 328 | Known Problems & Workarounds | 228 | |
2181 | 329 | ---------------------------- | 229 | \#1370534 Recurrent update of the power state of nodes crashes if the connection to the BMC fails. |
2182 | 330 | 230 | ||
2183 | 331 | **Upgrade issues** | 231 | \#1370958 excessive pserv logging |
2184 | 332 | There may be upgrade issues for users currently on MAAS 1.5 and 1.6; while we | 232 | |
2185 | 333 | have attempted to reproduce and address all the issues reported, some bugs | 233 | \#1372767 Twisted web client does not support IPv6 address |
2186 | 334 | remain inconclusive. We recommend a full, tested backup of the MAAS servers | 234 | |
2187 | 335 | before attempting the upgrade to 1.7. If you do encounter issues, please file | 235 | \#1372944 Twisted web client fails looking up IPv6 address hostname |
2188 | 336 | these and flag them to the attention of the MAAS team and we will address them | 236 | |
2189 | 337 | in point-releases. See bugs `1381058`_, `1382266`_, `1379890`_, `1379532`_, | 237 | \#1373031 Cannot register cluster |
2190 | 338 | and `1379144`_. | 238 | |
2191 | 339 | 239 | \#1373103 compose\_curtin\_network\_preseed breaks installation of all other operating systems | |
2192 | 340 | .. _1381058: | 240 | |
2193 | 341 | https://launchpad.net/bugs/1381058 | 241 | \#1373368 Conflicting power actions being dropped on the floor can result in leaving a node in an inconsistent state |
2194 | 342 | .. _1382266: | 242 | |
2195 | 343 | https://launchpad.net/bugs/1382266 | 243 | \#1373699 Cluster Listing Page lacks feedback about the images each cluster has |
2196 | 344 | .. _1379890: | 244 | |
2197 | 345 | https://launchpad.net/bugs/1379890 | 245 | \#1374102 No retries for AMT power? |
2198 | 346 | .. _1379532: | 246 | |
2199 | 347 | https://launchpad.net/bugs/1379532 | 247 | \#1375980 Nodes failed to transition out of "New" state on bulk commission |
2200 | 348 | .. _1379144: | 248 | |
2201 | 349 | https://launchpad.net/bugs/1379144 | 249 | \#1376023 After performing bulk action on maas nodes, Internal Server Error |
2202 | 350 | 250 | ||
2203 | 351 | **Split Region/Cluster set-ups** | 251 | \#1376888 Nodes can't be deleted if DHCP management is off. |
2204 | 352 | If you site your cluster on a separate host to the region, it needs a | 252 | |
2205 | 353 | security key to be manually installed by running | 253 | \#1377099 Bulk operation leaves nodes in inconsistent state |
2206 | 354 | ``maas-provision install-shared-secret`` on the cluster host. | 254 | |
2207 | 355 | 255 | \#1379209 When a node has multiple interfaces on a network MAAS manages, MAAS assigns static IP addresses to all of them | |
2208 | 356 | **Private boot streams** | 256 | |
2209 | 357 | If you had private boot image stream information configured in MAAS 1.5 or | 257 | \#1379744 Cluster registration is fragile and insecure |
2210 | 358 | 1.6, upgrading to 1.7 will not take that into account and it will need to be | 258 | |
2211 | 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 |
2212 | 360 | 260 | ||
2213 | 361 | .. _1379890: | 261 | \#1381605 Not all the DNS records are being added when deploying multiple nodes |
2214 | 362 | https://launchpad.net/bugs/1379890 | 262 | |
2215 | 363 | 263 | \#1012954 If a power script fails, there is no UI feedback | |
2216 | 364 | **Concurrency issues** | 264 | |
2217 | 365 | Concurrency issues expose us to races when simultaneous operations are | 265 | \#1186196 "Starting a node" has different meanings in the UI and in the API. |
2218 | 366 | triggered. This is the source of many hard to reproduce issues which will | 266 | |
2219 | 367 | require us to change the default database isolation level. We intend to address | 267 | \#1237215 maas and curtin do not indicate failure reasonably |
2220 | 368 | this in the first point release of 1.7. | 268 | |
2221 | 369 | 269 | \#1273222 MAAS doesn't check return values of power actions | |
2222 | 370 | **Destroying a Juju environment** | 270 | |
2223 | 371 | When attempting to "juju destroy" an environment, nodes must be in the DEPLOYED | 271 | \#1288502 archive and proxy settings not honoured for commissioning |
2224 | 372 | state; otherwise, the destroy will fail. You should wait for all in-progress | 272 | |
2225 | 373 | actions on the MAAS cluster to conclude before issuing the command. (bug | 273 | \#1316919 Checks don't exist to confirm a node will actually boot |
2226 | 374 | `1381619`_) | 274 | |
2227 | 375 | 275 | \#1321885 IPMI detection and automatic setting fail in ubuntu 14.04 maas | |
2228 | 376 | .. _1381619: | 276 | |
2229 | 377 | https://launchpad.net/bugs/1381619 | 277 | \#1325610 node marked "Ready" before poweroff complete |
2230 | 378 | 278 | ||
2231 | 379 | **AMT power control** | 279 | \#1340188 unallocated node started manually, causes AssertionError for purpose poweroff |
2232 | 380 | A few AMT-related issues remain, with workarounds: | 280 | |
2233 | 381 | 281 | \#1341118 No feedback when IPMI credentials fail | |
2234 | 382 | * Commissioning NUC reboots instead of shutting down (bug `1368685`_). There | 282 | |
2235 | 383 | is `a workaround in the power template`_ | 283 | \#1341121 No feedback to user when cluster is not running |
2236 | 384 | 284 | ||
2237 | 385 | * MAAS (amttool) cannot control AMT version > 8. See `workaround described in | 285 | \#1341581 power state is not represented in api and ui |
2238 | 386 | bug 1331214`_ | 286 | |
2239 | 387 | 287 | \#1341800 MAAS doesn't support soft power off through the API | |
2240 | 388 | * AMT NUC stuck at boot prompt instead of powering down (no ACPI support in | 288 | |
2241 | 389 | syslinux poweroff) (bug `1376716`_). See the `ACPI-only workaround`_ | 289 | \#1344177 hostnames can't be changed while a node is acquired |
2242 | 390 | 290 | ||
2243 | 391 | .. _1368685: | 291 | \#1347518 Confusing error message when API key is wrong |
2244 | 392 | https://bugs.launchpad.net/maas/+bug/1368685 | 292 | |
2245 | 393 | .. _a workaround in the power template: | 293 | \#1349496 Unable to request a specific static IP on the API |
2246 | 394 | https://bugs.launchpad.net/maas/+bug/1368685/comments/8 | 294 | |
2247 | 395 | .. _workaround described in bug 1331214: | 295 | \#1349736 MAAS logging is too verbose and not very useful |
2248 | 396 | https://bugs.launchpad.net/maas/+bug/1331214/comments/18 | 296 | |
2249 | 397 | .. _1376716: | 297 | \#1349917 guess\_server\_address() can return IPAddress or hostname |
2250 | 398 | https://bugs.launchpad.net/maas/+bug/1376716 | 298 | |
2251 | 399 | .. _ACPI-only workaround: | 299 | \#1350103 No support for armhf/keystone architecture |
2252 | 400 | https://bugs.launchpad.net/maas/+bug/1376716/comments/12 | 300 | |
2253 | 401 | 301 | \#1350856 Can't constrain acquisition of nodes by not having a tag | |
2254 | 402 | 302 | ||
2255 | 403 | **Disk wiping** | 303 | \#1356880 MAAS shouldn't allow changing the hostname of a deployed node |
2256 | 404 | If you enable disk wiping, juju destroy-environment may fail for you. The | 304 | |
2257 | 405 | current workaround is to wait and re-issue the command. This will be fixed in | 305 | \#1357714 Virsh power driver does not seem to work at all |
2258 | 406 | future versions of MAAS & Juju. (bug `1386327`_) | 306 | |
2259 | 407 | 307 | \#1358859 Commissioning output xml is hard to understand, would be nice to have yaml as an output option. | |
2260 | 408 | .. _1386327: | 308 | |
2261 | 409 | https://bugs.launchpad.net/maas/+bug/1386327 | 309 | \#1359169 MAAS should handle invalid consumers gracefully |
2262 | 410 | 310 | ||
2263 | 411 | **BIND with DNSSEC** | 311 | \#1359822 Gateway is missing in network definition |
2264 | 412 | If you are using BIND with a forwarder that uses DNSSEC and have not | 312 | |
2265 | 413 | configured certificates, you will need to explicitly disable that feature in | 313 | \#1363913 Impossible to remove last MAC from network in UI |
2266 | 414 | your BIND configuration (1384334) | 314 | |
2267 | 415 | 315 | \#1364228 Help text for node hostname is wrong | |
2268 | 416 | .. _1384334: | 316 | |
2269 | 417 | https://bugs.launchpad.net/maas/+bug/1384334 | 317 | \#1364591 MAAS Archive Mirror does not respect non-default port |
2270 | 418 | 318 | ||
2271 | 419 | **Boot source selections on the API** | 319 | \#1365616 Non-admin access to cluster controller config |
2272 | 420 | Use of API to change image selections can leave DB in a bad state | 320 | |
2273 | 421 | (bug `1376812`_). It can be fixed by issuing direct database updates. | 321 | \#1365619 DNS should be an optional field in the network definition |
2274 | 422 | 322 | ||
2275 | 423 | .. _1376812: | 323 | \#1365776 commissioning results view for a node also shows installation results |
2276 | 424 | https://bugs.launchpad.net/maas/+bug/1376812 | 324 | |
2277 | 425 | 325 | \#1366812 Old boot resources are not being removed on clusters | |
2278 | 426 | **Disabling DNS** | 326 | |
2279 | 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 |
2280 | 428 | 328 | ||
2281 | 429 | .. _1383768: | 329 | \#1373580 [SRU] Glen m700 cartridge list as ARM64/generic after enlist |
2282 | 430 | https://bugs.launchpad.net/maas/+bug/1383768 | 330 | |
2283 | 431 | 331 | \#1373723 Releasing a node without power parameters ends up in not being able to release a node | |
2284 | 432 | **Stale DNS zone files** | 332 | |
2285 | 433 | Stale DNS zone files may be left behind if the MAAS domainname is changed | 333 | \#1233158 no way to get power parameters in api |
2286 | 434 | (bug `1383329`_) | 334 | |
2287 | 435 | 335 | \#1319854 maas login tells you you're logged in successfully when you're not | |
2288 | 436 | .. _1383329: | 336 | |
2289 | 437 | https://bugs.launchpad.net/maas/+bug/1383329 | 337 | \#1368480 Need API to gather image metadata across all of MAAS |
2290 | 438 | 338 | ||
2291 | 439 | 339 | \#1281406 Disk/memory space on Node edit page have no units | |
2292 | 440 | 340 | ||
2293 | 441 | Major bugs fixed in this release | 341 | \#1299231 MAAS DHCP/DNS can't manage more than a /16 network |
2294 | 442 | -------------------------------- | 342 | |
2295 | 443 | 343 | \#1357381 maas-region-admin createadmin shows error if not params given | |
2296 | 444 | See https://launchpad.net/maas/+milestone/1.7.0 for full details. | 344 | |
2297 | 445 | 345 | \#1376393 powerkvm boot loader installs even when not needed | |
2298 | 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 | |
2299 | 447 | 347 | \#1287224 MAAS random generated hostnames are not pronounceable | |
2300 | 448 | #1087183 MaaS cloud-init configuration specifies 'manage_etc_hosts: localhost' | 348 | |
2301 | 449 | 349 | \#1348364 non-maas managed subnets cannot query maas DNS | |
1838 | 450 | #1328351 ConstipationError: When the cluster runs the "import boot images" task it blocks other tasks | ||
1839 | 451 | |||
1840 | 452 | #1342117 CLI command to set up node-group-interface fails with /usr/lib/python2.7/dist-packages/maascli/__main__.py: error: u'name' | ||
1841 | 453 | |||
1842 | 454 | #1349254 Duplicate FQDN can be configured on MAAS via CLI or API | ||
1843 | 455 | |||
1844 | 456 | #1352575 BMC password showing in the apache2 logs | ||
1845 | 457 | |||
1846 | 458 | #1355534 UnknownPowerType traceback in appserver log | ||
1847 | 459 | |||
1848 | 460 | #1363850 Auto-enlistment not reporting power parameters | ||
1849 | 461 | |||
1850 | 462 | #1363900 Dev server errors while trying to write to '/var/lib/maas' | ||
1851 | 463 | |||
1852 | 464 | #1363999 Not assigning static IP addresses | ||
1853 | 465 | |||
1854 | 466 | #1364481 http 500 error doesn't contain a stack trace | ||
1855 | 467 | |||
1856 | 468 | #1364993 500 error when trying to acquire a commissioned node (AddrFormatError: failed to detect a valid IP address from None) | ||
1857 | 469 | |||
1858 | 470 | #1365130 django-admin prints spurious messages to stdout, breaking scripts | ||
1859 | 471 | |||
1860 | 472 | #1365850 DHCP scan using cluster interface name as network interface? | ||
1861 | 473 | |||
1862 | 474 | #1366172 NUC does not boot after power off/power on | ||
1863 | 475 | |||
1864 | 476 | #1366212 Large dhcp leases file leads to tftp timeouts | ||
1865 | 477 | |||
1866 | 478 | #1366652 Leaking temporary directories | ||
1867 | 479 | |||
1868 | 480 | #1368269 internal server error when deleting a node | ||
1869 | 481 | |||
1870 | 482 | #1368590 Power actions are not serialized. | ||
1871 | 483 | |||
1872 | 484 | #1370534 Recurrent update of the power state of nodes crashes if the connection to the BMC fails. | ||
1873 | 485 | |||
1874 | 486 | #1370958 excessive pserv logging | ||
1875 | 487 | |||
1876 | 488 | #1372767 Twisted web client does not support IPv6 address | ||
1877 | 489 | |||
1878 | 490 | #1372944 Twisted web client fails looking up IPv6 address hostname | ||
1879 | 491 | |||
1880 | 492 | #1373031 Cannot register cluster | ||
1881 | 493 | |||
1882 | 494 | #1373103 compose_curtin_network_preseed breaks installation of all other operating systems | ||
1883 | 495 | |||
1884 | 496 | #1373368 Conflicting power actions being dropped on the floor can result in leaving a node in an inconsistent state | ||
1885 | 497 | |||
1886 | 498 | #1373699 Cluster Listing Page lacks feedback about the images each cluster has | ||
1887 | 499 | |||
1888 | 500 | #1374102 No retries for AMT power? | ||
1889 | 501 | |||
1890 | 502 | #1375980 Nodes failed to transition out of "New" state on bulk commission | ||
1891 | 503 | |||
1892 | 504 | #1376023 After performing bulk action on maas nodes, Internal Server Error | ||
1893 | 505 | |||
1894 | 506 | #1376888 Nodes can't be deleted if DHCP management is off. | ||
1895 | 507 | |||
1896 | 508 | #1377099 Bulk operation leaves nodes in inconsistent state | ||
1897 | 509 | |||
1898 | 510 | #1379209 When a node has multiple interfaces on a network MAAS manages, MAAS assigns static IP addresses to all of them | ||
1899 | 511 | |||
1900 | 512 | #1379744 Cluster registration is fragile and insecure | ||
1901 | 513 | |||
1902 | 514 | #1380932 MAAS does not cope with changes of the dhcp daemons | ||
1903 | 515 | |||
1904 | 516 | #1381605 Not all the DNS records are being added when deploying multiple nodes | ||
1905 | 517 | |||
1906 | 518 | #1012954 If a power script fails, there is no UI feedback | ||
1907 | 519 | |||
1908 | 520 | #1186196 "Starting a node" has different meanings in the UI and in the API. | ||
1909 | 521 | |||
1910 | 522 | #1237215 maas and curtin do not indicate failure reasonably | ||
1911 | 523 | |||
1912 | 524 | #1273222 MAAS doesn't check return values of power actions | ||
1913 | 525 | |||
1914 | 526 | #1288502 archive and proxy settings not honoured for commissioning | ||
1915 | 527 | |||
1916 | 528 | #1316919 Checks don't exist to confirm a node will actually boot | ||
1917 | 529 | |||
1918 | 530 | #1321885 IPMI detection and automatic setting fail in ubuntu 14.04 maas | ||
1919 | 531 | |||
1920 | 532 | #1325610 node marked "Ready" before poweroff complete | ||
1921 | 533 | |||
1922 | 534 | #1340188 unallocated node started manually, causes AssertionError for purpose poweroff | ||
1923 | 535 | |||
1924 | 536 | #1341118 No feedback when IPMI credentials fail | ||
1925 | 537 | |||
1926 | 538 | #1341121 No feedback to user when cluster is not running | ||
1927 | 539 | |||
1928 | 540 | #1341581 power state is not represented in api and ui | ||
1929 | 541 | |||
1930 | 542 | #1341800 MAAS doesn't support soft power off through the API | ||
1931 | 543 | |||
1932 | 544 | #1344177 hostnames can't be changed while a node is acquired | ||
1933 | 545 | |||
1934 | 546 | #1347518 Confusing error message when API key is wrong | ||
1935 | 547 | |||
1936 | 548 | #1349496 Unable to request a specific static IP on the API | ||
1937 | 549 | |||
1938 | 550 | #1349736 MAAS logging is too verbose and not very useful | ||
1939 | 551 | |||
1940 | 552 | #1349917 guess_server_address() can return IPAddress or hostname | ||
1941 | 553 | |||
1942 | 554 | #1350103 No support for armhf/keystone architecture | ||
1943 | 555 | |||
1944 | 556 | #1350856 Can't constrain acquisition of nodes by not having a tag | ||
1945 | 557 | |||
1946 | 558 | #1356880 MAAS shouldn't allow changing the hostname of a deployed node | ||
1947 | 559 | |||
1948 | 560 | #1357714 Virsh power driver does not seem to work at all | ||
1949 | 561 | |||
1950 | 562 | #1358859 Commissioning output xml is hard to understand, would be nice to have yaml as an output option. | ||
1951 | 563 | |||
1952 | 564 | #1359169 MAAS should handle invalid consumers gracefully | ||
1953 | 565 | |||
1954 | 566 | #1359822 Gateway is missing in network definition | ||
1955 | 567 | |||
1956 | 568 | #1363913 Impossible to remove last MAC from network in UI | ||
1957 | 569 | |||
1958 | 570 | #1364228 Help text for node hostname is wrong | ||
1959 | 571 | |||
1960 | 572 | #1364591 MAAS Archive Mirror does not respect non-default port | ||
1961 | 573 | |||
1962 | 574 | #1365616 Non-admin access to cluster controller config | ||
1963 | 575 | |||
1964 | 576 | #1365619 DNS should be an optional field in the network definition | ||
1965 | 577 | |||
1966 | 578 | #1365776 commissioning results view for a node also shows installation results | ||
1967 | 579 | |||
1968 | 580 | #1366812 Old boot resources are not being removed on clusters | ||
1969 | 581 | |||
1970 | 582 | #1367455 MAC address for node's IPMI is reversed looked up to yield IP address using case sensitive comparison | ||
1971 | 583 | |||
1972 | 584 | #1373580 [SRU] Glen m700 cartridge list as ARM64/generic after enlist | ||
1973 | 585 | |||
1974 | 586 | #1373723 Releasing a node without power parameters ends up in not being able to release a node | ||
1975 | 587 | |||
1976 | 588 | #1233158 no way to get power parameters in api | ||
1977 | 589 | |||
1978 | 590 | #1319854 `maas login` tells you you're logged in successfully when you're not | ||
1979 | 591 | |||
1980 | 592 | #1368480 Need API to gather image metadata across all of MAAS | ||
1981 | 593 | |||
1982 | 594 | #1281406 Disk/memory space on Node edit page have no units | ||
1983 | 595 | |||
1984 | 596 | #1299231 MAAS DHCP/DNS can't manage more than a /16 network | ||
1985 | 597 | |||
1986 | 598 | #1357381 maas-region-admin createadmin shows error if not params given | ||
1987 | 599 | |||
1988 | 600 | #1376393 powerkvm boot loader installs even when not needed | ||
1989 | 601 | |||
1990 | 602 | #1287224 MAAS random generated hostnames are not pronounceable | ||
1991 | 603 | |||
1992 | 604 | #1348364 non-maas managed subnets cannot query maas DNS | ||
1993 | 605 | |||
2302 | 606 | 350 | ||
2303 | 607 | 1.6.1 | 351 | 1.6.1 |
2314 | 608 | ===== | 352 | ----- |
2315 | 609 | 353 | ||
2316 | 610 | Bug fix update | 354 | ### Bug fix update |
2317 | 611 | -------------- | 355 | |
2318 | 612 | 356 | - 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. | |
2309 | 613 | - Auto-link node MACs to Networks (LP: #1341619) | ||
2310 | 614 | MAAS will now auto-create a Network from a cluster interface, and | ||
2311 | 615 | if an active lease exists for a node's MAC then it will be linked to | ||
2312 | 616 | that Network. | ||
2313 | 617 | |||
2319 | 618 | 357 | ||
2320 | 619 | 1.6.0 | 358 | 1.6.0 |
2431 | 620 | ===== | 359 | ----- |
2432 | 621 | 360 | ||
2433 | 622 | Special notice: | 361 | Special notice: |
2434 | 623 | Cluster interfaces now have static IP ranges in order to give nodes stable | 362 | Cluster 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. |
2435 | 624 | IP addresses. You need to set the range in each interface to turn on this | 363 | |
2436 | 625 | feature. See below for details. | 364 | ### Major new features |
2437 | 626 | 365 | ||
2438 | 627 | 366 | IP addresses overhaul. | |
2439 | 628 | Major new features | 367 | This 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. |
2440 | 629 | ------------------ | 368 | |
2441 | 630 | 369 | Currently, 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. | |
2442 | 631 | IP addresses overhaul. | 370 | |
2443 | 632 | This release contains a total reworking of IP address allocation. You can | 371 | You can also use the API to [reserve IP addresses](http://maas.ubuntu.com/docs1.6/api.html#ip-addresses) on a per-user basis. |
2444 | 633 | now define a separate "static" range in each cluster interface configuration | 372 | |
2445 | 634 | that is separate from the DHCP server's dynamic range. Any node in use by | 373 | Support for additional OSes. |
2446 | 635 | a user will receive an IP address from the static range that is guaranteed | 374 | MAAS 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. |
2447 | 636 | not to change during its allocated lifetime. Previously, this was at the | 375 | |
2448 | 637 | whim of the DHCP server despite MAAS placing host maps in its configuration. | 376 | ### Minor notable changes |
2449 | 638 | 377 | ||
2450 | 639 | Currently, dynamic IP addresses will continue to receive DNS entries so as | 378 | DNS entries |
2451 | 640 | to maintain backward compatibility with installations being upgraded from | 379 | In 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. |
2452 | 641 | 1.5. However, this will be changed in a future release to only give | 380 | |
2453 | 642 | DNS entries to static IPs. | 381 | Only nodes that are allocated to a user and started will receive "A" record entries. Unallocated nodes no longer have DNS entries. |
2454 | 643 | 382 | ||
2455 | 644 | You can also use the API to `reserve IP addresses`_ on a per-user basis. | 383 | Removal of bootresources.yaml |
2456 | 645 | 384 | The 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. | |
2457 | 646 | .. _reserve IP addresses: http://maas.ubuntu.com/docs1.6/api.html#ip-addresses | 385 | |
2458 | 647 | 386 | Fast installer is now the default | |
2459 | 648 | Support for additional OSes. | 387 | Prevously, 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. |
2460 | 649 | MAAS can now install operating systems other than Ubuntu on nodes. | 388 | |
2461 | 650 | Preliminary beta support exists for CentOS and SuSE via the `Curtin`_ "fast" | 389 | ### Bugs fixed in this release |
2462 | 651 | installer. This has not been thoroughly tested yet and has been provided | 390 | |
2463 | 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 |
2354 | 653 | |||
2355 | 654 | |||
2356 | 655 | Minor notable changes | ||
2357 | 656 | --------------------- | ||
2358 | 657 | |||
2359 | 658 | DNS entries | ||
2360 | 659 | In 1.5 DNS entries for nodes were a CNAME record. As of 1.6, they are now | ||
2361 | 660 | all "A" records, which allows for reliable reverse look-ups. | ||
2362 | 661 | |||
2363 | 662 | Only nodes that are allocated to a user and started will receive "A" record | ||
2364 | 663 | entries. Unallocated nodes no longer have DNS entries. | ||
2365 | 664 | |||
2366 | 665 | Removal of bootresources.yaml | ||
2367 | 666 | The bootresources.yaml file, which had to be configured separately on each | ||
2368 | 667 | cluster controller, is no longer in use. Instead, the configuration for | ||
2369 | 668 | which images to download is now held by the region controller, and defaults | ||
2370 | 669 | to downloading all images for LTS releases. A `rudimentary API`_ is | ||
2371 | 670 | available to manipulate this configuration. | ||
2372 | 671 | |||
2373 | 672 | .. _rudimentary API: http://maas.ubuntu.com/docs1.6/api.html#boot-source | ||
2374 | 673 | |||
2375 | 674 | Fast installer is now the default | ||
2376 | 675 | Prevously, the slower Debian installer was used by default. Any newly- | ||
2377 | 676 | enlisted nodes will now use the newer `fast installer`_. Existing nodes | ||
2378 | 677 | will keep the installer setting that they already have. | ||
2379 | 678 | |||
2380 | 679 | .. _fast installer: https://launchpad.net/curtin | ||
2381 | 680 | |||
2382 | 681 | |||
2383 | 682 | Bugs fixed in this release | ||
2384 | 683 | -------------------------- | ||
2385 | 684 | #1307779 fallback from specific to generic subarch broken | ||
2386 | 685 | #1310082 d-i with precise+hwe-s stops at "Architecture not supported" | ||
2387 | 686 | #1314174 Autodetection of the IPMI IP address fails when the 'power_address' | ||
2388 | 687 | of the power parameters is empty. | ||
2389 | 688 | #1314267 MAAS dhcpd will re-issue leases for nodes | ||
2390 | 689 | #1317675 Exception powering down a virsh machine | ||
2391 | 690 | #1322256 Import boot resources failing to verify keyring | ||
2392 | 691 | #1322336 import_boot_images crashes with KeyError on 'keyring' | ||
2393 | 692 | #1322606 maas-import-pxe-files fails when run from the command line | ||
2394 | 693 | #1324237 call_and_check does not report error output | ||
2395 | 694 | #1328659 import_boot_images task fails on utopic | ||
2396 | 695 | #1332596 AddrFormatError: failed to detect a valid IP address from None executing upload_dhcp_leases task | ||
2397 | 696 | #1250370 "sudo maas-import-ephemerals" steps on ~/.gnupg/pubring.gpg | ||
2398 | 697 | #1250435 CNAME record leaks into juju's private-address, breaks host based access control | ||
2399 | 698 | #1305758 Import fails while writing maas.meta: No such file or directory | ||
2400 | 699 | #1308292 Unhelpful error when re-enlisting a previously enlisted node | ||
2401 | 700 | #1309601 maas-enlist prints "successfully enlisted" even when enlistment fail | ||
2402 | 701 | s. | ||
2403 | 702 | #1309729 Fast path installer is not the default | ||
2404 | 703 | #1310844 find_ip_via_arp() results in unpredictable, and in some cases, incorrect IP addresses | ||
2405 | 704 | #1310846 amt template gives up way too easily | ||
2406 | 705 | #1312863 MAAS fails to detect SuperMicro-based server's power type | ||
2407 | 706 | #1314536 Copyright date in web UI is 2012 | ||
2408 | 707 | #1315160 no support for different operating systems | ||
2409 | 708 | #1316627 API needed to allocate and return an extra IP for a container | ||
2410 | 709 | #1323291 Can't re-commission a commissioning node | ||
2411 | 710 | #1324268 maas-cli 'nodes list' or 'node read <system_id>' doesn't display the osystem or distro_series node fields | ||
2412 | 711 | #1325093 install centos using curtin | ||
2413 | 712 | #1325927 YUI.Array.each not working as expected | ||
2414 | 713 | #1328656 MAAS sends multiple stop_dhcp_server tasks even though there's no dhcp server running. | ||
2415 | 714 | #1331139 IP is inconsistently capitalized on the 'edit a cluster interface' p | ||
2416 | 715 | age | ||
2417 | 716 | #1331148 When editing a cluster interface, last 3 fields are unintuitive | ||
2418 | 717 | #1331165 Please do not hardcode the IP address of Canonical services into MAAS managed DHCP configs | ||
2419 | 718 | #1338851 Add MAAS arm64/xgene support | ||
2420 | 719 | #1307693 Enlisting a SeaMicro or Virsh chassis twice will not replace the missing entries | ||
2421 | 720 | #1311726 No documentation about the supported power types and the related power parameters | ||
2422 | 721 | #1331982 API documentation for nodegroup op=details missing parameter | ||
2423 | 722 | #1274085 error when maas can't meet juju constraints is confusing and not helpful | ||
2424 | 723 | #1330778 MAAS needs support for managing nodes via the Moonshot HP iLO Chassis Manager CLI | ||
2425 | 724 | #1337683 The API client MAASClient doesn't encode list parameters when doing a GET | ||
2426 | 725 | #1190986 ERROR Nonce already used | ||
2427 | 726 | #1342135 Allow domains to be used for NTP server configuration, not just IPs | ||
2428 | 727 | #1337437 Allow 14.10 Utopic Unicorn as a deployable series | ||
2429 | 728 | #1350235 Package fails to install when the default route is through an aliased/tagged interface | ||
2430 | 729 | #1353597 PowerNV: format_bootif should make sure mac address is all lowercase | ||
2464 | 730 | 392 | ||
2465 | 731 | 1.5.3 | 393 | 1.5.3 |
2480 | 732 | ===== | 394 | ----- |
2481 | 733 | 395 | ||
2482 | 734 | Bug fix update | 396 | ### Bug fix update |
2483 | 735 | -------------- | 397 | |
2484 | 736 | 398 | > - Reduce number of celery tasks emitted when updating a cluster controller (LP: \#1324944) | |
2485 | 737 | - Reduce number of celery tasks emitted when updating a cluster controller | 399 | > - Fix VirshSSH template which was referencing invalid attributes (LP: \#1324966) |
2486 | 738 | (LP: #1324944) | 400 | > - Fix a start up problem where a database lock was being taken outside of a transaction (LP: \#1325759) |
2487 | 739 | - Fix VirshSSH template which was referencing invalid attributes | 401 | > - Reformat badly formatted Architecture error message (LP: \#1301465) |
2488 | 740 | (LP: #1324966) | 402 | > - Final changes to support ppc64el (now known as PowerNV) (LP: \#1315154) |
2475 | 741 | - Fix a start up problem where a database lock was being taken outside of | ||
2476 | 742 | a transaction (LP: #1325759) | ||
2477 | 743 | - Reformat badly formatted Architecture error message (LP: #1301465) | ||
2478 | 744 | - Final changes to support ppc64el (now known as PowerNV) (LP: #1315154) | ||
2479 | 745 | |||
2489 | 746 | 403 | ||
2490 | 747 | 1.5.2 | 404 | 1.5.2 |
2505 | 748 | ===== | 405 | ----- |
2506 | 749 | 406 | ||
2507 | 750 | Minor feature changes | 407 | ### Minor feature changes |
2508 | 751 | --------------------- | 408 | |
2509 | 752 | 409 | Boot resource download changes. | |
2510 | 753 | Boot resource download changes. | 410 | Further 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. |
2497 | 754 | Further to the work done in the 1.5 (Ubuntu 14.04) release, MAAS no | ||
2498 | 755 | longer stores the configuration for downloading boot resources in | ||
2499 | 756 | ``/etc/maas/bootresources.yaml``; this file is now obsolete. The | ||
2500 | 757 | sources list is now stored on the region controller and passed to the | ||
2501 | 758 | cluster controller when the job to download boot resources is started. | ||
2502 | 759 | It is still possible to pass a list of sources to | ||
2503 | 760 | ``maas-import-pxe-files`` when running the script manually. | ||
2504 | 761 | |||
2511 | 762 | 411 | ||
2512 | 763 | 1.5.1 | 412 | 1.5.1 |
2532 | 764 | ===== | 413 | ----- |
2533 | 765 | 414 | ||
2534 | 766 | Bug fix update | 415 | ### Bug fix update |
2535 | 767 | -------------- | 416 | |
2536 | 768 | 417 | For full details see <https://launchpad.net/maas/+milestone/1.5.1> | |
2537 | 769 | For full details see https://launchpad.net/maas/+milestone/1.5.1 | 418 | |
2538 | 770 | 419 | \#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 | |
2520 | 771 | #1303915 Powering SM15k RESTAPI v2.0 doesn't force PXE boot | ||
2521 | 772 | #1307780 no armhf commissioning template | ||
2522 | 773 | #1310076 lost connectivity to a node when using fastpath-installer with precise+hwe-s | ||
2523 | 774 | #1310082 d-i with precise+hwe-s stops at "Architecture not supported" | ||
2524 | 775 | #1311151 MAAS imports Trusty's 'rc' images by default. | ||
2525 | 776 | #1311433 REGRESSION: AttributeError: 'functools.partial' object has no attribute '__module__' | ||
2526 | 777 | #1313556 API client blocks when deleting a resource | ||
2527 | 778 | #1314409 parallel juju deployments race on the same maas | ||
2528 | 779 | #1316396 When stopping a node from the web UI that was started from the API, distro_series is not cleared | ||
2529 | 780 | #1298784 Vulnerable to user-interface redressing (e.g. clickjacking) | ||
2530 | 781 | #1308772 maas has no way to specify alternate IP addresses for AMT template | ||
2531 | 782 | #1300476 Unable to setup BMC/UCS user on Cisco B200 M3 | ||
2539 | 783 | 420 | ||
2540 | 784 | 1.5 | 421 | 1.5 |
2542 | 785 | === | 422 | --- |
2543 | 786 | 423 | ||
2544 | 787 | (released in Ubuntu 14.04) | 424 | (released in Ubuntu 14.04) |
2545 | 788 | 425 | ||
2765 | 789 | Major new features | 426 | ### Major new features |
2766 | 790 | ------------------ | 427 | |
2767 | 791 | 428 | Advanced Networking. | |
2768 | 792 | Advanced Networking. | 429 | MAAS 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. |
2769 | 793 | MAAS will now support multiple managed network interfaces on a single | 430 | |
2770 | 794 | cluster. It will track networks (including tagged VLANs) to which each node | 431 | See The full Networking documentation \<networks\>. |
2771 | 795 | is able to connect and provides this information in the API. API clients may | 432 | |
2772 | 796 | also use networking information in acquisition constraints when asking for a | 433 | Zones. |
2773 | 797 | new node allocation. | 434 | A 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. |
2774 | 798 | 435 | ||
2775 | 799 | See :ref:`The full Networking documentation <networks>`. | 436 | See physical-zones for more detail. |
2776 | 800 | 437 | ||
2777 | 801 | Zones. | 438 | Hardware Enablement Kernels. |
2778 | 802 | A Zone is an arbitrary grouping of nodes. MAAS now allows admins to define | 439 | MAAS is now able to fetch and use hardware enablement kernels which allow kernels for newer Ubuntu releases to be used on older releases. |
2779 | 803 | Zones, and place in them any of the region's nodes. Once defined, API | 440 | |
2780 | 804 | clients can use the zone name as acquisition constraints for new node | 441 | See hardware-enablement-kernels |
2781 | 805 | allocations. | 442 | |
2782 | 806 | 443 | ### Minor feature changes | |
2783 | 807 | See :doc:`physical-zones` for more detail. | 444 | |
2784 | 808 | 445 | Maas-Test. | |
2785 | 809 | Hardware Enablement Kernels. | 446 | A 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. |
2786 | 810 | MAAS is now able to fetch and use hardware enablement kernels which allow | 447 | |
2787 | 811 | kernels for newer Ubuntu releases to be used on older releases. | 448 | IPMI improvements. |
2788 | 812 | 449 | Many 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. | |
2789 | 813 | See :doc:`hardware-enablement-kernels` | 450 | |
2790 | 814 | 451 | Completion of image downloading changes. | |
2791 | 815 | Minor feature changes | 452 | Further 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. |
2792 | 816 | --------------------- | 453 | |
2793 | 817 | 454 | This change also enables end-users to provide their own simplestreams data and thusly their own custom images. | |
2794 | 818 | Maas-Test. | 455 | |
2795 | 819 | A new project `maas-test`_ was created to put a piece of hardware through MAAS's | 456 | Cluster-driven hardware availability. |
2796 | 820 | test suite to see if it's suitable for use in MAAS, and optionally report the results | 457 | When 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. |
2797 | 821 | to a bug in Launchpad's maas-test project. | 458 | |
2798 | 822 | 459 | Seamicro hardware. | |
2799 | 823 | .. _maas-test: https://launchpad.net/maas-test/ | 460 | MAAS now supports the Seamicro 15000 hardware for power control and API-based enlistment. |
2800 | 824 | 461 | ||
2801 | 825 | IPMI improvements. | 462 | AMT. |
2802 | 826 | Many improvements were made to IPMI handling, including better detection | 463 | MAAS now supports power control using [Intel AMT](http://www.intel.com/content/www/us/en/architecture-and-technology/intel-active-management-technology.html). |
2803 | 827 | during enlistment. Many IPMI-based systems that previously failed to work | 464 | |
2804 | 828 | with MAAS will now work correctly. | 465 | DNS forwarders. |
2805 | 829 | 466 | In MAAS's settings it's now possible to configure an upstream DNS, which will be set in the bind daemon's 'forwarders' option. | |
2806 | 830 | Completion of image downloading changes. | 467 | |
2807 | 831 | Further to the work done in the 1.4 (Ubuntu 13.10) release, MAAS now uses indexed | 468 | Foreign DHCP servers. |
2808 | 832 | "simplestreams" data published by Canonical to fetch not only the ephemeral | 469 | MAAS detects and shows you if any other DHCP servers are active on the networks that are on the cluster controller. |
2809 | 833 | images, but now also the kernels and ramdisks. The resource download | 470 | |
2810 | 834 | configuration is now in a new file ``/etc/maas/bootresources.yaml`` on | 471 | Commissioning Results. |
2811 | 835 | each cluster controller. All previous configuration files for image | 472 | A node's commissioning results are now shown in the UI. |
2812 | 836 | downloads are now obsolete. The new file will be pre-configured based on | 473 | |
2813 | 837 | images that are already present on the cluster. | 474 | Renamed commands. |
2814 | 838 | 475 | `maas` is renamed to `maas-region-admin`. `maas-cli` is now just `maas`. | |
2815 | 839 | This change also enables end-users to provide their own simplestreams data | 476 | |
2816 | 840 | and thusly their own custom images. | 477 | ### Bugs fixed in this release |
2817 | 841 | 478 | ||
2818 | 842 | Cluster-driven hardware availability. | 479 | For full details see <https://launchpad.net/maas/+milestone/14.04> |
2819 | 843 | When adding or editing node hardware in the region controller, MAAS will | 480 | |
2820 | 844 | contact the relevant cluster controller to validate the node's settings. | 481 | \#1227035 If a template substitution fails, the appserver crashes |
2821 | 845 | As of release, the only validation made is the architecture and the power | 482 | |
2822 | 846 | settings. Available architectures are based on which images have been | 483 | \#1255479 MaaS Internal Server Error 500 while parsing tags with namespaces in definition upon commissioning |
2823 | 847 | imported on the cluster. In the future, this will enable new cluster | 484 | |
2824 | 848 | controllers to be added that contain drivers for new hardware without | 485 | \#1269648 OAuth unauthorised errors mask the actual error text |
2825 | 849 | restarting the region controller. | 486 | |
2826 | 850 | 487 | \#1270052 Adding an SSH key fails due to a UnicodeDecodeError | |
2827 | 851 | Seamicro hardware. | 488 | |
2828 | 852 | MAAS now supports the Seamicro 15000 hardware for power control and API-based | 489 | \#1274024 kernel parameters are not set up in the installed OS's grub cfg |
2829 | 853 | enlistment. | 490 | |
2830 | 854 | 491 | \#1274190 periodic\_probe\_dhcp task raises IOError('No such device') | |
2831 | 855 | AMT. | 492 | |
2832 | 856 | MAAS now supports power control using `Intel AMT`_. | 493 | \#1274912 Internal server error when trying to stop a node with no power type |
2833 | 857 | 494 | ||
2834 | 858 | .. _Intel AMT: http://www.intel.com/content/www/us/en/architecture-and-technology/intel-active-management-technology.html | 495 | \#1274926 A node's nodegroup is autodetected using the request's IP even when the request is a manual |
2835 | 859 | 496 | ||
2836 | 860 | DNS forwarders. | 497 | \#1278895 When any of the commissioning scripts fails, the error reported contains the list of the scripts that *didn't* fail |
2837 | 861 | In MAAS's settings it's now possible to configure an upstream DNS, which will | 498 | |
2838 | 862 | be set in the bind daemon's 'forwarders' option. | 499 | \#1279107 maas\_ipmi\_autodetect.py ignores command failures |
2839 | 863 | 500 | ||
2840 | 864 | Foreign DHCP servers. | 501 | \#1282828 Almost impossible to provide a valid nodegroup ID when enlisting new node on API |
2841 | 865 | MAAS detects and shows you if any other DHCP servers are active on the | 502 | |
2842 | 866 | networks that are on the cluster controller. | 503 | \#1283114 MAAS' DHCP server is not stopped when the number of managed interfaces is zero |
2843 | 867 | 504 | ||
2844 | 868 | Commissioning Results. | 505 | \#1285244 Deleting a node sometimes fails with omshell error |
2845 | 869 | A node's commissioning results are now shown in the UI. | 506 | |
2846 | 870 | 507 | \#1285607 maas\_ipmi\_autodetect mistakes empty slot for taken slot | |
2847 | 871 | Renamed commands. | 508 | |
2848 | 872 | ``maas`` is renamed to ``maas-region-admin``. ``maas-cli`` is now just | 509 | \#1287274 On OCPv3 Roadrunner, maas\_ipmi\_autodetect fails because LAN Channel settings can't be changed |
2849 | 873 | ``maas``. | 510 | |
2850 | 874 | 511 | \#1287512 OCPv3 roadrunner detects IPMI as 1.5 | |
2851 | 875 | 512 | ||
2852 | 876 | Bugs fixed in this release | 513 | \#1289456 maas IPMI user creation fails on some DRAC systems |
2853 | 877 | -------------------------- | 514 | |
2854 | 878 | For full details see https://launchpad.net/maas/+milestone/14.04 | 515 | \#1290622 report\_boot\_images does not remove images that were deleted from the cluster |
2855 | 879 | 516 | ||
2856 | 880 | #1227035 If a template substitution fails, the appserver crashes | 517 | \#1293676 internal server error when marking nodes as using fast-path installer |
2857 | 881 | 518 | ||
2858 | 882 | #1255479 MaaS Internal Server Error 500 while parsing tags with namespaces in definition upon commissioning | 519 | \#1300587 Cloud-archive selection widget is obsolete |
2859 | 883 | 520 | ||
2860 | 884 | #1269648 OAuth unauthorised errors mask the actual error text | 521 | \#1301809 Report boot images no directory traceback |
2861 | 885 | 522 | ||
2862 | 886 | #1270052 Adding an SSH key fails due to a UnicodeDecodeError | 523 | \#1052339 MAAS only supports one "managed" (DNS/DHCP) interface per cluster controller. |
2863 | 887 | 524 | ||
2864 | 888 | #1274024 kernel parameters are not set up in the installed OS's grub cfg | 525 | \#1058126 maas dbshell stacktraces in package |
2865 | 889 | 526 | ||
2866 | 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 |
2867 | 891 | 528 | ||
2868 | 892 | #1274912 Internal server error when trying to stop a node with no power type | 529 | \#1073460 Node-specific kernel and ramdisk is not possible |
2869 | 893 | 530 | ||
2870 | 894 | #1274926 A node's nodegroup is autodetected using the request's IP even when the request is a manual | 531 | \#1177932 Unable to select which pxe files to download by both series and architecture. |
2871 | 895 | 532 | ||
2872 | 896 | #1278895 When any of the commissioning scripts fails, the error reported contains the list of the scripts that *didn't* fail | 533 | \#1181334 i386 required to install amd64 |
2873 | 897 | 534 | ||
2874 | 898 | #1279107 maas_ipmi_autodetect.py ignores command failures | 535 | \#1184589 When external commands, issued by MAAS, fail, the log output does not give any information about the failure. |
2875 | 899 | 536 | ||
2876 | 900 | #1282828 Almost impossible to provide a valid nodegroup ID when enlisting new node on API | 537 | \#1187851 Newline added to end of files obtained with maas-cli |
2877 | 901 | 538 | ||
2878 | 902 | #1283114 MAAS' DHCP server is not stopped when the number of managed interfaces is zero | 539 | \#1190986 ERROR Nonce already used |
2879 | 903 | 540 | ||
2880 | 904 | #1285244 Deleting a node sometimes fails with omshell error | 541 | \#1191735 TFTP server not listening on all interfaces |
2881 | 905 | 542 | ||
2882 | 906 | #1285607 maas_ipmi_autodetect mistakes empty slot for taken slot | 543 | \#1210393 MAAS ipmi fails on OCPv3 Roadrunner |
2883 | 907 | 544 | ||
2884 | 908 | #1287274 On OCPv3 Roadrunner, maas_ipmi_autodetect fails because LAN Channel settings can't be changed | 545 | \#1228205 piston hijacks any TypeError raised by MAAS |
2885 | 909 | 546 | ||
2886 | 910 | #1287512 OCPv3 roadrunner detects IPMI as 1.5 | 547 | \#1234880 HP ilo4 consoles default to autodetect protocol, which doesn't work |
2887 | 911 | 548 | ||
2888 | 912 | #1289456 maas IPMI user creation fails on some DRAC systems | 549 | \#1237197 No scheduled job for images download |
2889 | 913 | 550 | ||
2890 | 914 | #1290622 report_boot_images does not remove images that were deleted from the cluster | 551 | \#1238284 multiple ip address displayed for a node |
2891 | 915 | 552 | ||
2892 | 916 | #1293676 internal server error when marking nodes as using fast-path installer | 553 | \#1243917 'maas createsuperuser' errors out if no email address is entered. |
2893 | 917 | 554 | ||
2894 | 918 | #1300587 Cloud-archive selection widget is obsolete | 555 | \#1246531 dhcpd.conf not updated when user hits "Save cluster controller" |
2895 | 919 | 556 | ||
2896 | 920 | #1301809 Report boot images no directory traceback | 557 | \#1246625 The power parameters used by the virsh power template are inconsistent. |
2897 | 921 | 558 | ||
2898 | 922 | #1052339 MAAS only supports one "managed" (DNS/DHCP) interface per cluster controller. | 559 | \#1247708 Cluster interface shows up with no interface name |
2899 | 923 | 560 | ||
2900 | 924 | #1058126 maas dbshell stacktraces in package | 561 | \#1248893 maas-cli listing nodes filtered by hostname doesn't work |
2901 | 925 | 562 | ||
2902 | 926 | #1064212 If a machine is booted manually when in status "Declared" or "Ready", TFTP server tracebacks | 563 | \#1249435 kernel options not showing up in WebUI and not being passed at install time to one node |
2903 | 927 | 564 | ||
2904 | 928 | #1073460 Node-specific kernel and ramdisk is not possible | 565 | \#1250410 Search box renders incorrectly in Firefox |
2905 | 929 | 566 | ||
2906 | 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 |
2907 | 931 | 568 | ||
2908 | 932 | #1181334 i386 required to install amd64 | 569 | \#1270131 1 CPU when there are multiple cores on Intel NUC |
2909 | 933 | 570 | ||
2910 | 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 |
2911 | 935 | 572 | ||
2912 | 936 | #1187851 Newline added to end of files obtained with maas-cli | 573 | \#1273650 Fastpath installer does not pick up package mirror settings from MAAS |
2913 | 937 | 574 | ||
2914 | 938 | #1190986 ERROR Nonce already used | 575 | \#1274017 MAAS new user creation requires E-Mail address, throws wrong error when not provided |
2915 | 939 | 576 | ||
2916 | 940 | #1191735 TFTP server not listening on all interfaces | 577 | \#1274465 Network identity shows broadcast address instead of the network's address |
2917 | 941 | 578 | ||
2918 | 942 | #1210393 MAAS ipmi fails on OCPv3 Roadrunner | 579 | \#1274499 dhcp lease rollover causes loss of access to management IP |
2919 | 943 | 580 | ||
2920 | 944 | #1228205 piston hijacks any TypeError raised by MAAS | 581 | \#1275643 When both IPMI 1.5 and 2.0 are available, MAAS should use 2.0 |
2921 | 945 | 582 | ||
2922 | 946 | #1234880 HP ilo4 consoles default to autodetect protocol, which doesn't work | 583 | \#1279304 Node commissioning results are not displayed in the UI |
2923 | 947 | 584 | ||
2924 | 948 | #1237197 No scheduled job for images download | 585 | \#1279728 Storage capacity isn't always detected |
2925 | 949 | 586 | ||
2926 | 950 | #1238284 multiple ip address displayed for a node | 587 | \#1287964 MAAS incorrectly detects / sets-up BMC information on Dell PowerEdge servers |
2927 | 951 | 588 | ||
2928 | 952 | #1243917 'maas createsuperuser' errors out if no email address is entered. | 589 | \#1292491 pserv traceback when region controller not yet ready |
2929 | 953 | 590 | ||
2930 | 954 | #1246531 dhcpd.conf not updated when user hits "Save cluster controller" | 591 | \#1293661 cannot use fast path installer to deploy other than trusty |
2931 | 955 | 592 | ||
2932 | 956 | #1246625 The power parameters used by the virsh power template are inconsistent. | 593 | \#1294302 fast installer fails to PXE boot on armhf/highbank |
2933 | 957 | 594 | ||
2934 | 958 | #1247708 Cluster interface shows up with no interface name | 595 | \#1295035 The UI doesn't display the list of available boot images |
2935 | 959 | 596 | ||
2936 | 960 | #1248893 maas-cli listing nodes filtered by hostname doesn't work | 597 | \#1297814 MAAS does not advertise its capabilities |
2937 | 961 | 598 | ||
2938 | 962 | #1249435 kernel options not showing up in WebUI and not being passed at install time to one node | 599 | \#1298790 Logout page vulnerable to CSRF |
2939 | 963 | 600 | ||
2940 | 964 | #1250410 Search box renders incorrectly in Firefox | 601 | \#1271189 support switching image streams in import ephemerals |
2941 | 965 | 602 | ||
2942 | 966 | #1268795 unable to automatically commission Cisco UCS server due to BMC user permissions | 603 | \#1287310 hard to determine valid values for power parameters |
2943 | 967 | 604 | ||
2944 | 968 | #1270131 1 CPU when there are multiple cores on Intel NUC | 605 | \#1272014 MAAS prompts user to run maas createadmin; instead of maas createsuperuser |
2945 | 969 | 606 | ||
2946 | 970 | #1271056 API call for listing nodes filtered by zone | 607 | \#1108319 maascli could have a way to tell which cluster controllers don't have the pxe files |
2728 | 971 | |||
2729 | 972 | #1273650 Fastpath installer does not pick up package mirror settings from MAAS | ||
2730 | 973 | |||
2731 | 974 | #1274017 MAAS new user creation requires E-Mail address, throws wrong error when not provided | ||
2732 | 975 | |||
2733 | 976 | #1274465 Network identity shows broadcast address instead of the network's address | ||
2734 | 977 | |||
2735 | 978 | #1274499 dhcp lease rollover causes loss of access to management IP | ||
2736 | 979 | |||
2737 | 980 | #1275643 When both IPMI 1.5 and 2.0 are available, MAAS should use 2.0 | ||
2738 | 981 | |||
2739 | 982 | #1279304 Node commissioning results are not displayed in the UI | ||
2740 | 983 | |||
2741 | 984 | #1279728 Storage capacity isn't always detected | ||
2742 | 985 | |||
2743 | 986 | #1287964 MAAS incorrectly detects / sets-up BMC information on Dell PowerEdge servers | ||
2744 | 987 | |||
2745 | 988 | #1292491 pserv traceback when region controller not yet ready | ||
2746 | 989 | |||
2747 | 990 | #1293661 cannot use fast path installer to deploy other than trusty | ||
2748 | 991 | |||
2749 | 992 | #1294302 fast installer fails to PXE boot on armhf/highbank | ||
2750 | 993 | |||
2751 | 994 | #1295035 The UI doesn't display the list of available boot images | ||
2752 | 995 | |||
2753 | 996 | #1297814 MAAS does not advertise its capabilities | ||
2754 | 997 | |||
2755 | 998 | #1298790 Logout page vulnerable to CSRF | ||
2756 | 999 | |||
2757 | 1000 | #1271189 support switching image streams in import ephemerals | ||
2758 | 1001 | |||
2759 | 1002 | #1287310 hard to determine valid values for power parameters | ||
2760 | 1003 | |||
2761 | 1004 | #1272014 MAAS prompts user to run `maas createadmin`; instead of `maas createsuperuser` | ||
2762 | 1005 | |||
2763 | 1006 | #1108319 maascli could have a way to tell which cluster controllers don't have the pxe files | ||
2764 | 1007 | |||
2947 | 1008 | 608 | ||
2948 | 1009 | 1.4 | 609 | 1.4 |
2950 | 1010 | === | 610 | --- |
2951 | 1011 | 611 | ||
2952 | 1012 | (released in Ubuntu 13.10) | 612 | (released in Ubuntu 13.10) |
2953 | 1013 | 613 | ||
3072 | 1014 | Major new features | 614 | ### Major new features |
3073 | 1015 | ------------------ | 615 | |
3074 | 1016 | 616 | LLDP collection. | |
3075 | 1017 | LLDP collection. | 617 | MAAS 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. |
3076 | 1018 | MAAS now collects LLDP data on each node during its | 618 | |
3077 | 1019 | commissioning cycle. The router to which the node is connected will have | 619 | New faster installer for nodes. |
3078 | 1020 | its MAC address parsed out of the data and made available for using as a | 620 | MAAS 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. |
3079 | 1021 | placement constraint (passing connected_to or not_connected_to to the | 621 | |
3080 | 1022 | acquire() API call), or you can define tags using expressions such as | 622 | More extensible templates for DHCP, power control, PXE and DNS. |
3081 | 1023 | ``//lldp:chassis/lldp:id[@type="mac"]/text() = "20:4e:7f:94:2e:10"`` | 623 | Templates 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. |
3082 | 1024 | which would tag nodes with a router using that MAC address. | 624 | |
3083 | 1025 | 625 | ### Minor feature changes | |
3084 | 1026 | New faster installer for nodes. | 626 | |
3085 | 1027 | MAAS will now make use of the new Curtin_ installer which is much quicker | 627 | Reworked ephemeral downloading |
3086 | 1028 | than the old Debian Installer process. Typically an installation now | 628 | While 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. |
3087 | 1029 | takes a couple of minutes instead of upwards of 10 minutes. To have a node | 629 | |
3088 | 1030 | use the faster installer, add the ``use-fastpath-installer`` tag to it, | 630 | Improved maas-cli support |
3089 | 1031 | or click the "Use the fast installer" button on the node page. | 631 | Users can now manage their SSH keys and API credentials via the maas-cli tool. |
3090 | 1032 | 632 | ||
3091 | 1033 | .. _Curtin: https://launchpad.net/curtin | 633 | Django 1.5 |
3092 | 1034 | 634 | MAAS is updated to work with Django 1.5 | |
3093 | 1035 | More extensible templates for DHCP, power control, PXE and DNS. | 635 | |
3094 | 1036 | Templates supplied for these activities are now all in their own template | 636 | HP Moonshot Systems support. |
3095 | 1037 | file that is customisable by the user. The files now generally live under | 637 | MAAS 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/`. |
3096 | 1038 | /etc/maas/ rather than embedded in the code tree itself. | 638 | |
3097 | 1039 | 639 | ### Bugs fixed in this release | |
3098 | 1040 | Minor feature changes | 640 | |
3099 | 1041 | --------------------- | 641 | \#1039513 maas-import-pxe-files doesn't cryptographically verify what it downloads |
3100 | 1042 | 642 | ||
3101 | 1043 | Reworked ephemeral downloading | 643 | \#1158425 maas-import-pxe-files sources path-relative config |
3102 | 1044 | While there is no end-user visible change, the ephemeral image download | 644 | |
3103 | 1045 | process is now driven by a data stream published by Canonical at | 645 | \#1204507 MAAS rejects empty files |
3104 | 1046 | http://maas.ubuntu.com/images/streams. In the future this will allow end | 646 | |
3105 | 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 |
3106 | 1048 | The configuration for this is now also part of ``pserv.yaml``, obsoleting | 648 | |
3107 | 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" |
3108 | 1050 | migrated on the first run of the ``maas-import-ephemerals`` script. | 650 | |
3109 | 1051 | 651 | \#1234853 MAAS returns HTTP/500 when adding a second managed interface to cluster controller | |
3110 | 1052 | Improved maas-cli support | 652 | |
3111 | 1053 | Users can now manage their SSH keys and API credentials via the maas-cli | 653 | \#971349 With 100% of nodes in 'declared' state, pie chart is white on white |
3112 | 1054 | tool. | 654 | |
3113 | 1055 | 655 | \#974035 Node listing does not support bulk operations | |
3114 | 1056 | Django 1.5 | 656 | |
3115 | 1057 | MAAS is updated to work with Django 1.5 | 657 | \#1045725 SAY clauses in PXE configs are being evaluated as they're encountered, not when the label is branched to |
3116 | 1058 | 658 | ||
3117 | 1059 | HP Moonshot Systems support. | 659 | \#1054518 distro\_series can be None or "" |
3118 | 1060 | MAAS can now manage HP Moonshot Systems as any other hardware. However, | 660 | |
3119 | 1061 | in order for MAAS to power manage these systems, it requires the user | 661 | \#1064777 If a node's IP address is known, it's not shown anywhere |
3120 | 1062 | to manually specify the iLO credentials before the enlistment process | 662 | |
3121 | 1063 | begins. This can be done in the ``maas_moonshot_autodetect.py`` | 663 | \#1084807 Users are editing the machine-generated dhcpd.conf |
3122 | 1064 | template under ``/etc/maas/templates/commissioning-user-data/snippets/``. | 664 | |
3123 | 1065 | 665 | \#1155607 Conflict between "DNS zone name" in Cluster controller and "Default domain for new nodes" in settings | |
3124 | 1066 | Bugs fixed in this release | 666 | |
3125 | 1067 | -------------------------- | 667 | \#1172336 MAAS server reference to AvahiBoot wiki page that does not exist |
3126 | 1068 | #1039513 maas-import-pxe-files doesn't cryptographically verify what | 668 | |
3127 | 1069 | it downloads | 669 | \#1185160 no way to see what user has a node allocated |
3128 | 1070 | 670 | ||
3129 | 1071 | #1158425 maas-import-pxe-files sources path-relative config | 671 | \#1202314 Discrepancy between docs and behavior |
3130 | 1072 | 672 | ||
3131 | 1073 | #1204507 MAAS rejects empty files | 673 | \#1206222 Documentation Feedback and Site suggestions |
3132 | 1074 | 674 | ||
3133 | 1075 | #1208497 netboot flag defaults to 'true' on upgrade, even for allocated | 675 | \#1209039 Document that MAAS requires 'portfast' on switch ports connected to nodes |
3134 | 1076 | nodes | 676 | |
3135 | 1077 | 677 | \#1215750 No way of tracing/debugging http traffic content in the appserver. | |
3136 | 1078 | #1227644 Releasing a node using the API errors with "TypeError: | 678 | |
3137 | 1079 | 00:e0:81:dd:d1:0b is not JSON serializable" | 679 | \#1223157 start\_commissioning needlessly sets owner on commissioning nodes |
3138 | 1080 | 680 | ||
3139 | 1081 | #1234853 MAAS returns HTTP/500 when adding a second managed interface | 681 | \#1227081 Error in apache's log "No handlers could be found for logger "maasserver"" |
3140 | 1082 | to cluster controller | 682 | |
3141 | 1083 | 683 | \#1233069 maas-import-pxe-files fails when md5 checksums can't be downloaded | |
3142 | 1084 | #971349 With 100% of nodes in 'declared' state, pie chart is white on white | 684 | |
3143 | 1085 | 685 | \#1117415 maas dhcp responses do not have domain-name or domain-search | |
3144 | 1086 | #974035 Node listing does not support bulk operations | 686 | |
3145 | 1087 | 687 | \#1136449 maas-cli get-config and set-config documentation | |
3146 | 1088 | #1045725 SAY clauses in PXE configs are being evaluated as they're | 688 | |
3147 | 1089 | encountered, not when the label is branched to | 689 | \#1175405 Pie chart says "deployed" which is inconsistent with the node list's "allocated" |
3148 | 1090 | 690 | ||
3149 | 1091 | #1054518 distro_series can be None or "" | 691 | \#1233833 Usability: deleting nodes is too easy |
3150 | 1092 | 692 | ||
3151 | 1093 | #1064777 If a node's IP address is known, it's not shown anywhere | 693 | \#1185897 expose ability to re-commission node in api and cli |
3152 | 1094 | 694 | ||
3153 | 1095 | #1084807 Users are editing the machine-generated dhcpd.conf | 695 | \#997092 Can't delete allocated node even if owned by self |
3036 | 1096 | |||
3037 | 1097 | #1155607 Conflict between "DNS zone name" in Cluster controller and | ||
3038 | 1098 | "Default domain for new nodes" in settings | ||
3039 | 1099 | |||
3040 | 1100 | #1172336 MAAS server reference to AvahiBoot wiki page that does not exist | ||
3041 | 1101 | |||
3042 | 1102 | #1185160 no way to see what user has a node allocated | ||
3043 | 1103 | |||
3044 | 1104 | #1202314 Discrepancy between docs and behavior | ||
3045 | 1105 | |||
3046 | 1106 | #1206222 Documentation Feedback and Site suggestions | ||
3047 | 1107 | |||
3048 | 1108 | #1209039 Document that MAAS requires 'portfast' on switch ports connected | ||
3049 | 1109 | to nodes | ||
3050 | 1110 | |||
3051 | 1111 | #1215750 No way of tracing/debugging http traffic content in the appserver. | ||
3052 | 1112 | |||
3053 | 1113 | #1223157 start_commissioning needlessly sets owner on commissioning nodes | ||
3054 | 1114 | |||
3055 | 1115 | #1227081 Error in apache's log "No handlers could be found for logger | ||
3056 | 1116 | "maasserver"" | ||
3057 | 1117 | |||
3058 | 1118 | #1233069 maas-import-pxe-files fails when md5 checksums can't be downloaded | ||
3059 | 1119 | |||
3060 | 1120 | #1117415 maas dhcp responses do not have domain-name or domain-search | ||
3061 | 1121 | |||
3062 | 1122 | #1136449 maas-cli get-config and set-config documentation | ||
3063 | 1123 | |||
3064 | 1124 | #1175405 Pie chart says "deployed" which is inconsistent with the node | ||
3065 | 1125 | list's "allocated" | ||
3066 | 1126 | |||
3067 | 1127 | #1233833 Usability: deleting nodes is too easy | ||
3068 | 1128 | |||
3069 | 1129 | #1185897 expose ability to re-commission node in api and cli | ||
3070 | 1130 | |||
3071 | 1131 | #997092 Can't delete allocated node even if owned by self | ||
3154 | 1132 | 696 | ||
3155 | 1133 | 697 | ||
3156 | === renamed file 'docs/cluster-configuration.rst' => 'docs/cluster-configuration.md' | |||
3157 | --- docs/cluster-configuration.rst 2014-08-22 00:13:24 +0000 | |||
3158 | +++ docs/cluster-configuration.md 2015-04-17 21:06:27 +0000 | |||
3159 | @@ -1,146 +1,71 @@ | |||
3160 | 1 | .. -*- mode: rst -*- | ||
3161 | 2 | |||
3162 | 3 | .. _cluster-configuration: | ||
3163 | 4 | |||
3164 | 5 | Cluster Configuration | 1 | Cluster Configuration |
3165 | 6 | ===================== | 2 | ===================== |
3166 | 7 | 3 | ||
3183 | 8 | Before any of MAAS's features can be used for the first time, you must have | 4 | Before 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.) |
3184 | 9 | a cluster controller and configure it to manage at least one network of | 5 | |
3185 | 10 | nodes. Each node in the cluster should be attached to one of these networks. | 6 | Managing 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. |
3170 | 11 | (In addition, a node can be attached to any number of networks that are not | ||
3171 | 12 | managed by MAAS.) | ||
3172 | 13 | |||
3173 | 14 | Managing a network normally means that MAAS will serve DHCP from the cluster | ||
3174 | 15 | controller. **Do this only on a network that was set up with this in mind.** | ||
3175 | 16 | Running your own DHCP server that competes with an existing one that's | ||
3176 | 17 | already managing the network can cause serious disruption, and it can be hard | ||
3177 | 18 | for administrators to track the source of the problem. Worse, the problems | ||
3178 | 19 | may not become immediately noticeable. Make sure you understand the | ||
3179 | 20 | implications of running a DHCP server before doing this. If MAAS detects any | ||
3180 | 21 | DHCP servers already running on these networks, it will show them on the | ||
3181 | 22 | cluster's configuration page. | ||
3182 | 23 | |||
3186 | 24 | 7 | ||
3187 | 25 | Network requirements | 8 | Network requirements |
3188 | 26 | -------------------- | 9 | -------------------- |
3189 | 27 | 10 | ||
3207 | 28 | The cluster controller manages a network of nodes through one of its interfaces | 11 | The 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. |
3208 | 29 | as defined in MAAS. Cluster interfaces are discovered automatically, though | 12 | |
3209 | 30 | this may not happen e.g. if the network interface was down when MAAS was | 13 | When 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: |
3210 | 31 | installed. | 14 | |
3211 | 32 | 15 | 1. 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. | |
3212 | 33 | When a cluster controller manages nodes on a network through one of its | 16 | 2. 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. |
3196 | 34 | interfaces, the nodes must be on the same subnet as the cluster interface. | ||
3197 | 35 | This is for two reasons: | ||
3198 | 36 | |||
3199 | 37 | 1. If the cluster controller is configured to manage DHCP, the nodes must be | ||
3200 | 38 | able to configure their own network interfaces using MAAS's DHCP server. | ||
3201 | 39 | This means that either they must be on the same subnet, or that DHCP packets | ||
3202 | 40 | are being specially routed between the nodes' subnet and MAAS's DHCP server. | ||
3203 | 41 | 2. The cluster controller must be able to find nodes' IP addresses based on | ||
3204 | 42 | their MAC addresses, by inspecting its ARP cache. This implies that the | ||
3205 | 43 | nodes and the cluster controller must be on the same physical subnet. | ||
3206 | 44 | |||
3213 | 45 | 17 | ||
3214 | 46 | Cluster acceptance | 18 | Cluster acceptance |
3215 | 47 | ------------------ | 19 | ------------------ |
3216 | 48 | 20 | ||
3242 | 49 | If you install your first cluster controller on the same system as the region | 21 | If 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. |
3243 | 50 | controller, as is the case when you install the full "maas" ubuntu package, | 22 | |
3244 | 51 | it will be automatically accepted by default (but not yet configured, see | 23 | To accept a cluster controller, visit the "pending clusters" section of the Clusters page: |
3245 | 52 | below). Any other cluster controllers you set up will show up in the user | 24 | |
3246 | 53 | interface as "pending," until you manually accept them into the MAAS. | 25 | ![image](media/cluster-accept.png) |
3247 | 54 | 26 | ||
3248 | 55 | To accept a cluster controller, visit the "pending clusters" section of the | 27 | You 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: |
3249 | 56 | Clusters page: | 28 | |
3250 | 57 | 29 | ![image](media/cluster-edit.png) | |
3251 | 58 | .. image:: media/cluster-accept.png | 30 | |
3252 | 59 | 31 | Here 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." | |
3253 | 60 | You can either click on "Accept all" or click on the edit icon to edit | 32 | |
3254 | 61 | the cluster. After clicking on the edit icon, you will see this page: | 33 | Now 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. |
3230 | 62 | |||
3231 | 63 | .. image:: media/cluster-edit.png | ||
3232 | 64 | |||
3233 | 65 | Here you can change the cluster's name as it appears in the UI, its DNS | ||
3234 | 66 | zone, and its status. Accepting the cluster changes its status from | ||
3235 | 67 | "pending" to "accepted." | ||
3236 | 68 | |||
3237 | 69 | Now that the cluster controller is accepted, you can configure one or more of | ||
3238 | 70 | its network interfaces to be managed by MAAS. This will enable the cluster | ||
3239 | 71 | controller to manage nodes attached to those networks. The next section | ||
3240 | 72 | explains how to do this and what choices are to be made. | ||
3241 | 73 | |||
3255 | 74 | 34 | ||
3256 | 75 | Cluster interface management | 35 | Cluster interface management |
3257 | 76 | ---------------------------- | 36 | ---------------------------- |
3258 | 77 | 37 | ||
3321 | 78 | MAAS automatically recognises the network interfaces on each cluster | 38 | MAAS 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. |
3322 | 79 | controller. Some (though not necessarily all) of these will be connected to | 39 | |
3323 | 80 | networks where you want to manage nodes. A connection between a cluster | 40 | We 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. |
3324 | 81 | controller and a network is called a `cluster interface`. Each cluster | 41 | |
3325 | 82 | interface is built on exactly one network interface, though it's possible for | 42 | As 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: |
3326 | 83 | two cluster interfaces to use the same network interface card. | 43 | |
3327 | 84 | 44 | ![image](media/cluster-interface-edit.png) | |
3328 | 85 | We recommend letting your cluster controller act as a DHCP server for the | 45 | |
3329 | 86 | networks it manages, by configuring the corresponding cluster interfaces in | 46 | Here you can select to what extent you want the cluster controller to manage the network: |
3330 | 87 | the MAAS user interface. | 47 | |
3331 | 88 | 48 | 1. DHCP only - this will run a DHCP server on your cluster | |
3332 | 89 | As an example, we will configure the cluster controller to manage a network | 49 | 2. 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. |
3333 | 90 | on interface ``eth0``. Click on the edit icon for the cluster interface on | 50 | |
3334 | 91 | network interface ``eth0``, which takes us to this page: | 51 | If 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. |
3335 | 92 | 52 | ||
3336 | 93 | .. image:: media/cluster-interface-edit.png | 53 | There 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. |
3337 | 94 | 54 | ||
3338 | 95 | Here you can select to what extent you want the cluster controller to manage | 55 | ### Static vs Dynamic IP Addresses |
3339 | 96 | the network: | 56 | |
3340 | 97 | 57 | On 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. | |
3341 | 98 | #. DHCP only - this will run a DHCP server on your cluster | 58 | |
3342 | 99 | #. DHCP and DNS - this will run a DHCP server on the cluster *and* configure | 59 | Dynamic 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. |
3343 | 100 | the DNS server included with the region controller so that it can be used | 60 | |
3344 | 101 | to look up hosts on this network by name. | 61 | Static 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. |
3345 | 102 | 62 | ||
3346 | 103 | If you set the interface to be managed, you now need to provide all of the | 63 | If you do not configure the static range, then nodes will only get dynamic IP addresses and will never get a DNS entry. |
3347 | 104 | usual DHCP details in the input fields below. Once done, click "Save | 64 | |
3348 | 105 | interface". The cluster controller will now be able to boot nodes on this | 65 | IP 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. |
3287 | 106 | network. | ||
3288 | 107 | |||
3289 | 108 | There is also an option to leave the network unmanaged. Use this for | ||
3290 | 109 | networks where you don't want to manage any nodes. Or, if you do want to | ||
3291 | 110 | manage nodes but don't want the cluster controller to serve DHCP, you may be | ||
3292 | 111 | able to get by without it. This is explained in :ref:`manual-dhcp`. | ||
3293 | 112 | |||
3294 | 113 | .. _static-ip-address: | ||
3295 | 114 | |||
3296 | 115 | Static vs Dynamic IP Addresses | ||
3297 | 116 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
3298 | 117 | |||
3299 | 118 | On the cluster interface edit page, there are fields to enter both a dynamic | ||
3300 | 119 | and a static range of IP addresses. It is mandatory to enter the dynamic range | ||
3301 | 120 | if you are managing DHCP on this interface, but the static range is optional. | ||
3302 | 121 | |||
3303 | 122 | Dynamic addresses are given to both unknown devices booting on this network, | ||
3304 | 123 | and Nodes that are commissioning. Dynamic addresses are allocated by the | ||
3305 | 124 | DHCP server and may change at any time. | ||
3306 | 125 | |||
3307 | 126 | Static addresses are given to Nodes when they are allocated to a user and | ||
3308 | 127 | started up, and returned to the pool only when the Node is de-allocated. | ||
3309 | 128 | Static addresses are allocated by MAAS, and are guaranteed not to change while | ||
3310 | 129 | allocated. If you are managing DNS on this network, only static IP addresses | ||
3311 | 130 | are given DNS entries with the Node's name. | ||
3312 | 131 | |||
3313 | 132 | If you do not configure the static range, then nodes will only get dynamic | ||
3314 | 133 | IP addresses and will never get a DNS entry. | ||
3315 | 134 | |||
3316 | 135 | IP addresses in the static range are also available for reservation by users | ||
3317 | 136 | using the :doc:`api`. This prevents MAAS from allocating the reserved | ||
3318 | 137 | IP to any Nodes or other devices, which allows users to assign it freely | ||
3319 | 138 | to their own hosts/devices on the same network, such as LXC containers. | ||
3320 | 139 | |||
3349 | 140 | 66 | ||
3350 | 141 | Multiple networks | 67 | Multiple networks |
3351 | 142 | ----------------- | 68 | ----------------- |
3352 | 143 | 69 | ||
3356 | 144 | A single cluster controller can manage more than one network, each from a | 70 | A 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. |
3357 | 145 | different cluster interface. This may help you scale your cluster to larger | 71 | |
3355 | 146 | numbers of nodes, or it may be a requirement of your network architecture. | ||
3358 | 147 | 72 | ||
3359 | === removed file 'docs/conf.py' | |||
3360 | --- docs/conf.py 2015-03-25 13:22:48 +0000 | |||
3361 | +++ docs/conf.py 1970-01-01 00:00:00 +0000 | |||
3362 | @@ -1,305 +0,0 @@ | |||
3363 | 1 | # -*- coding: utf-8 -*- | ||
3364 | 2 | # | ||
3365 | 3 | # MAAS documentation build configuration file, created by | ||
3366 | 4 | # sphinx-quickstart on Thu Jan 19 14:48:25 2012. | ||
3367 | 5 | # | ||
3368 | 6 | # This file is execfile()d with the current directory set to its containing dir. | ||
3369 | 7 | # | ||
3370 | 8 | # Note that not all possible configuration values are present in this | ||
3371 | 9 | # autogenerated file. | ||
3372 | 10 | # | ||
3373 | 11 | # All configuration values have a default; values that are commented out | ||
3374 | 12 | # serve to show the default. | ||
3375 | 13 | |||
3376 | 14 | # Import maas' settings. | ||
3377 | 15 | from os import environ | ||
3378 | 16 | |||
3379 | 17 | |||
3380 | 18 | environ.setdefault("DJANGO_SETTINGS_MODULE", "maas.settings") | ||
3381 | 19 | |||
3382 | 20 | # If extensions (or modules to document with autodoc) are in another directory, | ||
3383 | 21 | # add these directories to sys.path here. If the directory is relative to the | ||
3384 | 22 | # documentation root, use os.path.abspath to make it absolute, like shown here. | ||
3385 | 23 | |||
3386 | 24 | import sys, os | ||
3387 | 25 | # Include '.' in the path so that our custom extension, 'versions', can | ||
3388 | 26 | # be found. | ||
3389 | 27 | sys.path.insert(0, os.path.abspath('.')) | ||
3390 | 28 | |||
3391 | 29 | # -- Multiple documentation options. | ||
3392 | 30 | |||
3393 | 31 | # Add a widget to switch between different versions of the documentation to | ||
3394 | 32 | # each generated page. | ||
3395 | 33 | add_version_switcher = False | ||
3396 | 34 | |||
3397 | 35 | # In order for the version widget to be able to redirect correctly to the | ||
3398 | 36 | # other versions of the documentation, each version of the documentation | ||
3399 | 37 | # has to be accessible at the following addresses: | ||
3400 | 38 | # /<doc_prefix>/ -> documentation for trunk. | ||
3401 | 39 | # /<doc_prefix>1.4/ -> documentation for 1.4. | ||
3402 | 40 | # etc. | ||
3403 | 41 | doc_prefix = 'docs' | ||
3404 | 42 | |||
3405 | 43 | # Path of the JSON document, relative to homepage of the documentation for trunk | ||
3406 | 44 | # (i.e. '/<doc_prefix>/'), with the list of the versions to include in the | ||
3407 | 45 | # version switcher widget. | ||
3408 | 46 | versions_path = '_static/versions.js' | ||
3409 | 47 | |||
3410 | 48 | # Versions to include in the version switcher. | ||
3411 | 49 | # Note that the version switcher fetches the list of the documentation versions | ||
3412 | 50 | # from the list published by the trunk documentation (i.e. in '/<doc_prefix>/'). | ||
3413 | 51 | # This means the following list is meaningful only for trunk. | ||
3414 | 52 | # The first item should be the development version. | ||
3415 | 53 | from collections import OrderedDict | ||
3416 | 54 | doc_versions = OrderedDict([ | ||
3417 | 55 | ('dev', 'Development trunk'), | ||
3418 | 56 | ('1.7', 'MAAS 1.7'), | ||
3419 | 57 | ('1.6', 'MAAS 1.6'), | ||
3420 | 58 | ('1.5', 'MAAS 1.5'), | ||
3421 | 59 | ('1.4', 'MAAS 1.4'), | ||
3422 | 60 | ('1.3', 'MAAS 1.3'), | ||
3423 | 61 | ('1.2', 'MAAS 1.2'), | ||
3424 | 62 | ]) | ||
3425 | 63 | |||
3426 | 64 | # -- General configuration ----------------------------------------------------- | ||
3427 | 65 | |||
3428 | 66 | # If your documentation needs a minimal Sphinx version, state it here. | ||
3429 | 67 | #needs_sphinx = '1.0' | ||
3430 | 68 | |||
3431 | 69 | # Add any Sphinx extension module names here, as strings. They can be extensions | ||
3432 | 70 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. | ||
3433 | 71 | extensions = [ | ||
3434 | 72 | 'sphinx.ext.autodoc', | ||
3435 | 73 | 'sphinx.ext.autosummary', | ||
3436 | 74 | 'sphinx.ext.doctest', | ||
3437 | 75 | 'sphinx.ext.intersphinx', | ||
3438 | 76 | 'sphinx.ext.pngmath', | ||
3439 | 77 | 'sphinx.ext.viewcode', | ||
3440 | 78 | 'versions', | ||
3441 | 79 | ] | ||
3442 | 80 | |||
3443 | 81 | # Add any paths that contain templates here, relative to this directory. | ||
3444 | 82 | templates_path = ['_templates'] | ||
3445 | 83 | |||
3446 | 84 | # The suffix of source filenames. | ||
3447 | 85 | source_suffix = '.rst' | ||
3448 | 86 | |||
3449 | 87 | # The encoding of source files. | ||
3450 | 88 | #source_encoding = 'utf-8-sig' | ||
3451 | 89 | |||
3452 | 90 | # The master toctree document. | ||
3453 | 91 | master_doc = 'index' | ||
3454 | 92 | |||
3455 | 93 | # General information about the project. | ||
3456 | 94 | project = u'MAAS' | ||
3457 | 95 | copyright = u'2012-2014, MAAS Developers' | ||
3458 | 96 | |||
3459 | 97 | # The version info for the project you're documenting, acts as replacement for | ||
3460 | 98 | # |version| and |release|, also used in various other places throughout the | ||
3461 | 99 | # built documents. | ||
3462 | 100 | # | ||
3463 | 101 | # The short X.Y version. | ||
3464 | 102 | version = doc_versions.items()[0][0] | ||
3465 | 103 | # The full version, including alpha/beta/rc tags. | ||
3466 | 104 | release = version | ||
3467 | 105 | |||
3468 | 106 | # The language for content autogenerated by Sphinx. Refer to documentation | ||
3469 | 107 | # for a list of supported languages. | ||
3470 | 108 | #language = None | ||
3471 | 109 | |||
3472 | 110 | # There are two options for replacing |today|: either, you set today to some | ||
3473 | 111 | # non-false value, then it is used: | ||
3474 | 112 | #today = '' | ||
3475 | 113 | # Else, today_fmt is used as the format for a strftime call. | ||
3476 | 114 | #today_fmt = '%B %d, %Y' | ||
3477 | 115 | |||
3478 | 116 | # List of patterns, relative to source directory, that match files and | ||
3479 | 117 | # directories to ignore when looking for source files. | ||
3480 | 118 | exclude_patterns = ['_build', '_templates'] | ||
3481 | 119 | |||
3482 | 120 | # The reST default role (used for this markup: `text`) to use for all documents. | ||
3483 | 121 | #default_role = None | ||
3484 | 122 | |||
3485 | 123 | # If true, '()' will be appended to :func: etc. cross-reference text. | ||
3486 | 124 | #add_function_parentheses = True | ||
3487 | 125 | |||
3488 | 126 | # If true, the current module name will be prepended to all description | ||
3489 | 127 | # unit titles (such as .. function::). | ||
3490 | 128 | #add_module_names = True | ||
3491 | 129 | |||
3492 | 130 | # If true, sectionauthor and moduleauthor directives will be shown in the | ||
3493 | 131 | # output. They are ignored by default. | ||
3494 | 132 | #show_authors = False | ||
3495 | 133 | |||
3496 | 134 | # The name of the Pygments (syntax highlighting) style to use. | ||
3497 | 135 | pygments_style = 'sphinx' | ||
3498 | 136 | |||
3499 | 137 | # A list of ignored prefixes for module index sorting. | ||
3500 | 138 | #modindex_common_prefix = [] | ||
3501 | 139 | |||
3502 | 140 | # AutoDoc <http://sphinx.pocoo.org/ext/autodoc.html> | ||
3503 | 141 | autodoc_default_flags = ['members', 'show-inheritance'] | ||
3504 | 142 | autodoc_member_order = 'bysource' | ||
3505 | 143 | autodoc_docstring_signature = True | ||
3506 | 144 | |||
3507 | 145 | # AutoSummary <http://sphinx.pocoo.org/ext/autosummary.html> | ||
3508 | 146 | autosummary_generate = True | ||
3509 | 147 | |||
3510 | 148 | # -- Options for HTML output --------------------------------------------------- | ||
3511 | 149 | |||
3512 | 150 | # The theme to use for HTML and HTML Help pages. See the documentation for | ||
3513 | 151 | # a list of builtin themes. | ||
3514 | 152 | html_theme = 'maas' | ||
3515 | 153 | |||
3516 | 154 | # Theme options are theme-specific and customize the look and feel of a theme | ||
3517 | 155 | # further. For a list of options available for each theme, see the | ||
3518 | 156 | # documentation. | ||
3519 | 157 | #html_theme_options = {} | ||
3520 | 158 | |||
3521 | 159 | # Add any paths that contain custom themes here, relative to this directory. | ||
3522 | 160 | #html_theme_path = [] | ||
3523 | 161 | |||
3524 | 162 | html_theme_path = ['_templates'] | ||
3525 | 163 | |||
3526 | 164 | # The name for this set of Sphinx documents. If None, it defaults to | ||
3527 | 165 | # "<project> v<release> documentation". | ||
3528 | 166 | #html_title = None | ||
3529 | 167 | |||
3530 | 168 | # A shorter title for the navigation bar. Default is the same as html_title. | ||
3531 | 169 | #html_short_title = None | ||
3532 | 170 | |||
3533 | 171 | # The name of an image file (relative to this directory) to place at the top | ||
3534 | 172 | # of the sidebar. | ||
3535 | 173 | html_logo = 'media/maas-logo-200.png' | ||
3536 | 174 | |||
3537 | 175 | # The name of an image file (within the static path) to use as favicon of the | ||
3538 | 176 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 | ||
3539 | 177 | # pixels large. | ||
3540 | 178 | html_favicon = 'media/maas.ico' | ||
3541 | 179 | |||
3542 | 180 | # Add any paths that contain custom static files (such as style sheets) here, | ||
3543 | 181 | # relative to this directory. They are copied after the builtin static files, | ||
3544 | 182 | # so a file named "default.css" will overwrite the builtin "default.css". | ||
3545 | 183 | html_static_path = ['_static'] | ||
3546 | 184 | |||
3547 | 185 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, | ||
3548 | 186 | # using the given strftime format. | ||
3549 | 187 | html_last_updated_fmt = '%b %d, %Y' | ||
3550 | 188 | |||
3551 | 189 | # If true, SmartyPants will be used to convert quotes and dashes to | ||
3552 | 190 | # typographically correct entities. | ||
3553 | 191 | #html_use_smartypants = True | ||
3554 | 192 | |||
3555 | 193 | # Custom sidebar templates, maps document names to template names. | ||
3556 | 194 | #html_sidebars = {} | ||
3557 | 195 | |||
3558 | 196 | # Additional templates that should be rendered to pages, maps page names to | ||
3559 | 197 | # template names. | ||
3560 | 198 | #html_additional_pages = {} | ||
3561 | 199 | |||
3562 | 200 | # If false, no module index is generated. | ||
3563 | 201 | #html_domain_indices = True | ||
3564 | 202 | |||
3565 | 203 | # If false, no index is generated. | ||
3566 | 204 | #html_use_index = True | ||
3567 | 205 | |||
3568 | 206 | # If true, the index is split into individual pages for each letter. | ||
3569 | 207 | #html_split_index = False | ||
3570 | 208 | |||
3571 | 209 | # If true, links to the reST sources are added to the pages. | ||
3572 | 210 | #html_show_sourcelink = True | ||
3573 | 211 | |||
3574 | 212 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. | ||
3575 | 213 | html_show_sphinx = True | ||
3576 | 214 | |||
3577 | 215 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. | ||
3578 | 216 | html_show_copyright = True | ||
3579 | 217 | |||
3580 | 218 | # If true, an OpenSearch description file will be output, and all pages will | ||
3581 | 219 | # contain a <link> tag referring to it. The value of this option must be the | ||
3582 | 220 | # base URL from which the finished HTML is served. | ||
3583 | 221 | #html_use_opensearch = '' | ||
3584 | 222 | |||
3585 | 223 | # This is the file name suffix for HTML files (e.g. ".xhtml"). | ||
3586 | 224 | #html_file_suffix = None | ||
3587 | 225 | |||
3588 | 226 | # Output file base name for HTML help builder. | ||
3589 | 227 | htmlhelp_basename = 'MAASdoc' | ||
3590 | 228 | |||
3591 | 229 | |||
3592 | 230 | # -- Options for LaTeX output -------------------------------------------------- | ||
3593 | 231 | |||
3594 | 232 | # The paper size ('letter' or 'a4'). | ||
3595 | 233 | latex_paper_size = 'a4' | ||
3596 | 234 | |||
3597 | 235 | # The font size ('10pt', '11pt' or '12pt'). | ||
3598 | 236 | #latex_font_size = '10pt' | ||
3599 | 237 | |||
3600 | 238 | # Grouping the document tree into LaTeX files. List of tuples | ||
3601 | 239 | # (source start file, target name, title, author, documentclass [howto/manual]). | ||
3602 | 240 | latex_documents = [ | ||
3603 | 241 | ('index', 'MAAS.tex', u'MAAS Documentation', | ||
3604 | 242 | u'MAAS Developers', 'manual'), | ||
3605 | 243 | ] | ||
3606 | 244 | |||
3607 | 245 | # The name of an image file (relative to this directory) to place at the top of | ||
3608 | 246 | # the title page. | ||
3609 | 247 | #latex_logo = None | ||
3610 | 248 | |||
3611 | 249 | # For "manual" documents, if this is true, then toplevel headings are parts, | ||
3612 | 250 | # not chapters. | ||
3613 | 251 | #latex_use_parts = False | ||
3614 | 252 | |||
3615 | 253 | # If true, show page references after internal links. | ||
3616 | 254 | #latex_show_pagerefs = False | ||
3617 | 255 | |||
3618 | 256 | # If true, show URL addresses after external links. | ||
3619 | 257 | #latex_show_urls = False | ||
3620 | 258 | |||
3621 | 259 | # Additional stuff for the LaTeX preamble. | ||
3622 | 260 | #latex_preamble = '' | ||
3623 | 261 | |||
3624 | 262 | # Documents to append as an appendix to all manuals. | ||
3625 | 263 | #latex_appendices = [] | ||
3626 | 264 | |||
3627 | 265 | # If false, no module index is generated. | ||
3628 | 266 | #latex_domain_indices = True | ||
3629 | 267 | |||
3630 | 268 | |||
3631 | 269 | # -- Options for manual page output -------------------------------------------- | ||
3632 | 270 | |||
3633 | 271 | # One entry per manual page. List of tuples | ||
3634 | 272 | # (source start file, name, description, authors, manual section). | ||
3635 | 273 | man_pages = [ | ||
3636 | 274 | ('man/maas.8', 'maas', u'MAAS API commandline utility', | ||
3637 | 275 | [u'Canonical 2013-2014'], 8), | ||
3638 | 276 | ('man/maas-region-admin.8', 'maas-region-admin', u'MAAS administration tool', | ||
3639 | 277 | [u'Canonical 2013-2014'], 8) | ||
3640 | 278 | ] | ||
3641 | 279 | |||
3642 | 280 | |||
3643 | 281 | # Example configuration for intersphinx: refer to the Python standard library. | ||
3644 | 282 | intersphinx_mapping = {'http://docs.python.org/': None} | ||
3645 | 283 | |||
3646 | 284 | # Gather information about the branch and the build date. | ||
3647 | 285 | from subprocess import check_output, CalledProcessError | ||
3648 | 286 | try: | ||
3649 | 287 | bzr_last_revision_number = check_output(['bzr', 'revno']) | ||
3650 | 288 | bzr_last_revision_date = check_output(['bzr', 'version-info', '--template={date}', '--custom']) | ||
3651 | 289 | bzr_build_date = check_output(['bzr', 'version-info', '--template={build_date}', '--custom']) | ||
3652 | 290 | except (CalledProcessError): | ||
3653 | 291 | # not a bzr repository | ||
3654 | 292 | bzr_last_revision_number = 'unknown' | ||
3655 | 293 | bzr_last_revision_date = check_output(['date', '-u', '+%Y-%m-%d %H:%M:%S %z']) | ||
3656 | 294 | bzr_build_date = bzr_last_revision_date | ||
3657 | 295 | |||
3658 | 296 | |||
3659 | 297 | # Populate html_context with the variables used in the templates. | ||
3660 | 298 | html_context = { | ||
3661 | 299 | 'add_version_switcher': 'true' if add_version_switcher else 'false', | ||
3662 | 300 | 'versions_json_path': '/'.join(['', doc_prefix, versions_path]), | ||
3663 | 301 | 'doc_prefix': doc_prefix, | ||
3664 | 302 | 'bzr_last_revision_date': bzr_last_revision_date, | ||
3665 | 303 | 'bzr_last_revision_number': bzr_last_revision_number, | ||
3666 | 304 | 'bzr_build_date': bzr_build_date, | ||
3667 | 305 | } | ||
3668 | 306 | 0 | ||
3669 | === renamed file 'docs/configure.rst' => 'docs/configure.md' | |||
3670 | --- docs/configure.rst 2015-03-25 13:22:48 +0000 | |||
3671 | +++ docs/configure.md 2015-04-17 21:06:27 +0000 | |||
3672 | @@ -1,268 +1,175 @@ | |||
3673 | 1 | Additional Configuration | 1 | Additional Configuration |
3674 | 2 | ======================== | 2 | ======================== |
3675 | 3 | 3 | ||
3676 | 4 | |||
3677 | 5 | .. _manual-dhcp: | ||
3678 | 6 | |||
3679 | 7 | Manual DHCP configuration | 4 | Manual DHCP configuration |
3680 | 8 | ------------------------- | 5 | ------------------------- |
3681 | 9 | 6 | ||
3691 | 10 | DHCP is needed in order for MAAS to boot and control nodes. However, there | 7 | DHCP 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. |
3692 | 11 | are some circumstances under which you may not wish a cluster controller to | 8 | |
3693 | 12 | handle DHCP address assignments for the network. In these instances, the | 9 | > **note** |
3694 | 13 | existing DHCP server for the network will need its configuration altered to | 10 | |
3695 | 14 | allow 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. |
3687 | 15 | |||
3688 | 16 | .. note:: | ||
3689 | 17 | If you don't let MAAS manage DHCP, then MAAS will not be able to allocate | ||
3690 | 18 | its :ref:`static IP addresses <static-ip-address>` to Nodes. | ||
3696 | 19 | 12 | ||
3697 | 20 | At the very least the "filename" option should be set to "pxelinux.0". | 13 | At the very least the "filename" option should be set to "pxelinux.0". |
3698 | 21 | 14 | ||
3724 | 22 | How to configure this depends on what software you use as a DHCP server. If | 15 | How 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: |
3725 | 23 | you are using the ISC DHCP server, for example, the configuration entry might | 16 | |
3726 | 24 | look something like this:: | 17 | subnet 192.168.122.0 netmask 255.255.255.0 { |
3727 | 25 | 18 | filename "pxelinux.0"; | |
3728 | 26 | subnet 192.168.122.0 netmask 255.255.255.0 { | 19 | option subnet-mask 255.255.255.0; |
3729 | 27 | filename "pxelinux.0"; | 20 | option broadcast-address 192.168.122.255; |
3730 | 28 | option subnet-mask 255.255.255.0; | 21 | option domain-name-servers 192.168.122.136; |
3731 | 29 | option broadcast-address 192.168.122.255; | 22 | range dynamic-bootp 192.168.122.5 192.168.122.135; |
3732 | 30 | option domain-name-servers 192.168.122.136; | 23 | } |
3733 | 31 | range dynamic-bootp 192.168.122.5 192.168.122.135; | 24 | |
3734 | 32 | } | 25 | When doing this, leave the cluster controller's interface in the "unmanaged" state. |
3735 | 33 | 26 | ||
3736 | 34 | When doing this, leave the cluster controller's interface in the "unmanaged" | 27 | If 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. |
3712 | 35 | state. | ||
3713 | 36 | |||
3714 | 37 | If your cluster controller is in charge of nodes on more than one network | ||
3715 | 38 | through different network interfaces, there is an additional complication. | ||
3716 | 39 | Without the DHCP server built into the cluster controller, MAAS may not | ||
3717 | 40 | know which of the cluster controller's IP addresses each node should use | ||
3718 | 41 | for downloading its installer image. If you want to support this situation, | ||
3719 | 42 | ensure that all of the nodes can reach all of the cluster controller's | ||
3720 | 43 | network addresses. | ||
3721 | 44 | |||
3722 | 45 | |||
3723 | 46 | .. _ssl: | ||
3737 | 47 | 28 | ||
3738 | 48 | SSL Support | 29 | SSL Support |
3739 | 49 | ----------- | 30 | ----------- |
3740 | 50 | 31 | ||
3760 | 51 | If you want secure access to your MAAS web UI/API, you need to do a few | 32 | If you want secure access to your MAAS web UI/API, you need to do a few things. First, turn on SSL support in Apache: |
3761 | 52 | things. First, turn on SSL support in Apache:: | 33 | |
3762 | 53 | 34 | $ sudo a2enmod ssl | |
3763 | 54 | $ sudo a2enmod ssl | 35 | |
3764 | 55 | 36 | Ensure 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. | |
3765 | 56 | Ensure that the Apache config file from ``etc/maas/maas-http.conf`` is | 37 | |
3766 | 57 | included in ``/etc/apache2/conf.d/``, then edit | 38 | Now, restart Apache: |
3767 | 58 | ``/etc/maas/maas_local_settings.py`` and change DEFAULT_MAAS_URL so that it | 39 | |
3768 | 59 | uses https instead of http. | 40 | $ sudo service apache2 restart |
3769 | 60 | 41 | ||
3770 | 61 | Now, restart Apache:: | 42 | At 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. |
3752 | 62 | |||
3753 | 63 | $ sudo service apache2 restart | ||
3754 | 64 | |||
3755 | 65 | At this point you will be able to access the MAAS web server using https but | ||
3756 | 66 | the default SSL certificate is insecure. Please generate your own and then | ||
3757 | 67 | edit ``/etc/apache2/conf.d/maas-http.conf`` to set the location of the | ||
3758 | 68 | certificate. | ||
3759 | 69 | |||
3771 | 70 | 43 | ||
3772 | 71 | Choosing a series to install | 44 | Choosing a series to install |
3773 | 72 | ---------------------------- | 45 | ---------------------------- |
3774 | 73 | 46 | ||
3809 | 74 | You may have some specific reason to choose a particular version of Ubuntu | 47 | You 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. |
3810 | 75 | to install on your nodes, perhaps based around package availability, | 48 | |
3811 | 76 | hardware support or some other reason. | 49 | It is possible to choose a specific series from those available in a number of ways. |
3812 | 77 | 50 | ||
3813 | 78 | It is possible to choose a specific series from those available in a | 51 | ### From the user interface |
3814 | 79 | number of ways. | 52 | |
3815 | 80 | 53 | The 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. | |
3816 | 81 | From the user interface | 54 | |
3817 | 82 | ^^^^^^^^^^^^^^^^^^^^^^^ | 55 | ![image](media/series.*) |
3818 | 83 | 56 | ||
3819 | 84 | The web-based user interface makes it easy to select which Ubuntu series you | 57 | The menu will always list all the currently available series according to which boot images are available. |
3820 | 85 | wish to install on an individual node. When either adding a node | 58 | |
3821 | 86 | manually, or on the node page when the node has been automatically | 59 | ### Using the maas command |
3822 | 87 | discovered but before it is accepted, there is a drop down menu to select | 60 | |
3823 | 88 | the version of Ubuntu you wish to install. | 61 | It is also possible to select a series using the maas command. This can be done on a per node basis with: |
3824 | 89 | 62 | ||
3825 | 90 | .. image:: media/series.* | 63 | $ maas <profile> node update <system_id> distro_series="<value>" |
3826 | 91 | 64 | ||
3827 | 92 | The menu will always list all the currently available series according | 65 | Where the string contains one of the valid, available distro series (e.g. "trusty") or is empty for the default value. |
3794 | 93 | to which boot images are available. | ||
3795 | 94 | |||
3796 | 95 | Using the maas command | ||
3797 | 96 | ^^^^^^^^^^^^^^^^^^^^^^ | ||
3798 | 97 | |||
3799 | 98 | It is also possible to select a series using the maas command. This | ||
3800 | 99 | can be done on a per node basis with:: | ||
3801 | 100 | |||
3802 | 101 | $ maas <profile> node update <system_id> distro_series="<value>" | ||
3803 | 102 | |||
3804 | 103 | Where the string contains one of the valid, available distro series (e.g. | ||
3805 | 104 | "trusty") or is empty for the default value. | ||
3806 | 105 | |||
3807 | 106 | |||
3808 | 107 | .. _preseed: | ||
3828 | 108 | 66 | ||
3829 | 109 | Altering the Preseed file | 67 | Altering the Preseed file |
3830 | 110 | ------------------------- | 68 | ------------------------- |
3831 | 111 | 69 | ||
3861 | 112 | .. warning:: | 70 | > **warning** |
3862 | 113 | Do not try to alter the preseed files if you don't have a good | 71 | |
3863 | 114 | understanding of what you are doing. Altering the installed version | 72 | > 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. |
3864 | 115 | of Ubuntu can prevent MAAS from working as intended, and may have | 73 | |
3865 | 116 | security and stability consequences. | 74 | When 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: |
3866 | 117 | 75 | ||
3867 | 118 | When MAAS commissions a node it installs a version of Ubuntu. The | 76 | /etc/maas/preseeds/generic |
3868 | 119 | installation is performed using a 'preseed' file, which is | 77 | /etc/maas/preseeds/preseed-master |
3869 | 120 | effectively a list of answers to the questions you would get were | 78 | |
3870 | 121 | you to run the installer manually. | 79 | The 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. |
3871 | 122 | The preseed file used by MAAS is carefully made so that the | 80 | |
3872 | 123 | target node can be brought up and do all the jobs expected of it. | 81 | For 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: |
3844 | 124 | However, in exceptional circumstances, you may wish to alter the | ||
3845 | 125 | pressed file to work around some issue. | ||
3846 | 126 | There are actually two preseed files, stored here:: | ||
3847 | 127 | |||
3848 | 128 | /etc/maas/preseeds/generic | ||
3849 | 129 | /etc/maas/preseeds/preseed-master | ||
3850 | 130 | |||
3851 | 131 | The generic file actually references the preseed-master file, and is | ||
3852 | 132 | used to set conditional parameters based on the type of series and | ||
3853 | 133 | architecture to install as well as to define the minimum set of install | ||
3854 | 134 | packages and to tidy up the PXE boot process if that has been used for | ||
3855 | 135 | the node. Unless you have a specific need to change where install | ||
3856 | 136 | packages come from, you should not need to edit this file. | ||
3857 | 137 | |||
3858 | 138 | For the more usual sorts of things you may wish to change, you should | ||
3859 | 139 | edit the preseed-master file. For example, depending on your network | ||
3860 | 140 | you may wish to change the clock settings:: | ||
3873 | 141 | 82 | ||
3874 | 142 | # Local clock (set to UTC and use ntp) | 83 | # Local clock (set to UTC and use ntp) |
3875 | 143 | d-i clock-setup/utc boolean true | 84 | d-i clock-setup/utc boolean true |
3876 | 144 | d-i clock-setup/ntp boolean true | 85 | d-i clock-setup/ntp boolean true |
3877 | 145 | d-i clock-setup/ntp-server string ntp.ubuntu.com | 86 | d-i clock-setup/ntp-server string ntp.ubuntu.com |
3878 | 146 | 87 | ||
3933 | 147 | Having consistent clocks is very important to the working of your MAAS | 88 | Having 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. |
3934 | 148 | system overall. If your nodes however cannot freely access the Internet, | 89 | |
3935 | 149 | the supplied NTP server is not going to be very useful, and you may | 90 | One 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: |
3936 | 150 | find it better to run an ntp service on the MAAS controller and change | 91 | |
3937 | 151 | the `ntp.ubuntu.com` in the last line for a more appropriate server. | 92 | partman-auto/text/atomic_scheme :: |
3938 | 152 | 93 | ||
3939 | 153 | One thing you may wish to alter in the preseed file is the disk | 94 | 500 10000 1000000 ext3 |
3940 | 154 | partitioning. This is a simple recipe that creates a swap partition and | 95 | $primary{ } |
3941 | 155 | uses the rest of the disk for one large root filesystem:: | 96 | $bootable{ } |
3942 | 156 | 97 | method{ format } | |
3943 | 157 | partman-auto/text/atomic_scheme :: | 98 | format{ } |
3944 | 158 | 99 | use_filesystem{ } | |
3945 | 159 | 500 10000 1000000 ext3 | 100 | filesystem{ ext3 } |
3946 | 160 | $primary{ } | 101 | mountpoint{ / } . |
3947 | 161 | $bootable{ } | 102 | |
3948 | 162 | method{ format } | 103 | 64 512 300% linux-swap |
3949 | 163 | format{ } | 104 | method{ swap } |
3950 | 164 | use_filesystem{ } | 105 | format{ } . |
3951 | 165 | filesystem{ ext3 } | 106 | |
3952 | 166 | mountpoint{ / } . | 107 | Here 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: |
3953 | 167 | 108 | ||
3954 | 168 | 64 512 300% linux-swap | 109 | *method{ format }* |
3955 | 169 | method{ swap } | 110 | Used 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). |
3956 | 170 | format{ } . | 111 | |
3957 | 171 | 112 | *format{ }* | |
3958 | 172 | 113 | Also needed to make the partition be formatted. | |
3959 | 173 | Here the root partition must be at least 500 mb, and has effectively no | 114 | |
3960 | 174 | maximum size. The swap partition ranges from 64 MB to 3 times the system's | 115 | *use\_filesystem{ }* |
3961 | 175 | ram. | 116 | Specifies that the partition has a filesystem on it. |
3962 | 176 | Adding `$bootable{ }` to make the partition bootable, and $primary{ } | 117 | |
3963 | 177 | marks it as the primary partition. The other specifiers used are: | 118 | *filesystem{ ext3 }* |
3964 | 178 | 119 | Specifies the filesystem to put on the partition. | |
3965 | 179 | *method{ format }* | 120 | |
3966 | 180 | Used to make the partition be formatted. For swap partitions, | 121 | *mountpoint{ / }* |
3967 | 181 | change it to "swap". To create a new partition but do not | 122 | Where to mount the partition. |
3968 | 182 | format it, change "format" to "keep" (such a partition can be | 123 | |
3969 | 183 | used to reserve for future use some disk space). | 124 | For 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) |
3970 | 184 | *format{ }* | 125 | |
3971 | 185 | Also needed to make the partition be formatted. | 126 | > **note** |
3972 | 186 | *use_filesystem{ }* | 127 | |
3973 | 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. |
3920 | 188 | *filesystem{ ext3 }* | ||
3921 | 189 | Specifies the filesystem to put on the partition. | ||
3922 | 190 | *mountpoint{ / }* | ||
3923 | 191 | Where to mount the partition. | ||
3924 | 192 | |||
3925 | 193 | For more information on preseed options, you should refer to | ||
3926 | 194 | `the official Ubuntu documentation | ||
3927 | 195 | <https://help.ubuntu.com/12.04/installation-guide/i386/preseed-contents.html>`_ | ||
3928 | 196 | |||
3929 | 197 | .. note:: | ||
3930 | 198 | Future versions of MAAS are likely to replace this type of automatic | ||
3931 | 199 | installation with a different installer. | ||
3932 | 200 | |||
3974 | 201 | 129 | ||
3975 | 202 | Installing additional clusters | 130 | Installing additional clusters |
3976 | 203 | ------------------------------ | 131 | ------------------------------ |
3977 | 204 | 132 | ||
4014 | 205 | In an environment comprising large numbers of nodes, it is likely that you will | 133 | In 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: |
4015 | 206 | want to organise the nodes on a more distributed basis. The standard install of | 134 | |
4016 | 207 | the MAAS region controller includes a cluster controller, but it is | 135 | ![image](media/orientation_architecture-diagram.*) |
4017 | 208 | possible to add additional cluster controllers to the configuration, as | 136 | |
4018 | 209 | shown in the diagram below: | 137 | Each cluster controller will need to run on a separate Ubuntu server. Installing and configuring the software is straightforward though: |
4019 | 210 | 138 | ||
4020 | 211 | .. image:: media/orientation_architecture-diagram.* | 139 | $ sudo apt-get install maas-cluster-controller |
4021 | 212 | 140 | ||
4022 | 213 | Each cluster controller will need to run on a separate Ubuntu server. | 141 | This 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: |
4023 | 214 | Installing and configuring the software is straightforward though:: | 142 | |
4024 | 215 | 143 | $ sudo apt-get install maas-cluster-controller maas-dhcp maas-dns | |
4025 | 216 | $ sudo apt-get install maas-cluster-controller | 144 | |
4026 | 217 | 145 | ### Configuring the cluster controller | |
4027 | 218 | This meta-package will install all the basic requirements of the system. | 146 | |
4028 | 219 | However, you may also wish or need to run DHCP and/or DNS services, in | 147 | Once 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: |
4029 | 220 | which case you should also specify these:: | 148 | |
4030 | 221 | 149 | $ dpkg-reconfigure maas-cluster-controller | |
4031 | 222 | $ sudo apt-get install maas-cluster-controller maas-dhcp maas-dns | 150 | |
4032 | 223 | 151 | ![image](media/cluster-config.*) | |
4033 | 224 | 152 | ||
4034 | 225 | Configuring the cluster controller | 153 | The 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: |
4035 | 226 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | 154 | |
4036 | 227 | 155 | $ maas maas node-groups import-boot-images | |
4001 | 228 | Once the packages are installed, the cluster controller needs to know | ||
4002 | 229 | where to look for the region controller. This is achieved using `dpkg` to | ||
4003 | 230 | configure the software:: | ||
4004 | 231 | |||
4005 | 232 | $ dpkg-reconfigure maas-cluster-controller | ||
4006 | 233 | |||
4007 | 234 | .. image:: media/cluster-config.* | ||
4008 | 235 | |||
4009 | 236 | The configuration script should then bring up a screen where you can | ||
4010 | 237 | enter the IP address of the region controller. Additionally, you will | ||
4011 | 238 | need to import the distro image files locally for commissioning:: | ||
4012 | 239 | |||
4013 | 240 | $ maas maas node-groups import-boot-images | ||
4037 | 241 | 156 | ||
4038 | 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: |
4039 | 243 | 158 | ||
4048 | 244 | *Using the web UI* | 159 | *Using the web UI* |
4049 | 245 | Follow the instructions at :doc:`cluster-configuration` to | 160 | Follow the instructions at cluster-configuration to use the web UI to set up your cluster controller. |
4050 | 246 | use the web UI to set up your cluster controller. | 161 | |
4051 | 247 | 162 | *Using the command line client* | |
4052 | 248 | *Using the command line client* | 163 | First logging in to the API \<api-key\> and then following this procedure \<cli-dhcp\> |
4045 | 249 | First :ref:`logging in to the API <api-key>` and then | ||
4046 | 250 | :ref:`following this procedure <cli-dhcp>` | ||
4047 | 251 | |||
4053 | 252 | 164 | ||
4054 | 253 | Client-side DNS configuration | 165 | Client-side DNS configuration |
4055 | 254 | ----------------------------- | 166 | ----------------------------- |
4056 | 255 | 167 | ||
4070 | 256 | When using a third party tool such as ``juju`` it will need to be able to | 168 | When 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: |
4071 | 257 | resolve the hostnames that the MAAS API returns to it. In order for this to | 169 | |
4072 | 258 | happen, *client-side DNS* must be configured to point to MAAS's DNS | 170 | nameserver <IP OF MAAS DNS HOST> |
4073 | 259 | server. Generally speaking, this is a simple case of adding the following | 171 | |
4074 | 260 | line to the ``/etc/resolv.conf`` file on your client host:: | 172 | replacing the \<IP OF MAAS DNS HOST\> with the actual IP address of the host running the MAAS DNS server. |
4075 | 261 | 173 | ||
4076 | 262 | nameserver <IP OF MAAS DNS HOST> | 174 | However, for hosts using the `resolvconf` package, please read its documentation for more information. |
4077 | 263 | 175 | ||
4065 | 264 | replacing the <IP OF MAAS DNS HOST> with the actual IP address of the host | ||
4066 | 265 | running the MAAS DNS server. | ||
4067 | 266 | |||
4068 | 267 | However, for hosts using the ``resolvconf`` package, please read its | ||
4069 | 268 | documentation for more information. | ||
4078 | 269 | 176 | ||
4079 | === renamed file 'docs/development/building-packages.rst' => 'docs/development/building-packages.md' | |||
4080 | --- docs/development/building-packages.rst 2014-02-26 16:56:23 +0000 | |||
4081 | +++ docs/development/building-packages.md 2015-04-17 21:06:27 +0000 | |||
4082 | @@ -1,76 +1,61 @@ | |||
4083 | 1 | Building Ubuntu packages of MAAS | 1 | Building Ubuntu packages of MAAS |
4084 | 2 | ================================ | 2 | ================================ |
4085 | 3 | 3 | ||
4159 | 4 | Using a virtual machine from a cloud provider seems to be easier and | 4 | Using 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. |
4160 | 5 | less hassle than using a local VM or LXC container, but the same | 5 | |
4161 | 6 | recipe ought to apply. | 6 | You 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. |
4162 | 7 | 7 | ||
4163 | 8 | You need to build on the same OS that the package will be targeted to, | 8 | 1. Start up an instance, log in, and bring it up to date: |
4164 | 9 | so use a Precise instance to make packages for Precise, for example. | 9 | |
4165 | 10 | 10 | sudo apt-get update && sudo apt-get upgrade | |
4166 | 11 | #. Start up an instance, log in, and bring it up to date:: | 11 | |
4167 | 12 | 12 | 2. Get the appropriate packaging branch: | |
4168 | 13 | sudo apt-get update && sudo apt-get upgrade | 13 | |
4169 | 14 | 14 | bzr branch lp:~maas-maintainers/maas/packaging{...} | |
4170 | 15 | #. Get the appropriate packaging branch:: | 15 | |
4171 | 16 | 16 | The [MAAS Maintainers](https://launchpad.net/~maas-maintainers) own all the [official MAAS branches](https://code.launchpad.net/~maas-maintainers). | |
4172 | 17 | bzr branch lp:~maas-maintainers/maas/packaging{...} | 17 | |
4173 | 18 | 18 | 3. Move into the new branch directory. | |
4174 | 19 | The `MAAS Maintainers <https://launchpad.net/~maas-maintainers>`_ | 19 | 4. Check that all the build dependencies are installed. The dependencies are defined in `debian/control`: |
4175 | 20 | own all the `official MAAS branches`_. | 20 | |
4176 | 21 | 21 | fgrep -i build-depends -A 10 debian/control | |
4177 | 22 | #. Move into the new branch directory. | 22 | |
4178 | 23 | 23 | This will yield, for example: | |
4179 | 24 | #. Check that all the build dependencies are installed. The | 24 | |
4180 | 25 | dependencies are defined in ``debian/control``:: | 25 | Build-Depends: debhelper (>= 8.1.0~), |
4181 | 26 | 26 | dh-apport, | |
4182 | 27 | fgrep -i build-depends -A 10 debian/control | 27 | po-debconf, |
4183 | 28 | 28 | python (>= 2.7), | |
4184 | 29 | This will yield, for example:: | 29 | python-distribute, |
4185 | 30 | 30 | python-django | |
4186 | 31 | Build-Depends: debhelper (>= 8.1.0~), | 31 | Standards-Version: 3.9.3 |
4187 | 32 | dh-apport, | 32 | ... |
4188 | 33 | po-debconf, | 33 | |
4189 | 34 | python (>= 2.7), | 34 | Install these dependencies: |
4190 | 35 | python-distribute, | 35 | |
4191 | 36 | python-django | 36 | sudo apt get install \ |
4192 | 37 | Standards-Version: 3.9.3 | 37 | debhelper dh-apport po-debconf python \ |
4193 | 38 | ... | 38 | python-distribute python-django |
4194 | 39 | 39 | ||
4195 | 40 | Install these dependencies:: | 40 | 5. Edit `debian/changelog` so it contains: |
4196 | 41 | 41 | - the right upstream revision number in the version, | |
4197 | 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), |
4198 | 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. |
4199 | 44 | python-distribute python-django | 44 | |
4200 | 45 | 45 | 6. Build: | |
4201 | 46 | #. Edit ``debian/changelog`` so it contains: | 46 | |
4202 | 47 | 47 | bzr bd -S -- -uc -us | |
4203 | 48 | * the right upstream revision number in the version, | 48 | |
4204 | 49 | 49 | 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. | |
4205 | 50 | * the series you're building for; if ``UNRELEASED`` appears in the | 50 | |
4206 | 51 | first entry, ``s/UNRELEASED/trusty/`` (or the series you want), | 51 | 7. Sign the build on your local machine: |
4207 | 52 | 52 | ||
4208 | 53 | * the name and email address that correspond to the PGP key you | 53 | debsign -r user@host '~/*.changes' |
4209 | 54 | want to use to sign the package; these appear near the end of the | 54 | |
4210 | 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. |
4211 | 56 | 56 | ||
4212 | 57 | #. Build:: | 57 | 8. On the remote instance you can optionally upload to a PPA: |
4213 | 58 | 58 | ||
4214 | 59 | bzr bd -S -- -uc -us | 59 | dput -fu ppa:maas-maintainers/name-of-ppa *.changes |
4215 | 60 | 60 | ||
4216 | 61 | The latter options tell it not to sign the files. You need to do | 61 | |
4144 | 62 | this because the remote machine will not have your GPG key. | ||
4145 | 63 | |||
4146 | 64 | #. Sign the build on your local machine:: | ||
4147 | 65 | |||
4148 | 66 | debsign -r user@host '~/*.changes' | ||
4149 | 67 | |||
4150 | 68 | where ``user@host`` is an SSH string for accessing the remote | ||
4151 | 69 | instance. This will scp the changes and dsc locally, sign them, and | ||
4152 | 70 | put them back. | ||
4153 | 71 | |||
4154 | 72 | #. On the remote instance you can optionally upload to a PPA:: | ||
4155 | 73 | |||
4156 | 74 | dput -fu ppa:maas-maintainers/name-of-ppa *.changes | ||
4157 | 75 | |||
4158 | 76 | .. _official MAAS branches: https://code.launchpad.net/~maas-maintainers | ||
4217 | 77 | 62 | ||
4218 | === renamed file 'docs/development/cluster-bootstrap.rst' => 'docs/development/cluster-bootstrap.md' | |||
4219 | --- docs/development/cluster-bootstrap.rst 2015-01-14 16:24:44 +0000 | |||
4220 | +++ docs/development/cluster-bootstrap.md 2015-04-17 21:06:27 +0000 | |||
4221 | @@ -1,81 +1,49 @@ | |||
4222 | 1 | Bootstrapping a cluster | 1 | Bootstrapping a cluster |
4223 | 2 | ======================= | 2 | ======================= |
4224 | 3 | 3 | ||
4225 | 4 | |||
4226 | 5 | Considerations | 4 | Considerations |
4227 | 6 | -------------- | 5 | -------------- |
4228 | 7 | 6 | ||
4240 | 8 | A new cluster needs to register itself with the region. At the same | 7 | A 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. |
4241 | 9 | moment that it's accepted by the region, the region starts configuring | 8 | |
4242 | 10 | it via RPC, so we need an RPC connection open when registering. | 9 | Before a cluster is accepted, we want to restrict the available RPC calls to a small set, both on the region and the cluster. |
4243 | 11 | 10 | ||
4244 | 12 | Before a cluster is accepted, we want to restrict the available RPC | 11 | Before 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. |
4234 | 13 | calls to a small set, both on the region and the cluster. | ||
4235 | 14 | |||
4236 | 15 | Before a cluster is accepted, we also do not want to start some services | ||
4237 | 16 | on the cluster, like lease uploads, DHCP scanning, and so forth, because | ||
4238 | 17 | the region will reject interaction from them. | ||
4239 | 18 | |||
4245 | 19 | 12 | ||
4246 | 20 | Start-up procedure | 13 | Start-up procedure |
4247 | 21 | ------------------ | 14 | ------------------ |
4248 | 22 | 15 | ||
4283 | 23 | This procedure will be followed by existing clusters and new clusters | 16 | This procedure will be followed by existing clusters and new clusters alike: |
4284 | 24 | alike: | 17 | |
4285 | 25 | 18 | 1. Cluster starts. | |
4286 | 26 | #. Cluster starts. | 19 | 2. If shared secret not available, shutdown, **DONE**. |
4287 | 27 | 20 | 3. `ClusterClientService` starts. | |
4288 | 28 | #. If shared secret not available, shutdown, **DONE**. | 21 | 4. Services other than `log` are **not** started. |
4289 | 29 | 22 | 5. Wait for a connection to the region to become available. | |
4290 | 30 | #. ``ClusterClientService`` starts. | 23 | 6. Do not allow any RPC calls other than `Identify` and `Authenticate`. |
4291 | 31 | 24 | 7. Call `Identify`. | |
4292 | 32 | #. Services other than ``log`` are **not** started. | 25 | 8. Call `Authenticate`. |
4293 | 33 | 26 | - On success, continue. | |
4294 | 34 | #. Wait for a connection to the region to become available. | 27 | - On failure, shutdown, **DONE**. |
4295 | 35 | 28 | ||
4296 | 36 | #. Do not allow any RPC calls other than ``Identify`` and ``Authenticate``. | 29 | 9. Permit all other RPC calls. |
4297 | 37 | 30 | - This allows for side-effects from calling `Register` next, like DHCP configuration. | |
4298 | 38 | #. Call ``Identify``. | 31 | |
4299 | 39 | 32 | 10. Call `Register`. Region accepts cluster. | |
4300 | 40 | #. Call ``Authenticate``. | 33 | 11. Start all services. |
4301 | 41 | 34 | 12. **DONE**. | |
4268 | 42 | - On success, continue. | ||
4269 | 43 | |||
4270 | 44 | - On failure, shutdown, **DONE**. | ||
4271 | 45 | |||
4272 | 46 | #. Permit all other RPC calls. | ||
4273 | 47 | |||
4274 | 48 | - This allows for side-effects from calling ``Register`` next, like DHCP | ||
4275 | 49 | configuration. | ||
4276 | 50 | |||
4277 | 51 | #. Call ``Register``. Region accepts cluster. | ||
4278 | 52 | |||
4279 | 53 | #. Start all services. | ||
4280 | 54 | |||
4281 | 55 | #. **DONE**. | ||
4282 | 56 | |||
4302 | 57 | 35 | ||
4303 | 58 | Work items | 36 | Work items |
4304 | 59 | ---------- | 37 | ---------- |
4305 | 60 | 38 | ||
4327 | 61 | #. **DONE:** Add ``Authenticate`` RPC call. | 39 | 1. **DONE:** Add `Authenticate` RPC call. |
4328 | 62 | 40 | 2. **DONE:** Add `Register` RPC call. | |
4329 | 63 | #. **DONE:** Add ``Register`` RPC call. | 41 | 3. **DONE:** Command-line to install shared-secret. |
4330 | 64 | 42 | 4. **DONE:** Check for shared-secret during start-up (packaging change too?). | |
4331 | 65 | #. **DONE:** Command-line to install shared-secret. | 43 | 5. **DONE:** Perform `Authenticate` handshake. |
4332 | 66 | 44 | 6. **DONE:** Perform `Register` handshake. | |
4333 | 67 | #. **DONE:** Check for shared-secret during start-up (packaging change too?). | 45 | 7. **DONE:** Pass MAAS\_URL in `Register` call. This replicates functionality found in `update_nodegroup_maas_url`, which is no longer used. |
4334 | 68 | 46 | 8. Display secret to admins in UI, or provide tool to obtain secret locally on region controller's machine. | |
4335 | 69 | #. **DONE:** Perform ``Authenticate`` handshake. | 47 | 9. Mechanism to limit available RPC calls. |
4336 | 70 | 48 | 10. Mechanism to defer start-up of "full" services. | |
4337 | 71 | #. **DONE:** Perform ``Register`` handshake. | 49 | |
4317 | 72 | |||
4318 | 73 | #. **DONE:** Pass MAAS_URL in ``Register`` call. This replicates functionality | ||
4319 | 74 | found in ``update_nodegroup_maas_url``, which is no longer used. | ||
4320 | 75 | |||
4321 | 76 | #. Display secret to admins in UI, or provide tool to obtain secret | ||
4322 | 77 | locally on region controller's machine. | ||
4323 | 78 | |||
4324 | 79 | #. Mechanism to limit available RPC calls. | ||
4325 | 80 | |||
4326 | 81 | #. Mechanism to defer start-up of "full" services. | ||
4338 | 82 | 50 | ||
4339 | === renamed file 'docs/development/cluster-registration.rst' => 'docs/development/cluster-registration.md' | |||
4340 | --- docs/development/cluster-registration.rst 2015-02-19 21:49:54 +0000 | |||
4341 | +++ docs/development/cluster-registration.md 2015-04-17 21:06:27 +0000 | |||
4342 | @@ -1,72 +1,46 @@ | |||
4343 | 1 | ====================================== | ||
4344 | 2 | How cluster registration works in MAAS | 1 | How cluster registration works in MAAS |
4345 | 3 | ====================================== | 2 | ====================================== |
4346 | 4 | 3 | ||
4362 | 5 | A region controller associates with one or more cluster controllers, each | 4 | A 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. |
4363 | 6 | of which is responsible for contacting the region controller itself and | 5 | |
4364 | 7 | announcing its presence. An admin must accept or reject each cluster that | 6 | There 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. |
4365 | 8 | registers itself with the region controller, except in the special | 7 | |
4366 | 9 | circumstance mentioned in :ref:`first-cluster`. | 8 | This logic was originally implemented as an easy way to upgrade older installations that were created before nodegroups were introduced. |
4352 | 10 | |||
4353 | 11 | There is always at least one cluster controller in MAAS (known as a | ||
4354 | 12 | NodeGroup in the code) which is known as the 'master'. The Nodegroup entry | ||
4355 | 13 | always exists even if no cluster controllers have contacted the region | ||
4356 | 14 | controller yet, so that it can be used as a default when adding nodes in the | ||
4357 | 15 | API or UI before the cluster controller is defined. Once a real cluster | ||
4358 | 16 | controller connects it will become this master. | ||
4359 | 17 | |||
4360 | 18 | This logic was originally implemented as an easy way to upgrade older | ||
4361 | 19 | installations that were created before nodegroups were introduced. | ||
4367 | 20 | 9 | ||
4368 | 21 | Region Controller Location | 10 | Region Controller Location |
4369 | 22 | -------------------------- | 11 | -------------------------- |
4370 | 23 | 12 | ||
4374 | 24 | The cluster obviously needs to know where the region controller is, and this is | 13 | The 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). |
4372 | 25 | configured in a file ``/etc/maas/maas_cluster.conf`` (or | ||
4373 | 26 | ``etc/demo_maas_cluster.conf`` for development environments). | ||
4375 | 27 | 14 | ||
4376 | 28 | Cluster configuration file | 15 | Cluster configuration file |
4377 | 29 | -------------------------- | 16 | -------------------------- |
4378 | 30 | 17 | ||
4397 | 31 | This config file generally contains two items like this:: | 18 | This config file generally contains two items like this: |
4398 | 32 | 19 | ||
4399 | 33 | MAAS_URL=http://0.0.0.0:5240/ | 20 | MAAS_URL=http://0.0.0.0:5240/ |
4400 | 34 | CLUSTER_UUID="adfd3977-f251-4f2c-8d61-745dbd690bf2" | 21 | CLUSTER_UUID="adfd3977-f251-4f2c-8d61-745dbd690bf2" |
4401 | 35 | 22 | ||
4402 | 36 | The values here are the defaults in the development environment. MAAS_URL | 23 | The values here are the defaults in the development environment. MAAS\_URL tells the cluster controller where to find the region controller. |
4403 | 37 | tells the cluster controller where to find the region controller. | 24 | |
4404 | 38 | 25 | `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. | |
4405 | 39 | ``CLUSTER_UUID`` is what the region uses to tell clusters apart when they | 26 | |
4406 | 40 | connect. Each cluster is free to generate its own UUID but the development | 27 | > **warning** |
4407 | 41 | environment fixes it in advance. The Ubuntu packaging generates a new UUID for | 28 | |
4408 | 42 | a 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. |
4391 | 43 | |||
4392 | 44 | .. warning:: | ||
4393 | 45 | The format of this config file is very sensitive due to the code that parses | ||
4394 | 46 | it. It will not accept quoting, or any kind of comments. | ||
4395 | 47 | |||
4396 | 48 | .. _first-cluster: | ||
4409 | 49 | 30 | ||
4410 | 50 | First cluster to connect | 31 | First cluster to connect |
4411 | 51 | ------------------------ | 32 | ------------------------ |
4412 | 52 | 33 | ||
4417 | 53 | For the convenience of small setups (and the development environment), the | 34 | For 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. |
4414 | 54 | first cluster controller to connect to the region controller becomes the | ||
4415 | 55 | 'master' nodegroup, and if the cluster connects *from the same host*, it | ||
4416 | 56 | is automatically accepted. | ||
4418 | 57 | 35 | ||
4419 | 58 | The logic currently looks like this: | 36 | The logic currently looks like this: |
4420 | 59 | 37 | ||
4434 | 60 | #. If there is one, the oldest nodegroup is the master. | 38 | 1. If there is one, the oldest nodegroup is the master. |
4435 | 61 | 39 | 2. If none exists, the code creates a placeholder master nodegroup on the fly, pre-accepted but without a UUID. | |
4436 | 62 | #. If none exists, the code creates a placeholder master nodegroup on the fly, | 40 | 3. If the placeholder is the only nodegroup, the first cluster controller to register becomes the master. |
4437 | 63 | pre-accepted but without a UUID. | 41 | |
4438 | 64 | 42 | Sadly, there is some code complexity to clear up here as this logic is not encapsulated in a single place, but instead in both: | |
4439 | 65 | #. If the placeholder is the only nodegroup, the first cluster controller to | 43 | |
4440 | 66 | register becomes the master. | 44 | - `NodeGroup.objects.ensure_data()` and |
4441 | 67 | 45 | - `AnonNodeGroupsHandler.register()`. | |
4442 | 68 | Sadly, there is some code complexity to clear up here as this logic is not | 46 | |
4430 | 69 | encapsulated in a single place, but instead in both: | ||
4431 | 70 | |||
4432 | 71 | * ``NodeGroup.objects.ensure_data()`` and | ||
4433 | 72 | * ``AnonNodeGroupsHandler.register()``. | ||
4443 | 73 | 47 | ||
4444 | === renamed file 'docs/development/lease-scanning-and-dns.rst' => 'docs/development/lease-scanning-and-dns.md' | |||
4445 | --- docs/development/lease-scanning-and-dns.rst 2014-11-14 22:03:20 +0000 | |||
4446 | +++ docs/development/lease-scanning-and-dns.md 2015-04-17 21:06:27 +0000 | |||
4447 | @@ -1,36 +1,24 @@ | |||
4448 | 1 | .. -*- mode: rst -*- | ||
4449 | 2 | |||
4450 | 3 | *************************** | ||
4451 | 4 | DHCP lease scanning and DNS | 1 | DHCP lease scanning and DNS |
4453 | 5 | *************************** | 2 | =========================== |
4454 | 6 | 3 | ||
4455 | 7 | Overview | 4 | Overview |
4466 | 8 | ======== | 5 | -------- |
4467 | 9 | 6 | ||
4468 | 10 | In a MAAS system, cluster controllers may optionally manage the DHCP, and the | 7 | In a MAAS system, cluster controllers may optionally manage the DHCP, and the region controller may optionally manage the DNS. |
4469 | 11 | region controller may optionally manage the DNS. | 8 | |
4470 | 12 | 9 | The 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. | |
4461 | 13 | The region controller periodically tells the cluster controllers to report | ||
4462 | 14 | their DCHP leases. When a cluster controller reports new leases, the region | ||
4463 | 15 | controller creates DNS records for them, and instructs the cluster controller | ||
4464 | 16 | to convert the leases to static host mappings. | ||
4465 | 17 | |||
4471 | 18 | 10 | ||
4472 | 19 | Leases scanning | 11 | Leases scanning |
4481 | 20 | =============== | 12 | --------------- |
4482 | 21 | 13 | ||
4483 | 22 | MAAS will periodically scan the DHCP leases file using the | 14 | MAAS will periodically scan the DHCP leases file using the `LeaseUploadService()` pserv service. |
4484 | 23 | ``LeaseUploadService()`` pserv service. | 15 | |
4485 | 24 | 16 | As leases are discovered, it calls the RPC function `UpdateLeases` which stores the active leases in the DHCPLease table. | |
4478 | 25 | As leases are discovered, it calls the RPC function ``UpdateLeases`` which | ||
4479 | 26 | stores the active leases in the DHCPLease table. | ||
4480 | 27 | |||
4486 | 28 | 17 | ||
4487 | 29 | Updating one or more DNS zone files | 18 | Updating one or more DNS zone files |
4495 | 30 | =================================== | 19 | ----------------------------------- |
4496 | 31 | 20 | ||
4497 | 32 | If a new lease is found then the dns.dns_update_zones() function gets called | 21 | If a new lease is found then the dns.dns\_update\_zones() function gets called which takes two steps: |
4498 | 33 | which takes two steps:: | 22 | |
4499 | 34 | 23 | #. Write out updated zone files. | |
4500 | 35 | #. Write out updated zone files. | 24 | #. Ask BIND to reload the zone. |
4494 | 36 | #. Ask BIND to reload the zone. | ||
4501 | 37 | 25 | ||
4502 | === renamed file 'docs/development/metadata.rst' => 'docs/development/metadata.md' | |||
4503 | --- docs/development/metadata.rst 2014-08-21 20:10:47 +0000 | |||
4504 | +++ docs/development/metadata.md 2015-04-17 21:06:27 +0000 | |||
4505 | @@ -1,127 +1,71 @@ | |||
4506 | 1 | The Metadata API | 1 | The Metadata API |
4507 | 2 | ================ | 2 | ================ |
4508 | 3 | 3 | ||
4521 | 4 | A MAAS region controller provides a separate API (the metadata API) for the | 4 | A 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. |
4522 | 5 | benefit of the nodes themselves. This is where a node obtains the details of | 5 | |
4523 | 6 | how it should be set up, such as which SSH keys should be installed in order to | 6 | As 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. |
4512 | 7 | give a particular user remote access to the system. | ||
4513 | 8 | |||
4514 | 9 | As a MAAS user or administrator, you do not need to request this information | ||
4515 | 10 | yourself. It is normally up to ``cloud-init`` to do this while setting up the | ||
4516 | 11 | node. You'll find more about how this works in cloud-init's datasources_ | ||
4517 | 12 | documentation. | ||
4518 | 13 | |||
4519 | 14 | .. _datasources: http://cloudinit.readthedocs.org/en/latest/topics/datasources.html | ||
4520 | 15 | |||
4524 | 16 | 7 | ||
4525 | 17 | Similarity to EC2 | 8 | Similarity to EC2 |
4526 | 18 | ----------------- | 9 | ----------------- |
4527 | 19 | 10 | ||
4569 | 20 | The metadata API is very similar, and partly identical, to the EC2 metadata | 11 | The 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: |
4570 | 21 | service. It follows a similar directory structure and provides several items | 12 | |
4571 | 22 | in the same formats. For example, in order to find out its own host name, a | 13 | /2012-03-01/meta-data/local-hostname |
4572 | 23 | node would perform an http GET request for:: | 14 | |
4573 | 24 | 15 | The 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. | |
4574 | 25 | /2012-03-01/meta-data/local-hostname | 16 | |
4575 | 26 | 17 | The 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. | |
4576 | 27 | The first item in the path is the API version. The API has been extended since | 18 | |
4577 | 28 | March 2012, but not changed incompatibly and so that date is still the current | 19 | Just like EC2, the MAAS metadata API will accept GET requests to: |
4578 | 29 | version number. | 20 | |
4579 | 30 | 21 | / | |
4580 | 31 | The items following that form a directory hierarchy based on that of the EC2 | 22 | /2012-03-01/ |
4581 | 32 | metadata service. The metadata service "knows" which node makes the request, | 23 | /2012-03-01/meta-data/ |
4582 | 33 | and so there is no need for the request URL to identify the node whose hostname | 24 | /2012-03-01/meta-data/instance-id |
4583 | 34 | should be retrieved. The request automatically returns the hostname for the | 25 | /2012-03-01/meta-data/local-hostname |
4584 | 35 | node which requested it. | 26 | /2012-03-01/meta-data/public-keys |
4585 | 36 | 27 | /2012-03-01/user-data | |
4586 | 37 | Just like EC2, the MAAS metadata API will accept GET requests to:: | 28 | |
4587 | 38 | 29 | Hopefully their meanings are fairly obvious. The `public-keys` will contain the user's SSH keys. | |
4588 | 39 | / | 30 | |
4589 | 40 | /2012-03-01/ | 31 | MAAS adds a tarball of scripts that a node should run during its commissioning phase: |
4590 | 41 | /2012-03-01/meta-data/ | 32 | |
4591 | 42 | /2012-03-01/meta-data/instance-id | 33 | /2012-03-01/meta-data/maas-commissioning-scripts |
4592 | 43 | /2012-03-01/meta-data/local-hostname | 34 | |
4593 | 44 | /2012-03-01/meta-data/public-keys | 35 | There 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. |
4553 | 45 | /2012-03-01/user-data | ||
4554 | 46 | |||
4555 | 47 | Hopefully their meanings are fairly obvious. The ``public-keys`` will contain | ||
4556 | 48 | the user's SSH keys. | ||
4557 | 49 | |||
4558 | 50 | MAAS adds a tarball of scripts that a node should run during its commissioning | ||
4559 | 51 | phase:: | ||
4560 | 52 | |||
4561 | 53 | /2012-03-01/meta-data/maas-commissioning-scripts | ||
4562 | 54 | |||
4563 | 55 | There are other differences. Where EC2 makes the metadata service available at | ||
4564 | 56 | a fixed IP address, MAAS configures the location of the metadata service on the | ||
4565 | 57 | node while installing its operating system. It does this through installation | ||
4566 | 58 | :ref:`preseeds <preseeds>`. These preseeds also include the node's access | ||
4567 | 59 | credentials. | ||
4568 | 60 | |||
4594 | 61 | 36 | ||
4595 | 62 | Additional Directory Trees | 37 | Additional Directory Trees |
4596 | 63 | -------------------------- | 38 | -------------------------- |
4597 | 64 | 39 | ||
4628 | 65 | .. _enlistment-tree: | 40 | MAAS 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.: |
4629 | 66 | 41 | ||
4630 | 67 | MAAS adds some entirely new directories as well. An enlisting node | 42 | /enlist/2012-03-01/meta-data/local-hostname |
4631 | 68 | (which does not have access credentials for the metadata API yet) can | 43 | |
4632 | 69 | anonymously request the same items for itself under ``/enlist/``, e.g.:: | 44 | If 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: |
4633 | 70 | 45 | ||
4634 | 71 | /enlist/2012-03-01/meta-data/local-hostname | 46 | /2012-03-01/by-mac/99:99:99:99:99:99/meta-data/local-hostname |
4635 | 72 | 47 | ||
4636 | 73 | If you set the ``ALLOW_UNSAFE_METADATA_ACCESS`` configuration item, the | 48 | And so on for the other information. There is a similar facility keyed by MAAS system identifiers. |
4637 | 74 | metadata service will also provide the information on arbitrary nodes to | 49 | |
4638 | 75 | authenticated users under a separate sub-tree. For security reasons this is | 50 | Finally, a curtin-specific metadata API with largely the same information lives in the `/curtin/` subtree: |
4639 | 76 | not recommended, but it may be useful in debugging. With this option enabled, | 51 | |
4640 | 77 | the information for the node with MAC address 99:99:99:99:99:99 is available | 52 | /curtin/2012-03-01/meta-data/local-hostname |
4641 | 78 | at:: | 53 | |
4642 | 79 | 54 | The curtin subtree however differs in the `user-data` endpoint. It returns a curtin-specific form of user data. | |
4613 | 80 | /2012-03-01/by-mac/99:99:99:99:99:99/meta-data/local-hostname | ||
4614 | 81 | |||
4615 | 82 | And so on for the other information. There is a similar facility keyed by | ||
4616 | 83 | MAAS system identifiers. | ||
4617 | 84 | |||
4618 | 85 | .. _curtin-tree: | ||
4619 | 86 | |||
4620 | 87 | Finally, a curtin-specific metadata API with largely the same information lives | ||
4621 | 88 | in the ``/curtin/`` subtree:: | ||
4622 | 89 | |||
4623 | 90 | /curtin/2012-03-01/meta-data/local-hostname | ||
4624 | 91 | |||
4625 | 92 | The curtin subtree however differs in the ``user-data`` endpoint. It returns a | ||
4626 | 93 | curtin-specific form of user data. | ||
4627 | 94 | |||
4643 | 95 | 55 | ||
4644 | 96 | Authentication | 56 | Authentication |
4645 | 97 | -------------- | 57 | -------------- |
4646 | 98 | 58 | ||
4659 | 99 | Most metadata requests are authenticated similar to ones to the | 59 | Most 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. |
4660 | 100 | region-controller API, through OAuth. Every node in a MAAS has its own OAuth | 60 | |
4661 | 101 | key. (On the region controller side, these keys collectively belong to a | 61 | Not 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. |
4650 | 102 | single special user called ``node-init``. You will not see such special users | ||
4651 | 103 | listed in the UI, however.) When a node asks for information about itself, the | ||
4652 | 104 | OAuth key is what tells the metadata service which node that is. | ||
4653 | 105 | |||
4654 | 106 | Not all requests are authenticated in this way. For instance, a node can | ||
4655 | 107 | access the items under the enlistment subdirectory (see | ||
4656 | 108 | :ref:`above <enlistment-tree>`) anonymously. The metadata service will | ||
4657 | 109 | identify the requesting node by its IP address. | ||
4658 | 110 | |||
4662 | 111 | 62 | ||
4663 | 112 | API Operations | 63 | API Operations |
4664 | 113 | -------------- | 64 | -------------- |
4665 | 114 | 65 | ||
4679 | 115 | The MAAS metadata API supports a few non-GET operations. These work just like | 66 | The 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. |
4680 | 116 | the ones on the main :ref:`region-controller API <region-controller-api>`, but they are meant to be invoked by | 67 | |
4681 | 117 | nodes. The URL for these calls is ``/2013-03-01/``, and the operation name is | 68 | The `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. |
4682 | 118 | passed as a multipart form item called "op". Other parameters are passed in | 69 | |
4683 | 119 | the same way. | 70 | When 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. |
4684 | 120 | 71 | ||
4672 | 121 | The ``signal`` call notifies the region controller of the state of a | ||
4673 | 122 | commissioning node. The node sends running updates, as well as output produced | ||
4674 | 123 | by the commissioning scripts, and finally completion information through this | ||
4675 | 124 | call. | ||
4676 | 125 | |||
4677 | 126 | When a node is done installing, it may call POST operations ``netboot_on`` and | ||
4678 | 127 | ``netboot_off`` to instruct MAAS to enable or disable its network boot setting. | ||
4685 | 128 | 72 | ||
4686 | === renamed file 'docs/development/philosophy.rst' => 'docs/development/philosophy.md' | |||
4687 | --- docs/development/philosophy.rst 2013-12-06 15:12:09 +0000 | |||
4688 | +++ docs/development/philosophy.md 2015-04-17 21:06:27 +0000 | |||
4689 | @@ -1,51 +1,25 @@ | |||
4690 | 1 | ------------------ | ||
4691 | 2 | Philosophy of MAAS | 1 | Philosophy of MAAS |
4704 | 3 | ------------------ | 2 | ================== |
4705 | 4 | 3 | ||
4706 | 5 | This is a declaration of what we’re aiming for while designing and | 4 | This 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. |
4707 | 6 | developing MAAS. We may fall short in many regards right now, but this | 5 | |
4708 | 7 | is where we’re heading. Each fix, enhancement, and feature is | 6 | It 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. |
4697 | 8 | conceived and built with these principles in mind. | ||
4698 | 9 | |||
4699 | 10 | It is concise and to the point. If in doubt about including something, | ||
4700 | 11 | don’t, or talk about it first. Think of it as a reference point for | ||
4701 | 12 | the core development team, as well as a starting point for external | ||
4702 | 13 | contributors. | ||
4703 | 14 | |||
4709 | 15 | 7 | ||
4710 | 16 | Feedback loops | 8 | Feedback loops |
4711 | 17 | -------------- | 9 | -------------- |
4712 | 18 | 10 | ||
4724 | 19 | When MAAS modifies an external system there should be a feedback loop | 11 | When 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. |
4725 | 20 | so it can know the actual state of the external system, take periodic | 12 | |
4726 | 21 | or continuous action to converge the external system towards its | 13 | For 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. |
4716 | 22 | notion of truth, and notice when there are problems influencing the | ||
4717 | 23 | external system. | ||
4718 | 24 | |||
4719 | 25 | For example, when sending out a command to boot a machine from the | ||
4720 | 26 | network, MAAS should know that (a) the machine has actually powered | ||
4721 | 27 | on, and (b) that it has obtained boot instructions from the TFTP | ||
4722 | 28 | server. | ||
4723 | 29 | |||
4727 | 30 | 14 | ||
4728 | 31 | UI | 15 | UI |
4730 | 32 | --- | 16 | -- |
4731 | 33 | 17 | ||
4734 | 34 | It should be possible to decompose all operations in the UI down to | 18 | It should be possible to decompose all operations in the UI down to API calls. |
4733 | 35 | API calls. | ||
4735 | 36 | 19 | ||
4736 | 37 | The UI need not have the same granularity as the API. | 20 | The UI need not have the same granularity as the API. |
4737 | 38 | 21 | ||
4751 | 39 | The UI should never do something that is not possible in the API | 22 | The UI should never do something that is not possible in the API unless it is entirely specific to its medium (i.e. HTTP + browser). |
4752 | 40 | unless it is entirely specific to its medium (i.e. HTTP + browser). | 23 | |
4753 | 41 | 24 | Addendum: 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). | |
4754 | 42 | Addendum: though the UI should be decomposable down to API calls, it | 25 | |
4742 | 43 | does not need to be implemented as such (even though it would be great | ||
4743 | 44 | if it was). | ||
4744 | 45 | |||
4745 | 46 | |||
4746 | 47 | .. TODO | ||
4747 | 48 | ---- | ||
4748 | 49 | Security | ||
4749 | 50 | Persistence | ||
4750 | 51 | Testing | ||
4755 | 52 | 26 | ||
4756 | === renamed file 'docs/development/preseeds.rst' => 'docs/development/preseeds.md' | |||
4757 | --- docs/development/preseeds.rst 2015-04-03 11:36:37 +0000 | |||
4758 | +++ docs/development/preseeds.md 2015-04-17 21:06:27 +0000 | |||
4759 | @@ -1,71 +1,55 @@ | |||
4760 | 1 | .. _preseeds: | ||
4761 | 2 | |||
4762 | 3 | ========================= | ||
4763 | 4 | How preseeds work in MAAS | 1 | How preseeds work in MAAS |
4764 | 5 | ========================= | 2 | ========================= |
4765 | 6 | 3 | ||
4774 | 7 | A preseed is what MAAS sends to the ``cloud-init`` process that starts up | 4 | A 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. |
4767 | 8 | as part of node enlistment, commissioning and installation. It is a | ||
4768 | 9 | specially formatted chunk of text. MAAS does not care what that formatting | ||
4769 | 10 | is, it just knows it is text and uses Tempita_ templates to render a final | ||
4770 | 11 | file based on variables that are required depending on the context. | ||
4771 | 12 | |||
4772 | 13 | .. _Tempita: http://pythonpaste.org/tempita/ | ||
4773 | 14 | |||
4775 | 15 | 5 | ||
4776 | 16 | Preseed templates | 6 | Preseed templates |
4777 | 17 | ----------------- | 7 | ----------------- |
4778 | 18 | 8 | ||
4780 | 19 | On a live system, the preseed templates live in ``/etc/maas/preseeds/``. | 9 | On a live system, the preseed templates live in `/etc/maas/preseeds/`. |
4781 | 20 | 10 | ||
4782 | 21 | Each template uses a prefix that corresponds to a particular "phase": | 11 | Each template uses a prefix that corresponds to a particular "phase": |
4783 | 22 | 12 | ||
4803 | 23 | +---------------+--------------------------+ | 13 | <table> |
4804 | 24 | | Phase | Prefix used | | 14 | <colgroup> |
4805 | 25 | +===============+==========================+ | 15 | <col width="22%" /> |
4806 | 26 | | Enlistment | enlist | | 16 | <col width="37%" /> |
4807 | 27 | +---------------+--------------------------+ | 17 | </colgroup> |
4808 | 28 | | Commissioning | commissioning | | 18 | <thead> |
4809 | 29 | +---------------+--------------------------+ | 19 | <tr class="header"> |
4810 | 30 | | Installation | preseed_master (DI_) or | | 20 | <th align="left">Phase</th> |
4811 | 31 | | | curtin (Curtin_) | | 21 | <th align="left">Prefix used</th> |
4812 | 32 | +---------------+--------------------------+ | 22 | </tr> |
4813 | 33 | 23 | </thead> | |
4814 | 34 | .. _DI: https://www.debian.org/devel/debian-installer/ | 24 | <tbody> |
4815 | 35 | 25 | <tr class="odd"> | |
4816 | 36 | .. _Curtin: https://launchpad.net/curtin | 26 | <td align="left">Enlistment</td> |
4817 | 37 | 27 | <td align="left">enlist</td> | |
4818 | 38 | Note that the preseed information is in fact composed of two files: the | 28 | </tr> |
4819 | 39 | preseed file per se which usually contains little more than a URL and the | 29 | <tr class="even"> |
4820 | 40 | credentials where to get the "user data" which, in turn, contains most of | 30 | <td align="left">Commissioning</td> |
4821 | 41 | the logic to be executed. | 31 | <td align="left">commissioning</td> |
4822 | 32 | </tr> | ||
4823 | 33 | <tr class="odd"> | ||
4824 | 34 | <td align="left">Installation</td> | ||
4825 | 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> | ||
4826 | 36 | </tr> | ||
4827 | 37 | </tbody> | ||
4828 | 38 | </table> | ||
4829 | 39 | |||
4830 | 40 | Note 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. | ||
4831 | 42 | 41 | ||
4832 | 43 | Installation preseed | 42 | Installation preseed |
4833 | 44 | -------------------- | 43 | -------------------- |
4834 | 45 | 44 | ||
4851 | 46 | The installation preseed is broken into the three files because the | 45 | The 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`. |
4852 | 47 | requirements are different depending on the installer being used. The | 46 | |
4853 | 48 | `Debian Installer`_ uses ``preseed_master`` and the newer Curtin_ installer | 47 | The 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`. |
4838 | 49 | uses ``curtin_userdata``. | ||
4839 | 50 | |||
4840 | 51 | .. _Debian Installer: https://www.debian.org/devel/debian-installer/ | ||
4841 | 52 | |||
4842 | 53 | .. _Curtin: https://launchpad.net/curtin | ||
4843 | 54 | |||
4844 | 55 | The base of both of these is ``generic``, which defines some variables | ||
4845 | 56 | and then selects the right one depending on the installer being used. Note | ||
4846 | 57 | that Tempita's inheritance mechanism is a little weird; the ``generic`` | ||
4847 | 58 | template inherits the right file but in effect this is in reverse, the | ||
4848 | 59 | inherited file becomes the new template and it can then reference the | ||
4849 | 60 | variables defined in ``generic``. | ||
4850 | 61 | |||
4854 | 62 | 48 | ||
4855 | 63 | User-provided preseeds | 49 | User-provided preseeds |
4856 | 64 | ---------------------- | 50 | ---------------------- |
4857 | 65 | 51 | ||
4861 | 66 | In addition to the standard preseed files, the base preseeds can be | 52 | In 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: |
4859 | 67 | overridden on a per-OS, architecture, subarchitecture, OS release and | ||
4860 | 68 | node name basis. The templates are looked up in the following order:: | ||
4862 | 69 | 53 | ||
4863 | 70 | {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}_{node_name} | 54 | {prefix}_{osystem}_{node_arch}_{node_subarch}_{release}_{node_name} |
4864 | 71 | {prefix}_{osystem}_{node_arch}_{node_subarch}_{release} | 55 | {prefix}_{osystem}_{node_arch}_{node_subarch}_{release} |
4865 | @@ -90,60 +74,34 @@ | |||
4866 | 90 | {prefix} | 74 | {prefix} |
4867 | 91 | 'generic' | 75 | 'generic' |
4868 | 92 | 76 | ||
4879 | 93 | ``prefix`` is either empty (in which case the following underscore is also | 77 | `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`. |
4880 | 94 | ommitted: e.g. {osystem}_{node_arch}_{node_subarch}_{release}) or one of | 78 | |
4881 | 95 | ``enlist``, ``enlist_userdata``, ``commissioning``, ``curtin``, | 79 | As 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. |
4872 | 96 | ``curtin_userdata`` or ``preseed_master``. | ||
4873 | 97 | |||
4874 | 98 | As you can see this mechanism is also used to calculate the base preseeds for | ||
4875 | 99 | all of installation, enlistment and commissioning. It allows end users to | ||
4876 | 100 | add, for example, a file named ``curtin_ubuntu_amd64_generic`` that would be | ||
4877 | 101 | used at installation time. | ||
4878 | 102 | |||
4882 | 103 | 80 | ||
4883 | 104 | Curtin configuration | 81 | Curtin configuration |
4884 | 105 | -------------------- | 82 | -------------------- |
4885 | 106 | 83 | ||
4929 | 107 | Curtin_ is the tool responsible for performing the OS installation. If you | 84 | [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). |
4930 | 108 | need to customize the installation, you need to change Curtin's user data | 85 | |
4931 | 109 | (by either changing the existing ``curtin_userdata`` file or adding a custom | 86 | There 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. |
4932 | 110 | version as described above). | 87 | |
4933 | 111 | 88 | Curtin 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. | |
4934 | 112 | .. _Curtin: https://launchpad.net/curtin | 89 | |
4935 | 113 | 90 | ### Example: early command | |
4936 | 114 | There isn't a complete documentation on how to customize Curtin at the time of | 91 | |
4937 | 115 | this writing but the following instructions and examples should cover most of | 92 | Here 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. |
4938 | 116 | the use cases. | 93 | |
4939 | 117 | 94 | ``` {.sourceCode .yaml} | |
4940 | 118 | Curtin provides hooks to execute custom code before (`early`) or after (`late`) | 95 | early_commands: |
4941 | 119 | the 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'] |
4942 | 120 | either code that will run in the ephemeral environment or in the machine being | 97 | ``` |
4943 | 121 | installed itself (`in-target`). Note that you can execute `in-target` code | 98 | |
4944 | 122 | only in a `late` command. | 99 | ### Example: late command |
4945 | 123 | 100 | ||
4946 | 124 | Example: early command | 101 | Here 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.) |
4947 | 125 | ====================== | 102 | |
4948 | 126 | 103 | ``` {.sourceCode .yaml} | |
4949 | 127 | Here is an example of an early command (i.e. one that will run before the | 104 | late_commands: |
4950 | 128 | installation takes place) that runs in the ephemeral environment and | 105 | add_repo: ["curtin", "in-target", "--", "add-apt-repository", "-y", "ppa:my/ppa"] |
4951 | 129 | pings 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" |
4952 | 130 | 107 | ``` | |
4910 | 131 | .. code:: yaml | ||
4911 | 132 | |||
4912 | 133 | early_commands: | ||
4913 | 134 | signal: [wget, '--no-proxy', 'http://example.com/', '--post-data', 'system_id={{node.system_id}}&signal=starting_install', '-O', '/dev/null'] | ||
4914 | 135 | |||
4915 | 136 | Example: late command | ||
4916 | 137 | ====================== | ||
4917 | 138 | |||
4918 | 139 | Here is an example of two late commands (i.e. commands that will run after the | ||
4919 | 140 | installation has been performed). Both run `in-target` (i.e. in the machine | ||
4920 | 141 | being installed). The first command adds a PPA to the machine. The second | ||
4921 | 142 | command create a file containing the node's system_id. (Note that these are | ||
4922 | 143 | just examples of the things that can be done.) | ||
4923 | 144 | |||
4924 | 145 | .. code:: yaml | ||
4925 | 146 | |||
4926 | 147 | late_commands: | ||
4927 | 148 | add_repo: ["curtin", "in-target", "--", "add-apt-repository", "-y", "ppa:my/ppa"] | ||
4928 | 149 | custom: curtin in-target -- sh -c "/bin/echo -en 'Installed {{node.system_id}}' > /tmp/maas_system_id" | ||
4953 | 150 | 108 | ||
4954 | === renamed file 'docs/development/rpc.rst' => 'docs/development/rpc.md' | |||
4955 | --- docs/development/rpc.rst 2014-08-21 20:10:47 +0000 | |||
4956 | +++ docs/development/rpc.md 2015-04-17 21:06:27 +0000 | |||
4957 | @@ -1,181 +1,105 @@ | |||
4958 | 1 | .. -*- mode: rst -*- | ||
4959 | 2 | |||
4960 | 3 | RPC HOWTO | 1 | RPC HOWTO |
4961 | 4 | ========= | 2 | ========= |
4962 | 5 | 3 | ||
4973 | 6 | MAAS contains an RPC mechanism such that every process in the region is | 4 | MAAS 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). |
4964 | 7 | connected to every process in the cluster (strictly, every pserv | ||
4965 | 8 | process). It's based on AMP_, specifically `Twisted's implementation`_. | ||
4966 | 9 | |||
4967 | 10 | .. _AMP: | ||
4968 | 11 | http://amp-protocol.net/ | ||
4969 | 12 | |||
4970 | 13 | .. _Twisted's implementation: | ||
4971 | 14 | http://twistedmatrix.com/documents/current/core/howto/amp.html | ||
4972 | 15 | |||
4974 | 16 | 5 | ||
4975 | 17 | Where do I start? | 6 | Where do I start? |
4976 | 18 | ----------------- | 7 | ----------------- |
4977 | 19 | 8 | ||
4978 | 20 | Start in the :py:mod:`provisioningserver.rpc` package. The first two files to | ||
4979 | 21 | look at are ``cluster.py`` and ``region.py``. This contain the | ||
4980 | 22 | declarations of what commands are available on clusters and regions | ||
4981 | 23 | respectively. | ||
4982 | 24 | |||
4983 | 25 | A new command could be declared like so:: | ||
4984 | 26 | |||
4985 | 27 | from twisted.protocols import amp | ||
4986 | 28 | |||
4987 | 29 | class EatCheez(amp.Command): | ||
4988 | 30 | arguments = [ | ||
4989 | 31 | (b"name", amp.Unicode()), | ||
4990 | 32 | (b"origin", amp.Unicode()), | ||
4991 | 33 | ] | ||
4992 | 34 | response = [ | ||
4993 | 35 | (b"rating", amp.Integer()), | ||
4994 | 36 | ] | ||
4995 | 37 | |||
4996 | 38 | It's also possible to map exceptions across the wire using an ``errors`` | ||
4997 | 39 | attribute; see the docs or code for more information. | ||
4998 | 40 | |||
4999 | 41 | Note that byte-strings are used for parameter names. Twisted gets quite | ||
5000 | 42 | fussy about this, so remember to do it. |
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