From 15226a4f2f83bab7607e646707bc009040a8c9eb Mon Sep 17 00:00:00 2001 From: James Slagle Date: Tue, 8 Sep 2015 13:49:41 -0400 Subject: [PATCH] Remove docs from instack-undercloud These docs are now housed in the tripleo-docs repository at: https://git.openstack.org/openstack/tripleo-docs Change-Id: I7517667b2945f08946c2ec923c2a056b8d655bf5 --- README.md | 8 +- doc/source/_custom/admonition_selector.js | 58 - doc/source/_custom/cookies.js | 117 - doc/source/_custom/custom.css | 226 -- doc/source/_custom/expandable.js | 32 - doc/source/_custom/jquery.nav.js | 223 -- doc/source/_custom/jquery.scrollTo.js | 208 -- doc/source/_custom/menu.js | 3 - doc/source/_custom/rdo_styling.css | 208 -- .../_images/TripleO_Network_Diagram_.jpg | Bin 94564 -> 0 bytes doc/source/_images/discovery_diagram.png | Bin 63668 -> 0 bytes doc/source/_images/discovery_diagram.svg | 192 -- doc/source/_images/logical_view.png | Bin 122773 -> 0 bytes doc/source/_images/logical_view.svg | 2383 ----------------- doc/source/_images/overview.png | Bin 16715 -> 0 bytes doc/source/_images/overview.svg | 32 - doc/source/_images/physical_view.png | Bin 141792 -> 0 bytes doc/source/_images/physical_view.svg | 2243 ---------------- doc/source/_images/rdo-manager-logo.png | Bin 5495 -> 0 bytes doc/source/_templates/layout.html | 50 - .../advanced_deployment.rst | 26 - .../automated_health_check.rst | 290 -- .../advanced_deployment/cinder_netapp.rst | 60 - .../advanced_deployment/deploy_manila.rst | 129 - .../advanced_deployment/extra_config.rst | 231 -- .../managing_plans_and_roles.rst | 189 -- .../advanced_deployment/network_isolation.rst | 680 ----- .../advanced_deployment/profile_matching.rst | 224 -- .../advanced_deployment/ready_state.rst | 112 - .../advanced_deployment/template_deploy.rst | 87 - .../basic_deployment/basic_deployment_cli.rst | 437 --- .../basic_deployment/basic_deployment_gui.rst | 258 -- doc/source/conf.py | 245 -- doc/source/contributions/contributions.rst | 92 - doc/source/environments/baremetal.rst | 244 -- doc/source/environments/environments.rst | 10 - doc/source/environments/virtual.rst | 305 --- doc/source/index.rst | 69 - doc/source/installation/accessing_gui.rst | 30 - doc/source/installation/installation.rst | 10 - doc/source/installation/installing.rst | 121 - doc/source/installation/updating.rst | 19 - doc/source/introduction/architecture.rst | 422 --- doc/source/introduction/components.rst | 461 ---- doc/source/introduction/introduction.rst | 45 - doc/source/post_deployment/delete_nodes.rst | 44 - doc/source/post_deployment/migration.rst | 53 - doc/source/post_deployment/package_update.rst | 41 - .../post_deployment/post_deployment.rst | 15 - .../post_deployment/quiesce_compute.rst | 83 - .../post_deployment/replace_controller.rst | 105 - doc/source/post_deployment/scale_roles.rst | 42 - doc/source/post_deployment/vm_snapshot.rst | 26 - .../troubleshooting-image-build.rst | 16 - .../troubleshooting/troubleshooting-nodes.rst | 91 - .../troubleshooting-overcloud.rst | 288 -- ...troubleshooting-tripleo-heat-templates.rst | 5 - .../troubleshooting-virt-setup.rst | 22 - .../troubleshooting/troubleshooting.rst | 14 - tox.ini | 4 - 60 files changed, 3 insertions(+), 11625 deletions(-) delete mode 100644 doc/source/_custom/admonition_selector.js delete mode 100644 doc/source/_custom/cookies.js delete mode 100644 doc/source/_custom/custom.css delete mode 100644 doc/source/_custom/expandable.js delete mode 100644 doc/source/_custom/jquery.nav.js delete mode 100644 doc/source/_custom/jquery.scrollTo.js delete mode 100644 doc/source/_custom/menu.js delete mode 100644 doc/source/_custom/rdo_styling.css delete mode 100644 doc/source/_images/TripleO_Network_Diagram_.jpg delete mode 100644 doc/source/_images/discovery_diagram.png delete mode 100644 doc/source/_images/discovery_diagram.svg delete mode 100644 doc/source/_images/logical_view.png delete mode 100644 doc/source/_images/logical_view.svg delete mode 100644 doc/source/_images/overview.png delete mode 100644 doc/source/_images/overview.svg delete mode 100644 doc/source/_images/physical_view.png delete mode 100644 doc/source/_images/physical_view.svg delete mode 100644 doc/source/_images/rdo-manager-logo.png delete mode 100644 doc/source/_templates/layout.html delete mode 100644 doc/source/advanced_deployment/advanced_deployment.rst delete mode 100644 doc/source/advanced_deployment/automated_health_check.rst delete mode 100644 doc/source/advanced_deployment/cinder_netapp.rst delete mode 100644 doc/source/advanced_deployment/deploy_manila.rst delete mode 100644 doc/source/advanced_deployment/extra_config.rst delete mode 100644 doc/source/advanced_deployment/managing_plans_and_roles.rst delete mode 100644 doc/source/advanced_deployment/network_isolation.rst delete mode 100644 doc/source/advanced_deployment/profile_matching.rst delete mode 100644 doc/source/advanced_deployment/ready_state.rst delete mode 100644 doc/source/advanced_deployment/template_deploy.rst delete mode 100644 doc/source/basic_deployment/basic_deployment_cli.rst delete mode 100644 doc/source/basic_deployment/basic_deployment_gui.rst delete mode 100644 doc/source/conf.py delete mode 100644 doc/source/contributions/contributions.rst delete mode 100644 doc/source/environments/baremetal.rst delete mode 100644 doc/source/environments/environments.rst delete mode 100644 doc/source/environments/virtual.rst delete mode 100644 doc/source/index.rst delete mode 100644 doc/source/installation/accessing_gui.rst delete mode 100644 doc/source/installation/installation.rst delete mode 100644 doc/source/installation/installing.rst delete mode 100644 doc/source/installation/updating.rst delete mode 100644 doc/source/introduction/architecture.rst delete mode 100644 doc/source/introduction/components.rst delete mode 100644 doc/source/introduction/introduction.rst delete mode 100644 doc/source/post_deployment/delete_nodes.rst delete mode 100644 doc/source/post_deployment/migration.rst delete mode 100644 doc/source/post_deployment/package_update.rst delete mode 100644 doc/source/post_deployment/post_deployment.rst delete mode 100644 doc/source/post_deployment/quiesce_compute.rst delete mode 100644 doc/source/post_deployment/replace_controller.rst delete mode 100644 doc/source/post_deployment/scale_roles.rst delete mode 100644 doc/source/post_deployment/vm_snapshot.rst delete mode 100644 doc/source/troubleshooting/troubleshooting-image-build.rst delete mode 100644 doc/source/troubleshooting/troubleshooting-nodes.rst delete mode 100644 doc/source/troubleshooting/troubleshooting-overcloud.rst delete mode 100644 doc/source/troubleshooting/troubleshooting-tripleo-heat-templates.rst delete mode 100644 doc/source/troubleshooting/troubleshooting-virt-setup.rst delete mode 100644 doc/source/troubleshooting/troubleshooting.rst diff --git a/README.md b/README.md index 51c31e926..c1cc1dfcf 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ Undercloud Install via instack ============================== -instack-undercloud documentation: -https://repos.fedorapeople.org/repos/openstack-m/instack-undercloud/html/ +instack-undercloud is tooling for installing a TripleO undercloud. -To build the docs locally: - - tox -e docs +It is part of the TripleO project: +http://docs.openstack.org/developer/tripleo-docs/index.html diff --git a/doc/source/_custom/admonition_selector.js b/doc/source/_custom/admonition_selector.js deleted file mode 100644 index e4876625e..000000000 --- a/doc/source/_custom/admonition_selector.js +++ /dev/null @@ -1,58 +0,0 @@ -/* - This function will search for all classes matching all IDs which are under - #admonition_selector element and display/hide their content. - - State is saved in cookies so user doesn't lose his settings after page - reload or changing pages. - - To make this feature work, you need to: - - add checkbox to _templates/layout.html file with proper ID - - in admonitions use proper class which matches above mentioned ID -*/ - - - -// after document is loaded -$(document).ready(function() { - - // for each checkbox in #admonition_selector do - $('#admonition_selector :checkbox').each(function() { - - // check value of cookies and set state to the related element - if ($.cookie($(this).attr("id")) == "true") { - $(this).prop("checked", true); - } else if (($.cookie($(this).attr("id")) == "false")) { - $(this).prop("checked", false); - } - - // show/hide elements after page loaded - toggle_admonition($(this).attr("id")); - }); - - // when user clicks on the checkbox, react - $('#admonition_selector :checkbox').change(function() { - - // show/hide related elements - toggle_admonition($(this).attr("id")); - - // save the state in the cookies - $.cookie($(this).attr("id"), $(this).is(':checked'), { path: '/' }); - }); -}); - - -// function to show/hide elements based on checkbox state -// checkbox has ID and it toggles elements having class named same way as the ID -function toggle_admonition(admonition) { - - // for each element having class as the checkbox's ID - $(".admonition." + admonition).each(function() { - - // set show/hide - if($("#" + admonition).is(':checked')) { - $(this).show(); - } else { - $(this).hide(); - } - }); -} diff --git a/doc/source/_custom/cookies.js b/doc/source/_custom/cookies.js deleted file mode 100644 index a845cd5c5..000000000 --- a/doc/source/_custom/cookies.js +++ /dev/null @@ -1,117 +0,0 @@ -/*! - * jQuery Cookie Plugin v1.4.1 - * https://github.com/carhartl/jquery-cookie - * - * Copyright 2013 Klaus Hartl - * Released under the MIT license - */ -(function (factory) { - if (typeof define === 'function' && define.amd) { - // AMD - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // CommonJS - factory(require('jquery')); - } else { - // Browser globals - factory(jQuery); - } -}(function ($) { - - var pluses = /\+/g; - - function encode(s) { - return config.raw ? s : encodeURIComponent(s); - } - - function decode(s) { - return config.raw ? s : decodeURIComponent(s); - } - - function stringifyCookieValue(value) { - return encode(config.json ? JSON.stringify(value) : String(value)); - } - - function parseCookieValue(s) { - if (s.indexOf('"') === 0) { - // This is a quoted cookie as according to RFC2068, unescape... - s = s.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); - } - - try { - // Replace server-side written pluses with spaces. - // If we can't decode the cookie, ignore it, it's unusable. - // If we can't parse the cookie, ignore it, it's unusable. - s = decodeURIComponent(s.replace(pluses, ' ')); - return config.json ? JSON.parse(s) : s; - } catch(e) {} - } - - function read(s, converter) { - var value = config.raw ? s : parseCookieValue(s); - return $.isFunction(converter) ? converter(value) : value; - } - - var config = $.cookie = function (key, value, options) { - - // Write - - if (value !== undefined && !$.isFunction(value)) { - options = $.extend({}, config.defaults, options); - - if (typeof options.expires === 'number') { - var days = options.expires, t = options.expires = new Date(); - t.setTime(+t + days * 864e+5); - } - - return (document.cookie = [ - encode(key), '=', stringifyCookieValue(value), - options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE - options.path ? '; path=' + options.path : '', - options.domain ? '; domain=' + options.domain : '', - options.secure ? '; secure' : '' - ].join('')); - } - - // Read - - var result = key ? undefined : {}; - - // To prevent the for loop in the first place assign an empty array - // in case there are no cookies at all. Also prevents odd result when - // calling $.cookie(). - var cookies = document.cookie ? document.cookie.split('; ') : []; - - for (var i = 0, l = cookies.length; i < l; i++) { - var parts = cookies[i].split('='); - var name = decode(parts.shift()); - var cookie = parts.join('='); - - if (key && key === name) { - // If second argument (value) is a function it's a converter... - result = read(cookie, value); - break; - } - - // Prevent storing a cookie that we couldn't decode. - if (!key && (cookie = read(cookie)) !== undefined) { - result[name] = cookie; - } - } - - return result; - }; - - config.defaults = {}; - - $.removeCookie = function (key, options) { - if ($.cookie(key) === undefined) { - return false; - } - - // Must not alter options, thus extending a fresh object... - $.cookie(key, '', $.extend({}, options, { expires: -1 })); - return !$.cookie(key); - }; - -})); diff --git a/doc/source/_custom/custom.css b/doc/source/_custom/custom.css deleted file mode 100644 index 7aa7f8d93..000000000 --- a/doc/source/_custom/custom.css +++ /dev/null @@ -1,226 +0,0 @@ -@import url("css/theme.css"); -@import url("rdo_styling.css"); - -/* CUSTOM CSS OVERRIDES GO HERE */ -/* ============================ */ - - -/* LAYOUT */ -.wy-nav-side { - overflow: visible; -} - -.wy-side-nav-search { - margin-bottom: 0; -} - -.wy-nav-content-wrap { - background: white; -} - -.wy-nav-content { - max-width: 100%; - box-sizing: border-box; -} - -.rst-content .section ol li p.first:last-child { - margin-bottom: 24px; -} - - -/* LOGO */ -.wy-side-nav-search a { - margin-bottom: 5px; -} - -.wy-side-nav-search img { - background: none; - border-radius: 0; - height: 60px; - width: auto; - margin: 0; -} - - -/* TYPOGRAPHY */ -p { - margin-bottom: 16px; -} - -p + ul, p + ol.simple { - margin-top: -12px; -} - -h1, h2, h3, h4, h5, h6, p.rubric { - margin-top: 48px; -} - -h2 { - border-bottom: 1px solid rgba(0, 0, 0, 0.2); -} - - -/* BREADCRUMBS */ - -.wy-breadcrumbs { - font-size: 85%; - color: rgba(0, 0, 0, 0.45); -} - -.wy-breadcrumbs a { - text-decoration: underline; - color: inherit; -} - -.wy-breadcrumbs a:hover, -.wy-breadcrumbs a:focus { - color: rgba(0, 0, 0, 0.75); - text-decoration: none; -} - - -/* FOOTER */ - -footer { - font-size: 70%; - margin-top: 48px; -} - -footer p { - font-size: inherit; -} - - -/* NOTES, ADMONITTIONS AND TAGS */ -.admonition { - font-size: 85%; /* match code size */ - background: rgb(240, 240, 240); - color: rgba(0, 0, 0, 0.55); - border: 1px solid rgba(0, 0, 0, 0.1); - padding: 0.5em 1em 0.75em 1em; - margin-bottom: 24px; -} - -.admonition p { - font-size: inherit; -} - -.admonition p.last { - margin-bottom: 0; -} - -.admonition p.first.admonition-title { - display: inline; - background: none; - font-weight: bold; - color: rgba(0, 0, 0, 0.75); -} - -/* notes */ -.rst-content .note { - background: rgb(240, 240, 240); -} - -.note > p.first.admonition-title { - display: inline-block; - background: rgba(0, 0, 0, 0.55); - color: rgba(255, 255, 255, 0.95); -} - -/* optional */ -.rst-content .optional { - background: white; -} - -/* tags */ -.rhel {background: #fee;} -.portal {background-color: #ded;} -.satellite {background-color: #dee;} -.centos {background: #fef;} -.baremetal {background: #eef;} -.virtual {background: #efe;} -.ceph {background: #eff;} - -/* admonition selector */ -#admonition_selector { - color: white; - font-size: 85%; - line-height: 1.4; - background: #2980b9; - border-top: 1px solid rgba(255, 255, 255, 0.4); -} - -.trigger { - display: block; - font-size: 110%; - color: rgba(255, 255, 255, 0.75); - line-height: 2.5; - position: relative; - cursor: pointer; - padding: 0 1.618em; -} - -.trigger:after { - content: ''; - display: block; - font-family: FontAwesome; - font-size: 70%; - position: absolute; - right: 1.618em; - top: 6px; -} - -.trigger:hover { - color: white; -} - -.content { - display: none; - border-top: 1px solid rgba(255, 255, 255, 0.1); - background: rgba(255, 255, 255, 0.1); - padding: 0.5em 1.618em; -} - -.displayed .trigger:after { - content: ''; -} - -#admonition_selector .title { - color: rgba(255, 255, 255, 0.45); -} - -#admonition_selector ul { - margin-bottom: 0.75em; -} - -#admonition_selector ul li { - display: block; -} - -#admonition_selector label { - display: inline; - color: inherit; - text-decoration: underline dotted; -} - - -/* LINKS */ -a.external:after { - font-family: FontAwesome; - content: ''; - visibility: visible; - display: inline-block; - font-size: 70%; - position: relative; - padding-left: 0.5em; - top: -0.5em; -} - - -/* LIST */ -.wy-plain-list-decimal > li > ul, -.rst-content .section ol > li > ul, -.rst-content ol.arabic > li > ul, -article ol > li > ul { - margin-bottom: 24px; -} diff --git a/doc/source/_custom/expandable.js b/doc/source/_custom/expandable.js deleted file mode 100644 index acb117ec3..000000000 --- a/doc/source/_custom/expandable.js +++ /dev/null @@ -1,32 +0,0 @@ -$(document).ready(function() { - - // for each trigger - $('.trigger').each(function() { - - // check if cookie has value on true - if ($.cookie($(this).parent().prop('id')) == "true") { - // add displayed class and show the content - $(this).parent().addClass("displayed"); - $(this).next('.content').show(); - - } else { - // remove displayed class and hide the content - $(this).parent().removeClass("displayed"); - $(this).next('.content').hide(); - } - }); - - // if user clicked trigger element - $('.trigger').click(function() { - - // toggle parent's class and animate the content - $(this).parent().toggleClass('displayed'); - $(this).next('.content').slideToggle("fast"); - - // save the state to cookies - var parent_id = - $.cookie($(this).parent().prop('id'), - $(this).parent().hasClass('displayed'), - { path: '/' }); - }); -}); diff --git a/doc/source/_custom/jquery.nav.js b/doc/source/_custom/jquery.nav.js deleted file mode 100644 index 665157f82..000000000 --- a/doc/source/_custom/jquery.nav.js +++ /dev/null @@ -1,223 +0,0 @@ -/* - * jQuery One Page Nav Plugin - * http://github.com/davist11/jQuery-One-Page-Nav - * - * Copyright (c) 2010 Trevor Davis (http://trevordavis.net) - * Dual licensed under the MIT and GPL licenses. - * Uses the same license as jQuery, see: - * http://jquery.org/license - * - * @version 3.0.0 - * - * Example usage: - * $('#nav').onePageNav({ - * currentClass: 'current', - * changeHash: false, - * scrollSpeed: 750 - * }); - */ - -;(function($, window, document, undefined){ - - // our plugin constructor - var OnePageNav = function(elem, options){ - this.elem = elem; - this.$elem = $(elem); - this.options = options; - this.metadata = this.$elem.data('plugin-options'); - this.$win = $(window); - this.sections = {}; - this.didScroll = false; - this.$doc = $(document); - this.docHeight = this.$doc.height(); - }; - - // the plugin prototype - OnePageNav.prototype = { - defaults: { - navItems: 'a', - currentClass: 'active', - changeHash: false, - easing: 'swing', - filter: '', - scrollSpeed: 750, - scrollThreshold: 0.2, - begin: false, - end: false, - scrollChange: false - }, - - init: function() { - // Introduce defaults that can be extended either - // globally or using an object literal. - this.config = $.extend({}, this.defaults, this.options, this.metadata); - - this.$nav = this.$elem.find(this.config.navItems); - - //Filter any links out of the nav - if(this.config.filter !== '') { - this.$nav = this.$nav.filter(this.config.filter); - } - - //Handle clicks on the nav - this.$nav.on('click.onePageNav', $.proxy(this.handleClick, this)); - - //Get the section positions - this.getPositions(); - - //Handle scroll changes - this.bindInterval(); - - //Update the positions on resize too - this.$win.on('resize.onePageNav', $.proxy(this.getPositions, this)); - - return this; - }, - - adjustNav: function(self, $parent) { - self.$elem.find('.' + self.config.currentClass).removeClass(self.config.currentClass); - $parent.addClass(self.config.currentClass); - }, - - bindInterval: function() { - var self = this; - var docHeight; - - self.$win.on('scroll.onePageNav', function() { - self.didScroll = true; - }); - - self.t = setInterval(function() { - docHeight = self.$doc.height(); - - //If it was scrolled - if(self.didScroll) { - self.didScroll = false; - self.scrollChange(); - } - - //If the document height changes - if(docHeight !== self.docHeight) { - self.docHeight = docHeight; - self.getPositions(); - } - }, 250); - }, - - getHash: function($link) { - return $link.attr('href').split('#')[1]; - }, - - getPositions: function() { - var self = this; - var linkHref; - var topPos; - var $target; - - self.$nav.each(function() { - linkHref = self.getHash($(this)); - $target = $('#' + linkHref); - - if($target.length) { - topPos = $target.offset().top; - self.sections[linkHref] = Math.round(topPos); - } - }); - }, - - getSection: function(windowPos) { - var returnValue = null; - var windowHeight = Math.round(this.$win.height() * this.config.scrollThreshold); - - for(var section in this.sections) { - if((this.sections[section] - windowHeight) < windowPos) { - returnValue = section; - } - } - - return returnValue; - }, - - handleClick: function(e) { - var self = this; - var $link = $(e.currentTarget); - var $parent = $link.parent(); - var newLoc = '#' + self.getHash($link); - - if(!$parent.hasClass(self.config.currentClass)) { - //Start callback - if(self.config.begin) { - self.config.begin(); - } - - //Change the highlighted nav item - self.adjustNav(self, $parent); - - //Removing the auto-adjust on scroll - self.unbindInterval(); - - //Scroll to the correct position - self.scrollTo(newLoc, function() { - //Do we need to change the hash? - if(self.config.changeHash) { - window.location.hash = newLoc; - } - - //Add the auto-adjust on scroll back in - self.bindInterval(); - - //End callback - if(self.config.end) { - self.config.end(); - } - }); - } - - e.preventDefault(); - }, - - scrollChange: function() { - var windowTop = this.$win.scrollTop(); - var position = this.getSection(windowTop); - var $parent; - - //If the position is set - if(position !== null) { - $parent = this.$elem.find('a[href$="#' + position + '"]').parent(); - - //If it's not already the current section - if(!$parent.hasClass(this.config.currentClass)) { - //Change the highlighted nav item - this.adjustNav(this, $parent); - - //If there is a scrollChange callback - if(this.config.scrollChange) { - this.config.scrollChange($parent); - } - } - } - }, - - scrollTo: function(target, callback) { - var offset = $(target).offset().top; - - $('html, body').animate({ - scrollTop: offset - }, this.config.scrollSpeed, this.config.easing, callback); - }, - - unbindInterval: function() { - clearInterval(this.t); - this.$win.unbind('scroll.onePageNav'); - } - }; - - OnePageNav.defaults = OnePageNav.prototype.defaults; - - $.fn.onePageNav = function(options) { - return this.each(function() { - new OnePageNav(this, options).init(); - }); - }; - -})( jQuery, window , document ); diff --git a/doc/source/_custom/jquery.scrollTo.js b/doc/source/_custom/jquery.scrollTo.js deleted file mode 100644 index 4fc956596..000000000 --- a/doc/source/_custom/jquery.scrollTo.js +++ /dev/null @@ -1,208 +0,0 @@ -/*! - * jQuery.scrollTo - * Copyright (c) 2007-2015 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com - * Licensed under MIT - * http://flesler.blogspot.com/2007/10/jqueryscrollto.html - * @projectDescription Easy element scrolling using jQuery. - * @author Ariel Flesler - * @version 2.1.0 - */ -;(function(define) { - 'use strict'; - - define(['jquery'], function($) { - var $scrollTo = $.scrollTo = function(target, duration, settings) { - return $(window).scrollTo(target, duration, settings); - }; - - $scrollTo.defaults = { - axis:'xy', - duration: 0, - limit:true - }; - - function isWin(elem) { - return !elem.nodeName || - $.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1; - } - - $.fn.scrollTo = function(target, duration, settings) { - if (typeof duration === 'object') { - settings = duration; - duration = 0; - } - if (typeof settings === 'function') { - settings = { onAfter:settings }; - } - if (target === 'max') { - target = 9e9; - } - - settings = $.extend({}, $scrollTo.defaults, settings); - // Speed is still recognized for backwards compatibility - duration = duration || settings.duration; - // Make sure the settings are given right - var queue = settings.queue && settings.axis.length > 1; - if (queue) { - // Let's keep the overall duration - duration /= 2; - } - settings.offset = both(settings.offset); - settings.over = both(settings.over); - - return this.each(function() { - // Null target yields nothing, just like jQuery does - if (target === null) return; - - var win = isWin(this), - elem = win ? this.contentWindow || window : this, - $elem = $(elem), - targ = target, - attr = {}, - toff; - - switch (typeof targ) { - // A number will pass the regex - case 'number': - case 'string': - if (/^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ)) { - targ = both(targ); - // We are done - break; - } - // Relative/Absolute selector - targ = win ? $(targ) : $(targ, elem); - if (!targ.length) return; - /* falls through */ - case 'object': - // DOMElement / jQuery - if (targ.is || targ.style) { - // Get the real position of the target - toff = (targ = $(targ)).offset(); - } - } - - var offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset; - - $.each(settings.axis.split(''), function(i, axis) { - var Pos = axis === 'x' ? 'Left' : 'Top', - pos = Pos.toLowerCase(), - key = 'scroll' + Pos, - prev = $elem[key](), - max = $scrollTo.max(elem, axis); - - if (toff) {// jQuery / DOMElement - attr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]); - - // If it's a dom element, reduce the margin - if (settings.margin) { - attr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0; - attr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0; - } - - attr[key] += offset[pos] || 0; - - if (settings.over[pos]) { - // Scroll to a fraction of its width/height - attr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos]; - } - } else { - var val = targ[pos]; - // Handle percentage values - attr[key] = val.slice && val.slice(-1) === '%' ? - parseFloat(val) / 100 * max - : val; - } - - // Number or 'number' - if (settings.limit && /^\d+$/.test(attr[key])) { - // Check the limits - attr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max); - } - - // Don't waste time animating, if there's no need. - if (!i && settings.axis.length > 1) { - if (prev === attr[key]) { - // No animation needed - attr = {}; - } else if (queue) { - // Intermediate animation - animate(settings.onAfterFirst); - // Don't animate this axis again in the next iteration. - attr = {}; - } - } - }); - - animate(settings.onAfter); - - function animate(callback) { - var opts = $.extend({}, settings, { - // The queue setting conflicts with animate() - // Force it to always be true - queue: true, - duration: duration, - complete: callback && function() { - callback.call(elem, targ, settings); - } - }); - $elem.animate(attr, opts); - } - }); - }; - - // Max scrolling position, works on quirks mode - // It only fails (not too badly) on IE, quirks mode. - $scrollTo.max = function(elem, axis) { - var Dim = axis === 'x' ? 'Width' : 'Height', - scroll = 'scroll'+Dim; - - if (!isWin(elem)) - return elem[scroll] - $(elem)[Dim.toLowerCase()](); - - var size = 'client' + Dim, - doc = elem.ownerDocument || elem.document, - html = doc.documentElement, - body = doc.body; - - return Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]); - }; - - function both(val) { - return $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val }; - } - - // Add special hooks so that window scroll properties can be animated - $.Tween.propHooks.scrollLeft = - $.Tween.propHooks.scrollTop = { - get: function(t) { - return $(t.elem)[t.prop](); - }, - set: function(t) { - var curr = this.get(t); - // If interrupt is true and user scrolled, stop animating - if (t.options.interrupt && t._last && t._last !== curr) { - return $(t.elem).stop(); - } - var next = Math.round(t.now); - // Don't waste CPU - // Browsers don't render floating point scroll - if (curr !== next) { - $(t.elem)[t.prop](next); - t._last = this.get(t); - } - } - }; - - // AMD requirement - return $scrollTo; - }); -}(typeof define === 'function' && define.amd ? define : function(deps, factory) { - 'use strict'; - if (typeof module !== 'undefined' && module.exports) { - // Node - module.exports = factory(require('jquery')); - } else { - factory(jQuery); - } -})); diff --git a/doc/source/_custom/menu.js b/doc/source/_custom/menu.js deleted file mode 100644 index ed63fdbbe..000000000 --- a/doc/source/_custom/menu.js +++ /dev/null @@ -1,3 +0,0 @@ -$(document).ready(function() { - $('.wy-menu').onePageNav(); -}); diff --git a/doc/source/_custom/rdo_styling.css b/doc/source/_custom/rdo_styling.css deleted file mode 100644 index df9be63b1..000000000 --- a/doc/source/_custom/rdo_styling.css +++ /dev/null @@ -1,208 +0,0 @@ -/* general settings */ -body { - font-family: "Open Sans", Helvetica, Arial, sans-serif; - font-weight: 300; - font-size: 16px; -} - - -/* remove backgrounds */ -.wy-nav-content, -.wy-body-for-nav, -.wy-nav-side, -#admonition_selector { - background: none !important; - color: black !important; -} - - -/* page header */ -.wy-side-nav-search, -.wy-nav-top { - background: rgba(0, 0, 0, 0.05) !important; -} - -.wy-nav-top { - line-height: 40px; - border-bottom: 1px solid rgba(0, 0, 0, 0.1); -} - -.wy-side-nav-search a, -.wy-nav-top a, -.wy-nav-top i { - color: rgb(160, 0, 0) !important; -} - -.wy-nav-top i { - position: relative; - top: 0.1em; -} - -.wy-side-nav-search input[type="text"] { - border-color: rgba(0, 0, 0, 0.25); -} - - -/* sidebar*/ -.wy-nav-side { - border-right: 1px solid rgba(0, 0, 0, 0.2); -} - - -/* admonition selector */ -#admonition_selector { - border-top: 0 none !important; -} - -.trigger { - color: rgba(0, 0, 0, 0.7) !important; - border-top: 1px solid rgba(0, 0, 0, 0.2); - border-bottom: 1px solid rgba(0, 0, 0, 0.2); - background: rgba(0, 0, 0, 0.05); -} - -.trigger:hover { - color: rgba(0, 0, 0, 0.9) !important; -} - -.content { - border-top: 0 none !important; - border-bottom: 1px solid rgba(0, 0, 0, 0.2) !important; - background: rgba(0, 0, 0, 0.025) !important; -} - -#admonition_selector .title { - color: rgba(0, 0, 0, 0.6) !important; -} - - -/* menu */ -.wy-menu li a, -.wy-menu-vertical li a { - font-size: 100%; - line-height: 1.6; - color: rgb(80, 80, 80); -} - -.wy-menu-vertical li a:hover, -.wy-menu-vertical li a:focus, -.wy-menu-vertical li.current a:hover, -.wy-menu-vertical li.current a:focus { - color: black; - text-decoration: underline; - background: none; -} - -.wy-menu-vertical li.current, -.wy-menu-vertical li.current a { - border: 0 none; - color: rgb(80, 80, 80); - font-weight: inherit; - background: none; -} - -/* level-1 menu item */ -.wy-menu-vertical li.toctree-l1.current > a, -.wy-menu-vertical li.toctree-l1.current > a:hover, -.wy-menu-vertical li.toctree-l1.current > a:focus { - background: rgb(230, 230, 230); -} - -.wy-menu li.toctree-l1 > a:before { - font-family: FontAwesome; - content: ""; - display: inline-block; - position: relative; - padding-right: 0.5em; -} - -/* level-2 menu item */ -.toctree-l2 { - font-size: 90%; - color: inherit; -} - -.wy-menu-vertical .toctree-l2 a { - padding: 0.4045em 0.5em 0.4045em 2.8em !important; -} - -.wy-menu-vertical li.toctree-l2.current > a, -.wy-menu-vertical li.toctree-l2.current > a:hover, -.wy-menu-vertical li.toctree-l2.current > a:focus, -.wy-menu-vertical li.toctree-l2.active > a, -.wy-menu-vertical li.toctree-l2.active > a:hover, -.wy-menu-vertical li.toctree-l2.active > a:focus { - background: rgb(242, 242, 242); -} - -.wy-menu li.toctree-l2 > a:before { - font-family: FontAwesome; - content: ""; - font-size: 30%; - display: inline-block; - position: relative; - bottom: 0.55em; - padding-right: 1.5em; -} - - -/* typography */ -h1 { - color: rgb(160, 0, 0); - font-weight: 300; - margin-top: 36px !important; -} - -h3 { - font-size: 135%; -} - -h2, h3, h4, h5 { - font-weight: 200; -} - - -a, a:visited { - color: #2275b4; - text-decoration: none; -} - -a:hover, a:focus { - color: #1c6094; - text-decoration: underline; -} - -.rst-content .toc-backref { - color: inherit; -} - -strong { - font-weight: 600; -} - - -/* code */ -.codeblock, -pre.literal-block, -.rst-content .literal-block, -.rst-content pre.literal-block, -div[class^="highlight"] { - background: rgba(0, 0, 0, 0.05); - color: black; -} - - -/* notes */ -.admonition { - color: rgba(0, 0, 0, 0.5) !important; - font-weight: 400; -} - -.rst-content .note { - background: none !important; -} - -.note > p.first.admonition-title { - background: rgba(0, 0, 0, 0.5) !important; - color: rgba(255, 255, 255, 0.9) !important; -} diff --git a/doc/source/_images/TripleO_Network_Diagram_.jpg b/doc/source/_images/TripleO_Network_Diagram_.jpg deleted file mode 100644 index 72d9f3a9ef4acf1a3375b0b1a3b63d17d6c0ac0d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94564 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%0AP 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 diff --git a/doc/source/_images/discovery_diagram.svg b/doc/source/_images/discovery_diagram.svg deleted file mode 100644 index d5231ec71..000000000 --- a/doc/source/_images/discovery_diagram.svg +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -Client - - - - - - - - - - - - - - - - - - -Ironic - - - - - - - - - - - - - - - - - - -Discovery Ramdisk - - - - - - - - - - - - - - - - - - -Discoverd - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Register nodes’power management details - -Send nodes for introspection - -Reboot nodes -> PXE boot generic discovery ramdisk image - -Facts checking and registration of hardware details - -Post hardware metrics - - - - - - - - - - -Nodes registered - -Nodes are fully registeredwth full stack of hardware attributes - diff --git a/doc/source/_images/logical_view.png b/doc/source/_images/logical_view.png deleted file mode 100644 index e8941c234c197157fb3c7c0bf25870b74d26db79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122773 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 lQ$y6hW<-ku#OW_y57SzeB*na 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

2i{WpY@{0gxk`;?UuPhI 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

gpU*Dk*230ZJw*mHMWVttwl!>juKbv1yEt|S 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∓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 diff --git a/doc/source/_images/logical_view.svg b/doc/source/_images/logical_view.svg deleted file mode 100644 index 1498034f8..000000000 --- a/doc/source/_images/logical_view.svg +++ /dev/null @@ -1,2383 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Deploys - Updates - Monitors - - - - - -Undercloud - -Overcloud - -Your overcloud can contain as few or as many predefined overcloud roles (OpenStack components) as you want. - diff --git a/doc/source/_images/overview.png b/doc/source/_images/overview.png deleted file mode 100644 index 84e1ec014e6365d00ba8c0019d5c5d6176e30600..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16715 zcmZv^1z4Ot&@PO#EMDBL#oZl>I}~?!cPTErKyioSEl}LuS&Bm`P^>rrZx}LhqN`e+HPON5@F6LIOzD}-CY8V({ zUqR?sCo4}gN?#{OXAePN5$b;wg3#};kJ+dx|B-k)h*0Y)t5Hh2xLZ;3uyV7qQ;PyA zDJg~BEv*IBrDXo6IkY4~ZR_djD#*s> zg(_DR2<_>AO_V5*fptOz21blXUh2K3FYI3<|r6Kp79-<+TG zr>t4-sEAxlj0(m(c1YIxM9Ij*XDd9wjRMw3~7sz1qYhy2{5*qrfc%_Lwp7vkw@9%fP z%GoU3qm%Gft`tfltEMq(y=7%pF=Wl<96B(K273#|(**UHTpumcpyD$F9`6rp48-SY z7w)2?qcxn{w$txah0ngPVpZW{;G*GT4e$y=V$joQV>uA`&BlM2uJ?vs4JJ^C0Vab( zoo0K2gZqF=^Z?t#Uu8IQDk_5ko}S$>lsr~3AxnR~>l+%3viV%Dk5;=3I5{~j4}O)M z_aRdx)~40sAfXYm2SFlGa0$5)Eks_<)?d65DM%^e;zSVmckIHKi8>$8$ND#VN;JNy zcs*SIWpY|-_EOi-2xnkm*gW$!3>EJMrDer1ar1l+ve9mu6A-@tar)mflI z-q(h&`=XZ=7YnQfzjW<(KOCn(nN^D3{Yg17t}`F_qeg^_fviPWrWPe-kZ*wpOM}H8 z&F*5D@FmG-CGcj&edJvR!oghCSZ;_A8(WQ3gm@)f>EBPr2$hMHpoRCY86?Y%b}3v| zqqvi$AHEU_1MOr?k37Dq)$*H56&3zc`wI9j2xt9f{ir~Yc0e|h+h+sqeSs)&y|WkI zZ2kH!z`IzBlF*zC*U99FGQ`bkkj02xYWL5d*1Cl=Lyrlb&}baG`obG3=YupIV?Fqw zyka*MTzgG=Twn~+AQqeq<@$OR211|CO1oEw@BQUItRde3WaLbZZ~+BR(rK=Qv>)Iq ztdaITmrb)UuiB_XuvMST7D`;>v+8Fv{j*TA0yYmG2!>aPu^`lN`glZXdihOQE$HcL zUaadBg1RJn`BU+#H~ z{g>yH7g{#`Mtao0JEV&zr+PM0%<)K0IN0k8-cTk4K2W~FzCQ$Z4G~t#KM=g9%uGv# z6ah$?0H^0t>gvgrCOxacTXB3JGgyu8Q4j_Put;$M*44Vqn)JGFf5q`2jI+YV-P0XK z+0B$7x}x?^JghA1SA0N-=Ru$+yzQPin5_s`%U4(YjJhXLEIm2Ezr)OdsoBbk<%D0O!F7o$x(-!Fl-fY-c1Uz7b zj50G-?~2R%^^%Kf-^vl)N$VB{foBbCu#x_g5kxaPpP1X$w0dV> zK!Sm$W*~zE;mAuX;AraVv>!9&IC$NIu*`MBxllYo(^+I`;BlKlJ@frUecx09gmRv%+Ht*s8-~2(v>V0lEptxbYKbSTR++HYlyu zLmYuuP4mV~JodlVhmJHUzni-_WXA(wS(9%!X;)2L@2?Jr>XBke1vrVE#X%74_Z3-R z0kB-@ZeyiPwt`K{*}OYU-vaz(`Hm3r^*S!va?SZgN2Ozd2^%cRlV0YSO3jkL#NfQJQMX z-lj@Z9~{T}FR0gC(dx=;Gga_Nzwd*1F95MK zN`t~n%VD}`2UQ0F7go9;fT}>EFyJafy#iYI zNxY02TGZT_h2X(Ti(}K907}*9O`eK>F~YqHTmD+q@@;a3);_9cMmvnq;1Dlv5X=)}cO@3T(CYS*_I!$V|Of`B_ z^QO*Ku4d$Lf=REoAAL4-s$p?4quNriAA)`+Zn-`9@YkcPvS}&1`&gElAvs zSJYB~dH=dfrP$z-B>Dgm+Q~m1i-&H0deiwz3$+X_E&NTouXTI8_SQ8xqLTE@jEj%m z@~~`&Kr+QRU3{~cX@pH$*Gj(nmu_tMRjs9)8Ih>)aWY>Xt-L|wenI#4W_RuK6*l4X zY?E<3eW>$e*Q0I#5tIe}rzz4<*TUXe$Aab|j}3*Pn^AdI)xWHH{AGt{_jMw!;n_)r zWejkkjN~mIoph`Vf`q56=(j&Ulbuc~xOPPDB85+a>eE4{wFlzK;%&qX`I1FsKdB}f zg$>ldLT8O5HUtl7N!<4~;oA%Ekl(JMYEDNk->S*f_Vw-eGj*OXB?|ykv3Jf#l{ufC zRSWW%CLe-&Zz|{is$3z5-+&ba^uzk*a7Mn`4KS^*I_GIA5n<6`)2>h?I12 z<-J6V*6mfs_hV%+dtJ7G4--|v9YLQb5-d(`8qWH|zno80w{P3KXJ@htSqQAWz|k3% z9CcS%J%xQ!J>l1U@Kh zAK|h0Cfm2<(-e>>o6c~UJ$7(#s>v%8@bnET=TuBc*7%Baxj1F);qlp^2Bj&!zn`GJ zjn8E=MOUg`Jb-j%LS(gfTWw(bQ>-&Sfe&#ht;RbK7Ull#?V3cM$P3sbwMUoFJ zx(lMBjI!XKevj39`hK=DbwuC3oX0z6^hg}?JD{RE_X3~?6Lvdvr7p4VdJ5@3?H!O!L$~^m@LBre3N*0$^YnJ)&t77ulk4u zlhNB8wtaDB`e@TP5n=Vr4@jR+3KDqCr=HaPt~2DJ+De8!Xf)#ID~iE7sY?4br)5Lk zs95H8WLi1;@tgz-+Ln{#`aaUmdIQCK-XyxwYQYNu?y7ryJ-pW_)}tH z4{ezZzLKS?7fo*S$aQr3Z*JO0Ps$dm>4PCKTDRJv^7*jf38u1rU*kd3!BDq^kkLJo z>f65MU79F+^70JhcPYp;FKK43VqhU0?Zjj4KLP}PjMM?dVf0eA*CBVoA)FsTCj>=) zWOfHs6DhSM*pr1;w&v!qZ&X;hP>b>QtwqW@r$@T^`-v&>UbgOOV?hI=e0bU}_AkoL z!X!xOv|=>O@ixfvSb!d?$1yejnPW7)6gFyAjia|RRNX`n3gC91P5xtkFV!}DNaY&Lc(Rqo5r>25Ta*pJz z^tRq+vg`yMp%oh@@ME6b&4yfq=i!$n*7os!!M)G9D2D$89ss!3 zLv&XYUy5EVkYEG!`k!F*XZU}8`K)#o3+ka_&JrZz$>KA@2n!1h@rX*7dmx7R_A2#z zHjc|?!z>Y|4;~ZyYGWH~``*zOK5IbN(w+?ETil~BZ0*rn2cP0Xtd51byGbLvy(9$g z=FUvnABkN@e%-wxSrf4ZI%EZE-KzE-BZSIQLDS_4|R`zl^{@E1JT4oHmleQGt0WN%;L8M!W}6LIzO&E~oQybz$f z<|o1Ui_NV81Y<}KV#t1vnFMBfw#>m(gE>O75JTPvLr!D@1T~eQ?}%{CJm*Fr{_dFG zmako|4quidu?c!F=ohYrdr++~B?-|%;nfmoxc92qQKASELZCewB?d-pgyE3IA@4Nj ze0bBHChTq$v>=$wTT=EDD$~7;K4ocLitk;dqZt6OD5{;Y)N;VW1r|AS2H)rO_mr_x z-3?~}ta)qT?Y;}ZLVB%o(h1L>9{3GzMyzwUpD&-pe^D0*flB{=enT~mIXKRjSha|Z z35tNX{&5ki6)XN(*>u%teJ*UQu!3D(O2f@*(@CP(+AQu(ku>}82g((cc9yioh`gNKlIQ2&~+cB_V%WW3Q7ERAd z`ZDj3E>zg}4|`ij7Wg0(m@h=9e6pXbPuZjw+>5$Ul{&e+QAMza8X_5MgF)LiOpLuv zyEqSt-(d3`Xx7+xeFDavJtwK9N);CjVa}gEH>%`x0LmJmLJ<91Q*q(kj zLva^d5O({>f-L##^%T*h>BY4wY!LvM0?_08I zw+=WJLA=dk%eh;+RI-@i%o_wxO?t+*Y;!98kCGU1zcgCJhcM54<9|yY627`^y0_w_ z=Nkmvm^mFMk)Bh#n@sDp+PhwCU)J)JT`d`hxgqB7+_6VQm|1MB%-Fxv=va0H=z z`FFTAQeo*!9|*@aLlyt=Rvy)xxh6dbb}WDG2$&K3`%;MTvFSAb)2Wu}qs2xIQlXoG zGhR|z3rGlsFUGppDDE`ZbyD*8P-2Y;MzWtn^t_=<{Z@A_#O|T@Yn*>D-Q({>kn8#nF8K*Y(PmQ21S8a9|MlON`{hHQX}cCRRm(QfPO5q zU?%Lznt`N?T?1#J9#?B6Ck&dQsP|4Gnm>PKrj~gXz4!OqQhX)&br0^XxSL)33T`VLDi{6Re zUAnn&j(KT*q6eu3x>F@W|NeOJ6*ZZdli6rU5AoyC!KYIlnP(n33MoIf!e!a@7lf~UPup_9hZ`=z;h&5%2O#ahKzWD(*ua&Kr%qM16Ey_ z4O8;z=NQ}|ZO;TMY&=i)QmPGg{AoT*{$HCmZcEd5v(J!Wi`>c>uX>}(g!GMc@}*VC zIR$fN>#Z&^`wlvKfOWQAa&j_ScY1pGtd1t>m?>FNj77*_;pJvLEu9Z%4+*F6#YmDq z*T+e}2~4O_W-FpmBTk;&nvNc=OEy@YnJFuB7L^&v=amds`BDD-8BRZQ8SOUOPd2Ox z<+oc$lxIjr4^{gbh-?>d+-4{->Y`Dia6f95tl5DPbWKJKR6){*gEMGx5kt8RNESUb zaI@M9WIR#{vs=12w4c+Q&S1+pdKWXG(M9Xcs9PJxO3B!_;!h|nbvv_tQkz=#Z(~IV^4qJ8#q|>WTR8e_X~@sHdK>Ngu~(N z1tgS}Y!KeQCoFg&25vV_wHt*6@2C#+{hlzz6tRl)r^t)^uuotobb0>^!}1q?x0&f_ zV5WqGL|9Q#5#b=n`=!iTMSsX?cO$?^U*Bj2YI4$wot#-C)mLn)5+SVzF@bUSG={p&>Cv7i%)IAPEM77-g zk?X$dx0}V>%;rdr#3?dUFBbIj=FTSg*5oGhM2bIN9h4XwfG0e-m%o7E#If0ROm>{x%*RpH zn`F>O5GlEP#&hXrj=N>ApKH}wJ9eD~>SQrTey71wcGW)|cUb-~z_A?pnjmMMQnLB* zS7-n3oXP$7073Ya1<&^$gUAu3hzSa}p0~fMQA;`|OLHITdy>U;s)@N|l6yl;{sw~_ zpZ{1yE0$5^c|O{YXYLk1kI;>!+T^9_VFAIep@~r6~Wa-&6Agn~^k$j5bePc0TQ-l3@3Sgtm1}&T1yfqXLn-@)rAC5z*DXP^j{^IJ;6(ZM z-tQS8&UW@vu?A4@i}dgbIGFa4OA_bvnAr32dtd!6S-lI$c>ts)647MPq}Ks&GHK@PRl`eJ=O+n^_%`v~PJIM};rem})wy z3Bn_x(Hb^u=@qD-yU?@%#RYW?5a*ylci0Txzy+EF-C2dIt*gXca^@FjY`bBf{z*|C z6*^g)$igP|gY+dCvf(^}Sa`S->Z z+AJwUn^tyW#K#mgo2E@>qi*=L64cd3%}OO`T`DR)TfF;%r!Mt4;b&V0>Jj;aT?I ztd0G8kd-sEta(p!mVi)V{7Mg;+&-odNsgX^VYg}Be)-~2f& zi8ya1%XvFX6Eyoqt#+ra>Y>}Gpzc$K0-4|^CM?{w_PFVD3O)sVZIZ+HsBOt~#r2wp z3-aod`&7}ofsVJgIPwq2Bxgl)Ny6;cTQ031%JW@2k94~sr9Yz|$>MRbU8RG%tq*h3CmNiU@F0rQ{*7O+1i#_`aY^Q3Bk9L|5 ze6mLToSA7$>y7VSV9@Ny5!-D)TMqH%e3vdwTkC)0Y^Gl=I+AKjC_}4(h>F39R{f(5 ze!V;=Hga-&?2YHJ6gC984=4-j5}-dB z3UGDm^OOelRT2(%G6xgwh#*2FF-6`I7`lc==L`8%*NRqW8Z_BkjkcgAGTEg|-|J!! zQ5~wPs`70(vK>-NPL7XrdpfUmuSC=Z{l;U`Cae^@-=k@e*j4y^*X+E)`0}_bwjF_^ zlK4IxiReBGXUs;gs09hX##4{)FVwBCOzPv!oZUEEW3twm>shNbZM$#fchoUN?yoc# zIuv*|KtN0JkZfhpHvpHJ&YvW@v+*O;PM7r|uC?A!RKwN4u{6m11}X=0M$I)QY;Ai1Y=XJKd~eA}xi$aeG>lAuj>uDEj?gp9prr`4fklB-RXLYDrOFllY!}>%|7In4E{v;G#*E zmSK6P-*P>XGNaO1Qe{~9cn7?R6&WlUD z^tty}T)VWaq^%a$1fQyhcE?bp6U&lFQX8$>njKlYm~p%DqLwSV+5cS*sIjzRsbIveTG}ZisAh%pzuP zbPJR-+56Z@ICDErx;rQ*d30-&rji%}p+S7`ab(@kLdyN0h2hMGt*$*SsMVA^}7rlJOzv!A(?IqMGl_emq-|@qy(D8fXN216hFm zuPeL+jni>+L~v4Imy}4@w-#Fo7p5|tTdlQjMVq~rQei&oz7*Ca^g48oewHh=)^2^!h1~~cy*m@r8iAbIvZZhVL{o^Kho}7iD z>$_2%ImZn&^Bot~vFgBL$rG8-MWfVZ_%vPhWt@~S1+f*DyQWT)|F7p_hi{VO^M-8M zT1k@{ya`#wZJg<;p$x4B0oL$X+WK!E>jE9Sh2Bzo?`mCVe$01T%9Y=@dM|ZUUJUhb zPUzy0G1E*;g0&9BYg$QD3XT~{DfklJBzf-#zc4A%se;8nQ_ZVnQPY_hgptKiEUjx+ zuG{onRL34JyuUZ&`*{x$ZeH zBjV@YtHo*m+eW=gr942$xe^U5hFH;LL&EoF`WDmkXwjvIX6^Y(p=`yz{;j#!=_;Ae z=#Jk76?5&!bs|K;Rbp|=(D=2;mYBN2l~CPl*sP+@@HD1iiZ5l`TN`}nE)quKG12+3 z)@NtXh&GAa7c=z+e}!?^O@sb4QABZQXnjH@bVKu5u3=Kl3`-pNrn_ zeLbJ=d7dq8VjVbsu{_1%v>~p(r|?~eO}T+ym+?8}HzhM5yVV`X$rqDiYe$41Z;qWb z`E?B4K$m})<^k-Rlh+@76TyYL2=%O-W;<5dy2x2vJ|y44LL8fNp^9l(L}FuwPt6-7UqAeo!K)f!lYp(Qj(islMqY;ur)ux~1QVrX8P^~7e`%pa1{IQO}#p*~(sS^65l1+uvG+h2Qdq56clkH!2!h;v8U{HzMo z3+H?4SFUS;H(6SAllZOeU&-^wvv$~m?_$h;SbAH^S>hY&x#uKet52%pA?qaaExU%B z@ms1(g3%as$vmom>i3C@Wie-+3CFr|N>tA=&<`)rmkwLn?tfzp^E>)WxU+HGTYc)6 zC@=H?&m{4ut`>b#lm(KGtN77xA3UGqJB;W%S zNQ09CQkv%!KbUHxp@c7?nko4dsf%Ni-oJwH!+haBs^KPxZ>4YN{Vq}TB| zFE13mGb+mR8;)3{Tb6d?v(b5><$4CS%z&lai}L?|-PjD_&i{B&wv!d;2qK4dnv zCtgS@xy6=Bd-S$iq9WxTI!?G)e^cPqq&hs4;{nliwV|0elGcW*oKkYEmRMAWAC6o2 z#+DOZU#_g1yK4oE#6XWtO{G!0l1lGrF%s>3b5oDPZ`F!%({rY8a%MGI zmfk}3$ma~jH58Xk7{B}gA-Av%xidoOQoAucKR8q`w8PN@Zq(u7u-17H5})*x`CC(y(c9vBx>l^iFq*5#U-j#&cZm${9rA@Yqo@%+)l?{4= zMAlPxvDe_!Idj~5q|mcaTrOP)6bJ3`5lo*qQgZDen0O=0gfcttOZv5Vh&YJw>3ZTC zVsj9<$aD&RMRP3!NeA7UM(-U(!F9sKbMF;#e&`Yoa`R$dEO9Hz$_#QdFHJ+?O%!&8 z1%S>OP8*ecN6ZP7b9rx<%fOB6#eO1MXvAO0)nIl)-hB<-;u3p0`vvAF74kIiX_I zY>Fcz5V#n+*;tg2XqqI!_2H6UvtdP6DBgjgV{Jkn?EQfs1h$~1Jz6p4{?>OLo(niS z7eMt@6fJu9kiWG`3`FF_L`(L;TjFvvIkv3FA&Ou}?c>h$k;bC@#ySkn zo!$IMM*RE0@`NaYL;IEXCV|wQ<7l+}+o{@B*Ah9}(T}CSzl?cLZO4aSsex=TtJ~Cf zC+M3~7#WVgJ7#HKOjSax@Jr~NzJI#nwVVE)6MB06YdDE!Vl>xk21_!Jg5CL7=?7Y| zGvmkxLLikQ(^z5R7pkhF6dO)%$FF3V!Ukq08co*dL$DWY;JHvp65pUL#I40Hp@if& z!y`v2rnZ3BWzaIl<_d)|jgy--!9LjO1ZX%mwwldA2isdg*9~ewOt5skHxdn4f3L^0 zgIG4zm{l3@$Z>>AtoRTVSbVi80;8?wJ|&<*?xz{_wAYh74Or@E^({?vrP=tFKM_YU zhZpHIOH69~&1nssU58SSFZgncQ)e^;6Qd}X>ZdA9YlMWJ8Z;?NV~0iCrpD8Dntges z&*?XP6e91TFXUTN&iMR`w;m8Vl@S+Y2!7wy=v-?mc3QZwN4=aHK}Ijqvi5Z;+8Iik2Al;>ly)>4i+7TpP&C)LLI$^o*Ek-FPMhJB zy6U8)>_KBq$FX2a!ku5YcwaAnwIze$aAjt~yh&MD{RxHZ)sIdz3U1p(0n=jE><&Uj z)I*~f4rk24GR_S%9uV3PqtUdI*rDl4vr#jPW}I57TayZsLcbq`eYKmK-13j+i`sU- z2X6Un>C3KjXp67!U@ucAH(Kxphya*bQMI-?TwiM3w)Z7Q>EkoaiX$K5O3%xaOZYbQ zzRxsij&Ux$=@R^qZFVUfP@({qh}s1#FD_OzE}yCCelY46Ttq5ACj7xgnWw>?6R6bg zcMMsw7A|TAht*)?$8$UKfyhDkPyi)*`Z8HJ^y0o_7##yBKQ8@3!?Jw#lM@|;@{n+) z;am6O8^aP1X?7_5nf0dW$La0cvW>w&yVDY}IVm$sQ-XEN&5)9{?PPd{w%x-TrS?`F zmDB?mk0IH7IrT$r_5IeJooycDC#C)?WqZAp13p|EWPEqLlz0BS-epMO<<{M{&Hf_2 zm*dEKmqXg+ml`?@lWT|`{6{I$d=p{3<*r}aOFn%S5ZH|{s-6x*L%ytDYNDKF*g{uNyB@Ix4-$SLD(j)>;q z`f4`VA!JU6T{Z9s0e(+DY~q>!7He|5DX7K2!b(Kl=~xI>a-nXEV`ndzb4^ zk0eqy{835pONXXP6^%h1-17CcRA*Z*qgID!a+faIHmkv>$xv|)@OwPx;VReKqawuc z>TdyydcKO4W32fn{s>>EsL&04k*+8Juoxd4CXlcu@%!B}E$7YL&pMRzTuTBAAQ(J3 zDLG21N(1RGM0A)TRg7S?bhLQ8RtZbeEaVH$SU0q<_aHRzhGAVw78jdNhv6buybZkJ zm4O!?5%6M44N;O-o_Nj-Z;W%KC@XK<&1#~3_)qH>YuyxDWi+n0WSTZpR)WMkHu^v$ z2RY2KZ>H2nYO`7N(=w!v!kEfLlMQc<^?em%BvNBj{MsbwRxEGhNcedDMq2#_(yzF3 zF6+?dCWQ^t8bps7b;+~%55K+>WzHsKr|`kF{Ifh#X9(nfHHDEv=;VVbv~zu~=A+FY zVCq&n1?|zdvhuC!Fy-m?t;x-0n%?ZwDl>;y1RhIef}x>6Fn2QV4$TGK;P<%8I@0EZ zOAWbNu?3{&CtKoQ1cV|V8*RojITFAT5}Xlmo*Bq*fJLkr`E3ii&f4pFqiXx^y<6{C zIiGJWm;HYHws=$;B_h`O%8TJOwU_Igoi(1f!Be5QdcSsFVT>N;h;YHL+Utl<@fWgPT!Wkgh`jvAi5TjGrWqZU^e5o6%h|p{+#0@ zU-`(_93k1meMWY7mmhJ?{9+Z7QK_Ww%RElM#H0Ok>qE6DqQMvzr4Z8gHlrk)ug-1k zUJuB+|D#cVR7Ur%&5mp2-peVdZ9Jyg19=m^s&dT;WuYLPL*eu?@-=1wTvwt>er>J)vv~HaS5a)PtEJk2Kh6DdFkl zH;$u%yroxN6}f$y1>ScQ#lgBC;{p^uD%3Mny6Ha$dx3aSm zUQ+3I)t_^*vsh^+C6UeWb0nQ1SBC$M8Uc4lsKfyXVWfj~0itT3VXWfs=uf~S{S6h( z&-XvouCc?gS9VjIKP}+T1bI@0_PPdb(PLB`_+Hcr%lRMS=b#;7!Au7sg`9e;2W)Ew z$WYH4{4riPyWPTR6@D2OTU?v?jqYk)#=xcr~d@ceQZq}iX{C(i93-V_`o9=Sjtc->Z1(WMrbkdgD;I z+=wO*`2mhxz(v}bAsBXA9UcV6v#puo9?g>mMv);v==^;vAarf$yHYJ18)lbW@n|64 zW%isMaW~L*gWoWz-R=0tsx_#ml0;>G&Sfkrz?%5;sc$x|*iOPr07HBS{@_x(qi8!C z=HwVVrxPkq?sQ@EhaJDnJr3S!g;`9$Q!h*V&4IoaBfley3G|5 zR#{O?`Dzv}Mld0XjYEaoK6 zG3F#m*0I_q^$dB{Zlao+448b!9X=boMe}>14;Cb1UP;3>d=xR5J#aqXhg-HHqmf*? zfRxho>cSh(7(-6`4eI-X+k>wXoI{3Ki15wc@5y7g@Kcc|F@8vqIuCduV|lDpp)=|s zRI>9gl($(r{F+vP58bRtQ22Un%Zf9vNTVe+rBpp#0!Zb7V?-NmM^-3#hNK0*(`Zir z@`?(EB7c8isTHdI5L6n``iC0khN3OhKJVEt{=@R7av?}aymz5UYY5VC{|`8f_xdD3 zQxVaKMH7lQ!VPr?hmP0fN{nv!{6{Cz}#A5KjYV#OU8!-M?b7h1}r9$qh+4}#u z*#JuKOLM$3lm7!L+r5I6{~xt#^fqKAfBpk0e}+QP_7s7|(Y5JS|1ix05+M?>6ref2 z&to6*8Or|apBN4ocnb|n29!7xDxm*?00;TTwB8UP#r^{tXHoZ>)EIZci&4XqC4V(6 zzkGl^Dui$SnZ3Mgj6rG)bl}+#i&bv1(Uyvg#m@x&{h}Ed33zEc=zUCbcxNQT9<@v079FE5RN+GDjr2A zi$YWxI}H1EcDGsRc4|M?21gJ&c)#L{{SfGJOChI^7->kEb8FALH+MGo?wt>$LlkV) zlo<_{uJ$nru;tci7{$?c|5(*&XHJT`gtrc4jNqQn`nP&Y^? zfYGPyOQXa59b2_$o~Wn|8=f>{P5V_2GcqMYIj%d=+|A^N;2~M?*&?z8uMq4!xL{3$ zkMOPD42i$+P36U1I%Lv_s2@l}(Dy0>R2%*X5D;7$NBLVoMBE!R(j+5 zwUM_MDuY7k3|6Y{xEkx?7H{kEz4Z}W9%ht!g6G;prf@${?h#4g`s5~;KxgF+AO%DO z6KlN@>A4FSTW3CGIp0g5)|%PcB(@e%5r%j+DTbJCnlhm5%>fa3DcI_tJdy&le5tU& zBmjTsew$ZdBNQgd0|!DueB-FowByaV+Bhn`pnZ1NEaT-c8p0o3s?vTaiI0H@iwK8U zxyab7^$J9XV((~NDGNqpJ_$Xfg zc6O8*Lg@}PkLsV1DF6^cv0!`R&`J2G4{>pj1T5|W6kz*WR4Xj7c+EP177Acs@qmbG zrLzAO#X({5|0tl72M6VVD_%(cZ^Pk2$pn%9YmESWwO}xykLED2EsA2NrU{C^KKMRTF@q1!y`(m6rjp%PMnF4~2=J zPN8e1S9kNxDYk3Jii#Y)qk5t1Ex-MbJxSBu!MH~TtP7_4DcM~0B7hVTT>Mrh;;-(& z2SaFnV3BhS5JZ3Y_T6qRR_#()zILT9m7kv$mx8x~}!fovHk`wzfEqwdlV~?AntkAVck)Yuu8E*MVl4QAcwU8r0+? zJFr~s(U|^{X40w70hJT5>DGqmXiPY7?4^9+VT9X;hb`5EZ?Ku9t-B!iKdLLfELEcf z+MC0|I->~d-l_3-o=q#VpDq?@Z>O7&qEZCD6#m z2QW!}?f!!kms`wDh7Cvl2cvft;o%YLx(HXaHwc(F01y$XAPy?6maoaBc@b0S@+_`fcKjc_*R<3S-{`VJ2sStab zABcvMS6lZCpx&EIrY*^V%r=WP1d;Dwc-pA3W&xRas!PpIlZN${Bb9t>0W-5-WfM$Q zRN{lAdCEJKqnVr#S{0!QpBO6nqAMbn!-<{Ve}CupxNbn$KGbA!Rhob#>~6x+O|$_E z?}OL?gdirL&=ghCMfAR2Rnt^FW&IjzHEVzxL1^NtWUb9)UJiv%zbM8S$_Ll$ zk_LF&(r9^vampd@yAO@WJVrQczsf<%cz=(hu5*`v=y~cE9rCjN# z#RYIbbd7(NprXKiqVNZ}7HAm#S+^d53BcTM_?92^JEot90%MVqiB!ZQs!MbpUz)Pl z&DjT_i+lIFa!w}2ULMhRzW-EH9}Rhm2rEyZ7XLMrDcM_^#M<+C{+Xhe+hw(LiEC0A z$8n}4Ze1psgaUTPK%QfM`!^-ExS6;X1HtkfH*m`4Ldsh z7?&D*YFAe>WL~2y5n0H&=jj@Cu2S#9EMGKmnag_I)dCN%_Z$0od?*tm6ky9tY3kG0 z>HR6!9mZm1fC~W-kw8g!PpU*&`_!%x1^Q6nM2`WtQSs#=X(PWMjP7CNHh>ojjrO^b zx84e&HB&0l9%|`eN7*A#6L9-#WI-sSF5r<}nEYiD$R|Kkaz!N4UW|_$9viAoGf6LW za@>@!d0z`TocZ3r?QB?#J8#Pby$%|QILsqF_kL38LU9+*Zwn)roXgYr7b{&09Oz7n z@_otZp_g+D;;a{OJIGkvxXTuE;I)A8O6VhU#S8QzdDz$})jX6=w9grAnHkvZw&AtF z-@Y+8M?mD#@1%FVSOPt*VsHrZp2htfKcAixTBG;(?_;VG9NT=%o&$4@?=+e5qOXaB zY`1iWJ$epw`duuyEW4v>$&I=F_4M8Q%@9MM2_HZ|ew5&B#=xzF9mVo5bC};z5xl*W z!zV6B>a$;*q0Z00Aixhz8h&(6Muqh00)hV}3^%|5VPmH#y<2xK<{y7Eh&d0r5N*uh zk%%8Qv>I}FLt|Qtry7K=8EQp&njknebq^(KwOUa3VRZ+i*z@gHcqjyBVa9cb5{fy1 z6??}F#ZV=F=5Y{&x-cUH0H%c{8atV!EK{?#bTl;mU4akYd_e|T6hXMpK94?Ko3Jmj@uy#~rf+p+LMrHfz#bTagd#Icg4$SuVhRb!J0QFf z%73BkCBl)=$DQJTZjgmR&44TgY*2qp#~d{I*yvQ7v&UXxum{7NHyATCzXv1mFYbF8 zLf06BKgS`_P_t~Bq;>=4eh~r(0U)CyRM*Y*R}~NXR-)C4&AH|}7CzkSv%R>KM0t}42w2D- - - - - - - - - - - - - -RDO-Manager - -Production OpenStack Cloud - -Deploys -Updates -Monitors - diff --git a/doc/source/_images/physical_view.png b/doc/source/_images/physical_view.png deleted file mode 100644 index 59a9e9f999ef479372e019cdf36ec8173026a221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141792 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≧@1%vkV446HT@Qs_)_+{#xa1bktnb+k})~j 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 Ja@Ric{{U8YtBwEw diff --git a/doc/source/_images/physical_view.svg b/doc/source/_images/physical_view.svg deleted file mode 100644 index 7f5b1e214..000000000 --- a/doc/source/_images/physical_view.svg +++ /dev/null @@ -1,2243 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Controller Node - - Object - Storage - Node - - Block - Storage - Node - - Compute - Node - - - - - - Ceph - Storage - Node - - - - - - -Undercloud - -Overcloud - -Undercloud Node -Ceph-Mon -Ceph-OSD - diff --git a/doc/source/_images/rdo-manager-logo.png b/doc/source/_images/rdo-manager-logo.png deleted file mode 100644 index 7153363d506da64718846c0a490df23763d2177f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5495 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 - {# Not strictly valid HTML, but it's the only way to display/scale it properly, without weird scripting or heaps of work #} - - -{% endblock %} - - -{% block menu %} -
- Limit Environment Specific Content - -
- Operating Systems -
    -
  • -
  • -
- - RHEL Registration Types -
    -
  • -
  • -
- - Environments -
    -
  • -
  • -
- - Additional Overcloud Roles -
    -
  • -
-
-
- - {{ super() }} -{% endblock %} diff --git a/doc/source/advanced_deployment/advanced_deployment.rst b/doc/source/advanced_deployment/advanced_deployment.rst deleted file mode 100644 index bf2564886..000000000 --- a/doc/source/advanced_deployment/advanced_deployment.rst +++ /dev/null @@ -1,26 +0,0 @@ -Advanced Deployment -=================== - -In this chapter you will find advanced deployment of various RDO-Manager areas. - - -.. toctree:: - - Advanced Profile Matching - Ready-State (BIOS, RAID) - Automated Health Check - Additional node configuration - Deploying with Heat Templates - Network Isolation - Managing Tuskar Plans and Roles - Deploying Manila - Configuring Cinder with a NetApp Backend - - -.. - Images - Nodes - Flavors - Deployment - Connection to Overcloud - Updates diff --git a/doc/source/advanced_deployment/automated_health_check.rst b/doc/source/advanced_deployment/automated_health_check.rst deleted file mode 100644 index 84fae9062..000000000 --- a/doc/source/advanced_deployment/automated_health_check.rst +++ /dev/null @@ -1,290 +0,0 @@ -Automated Health Check (AHC) -============================ - -Start with matching the nodes to profiles as described in -:doc:`profile_matching`. - -Enable running benchmarks during discovery ------------------------------------------- - -By default, the benchmark tests do not run during the discovery process. -You can enable this feature by setting *discovery_runbench = true* in the -**undercloud.conf** file prior to installing the undercloud. - -If you want to enable this feature after installing the undercloud, you can set -*discovery_runbench = true* in **undercloud.conf**, and re-run -``openstack undercloud install`` - -Analyze the collected benchmark data ------------------------------------- - -After discovery has completed, we can do analysis on the benchmark data. - -* Run the ``ahc-report`` script to see a general overview of the hardware - - :: - - $ source stackrc - $ ahc-report --categories - ##### HPA Controller ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [] - - ######################## - ##### Megaraid Controller ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [] - - ############################# - ##### AHCI Controller ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [] - - ######################### - ##### IPMI SDR ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [] - - ################## - ##### Firmware ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [(u'firmware', u'bios', u'date', u'01/01/2011'), - (u'firmware', u'bios', u'vendor', u'Seabios'), - (u'firmware', u'bios', u'version', u'0.5.1')] - - ################## - ##### Memory Timing(RAM) ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [] - - ############################ - ##### Network Interfaces ##### - 3 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [(u'network', u'eth0', u'businfo', u'pci@0000:00:04.0'), - (u'network', u'eth0', u'busy-poll', u'off [fixed]'), - (u'network', u'eth0', u'driver', u'virtio_net'), - (u'network', u'eth0', u'fcoe-mtu', u'off [fixed]'), - (u'network', u'eth0', u'generic-receive-offload', u'on'), - (u'network', u'eth0', u'generic-segmentation-offload', u'on'), - (u'network', u'eth0', u'highdma', u'on [fixed]'), - (u'network', u'eth0', u'large-receive-offload', u'off [fixed]'), - (u'network', u'eth0', u'latency', u'0'), - (u'network', u'eth0', u'link', u'yes'), - (u'network', u'eth0', u'loopback', u'off [fixed]'), - (u'network', u'eth0', u'netns-local', u'off [fixed]'), - (u'network', u'eth0', u'ntuple-filters', u'off [fixed]'), - (u'network', u'eth0', u'receive-hashing', u'off [fixed]'), - (u'network', u'eth0', u'rx-all', u'off [fixed]'), - (u'network', u'eth0', u'rx-checksumming', u'on [fixed]'), - (u'network', u'eth0', u'rx-fcs', u'off [fixed]'), - (u'network', u'eth0', u'rx-vlan-filter', u'on [fixed]'), - (u'network', u'eth0', u'rx-vlan-offload', u'off [fixed]'), - (u'network', u'eth0', u'rx-vlan-stag-filter', u'off [fixed]'), - (u'network', u'eth0', u'rx-vlan-stag-hw-parse', u'off [fixed]'), - (u'network', u'eth0', u'scatter-gather', u'on'), - (u'network', u'eth0', u'scatter-gather/tx-scatter-gather', u'on'), - (u'network', u'eth0', u'scatter-gather/tx-scatter-gather-fraglist', u'on'), - (u'network', u'eth0', u'tcp-segmentation-offload', u'on'), - (u'network', - u'eth0', - u'tcp-segmentation-offload/tx-tcp-ecn-segmentation', - u'on'), - (u'network', u'eth0', u'tcp-segmentation-offload/tx-tcp-segmentation', u'on'), - (u'network', - u'eth0', - u'tcp-segmentation-offload/tx-tcp6-segmentation', - u'on'), - (u'network', u'eth0', u'tx-checksumming', u'on'), - (u'network', - u'eth0', - u'tx-checksumming/tx-checksum-fcoe-crc', - u'off [fixed]'), - (u'network', u'eth0', u'tx-checksumming/tx-checksum-ip-generic', u'on'), - (u'network', u'eth0', u'tx-checksumming/tx-checksum-ipv6', u'off [fixed]'), - (u'network', u'eth0', u'tx-checksumming/tx-checksum-sctp', u'off [fixed]'), - (u'network', u'eth0', u'tx-fcoe-segmentation', u'off [fixed]'), - (u'network', u'eth0', u'tx-gre-segmentation', u'off [fixed]'), - (u'network', u'eth0', u'tx-gso-robust', u'off [fixed]'), - (u'network', u'eth0', u'tx-ipip-segmentation', u'off [fixed]'), - (u'network', u'eth0', u'tx-lockless', u'off [fixed]'), - (u'network', u'eth0', u'tx-mpls-segmentation', u'off [fixed]'), - (u'network', u'eth0', u'tx-nocache-copy', u'on'), - (u'network', u'eth0', u'tx-sit-segmentation', u'off [fixed]'), - (u'network', u'eth0', u'tx-udp_tnl-segmentation', u'off [fixed]'), - (u'network', u'eth0', u'tx-vlan-offload', u'off [fixed]'), - (u'network', u'eth0', u'tx-vlan-stag-hw-insert', u'off [fixed]'), - (u'network', u'eth0', u'udp-fragmentation-offload', u'on'), - (u'network', u'eth0', u'vlan-challenged', u'off [fixed]')] - - ############################ - ##### Processors ##### - 1 identical systems : - [u'B9FE637A-5B97-4A52-BFDA-9244CEA65E23'] - [(u'cpu', u'logical', u'number', u'2'), - (u'cpu', u'physical', u'number', u'2'), - (u'cpu', - u'physical_0', - u'flags', - u'fpu fpu_exception wp de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx x86-64 rep_good nopl pni cx16 hypervisor lahf_lm'), - (u'cpu', u'physical_0', u'frequency', u'2000000000'), - (u'cpu', u'physical_0', u'physid', u'401'), - (u'cpu', u'physical_0', u'product', u'QEMU Virtual CPU version 1.5.3'), - (u'cpu', u'physical_0', u'vendor', u'Intel Corp.'), - (u'cpu', - u'physical_1', - u'flags', - u'fpu fpu_exception wp de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx x86-64 rep_good nopl pni cx16 hypervisor lahf_lm'), - (u'cpu', u'physical_1', u'frequency', u'2000000000'), - (u'cpu', u'physical_1', u'physid', u'402'), - (u'cpu', u'physical_1', u'product', u'QEMU Virtual CPU version 1.5.3'), - (u'cpu', u'physical_1', u'vendor', u'Intel Corp.')] - - 2 identical systems : - [u'7F8831F1-0D81-464E-A767-7577DF49AAA5', u'7884BC95-6EF8-4447-BDE5-D19561718B29'] - [(u'cpu', u'logical', u'number', u'1'), - (u'cpu', u'physical', u'number', u'1'), - (u'cpu', - u'physical_0', - u'flags', - u'fpu fpu_exception wp de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pse36 clflush mmx fxsr sse sse2 syscall nx x86-64 rep_good nopl pni cx16 hypervisor lahf_lm'), - (u'cpu', u'physical_0', u'frequency', u'2000000000'), - (u'cpu', u'physical_0', u'physid', u'401'), - (u'cpu', u'physical_0', u'product', u'QEMU Virtual CPU version 1.5.3'), - (u'cpu', u'physical_0', u'vendor', u'Intel Corp.')] - - In the example above we have two nodes with a single CPU, and one with two CPU's. - -* We can also look for performance outliers - - :: - - $ ahc-report --outliers - - Group 0 : Checking logical disks perf - standalone_randread_4k_KBps : INFO : sda : Group performance : min=45296.00, mean=53604.67, max=67923.00, stddev=12453.21 - standalone_randread_4k_KBps : ERROR : sda : Group's variance is too important : 23.23% of 53604.67 whereas limit is set to 15.00% - standalone_randread_4k_KBps : ERROR : sda : Group performance : UNSTABLE - standalone_read_1M_IOps : INFO : sda : Group performance : min= 1199.00, mean= 1259.00, max= 1357.00, stddev= 85.58 - standalone_read_1M_IOps : INFO : sda : Group performance = 1259.00 : CONSISTENT - standalone_randread_4k_IOps : INFO : sda : Group performance : min=11320.00, mean=13397.33, max=16977.00, stddev= 3113.39 - standalone_randread_4k_IOps : ERROR : sda : Group's variance is too important : 23.24% of 13397.33 whereas limit is set to 15.00% - standalone_randread_4k_IOps : ERROR : sda : Group performance : UNSTABLE - standalone_read_1M_KBps : INFO : sda : Group performance : min=1231155.00, mean=1292799.67, max=1393152.00, stddev=87661.11 - standalone_read_1M_KBps : INFO : sda : Group performance = 1292799.67 : CONSISTENT - - Group 0 : Checking CPU perf - bogomips : INFO : logical_0 : Group performance : min= 4199.99, mean= 4199.99, max= 4199.99, stddev= 0.00 - bogomips : INFO : logical_0 : Group performance = 4199.99 : CONSISTENT - bogomips : INFO : logical_1 : Group performance : min= 4199.99, mean= 4199.99, max= 4199.99, stddev= nan - bogomips : INFO : logical_1 : Group performance = 4199.99 : CONSISTENT - loops_per_sec : INFO : logical_0 : Group performance : min= 379.00, mean= 398.67, max= 418.00, stddev= 19.50 - loops_per_sec : INFO : logical_0 : Group performance = 398.67 : CONSISTENT - loops_per_sec : INFO : logical_1 : Group performance : min= 423.00, mean= 423.00, max= 423.00, stddev= nan - loops_per_sec : INFO : logical_1 : Group performance = 423.00 : CONSISTENT - loops_per_sec : INFO : CPU Effi. : Group performance : min= 99.28, mean= inf, max= inf, stddev= nan - loops_per_sec : INFO : CPU Effi. : Group performance = inf % : CONSISTENT - - Group 0 : Checking Memory perf - Memory benchmark 1K : INFO : logical_0 : Group performance : min= 1677.00, mean= 1698.33, max= 1739.00, stddev= 35.23 - Memory benchmark 1K : INFO : logical_0 : Group performance = 1698.33 : CONSISTENT - Memory benchmark 1K : INFO : logical_1 : Group performance : min= 1666.00, mean= 1666.00, max= 1666.00, stddev= nan - Memory benchmark 1K : INFO : logical_1 : Group performance = 1666.00 : CONSISTENT - Memory benchmark 1K : INFO : Thread effi. : Group performance : min= 71.54, mean= 71.54, max= 71.54, stddev= nan - Memory benchmark 1K : INFO : Thread effi. : Group performance = 71.54 : CONSISTENT - Memory benchmark 1K : INFO : Forked Effi. : Group performance : min= 101.97, mean= 101.97, max= 101.97, stddev= nan - Memory benchmark 1K : INFO : Forked Effi. : Group performance = 101.97 % : CONSISTENT - Memory benchmark 4K : INFO : logical_0 : Group performance : min= 4262.00, mean= 4318.00, max= 4384.00, stddev= 61.61 - Memory benchmark 4K : INFO : logical_0 : Group performance = 4318.00 : CONSISTENT - Memory benchmark 4K : INFO : logical_1 : Group performance : min= 4363.00, mean= 4363.00, max= 4363.00, stddev= nan - Memory benchmark 4K : INFO : logical_1 : Group performance = 4363.00 : CONSISTENT - Memory benchmark 4K : INFO : Thread effi. : Group performance : min= 77.75, mean= 77.75, max= 77.75, stddev= nan - Memory benchmark 4K : INFO : Thread effi. : Group performance = 77.75 : CONSISTENT - Memory benchmark 4K : INFO : Forked Effi. : Group performance : min= 95.98, mean= 95.98, max= 95.98, stddev= nan - Memory benchmark 4K : INFO : Forked Effi. : Group performance = 95.98 % : CONSISTENT - Memory benchmark 1M : INFO : logical_0 : Group performance : min= 7734.00, mean= 7779.00, max= 7833.00, stddev= 50.11 - Memory benchmark 1M : INFO : logical_0 : Group performance = 7779.00 : CONSISTENT - Memory benchmark 1M : INFO : logical_1 : Group performance : min= 7811.00, mean= 7811.00, max= 7811.00, stddev= nan - Memory benchmark 1M : INFO : logical_1 : Group performance = 7811.00 : CONSISTENT - Memory benchmark 1M : INFO : Thread effi. : Group performance : min= 101.20, mean= 101.20, max= 101.20, stddev= nan - Memory benchmark 1M : INFO : Thread effi. : Group performance = 101.20 : CONSISTENT - Memory benchmark 1M : INFO : Forked Effi. : Group performance : min= 99.26, mean= 99.26, max= 99.26, stddev= nan - Memory benchmark 1M : INFO : Forked Effi. : Group performance = 99.26 % : CONSISTENT - Memory benchmark 16M : INFO : logical_0 : Group performance : min= 5986.00, mean= 6702.33, max= 7569.00, stddev= 802.14 - Memory benchmark 16M : ERROR : logical_0 : Group's variance is too important : 11.97% of 6702.33 whereas limit is set to 7.00% - Memory benchmark 16M : ERROR : logical_0 : Group performance : UNSTABLE - Memory benchmark 16M : INFO : logical_1 : Group performance : min= 7030.00, mean= 7030.00, max= 7030.00, stddev= nan - Memory benchmark 16M : INFO : logical_1 : Group performance = 7030.00 : CONSISTENT - Memory benchmark 16M : INFO : Thread effi. : Group performance : min= 109.94, mean= 109.94, max= 109.94, stddev= nan - Memory benchmark 16M : INFO : Thread effi. : Group performance = 109.94 : CONSISTENT - Memory benchmark 16M : INFO : Forked Effi. : Group performance : min= 93.14, mean= 93.14, max= 93.14, stddev= nan - Memory benchmark 16M : INFO : Forked Effi. : Group performance = 93.14 % : CONSISTENT - Memory benchmark 128M : INFO : logical_0 : Group performance : min= 6021.00, mean= 6387.00, max= 7084.00, stddev= 603.87 - Memory benchmark 128M : ERROR : logical_0 : Group's variance is too important : 9.45% of 6387.00 whereas limit is set to 7.00% - Memory benchmark 128M : ERROR : logical_0 : Group performance : UNSTABLE - Memory benchmark 128M : INFO : logical_1 : Group performance : min= 7089.00, mean= 7089.00, max= 7089.00, stddev= nan - Memory benchmark 128M : INFO : logical_1 : Group performance = 7089.00 : CONSISTENT - Memory benchmark 128M : INFO : Thread effi. : Group performance : min= 107.11, mean= 107.11, max= 107.11, stddev= nan - Memory benchmark 128M : INFO : Thread effi. : Group performance = 107.11 : CONSISTENT - Memory benchmark 128M : INFO : Forked Effi. : Group performance : min= 95.55, mean= 95.55, max= 95.55, stddev= nan - Memory benchmark 128M : INFO : Forked Effi. : Group performance = 95.55 % : CONSISTENT - Memory benchmark 256M : WARNING : Thread effi. : Benchmark not run on this group - Memory benchmark 256M : WARNING : Forked Effi. : Benchmark not run on this group - Memory benchmark 1G : INFO : logical_0 : Group performance : min= 6115.00, mean= 6519.67, max= 7155.00, stddev= 557.05 - Memory benchmark 1G : ERROR : logical_0 : Group's variance is too important : 8.54% of 6519.67 whereas limit is set to 7.00% - Memory benchmark 1G : ERROR : logical_0 : Group performance : UNSTABLE - Memory benchmark 1G : INFO : logical_1 : Group performance : min= 7136.00, mean= 7136.00, max= 7136.00, stddev= nan - Memory benchmark 1G : INFO : logical_1 : Group performance = 7136.00 : CONSISTENT - Memory benchmark 1G : INFO : Thread effi. : Group performance : min= 104.29, mean= 104.29, max= 104.29, stddev= nan - Memory benchmark 1G : INFO : Thread effi. : Group performance = 104.29 : CONSISTENT - Memory benchmark 1G : INFO : Forked Effi. : Group performance : min= 98.98, mean= 98.98, max= 98.98, stddev= nan - Memory benchmark 1G : INFO : Forked Effi. : Group performance = 98.98 % : CONSISTENT - Memory benchmark 2G : INFO : logical_0 : Group performance : min= 6402.00, mean= 6724.33, max= 7021.00, stddev= 310.30 - Memory benchmark 2G : INFO : logical_0 : Group performance = 6724.33 : CONSISTENT - Memory benchmark 2G : INFO : logical_1 : Group performance : min= 7167.00, mean= 7167.00, max= 7167.00, stddev= nan - Memory benchmark 2G : INFO : logical_1 : Group performance = 7167.00 : CONSISTENT - Memory benchmark 2G : WARNING : Thread effi. : Benchmark not run on this group - Memory benchmark 2G : WARNING : Forked Effi. : Benchmark not run on this group - - The output above is from a virtual setup, so the benchmarks are not accurate. - However we can see that the variance of the "standalone_randread_4k_KBps" - metric was above the threshold, so the group is marked as unstable. - -Exclude outliers from deployment --------------------------------- - -We will use the sample reports above to construct some matching rules -for our deployment. Refer to :doc:`profile_matching` for details. - -* Add a rule to the **control.specs** file to match the system with two CPUs - - :: - - [ - ('cpu', 'logical', 'number', 'ge(2)'), - ('disk', '$disk', 'size', 'gt(4)'), - ('network', '$eth', 'ipv4', 'network(192.0.2.0/24)'), - ('memory', 'total', 'size', 'ge(4294967296)'), - ] - -* Add a rule to the **control.specs** file to exclude systems with below - average disk performance from the control role - - :: - - [ - ('disk', '$disk', 'standalone_randread_4k_IOps', 'gt(13397)') - ('cpu', 'logical', 'number', 'ge(2)'), - ('disk', '$disk', 'size', 'gt(4)'), - ('network', '$eth', 'ipv4', 'network(192.0.2.0/24)'), - ('memory', 'total', 'size', 'ge(4294967296)'), - ] - -* Now rerun the matching and proceed with remaining steps from - :doc:`profile_matching`. diff --git a/doc/source/advanced_deployment/cinder_netapp.rst b/doc/source/advanced_deployment/cinder_netapp.rst deleted file mode 100644 index 468883d3e..000000000 --- a/doc/source/advanced_deployment/cinder_netapp.rst +++ /dev/null @@ -1,60 +0,0 @@ -Configuring Cinder with a NetApp Backend -======================================== - -This guide assumes that your undercloud is already installed and ready to -deploy an overcloud. - -Deploying the Overcloud ------------------------ -.. note:: - - The :doc:`template_deploy` doc has a more detailed explanation of the - following steps. - -#. Copy the NetApp configuration file to your home directory:: - - sudo cp /usr/share/openstack-tripleo-heat-templates/environments/cinder-netapp-config.yaml ~ - -#. Edit the permissions (user is typically ``stack``):: - - sudo chown $USER ~/cinder-netapp-config.yaml - sudo chmod 755 ~/cinder-netapp-config.yaml - - -#. Edit the parameters in this file to fit your requirements. Ensure that the following line is changed:: - - OS::TripleO::ControllerExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/controller/cinder-netapp.yaml - - -#. Continue following the TripleO instructions for deploying an overcloud. - Before entering the command to deploy the overcloud, add the environment - file that you just configured as an argument:: - - openstack overcloud deploy --templates -e ~/cinder-netapp-config.yaml - -#. Wait for the completion of the overcloud deployment process. - - -Creating a NetApp Volume ------------------------- - -.. note:: - - The following steps will refer to running commands as an admin user or a - tenant user. Sourcing the ``overcloudrc`` file will authenticate you as - the admin user. You can then create a tenant user and use environment - files to switch between them. - -#. Create a new volume type that maps to the new NetApp backend [admin]:: - - cinder type-create [name] - cinder type-key [name] set volume_backend_name=tripleo_netapp - -#. Create the volume [admin]:: - - cinder create --volume-type [type name] [size of volume] - -#. Attach the volume to a server:: - - nova volume-attach - diff --git a/doc/source/advanced_deployment/deploy_manila.rst b/doc/source/advanced_deployment/deploy_manila.rst deleted file mode 100644 index 572716dd9..000000000 --- a/doc/source/advanced_deployment/deploy_manila.rst +++ /dev/null @@ -1,129 +0,0 @@ -Deploying Manila in the Overcloud -================================= - -This guide assumes that your undercloud is already installed and ready to -deploy an overcloud with Manila enabled. - -Deploying the Overcloud ------------------------ -.. note:: - - The :doc:`template_deploy` doc has a more detailed explanation of the - following steps. - -#. Copy the Manila driver-specific configuration file to your home directory: - - - Generic driver:: - - sudo cp /usr/share/openstack-tripleo-heat-templates/environments/manila-generic-config.yaml ~ - - - NetApp driver:: - - sudo cp /usr/share/openstack-tripleo-heat-templates/environments/manila-netapp-config.yaml ~ - -#. Edit the permissions (user is typically ``stack``):: - - sudo chown $USER ~/manila-*-config.yaml - sudo chmod 755 ~/manila-*-config.yaml - - -#. Edit the parameters in this file to fit your requirements. - - If you're using the generic driver, ensure that the service image - details correspond to the service image you intend to load. - - Ensure that the following line is changed:: - - OS::TripleO::ControllerExtraConfigPre: /usr/share/openstack-tripleo-heat-templates/puppet/extraconfig/pre_deploy/controller/manila-[generic or netapp].yaml - - -#. Continue following the TripleO instructions for deploying an overcloud. - Before entering the command to deploy the overcloud, add the environment - file that you just configured as an argument:: - - openstack overcloud deploy --templates -e ~/manila-[generic or netapp]-config.yaml - -#. Wait for the completion of the overcloud deployment process. - - -Creating the Share ------------------- - -.. note:: - - The following steps will refer to running commands as an admin user or a - tenant user. Sourcing the ``overcloudrc`` file will authenticate you as - the admin user. You can then create a tenant user and use environment - files to switch between them. - -#. Upload a service image: - - .. note:: - - This step is only required for the generic driver. - - Download a Manila service image to be used for share servers and upload it - to Glance so that Manila can use it [tenant]:: - - glance image-create --name manila-service-image --disk-format qcow2 --container-format bare --file manila_service_image.qcow2 - -#. Create a share network to host the shares: - - - Create the overcloud networks. The - :doc:`../basic_deployment/basic_deployment` doc has a more detailed - explanation about creating the network and subnet. Note that you may also - need to perform the following steps to get Manila working:: - - neutron router-create router1 - neutron router-interface-add router1 [subnet id] - - - List the networks and subnets [tenant]:: - - neutron net-list && neutron subnet-list - - - Create a share network (typically using the private default-net net/subnet) - [tenant]:: - - manila share-network-create --neutron-net-id [net] --neutron-subnet-id [subnet] - -#. Create a new share type (yes/no is for specifying if the driver handles - share servers) [admin]:: - - manila type-create [name] [yes/no] - -#. Create the share [tenant]:: - - manila create --share-network [share net ID] --share-type [type name] [nfs/cifs] [size of share] - - -Accessing the Share -------------------- - -#. To access the share, create a new VM on the same Neutron network that was - used to create the share network:: - - nova boot --image [image ID] --flavor [flavor ID] --nic net-id=[network ID] [name] - -#. Allow access to the VM you just created:: - - manila access-allow [share ID] ip [IP address of VM] - -#. Run ``manila list`` and ensure that the share is available. - -#. Log into the VM:: - - ssh [user]@[IP] - -.. note:: - - You may need to configure Neutron security rules to access the - VM. That is not in the scope of this document, so it will not be covered - here. - -5. In the VM, execute:: - - sudo mount [export location] [folder to mount to] - -6. Ensure the share is mounted by looking at the bottom of the output of the - ``mount`` command. - -7. That's it - you're ready to start using Manila! - diff --git a/doc/source/advanced_deployment/extra_config.rst b/doc/source/advanced_deployment/extra_config.rst deleted file mode 100644 index d815ed1ff..000000000 --- a/doc/source/advanced_deployment/extra_config.rst +++ /dev/null @@ -1,231 +0,0 @@ -Additional node configuration -============================= - -It is possible to enable additional configuration during one of the -following deployment phases: - -* firstboot - run once config (performed by cloud-init) -* post-deploy - run after the services have been deployed and configured - -.. note:: - - This documentation assumes some knowledge of heat HOT_ template - syntax, and makes use of heat environment_ files. See the upstream - heat documentation_ for further information. - -.. _HOT: http://docs.openstack.org/developer/heat/template_guide/hot_guide.html -.. _environment: http://docs.openstack.org/developer/heat/template_guide/environment.html -.. _documentation: http://docs.openstack.org/developer/heat/template_guide/index.html - -Firstboot extra configuration ------------------------------ - -Firstboot configuration is optional, and is performed on *all* nodes on initial -deployment. - -Any configuration possible via cloud-init may be performed at this point, -either by applying cloud-config yaml or running arbitrary additional -scripts. - -The heat templates used for deployment provide the `OS::TripleO::NodeUserData` -resource as the interface to enable this configuration. A basic example of its -usage is provided below, followed by some notes related to real world -usage. - -The script snippet below shows how to create a simple example containing two -scripts, combined via the MultipartMime_ resource:: - - mkdir firstboot - cat > firstboot/one_two.yaml << EOF - heat_template_version: 2014-10-16 - - resources: - userdata: - type: OS::Heat::MultipartMime - properties: - parts: - - config: {get_resource: one_config} - - config: {get_resource: two_config} - - one_config: - type: OS::Heat::SoftwareConfig - properties: - config: | - #!/bin/bash - echo "one" > /tmp/one - - two_config: - type: OS::Heat::SoftwareConfig - properties: - config: | - #!/bin/bash - echo "two" > /tmp/two - - outputs: - OS::stack_id: - value: {get_resource: userdata} - EOF - -.. _MultipartMime: http://docs.openstack.org/developer/heat/template_guide/openstack.html#OS::Heat::MultipartMime - -.. note:: - - The stack must expose an `OS::stack_id` output which references an - OS::Heat::MultipartMime resource. - -This template is then mapped to the `OS::TripleO::NodeUserData` resource type -via a heat environment file:: - - cat > userdata_env.yaml << EOF - resource_registry: - OS::TripleO::NodeUserData: firstboot/one_two.yaml - EOF - -You may then deploy your overcloud referencing the additional environment file:: - - openstack overcloud deploy --templates -e userdata_env.yaml - -.. note:: - - The userdata is applied to *all* nodes in the deployment. If you need role - specific logic, the userdata scripts can contain conditionals which use - e.g the node hostname to determine the role. - -.. note:: - - OS::TripleO::NodeUserData is only applied on initial node deployment, - not on any subsequent stack update, because cloud-init only processes the - nova user-data once, on first boot. - -For a more complete example, which creates an additional user and configures -SSH keys by accessing the nova metadata server, see -/usr/share/openstack-tripleo-heat-templates/firstboot/userdata_example.yaml -on the undercloud node or the tripleo-heat-templates_ repo. - -.. _tripleo-heat-templates: https://github.com/rdo-management/tripleo-heat-templates/blob/mgt-master/firstboot/userdata_example.yaml - -Post-Deploy extra configuration -------------------------------- - -Post-deploy additional configuration is possible via the -`OS::TripleO::NodeExtraConfigPost` interface - this allows a heat template -to be specified which performs additional configuration using standard -heat SoftwareConfig_ resources. - -.. _SoftwareConfig: http://docs.openstack.org/developer/heat/template_guide/software_deployment.html - -.. note:: - - The `OS::TripleO::NodeExtraConfigPost` applies configuration to *all* nodes, - there is currently no per-role NodeExtraConfigPost interface. - -Below is an example of a post-deployment configuration template:: - - mkdir -p extraconfig/post-deploy/ - cat > extraconfig/post-deploy/example.yaml << EOF - heat_template_version: 2014-10-16 - - parameters: - servers: - type: json - - # Optional implementation specific parameters - some_extraparam: - type: string - - resources: - - ExtraConfig: - type: OS::Heat::SoftwareConfig - properties: - group: script - config: - str_replace: - template: | - #!/bin/sh - echo "extra _APARAM_" > /root/extra - parameters: - _APARAM_: {get_param: some_extraparam} - - ExtraDeployments: - type: OS::Heat::SoftwareDeployments - properties: - servers: {get_param: servers} - config: {get_resource: ExtraConfig} - actions: ['CREATE'] # Only do this on CREATE - EOF - -The "servers" parameter must be specified in all NodeExtraConfigPost -templates, this is the server list to apply the configuration to, -and is provided by the parent template. - -Optionally, you may define additional parameters which are consumed by the -implementation. These may then be provided via parameter_defaults in the -environment which enables the configuration. - -.. note:: - - If the parameter_defaults approach is used, care must be used to avoid - unintended reuse of parameter names between multiple templates, because - parameter_defaults is applied globally. - -The "actions" property of the `OS::Heat::SoftwareDeployments` resource may be -used to specify when the configuration should be applied, e.g only on CREATE, -only on DELETE etc. If this is ommitted, the heat default is to apply the -config on CREATE and UPDATE, e.g on initial deployment and every subsequent -update. - -The extra config may be enabled via an environment file:: - - cat > post_config_env.yaml << EOF - resource_registry: - OS::TripleO::NodeExtraConfigPost: extraconfig/post-deploy/example.yaml - parameter_defaults: - some_extraparam: avalue123 - EOF - -You may then deploy your overcloud referencing the additional environment file:: - - openstack overcloud deploy --templates -e post_config_env.yaml - -Making configuration changes ----------------------------- - -If you want to make a configuration change, either prior to initial deployment, -or subsequently via an update, you can update hiera data files which -are used for passing configuration values to Puppet. [#]_ Hiera data files -are part of heat templates and are located in `puppet/hieradata` directory. -You can find a file for each of roles (controller, compute,...) in this -directory, so different configuration can be set for different roles. Put -your configuration changes into the file which corresponds to the role -of nodes you want to change. For example to set reserved host memory on -all compute nodes:: - - echo "nova::compute::reserved_host_memory: some_value" >> puppet/hieradata/compute.yaml - -And then update your overcloud:: - - openstack overcloud deploy --templates "custom templates dir" - -.. note:: - - If you set a configuration of a puppet class which is not being included - yet, make sure you include it in any of `puppet/manifests` file. For example - if you want to change CPU allocation ratio update controller hieradata:: - - echo "nova::scheduler::filter::cpu_allocation_ratio: '11.0'" >> puppet/hieradata/controller.yaml - - And include `nova::scheduler::filter` class in `puppet/manifests/overcloud_controller_pacemaker.pp`. - -.. note:: - - It's best to copy default heat templates to a custom location before making - any changes. See :ref:`custom-template-location`. - -.. rubric:: Footnotes - -.. [#] Note that this is a temporary workaround, and a `future version`_ is - expected to provide interfaces that enable specifying extra hieradata - without modifying any templates. - -.. _future version: https://bugzilla.redhat.com/show_bug.cgi?id=1243971 diff --git a/doc/source/advanced_deployment/managing_plans_and_roles.rst b/doc/source/advanced_deployment/managing_plans_and_roles.rst deleted file mode 100644 index 0cf11208e..000000000 --- a/doc/source/advanced_deployment/managing_plans_and_roles.rst +++ /dev/null @@ -1,189 +0,0 @@ -Managing Plans and Roles -======================== - -This section provides a description of the Plan and Role concepts and the -operations available to each from the command line. - -To learn how to delete and reload all plans and roles skip to the relevant -`Reload the deployment plan and all deployment roles`_ section below. - -Understanding Roles & Plans ---------------------------- - -Roles represent the functionality that will be served by a node, for example a -Compute or Storage node. Plans define the full deployment and consist of one -or more roles and their related Parameters. - - -Roles ------ - -The Roles included in the Tuskar API can be viewed with the following command:: - - $ openstack management role list - +--------------------------------------+----------------+---------+---------------------------------------------------+ - | uuid | name | version | description | - +--------------------------------------+----------------+---------+---------------------------------------------------+ - | 6830e747-6d43-44bf-99b6-97a7145c58c6 | Swift-Storage | 1 | OpenStack swift storage node configured by Puppet | - | 96faca30-8c05-48b2-b9c8-d01cd2d0dc47 | Compute | 1 | OpenStack hypervisor node configured via Puppet. | - | b0c87438-871d-46e2-9fee-4b42c65f3c45 | Ceph-Storage | 1 | OpenStack ceph storage node configured by Puppet | - | d5ffd638-8df3-4ed6-8925-32e8891dae25 | Cinder-Storage | 1 | OpenStack cinder storage configured by Puppet | - | e3e09fa8-00c8-4870-8f2b-de67a9faa5ab | Controller | 1 | OpenStack controller node configured by Puppet. | - +--------------------------------------+----------------+---------+---------------------------------------------------+ - - -Plans ------ - -By default Tuskar comes with one Plan named overcloud with all of the above -Roles added to the plan. However, only Control and Compute have their scale -value set and will be deployed by default. - -The Plan can be viewed with the following command:: - - $ openstack management plan list - +--------------------------------------+-----------+-------------+------------------------------------------------------------------+ - | uuid | name | description | roles | - +--------------------------------------+-----------+-------------+------------------------------------------------------------------+ - | eac9c4cc-9d85-4c6a-85bb-e1f38afcff7e | overcloud | None | Compute, Ceph-Storage, Cinder-Storage, Controller, Swift-Storage | - +--------------------------------------+-----------+-------------+------------------------------------------------------------------+ - -Once you have the Plan UUID you can view more details about the plan:: - - $ openstack management plan show eac9c4cc-9d85-4c6a-85bb-e1f38afcff7e - +-------------+------------------------------------------------------------------+ - | Field | Value | - +-------------+------------------------------------------------------------------+ - | created_at | 2015-07-13T10:09:14 | - | description | None | - | name | overcloud | - | parameters | Parameter output suppressed. Use --long to display them. | - | roles | Compute, Ceph-Storage, Cinder-Storage, Controller, Swift-Storage | - | updated_at | None | - | uuid | eac9c4cc-9d85-4c6a-85bb-e1f38afcff7e | - +-------------+------------------------------------------------------------------+ - -The command can be repeated with ``--long`` appended to the end for a -detailed output of all the available Plan parameters. - - -Adding and Removing Roles -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Roles can be removed from the plan like this:: - - $ openstack management plan remove role "[plan-uuid]" "[role-uuid]" - -And similarly they can be added back to the plan:: - - $ openstack management plan add role "[plan-uuid]" "[role-uuid]" - -The output of both of these commands is the summary of the plan and it will -reflect the role being added or removed. - - -Assigning Flavors to Roles -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Roles can have a flavor assigned with the following command:: - - $ openstack management plan set "[plan-uuid]" -F Compute-1=baremetal - -In this example we are assigning the ``baremetal`` flavor to the Compute role, -but we need to include the role version when doing this. Making the syntax -``-F [role-name]-[role-version]=[flavor-name]``. - - -Setting Scale values -~~~~~~~~~~~~~~~~~~~~ - -Similar to assigning Flavors, scaling an individual role can be done like -this:: - - $ openstack management plan set "[plan-uuid]" -S Compute-1=3 - -In this example we are scaling the Compute role to three nodes. - - -Setting other parameters -~~~~~~~~~~~~~~~~~~~~~~~~ - -Arbitrary parameters can be set for Roles. To do this, the following syntax -needs to be used.:: - - $ openstack management plan set "[plan-uuid]" -P Compute-1::Image=compute - -Making the syntax ``-F [role-name]-[role-version]::[parameter- -name]=[value]``. The above example assigns the compute image to the compute -role - for this to work a compute image needs to be uploaded to glance. - - -Downloading a Plan ------------------- - -Plans can be downloaded from Tuskar. The result of doing this is a set of -Heat templates that can be then manipulated or manually passed to the Heat -client.:: - - $ openstack management plan download "[plan-uuid]" -O path/to/output - -Once you have downloaded the templates from Tuskar, they can be sent directly -to Heat with this command.:: - - $ heat stack-create overcloud \ - -f path/to/output/plan.yaml \ - -e path/to/output/environment.yaml \ - -t 240; - -Reload the deployment plan and all deployment roles ---------------------------------------------------- - -You may wish to recreate the overcloud deployment plan and deployment roles -from scratch, for example to work with a newer version of the tripleo heat -templates from which the deployment roles are created. - -.. note:: - - The steps documented below will completely remove the current - overcloud deployment plan and deployment roles including any overridden - and saved deployment parameters. - -Delete the overcloud deployment plan and any roles -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Get the current deployment plan uuid and specify it for deletion:: - - openstack management plan list - - openstack management plan delete PLAN_UUID - -Now you can safely delete all deployment roles:: - - roles=`tuskar role-list | grep OpenStack | awk '{print $2}'` - - tuskar-delete-roles --config-file /etc/tuskar/tuskar.conf --uuids $roles - -Recreate the deployment roles -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Roles are reloaded by running the tuskar-db-sync script from the tuskar -tripleo image element:: - - /usr/share/tripleo-image-elements/tuskar/os-refresh-config/configure.d/90-tuskar-db-sync - -This script defaults to using `/usr/share/openstack-tripleo-heat-templates/` -as the path to the local tripleo heat templates from which to define the roles. -This can be overridden by setting the TUSKAR_ROLE_DIRECTORY environment -variable:: - - TUSKAR_ROLE_DIRECTORY=/foo/ /usr/share/tripleo-image-elements/tuskar/os-refresh-config/configure.d/90-tuskar-db-sync - -Recreate the deployment plan and associate the new roles -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Create a new deployment plan and associate the newly created roles to it. This -is achieved by running the plan-add-roles script from the tuskar tripleo image -element:: - - /usr/share/tripleo-image-elements/tuskar/os-refresh-config/post-configure.d/101-plan-add-roles - - diff --git a/doc/source/advanced_deployment/network_isolation.rst b/doc/source/advanced_deployment/network_isolation.rst deleted file mode 100644 index 4c0c81928..000000000 --- a/doc/source/advanced_deployment/network_isolation.rst +++ /dev/null @@ -1,680 +0,0 @@ -Configuring Network Isolation -============================= - -Introduction ------------- - -RDO-Manager provides configuration of isolated overcloud networks. Using -this approach it is possible to host traffic for specific types of network -traffic (tenants, storage, API/RPC, etc.) in isolated networks. This allows -for assigning network traffic to specific network interfaces or bonds. Using -bonds provides fault tolerance, and may provide load sharing, depending on the -bonding protocols used. When isolated networks are configured, the OpenStack -services will be configured to use the isolated networks. If no isolated -networks are configured, all services run on the provisioning network. - -There are two parts to the network configuration: the parameters that apply -to the network as a whole, and the templates which configure the network -interfaces on the deployed hosts. - -Architecture ------------- - -The following VLANs will be used in the final deployment: - -* IPMI* (IPMI System controller, iLO, DRAC) -* Provisioning* (Undercloud control plane for deployment and management) -* Internal API (OpenStack internal API, RPC, and DB) -* Tenant (Tenant tunneling network for GRE/VXLAN networks) -* Storage (Access to storage resources from Compute and Controller nodes) -* Storage Management (Replication, Ceph back-end services) -* External (Public OpenStack APIs, Horzizon dashboard, optionally floating IPs) - -.. note:: - Networks marked with '*' are usually native VLANs, others may be trunked. - -Additionally, if floating IPs will be hosted on a separate VLAN, that VLAN will -need to be trunked to the controller hosts. It will not be included in the -network configuration steps in this document, the VLAN will be added as a -post-configuration step. - -The External network should have a gateway router address. This will be used -in the subnet configuration of the network environment. - -The Provisioning network will usually be delivered on a dedicated interface. -By default, PXE boot must occur on the native VLAN, although some system -controllers will allow booting from a VLAN. The Provisioning interface is -also used by the Compute and Storage nodes as their default gateway, in order -to contact DNS, NTP, and for system maintenance. The Undercloud can be used -as a default gateway, but in that case all traffic will be behind an IP -masquerade NAT, and will not be reachable from the rest of the network. The -Undercloud is also a single point of failure for the overcloud default route. -If there is an external gateway on a router device on the Provisioning network, -the Undercloud Neutron DHCP server can offer that instead:: - - neutron subnet-show # Copy the UUID from the provisioning subnet - neutron subnet-update --gateway_ip - -Often, the number of VLANs will exceed the number of physical Ethernet ports, -so some VLANs are delivered with VLAN tagging to separate the traffic. On an -Ethernet bond, typically all VLANs are trunked, and there is no traffic on the -native VLAN (native VLANs on bonds are supported, but will require customizing -the NIC templates). - -The networks are connected to the roles as follows: - -Controller: - -* Provisioning -* Internal API -* Storage -* Storage Management -* External - -Compute: - -* Provisioning -* Internal API -* Storage -* Tenant - -Ceph Storage: - -* Provisioning -* Storage -* Storage Management - -Cinder Storage: - -* Provisioning -* Internal API -* Storage -* Storage Management - -Swift Storage: - -* Provisioning -* Internal API -* Storage -* Storage Management - -Workflow --------- - -The procedure for enabling network isolation is this: - -1. Create network environment file (e.g. /home/stack/network-environment.yaml) -2. Edit IP subnets and VLANs in the environment file to match local environment -3. Make a copy of the appropriate sample network interface configurations -4. Edit the network interface configurations to match local environment -5. Deploy overcloud with the proper parameters to include network isolation - -The next section will walk through the elements that need to be added to -the network-environment.yaml to enable network isolation. The sections -after that deal with configuring the network interface templates. The final step -will deploy the overcloud with network isolation and a custom environment. - -Create Network Environment File -------------------------------- -The environment file will describe the network environment and will point to -the network interface configuration files to use for the overcloud nodes. -The subnets that will be used for the isolated networks need to be defined, -along with the IP address ranges that should be used for IP assignment. These -values must be customized for the local environment. - -It is important for the ExternalInterfaceDefaultRoute to be reachable on the -subnet that is used for ExternalNetCidr. This will allow the OpenStack Public -APIs and the Horizon Dashboard to be reachable. Without a valid default route, -the post-deployment steps cannot be performed. - -.. note:: - The ``resource_registry`` section of the network-environment.yaml contains - pointers to the network interface configurations for the deployed roles. - These files must exist at the path referenced here, and will be copied - later in this guide. - -Example:: - - resource_registry: - OS::TripleO::BlockStorage::Net::SoftwareConfig: /home/stack/nic-configs/cinder-storage.yaml - OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/nic-configs/compute.yaml - OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/nic-configs/controller.yaml - OS::TripleO::ObjectStorage::Net::SoftwareConfig: /home/stack/nic-configs/swift-storage.yaml - OS::TripleO::CephStorage::Net::SoftwareConfig: /home/stack/nic-configs/ceph-storage.yaml - - parameters: - # Set to "br-ex" if using floating IPs on native VLAN on bridge br-ex - Controller-1::NeutronExternalNetworkBridge: "''" - - parameter_defaults: - # Customize all these values to match the local environment - InternalApiNetCidr: 172.17.0.0/24 - StorageNetCidr: 172.18.0.0/24 - StorageMgmtNetCidr: 172.19.0.0/24 - TenantNetCidr: 172.16.0.0/24 - ExternalNetCidr: 10.1.2.0/24 - InternalApiAllocationPools: [{'start': '172.17.0.10', 'end': '172.17.0.200'}] - StorageAllocationPools: [{'start': '172.18.0.10', 'end': '172.18.0.200'}] - StorageMgmtAllocationPools: [{'start': '172.19.0.10', 'end': '172.19.0.200'}] - TenantAllocationPools: [{'start': '172.16.0.10', 'end': '172.16.0.200'}] - # Use an External allocation pool which will leave room for floating IPs - ExternalAllocationPools: [{'start': '10.1.2.10', 'end': '10.1.2.50'}] - InternalApiNetworkVlanID: 201 - StorageNetworkVlanID: 202 - StorageMgmtNetworkVlanID: 203 - TenantNetworkVlanID: 204 - ExternalNetworkVlanID: 100 - # Set to the router gateway on the external network - ExternalInterfaceDefaultRoute: 10.1.2.1 - # Set to "br-ex" if using floating IPs on native VLAN on bridge br-ex - NeutronExternalNetworkBridge: "''" - # Customize bonding options if required (will be ignored if bonds are not used) - BondInterfaceOvsOptions: - "bond_mode=balance-tcp lacp=active other-config:lacp-fallback-ab=true" - -Creating Custom Interface Templates ------------------------------------ - -In order to configure the network interfaces on each node, the network -interface templates may need to be customized. - -Start by copying the configurations from one of the example directories. The -first example copies the templates which include network bonding. The second -example copies the templates which use a single network interface with -multiple VLANs (this configuration is mostly intended for testing). - -To copy the bonded example interface configurations, run:: - - $ cp /usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans/* ~/nic-configs - -To copy the single NIC with VLANs example interface configurations, run:: - - $ cp /usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans/* ~/nic-configs - -Or, if you have custom NIC templates from another source, copy them to the location -referenced in the ``resource_registry`` section of the environment file. - -Customizing the Interface Templates ------------------------------------ -The following example configures a bond on interfaces 3 and 4 of a system -with 4 interfaces. This example is based on the controller template from the -bond-with-vlans sample templates, but the bond has been placed on nic3 and nic4 -instead of nic2 and nic3. The other roles will have a similar configuration, -but will have only a subset of the networks attached. - -.. note:: - The nic1, nic2... abstraction considers only network interfaces which are - connected to an Ethernet switch. If interfaces 1 and 4 are the only - interfaces which are plugged in, they will be referred to as nic1 and nic2. - -Example:: - - heat_template_version: 2015-04-30 - - description: > - Software Config to drive os-net-config with 2 bonded nics on a bridge - with a VLANs attached for the controller role. - - parameters: - ExternalIpSubnet: - default: '' - description: IP address/subnet on the external network - type: string - InternalApiIpSubnet: - default: '' - description: IP address/subnet on the internal API network - type: string - StorageIpSubnet: - default: '' - description: IP address/subnet on the storage network - type: string - StorageMgmtIpSubnet: - default: '' - description: IP address/subnet on the storage mgmt network - type: string - TenantIpSubnet: - default: '' - description: IP address/subnet on the tenant network - type: string - BondInterfaceOvsOptions: - default: '' - description: The ovs_options string for the bond interface. Set things like - lacp=active and/or bond_mode=balance-slb using this option. - type: string - ExternalNetworkVlanID: - default: 10 - description: Vlan ID for the external network traffic. - type: number - InternalApiNetworkVlanID: - default: 20 - description: Vlan ID for the internal_api network traffic. - type: number - StorageNetworkVlanID: - default: 30 - description: Vlan ID for the storage network traffic. - type: number - StorageMgmtNetworkVlanID: - default: 40 - description: Vlan ID for the storage mgmt network traffic. - type: number - TenantNetworkVlanID: - default: 50 - description: Vlan ID for the tenant network traffic. - type: number - ExternalInterfaceDefaultRoute: - default: '10.0.0.1' - description: Default route for the external network. - type: string - - resources: - OsNetConfigImpl: - type: OS::Heat::StructuredConfig - properties: - group: os-apply-config - config: - os_net_config: - network_config: - - - type: ovs_bridge - name: {get_input: bridge_name} - members: - - - type: ovs_bond - name: bond1 - ovs_options: {get_param: BondInterfaceOvsOptions} - members: - - - type: interface - name: nic3 - primary: true - - - type: interface - name: nic4 - - - type: vlan - device: bond1 - vlan_id: {get_param: ExternalNetworkVlanID} - addresses: - - - ip_netmask: {get_param: ExternalIpSubnet} - routes: - - - ip_netmask: 0.0.0.0/0 - next_hop: {get_param: ExternalInterfaceDefaultRoute} - - - type: vlan - device: bond1 - vlan_id: {get_param: InternalApiNetworkVlanID} - addresses: - - - ip_netmask: {get_param: InternalApiIpSubnet} - - - type: vlan - device: bond1 - vlan_id: {get_param: StorageNetworkVlanID} - addresses: - - - ip_netmask: {get_param: StorageIpSubnet} - - - type: vlan - device: bond1 - vlan_id: {get_param: StorageMgmtNetworkVlanID} - addresses: - - - ip_netmask: {get_param: StorageMgmtIpSubnet} - - - type: vlan - device: bond1 - vlan_id: {get_param: TenantNetworkVlanID} - addresses: - - - ip_netmask: {get_param: TenantIpSubnet} - - outputs: - OS::stack_id: - description: The OsNetConfigImpl resource. - value: {get_resource: OsNetConfigImpl} - -Configuring Interfaces ----------------------- -The individual interfaces may need to be modified. As an example, below are -the modifications that would be required to use the second NIC to connect to -an infrastructure network with DHCP addresses, and to use the third and fourth -NICs for the bond: - -Example:: - - network_config: - # Add a DHCP infrastructure network to nic2 - - - type: interface - name: nic2 - use_dhcp: true - defroute: false - - - type: ovs_bridge - name: br-bond - members: - - - type: ovs_bond - name: bond1 - ovs_options: {get_param: BondInterfaceOvsOptions} - members: - # Modify bond NICs to use nic3 and nic4 - - - type: interface - name: nic3 - primary: true - - - type: interface - name: nic4 - -When using numbered interfaces ("nic1", "nic2", etc.) instead of named -interfaces ("eth0", "eno2", etc.), the network interfaces of hosts within -a role do not have to be exactly the same. For instance, one host may have -interfaces em1 and em2, while another has eno1 and eno2, but both hosts' NICs -can be referred to as nic1 and nic2. - -The numbered NIC scheme only takes into account the interfaces that are live -(have a cable attached to the switch). So if you have some hosts with 4 -interfaces, and some with 6, you should use nic1-nic4 and only plug in 4 -cables on each host. - -Configuring Routes and Default Routes -------------------------------------- -There are two ways that a host may have its default routes set. If the interface -is using DHCP, and the DHCP server offers a gateway address, the system will -install a default route for that gateway. Otherwise, a default route may be set -manually on an interface with a static IP. - -Although the Linux kernel supports multiple default gateways, it will only use -the one with the lowest metric. If there are multiple DHCP interfaces, this can -result in an unpredictable default gateway. In this case, it is recommended that -defroute=no be set for the interfaces other than the one where we want the -default route. In this case, we want a DHCP interface (NIC 2) to be the default -route (rather than the Provisioning interface), so we disable the default route -on the provisioning interface: - -Example:: - - # No default route on the Provisioning network - - - type: interface - name: nic1 - use_dhcp: true - defroute: no - # Instead use this DHCP infrastructure VLAN as the default route - - - type: interface - name: nic2 - use_dhcp: true - -To set a static route on an interface with a static IP, specify a route to the -subnet. For instance, here is a hypothetical route to the 10.1.2.0/24 subnet -via the gateway at 172.17.0.1 on the Internal API network: - -Example:: - - - - type: vlan - device: bond1 - vlan_id: {get_param: InternalApiNetworkVlanID} - addresses: - - - ip_netmask: {get_param: InternalApiIpSubnet} - routes: - - - ip_netmask: 10.1.2.0/24 - next_hop: 172.17.0.1 - -Using a Dedicated Interface For Tenant VLANs --------------------------------------------- -When using a dedicated interface or bond for tenant VLANs, a bridge must be -created. Neutron will create OVS ports on that bridge with the VLAN tags for the -provider VLANs. For example, to use NIC 4 as a dedicated interface for tenant -VLANs, you would add the following to the Controller and Compute templates: - -Example:: - - - - type: ovs_bridge - name: br-vlan - members: - - - type: interface - name: nic4 - primary: true - -A similar configuration may be used to define an interface or a bridge that -will be used for Provider VLANs. Provider VLANs are external networks which -are connected directly to the Compute hosts. VMs may be attached directly to -Provider networks to provide access to datacenter resources outside the cloud. - -Using the Native VLAN for Floating IPs --------------------------------------- -By default, Neutron will be expecting the floating IP network to be delivered -on a tagged VLAN. If the floating IP network will use the native VLAN, then we -need to tell Neutron to put the floating IPs directly on the ``br-ex`` bridge. -The value must be set in both of these parameters in the parameters section: - -Example:: - - parameters: - # Set to "br-ex" when using floating IPs on the native VLAN - Controller-1::NeutronExternalNetworkBridge: "''" - - parameter_defaults: - # Set to "br-ex" when using floating IPs on the native VLAN - NeutronExternalNetworkBridge: "''" - -The next section contains the changes to the NIC config that need to happen -to put the External network on the native VLAN (the External network may be -used for floating IPs in addition to the Horizon dashboard and Public APIs). - -Using the Native VLAN on a Trunked Interface --------------------------------------------- -If a trunked interface or bond has a network on the native VLAN, then the IP -address will be assigned directly to the bridge and there will be no VLAN -interface. If the native VLAN is used for the External network, make sure to -set the NeutronExternalNetworkBridge parameters to "br-ex" instead of "''" -in the ``network-environment.yaml``. - -For example, if the external network is on the native VLAN, the bond -configuration would look like this: - -Example:: - - network_config: - - - type: ovs_bridge - name: {get_input: bridge_name} - addresses: - - - ip_netmask: {get_param: ExternalIpSubnet} - routes: - - - ip_netmask: 0.0.0.0/0 - next_hop: {get_param: ExternalInterfaceDefaultRoute} - members: - - - type: ovs_bond - name: bond1 - ovs_options: {get_param: BondInterfaceOvsOptions} - members: - - - type: interface - name: nic3 - primary: true - - - type: interface - name: nic4 - -.. note:: - When moving the address (and possibly route) statements onto the bridge, be - sure to remove the corresponding VLAN interface from the bridge. Make sure to - make the changes to all applicable roles. The External network is only on the - controllers, so only the controller template needs to be changed. The Storage - network on the other hand is attached to all roles, so if the storage network - were the default VLAN, all roles would need to be edited. - -Configuring Jumbo Frames ------------------------- -The Maximum Transmission Unit (MTU) setting determines the maximum amount of -data that can be transmitted by a single Ethernet frame. Using a larger value -can result in less overhead, since each frame adds data in the form of a -header. The default value is 1500, and using a value higher than that will -require the switch port to be configured to support jumbo frames. Most switches -support an MTU of at least 9000, but many are configured for 1500 by default. - -The MTU of a VLAN cannot exceed the MTU of the physical interface. Make sure to -include the MTU value on the bond and/or interface. - -Storage, Storage Management, Internal API, and Tenant networking can all -benefit from jumbo frames. In testing, tenant networking throughput was -over 300% greater when using jumbo frames in conjunction with VXLAN tunnels. - -.. note:: - It is recommended that the Provisioning interface, External interface, and - any floating IP interfaces be left at the default MTU of 1500. Connectivity - problems are likely to occur otherwise. - -Example:: - - - - type: ovs_bond - name: bond1 - mtu: 9000 - ovs_options: {get_param: BondInterfaceOvsOptions} - members: - - - type: interface - name: nic3 - mtu: 9000 - primary: true - - - type: interface - name: nic4 - mtu: 9000 - - - # The external interface should stay at default - type: vlan - device: bond1 - vlan_id: {get_param: ExternalNetworkVlanID} - addresses: - - - ip_netmask: {get_param: ExternalIpSubnet} - routes: - - - ip_netmask: 0.0.0.0/0 - next_hop: {get_param: ExternalInterfaceDefaultRoute} - - - # MTU 9000 for Internal API, Storage, and Storage Management - type: vlan - device: bond1 - mtu: 9000 - vlan_id: {get_param: InternalApiNetworkVlanID} - addresses: - - - ip_netmask: {get_param: InternalApiIpSubnet} - -Assinging OpenStack Services to Isolated Networks -------------------------------------------------- -Each OpenStack service is assigned to a network using a default mapping. The -service will be bound to the host IP within the named network on each host. - -..note:: - - The services will be assigned to the networks according to the - ``ServiceNetMap`` in ``overcloud-without-mergepy.yaml``. Unless these - defaults need to be overridden, the ServiceNetMap does not need to be defined - in the environment file. - -A service can be assigned to an alternate network by overriding the service to -network map in an environment file. The defaults should generally work, but -can be overridden. To override these values, add the ServiceNetMap to the -``parameter_defaults`` section of the network environment. - -Example:: - - parameter_defaults: - - ServiceNetMap: - NeutronTenantNetwork: tenant - CeilometerApiNetwork: internal_api - MongoDbNetwork: internal_api - CinderApiNetwork: internal_api - CinderIscsiNetwork: storage - GlanceApiNetwork: storage - GlanceRegistryNetwork: internal_api - KeystoneAdminApiNetwork: internal_api - KeystonePublicApiNetwork: internal_api - NeutronApiNetwork: internal_api - HeatApiNetwork: internal_api - NovaApiNetwork: internal_api - NovaMetadataNetwork: internal_api - NovaVncProxyNetwork: internal_api - SwiftMgmtNetwork: storage_mgmt - SwiftProxyNetwork: storage - HorizonNetwork: internal_api - MemcachedNetwork: internal_api - RabbitMqNetwork: internal_api - RedisNetwork: internal_api - MysqlNetwork: internal_api - CephClusterNetwork: storage_mgmt - CephPublicNetwork: storage - # Define which network will be used for hostname resolution - ControllerHostnameResolveNetwork: internal_api - ComputeHostnameResolveNetwork: internal_api - BlockStorageHostnameResolveNetwork: internal_api - ObjectStorageHostnameResolveNetwork: internal_api - CephStorageHostnameResolveNetwork: storage - -.. note:: - If an entry in the ServiceNetMap points to a network which does not exist, - that service will be placed on the Provisioning network. To avoid that, - make sure that each entry points to a valid network. - -Deploying the Overcloud With Network Isolation ----------------------------------------------- - -When deploying with network isolation, you should specify the NTP server for the -overcloud nodes. If the clocks are not synchronized, some OpenStack services may -be unable to start, especially when using HA. The NTP server should be reachable -from both the External and Provisioning subnets. The neutron network type should -be specified, along with the tunneling or VLAN parameters. - -To deploy with network isolation and include the network environment file, use -the ``-e`` parameters with the ``openstack overcloud deploy`` command. For -instance, to deploy VXLAN mode, the deployment command might be:: - - openstack overcloud deploy -e /home/stack/network-environment.yaml \ - -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ - --plan openstack --ntp-server pool.ntp.org --neutron-network-type vxlan \ - --neutron-tunnel-types vxlan - -To deploy with VLAN mode, you should specify the range of VLANs that will be -used for tenant networks:: - - openstack overcloud deploy -e /home/stack/network-environment.yaml \ - -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ - --plan openstack --ntp-server pool.ntp.org --neutron-network-type vlan \ - --neutron-bridge-mappings datacentre:br-ex \ - --neutron-network-vlan-ranges datacentre:30:100 \ - --neutron-disable-tunneling - -If a dedicated interface or bridge is used for tenant VLANs, it should be -included in the bridge mappings. For instance, if the tenant VLANs were on a -bridge named ``br-vlan``, then use these values in the deployment command -above:: - - --neutron-bridge-mappings datacentre:br-ex,tenant:br-vlan \ - --neutron-network-vlan-ranges tenant:30:100 - -.. note:: - - You must also pass the environment files (again using the ``-e`` or - ``--environment-file`` option) whenever you make subsequent changes to the - overcloud, such as :doc:`../post_deployment/scale_roles`, - :doc:`../post_deployment/delete_nodes` or - :doc:`../post_deployment/package_update`. - diff --git a/doc/source/advanced_deployment/profile_matching.rst b/doc/source/advanced_deployment/profile_matching.rst deleted file mode 100644 index 7aa7f52c5..000000000 --- a/doc/source/advanced_deployment/profile_matching.rst +++ /dev/null @@ -1,224 +0,0 @@ -Advanced Profile Matching -========================= - -Here are additional setup steps to take advantage of the advanced profile -matching and the AHC features. - -Enable advanced profile matching --------------------------------- - -* Install the ahc-tools package:: - - sudo yum install -y ahc-tools - -* Add the credentials for Ironic and Swift to the - **/etc/ahc-tools/ahc-tools.conf** file. - These will be the same credentials that ironic-discoverd uses, - and can be copied from **/etc/ironic-discoverd/discoverd.conf**:: - - $ sudo -i - # mkdir -p /etc/ahc-tools - # sed 's/\[discoverd/\[ironic/' /etc/ironic-discoverd/discoverd.conf > /etc/ahc-tools/ahc-tools.conf - # chmod 0600 /etc/ahc-tools/ahc-tools.conf - # exit - - Example:: - - [ironic] - os_auth_url = http://192.0.2.1:5000/v2.0 - os_username = ironic - os_password = - os_tenant_name = service - - [swift] - os_auth_url = http://192.0.2.1:5000/v2.0 - os_username = ironic - os_password = - os_tenant_name = service - -Accessing additional introspection data ---------------------------------------- - -Every introspection run (as described in -:doc:`../basic_deployment/basic_deployment_cli`) collects a lot of additional -facts about the hardware and puts them as JSON in Swift. Swift container name -is ``ironic-inspector`` and can be modified in -**/etc/ironic-discoverd/discoverd.conf**. Swift object name is stored under -``hardware_swift_object`` key in Ironic node extra field. - -As an example, to download the swift data for all nodes to a local directory -and use that to collect a list of node mac addresses:: - - # You will need the discoverd user password - # from /etc/ironic-discoverd/discoverd.conf: - export IRONIC_DISCOVERD_PASSWORD= - - # Download the extra introspection data from swift: - for node in $(ironic node-list | grep -v UUID| awk '{print $2}'); - do swift -U service:ironic -K $IRONIC_DISCOVERD_PASSWORD download ironic-discoverd extra_hardware-$node; - done - - # Use jq to access the local data - for example gather macs: - for f in extra_hardware-*; - do cat $f | jq -r 'map(select(.[0]=="network" and .[2]=="serial"))'; - done - -State file ----------- - -Configuration file **/etc/ahc-tools/edeploy/state** defines how many nodes of -each profile we want to match. This file contains list of tuples with profile -name and number of nodes for this profile. ``*`` symbol can be used to match -any number, but make sure that such tuple will go last. - -For example to start with 1 control node and any number of compute ones, -populate this file with the following contents:: - - [('control', '1'), ('compute', '*')] - -Matching rules --------------- - -These matching rules will determine what profile gets assigned to each node -and are stored in files named **/etc/ahc-tools/edeploy/PROFILE.specs** for -each profile defined in **/etc/ahc-tools/edeploy/state**. - -Open the **/etc/ahc-tools/edeploy/control.specs** file. -This is a JSON-like file that might look like this:: - - [ - ('disk', '$disk', 'size', 'gt(4)'), - ('network', '$eth', 'ipv4', 'network(192.0.2.0/24)'), - ('memory', 'total', 'size', 'ge(4294967296)'), - ] - -These rules match on the data collected during introspection. -Note that disk size is in GiB, while memory size is in KiB. - -There is a set of helper functions to make matching more flexible. - -* network() : the network interface shall be in the specified network -* gt(), ge(), lt(), le() : greater than (or equal), lower than (or equal) -* in() : the item to match shall be in a specified set -* regexp() : match a regular expression -* or(), and(), not(): boolean functions. or() and and() take 2 parameters - and not() one parameter. - -There are also placeholders, *$disk* and *$eth* in the above example. -These will store the value in that place for later use. - -* For example if we had a "fact" from discovery:: - - ('disk', 'sda', 'size', '40') - -This would match the first rule in the above control.specs file, -and we would store ``"disk": "sda"``. - -Running advanced profile matching ---------------------------------- - -* After adjusting the matching rules, we are ready to do the matching:: - - sudo ahc-match - -* This will attempt to match all of the available nodes to the roles - we have defined in the **/etc/ahc-tools/edeploy/state** file. - When a node matches a role, the role is added to the node in Ironic in - the form of a capability. We can check this with ``ironic node-show``:: - - [stack@instack ~]# ironic node-show b73fb5fa-1a2c-49c6-b38e-8de41e3c0532 | grep properties -A2 - | properties | {u'memory_mb': u'4096', u'cpu_arch': u'x86_64', u'local_gb': u'40', | - | | u'cpus': u'1', u'capabilities': u'profile:control,boot_option:local'} | - | instance_uuid | None - -* In the above output, we can see that the control profile is added - as a capability to the node. Next we will need to create flavors in Nova - that actually map to these profiles. - -[Optional] Manually add the profiles to the nodes -------------------------------------------------- - -In order to use the matching functionality without using the AHC tools. We can -instead add the profile "tags" manually. The example below will add the -"control" profile to a node:: - - ironic node-update replace properties/capabilities='profile:control,boot_option:local' - -.. note:: - - We can not update only a single key from the capabilities dictionary, so we - need to specify both the profile and the boot_option above. Otherwise, the - boot_option key will get removed. - -Create flavors to use advanced matching ---------------------------------------- - -In order to use the profiles assigned to the Ironic nodes, Nova needs to have -flavors that have the property "capabilities:profile" set to the intended profile. - -For example, with just the compute and control profiles: - -* Create the flavors - - :: - - openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 control - openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 compute - -.. note:: - - The values for ram, disk, and vcpus should be set to a minimal lower bound, - as Nova will still check that the Ironic nodes have at least this much - even if we set lower properties in the **.specs** files. - -* Assign the properties - - :: - - openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="compute" compute - openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="control" control - - -Use the flavors to deploy -------------------------- - -By default, all nodes are deployed to the **baremetal** flavor. -The RDO-Manager CLI has options to support more advanced role matching. - -Continuing with the example with only a control and compute profile: - -* Get the Tuskar plan name - - :: - - openstack management plan list - -* Deploy the overcloud - - :: - - openstack overcloud deploy --control-flavor control --compute-flavor compute --plan - - -Use the flavors to scale -------------------------- - -The process to scale an overcloud that uses our advanced profiles is the same -as the process used when we only have the **baremetal** flavor. - -.. note:: - - The original overcloud must have been deployed as above in order to scale - using advanced profiles, as the flavor to role mapping happens then. - -* Update the **/etc/ahc-tools/edeploy/state** file to match the number - of nodes we want to match to each role. - -* Run `sudo ahc-match` to match available nodes to the defined roles. - -* Scale the overcloud (example below adds two more nodes to the compute role) - - :: - - openstack overcloud scale stack overcloud overcloud -r Compute-1 -n 2 - diff --git a/doc/source/advanced_deployment/ready_state.rst b/doc/source/advanced_deployment/ready_state.rst deleted file mode 100644 index f8619174b..000000000 --- a/doc/source/advanced_deployment/ready_state.rst +++ /dev/null @@ -1,112 +0,0 @@ -Ready-State (BIOS, RAID) -======================== - -.. note:: Ready-state configuration currently works only with Dell DRAC - machines. - -Ready-state configuration can be used to prepare bare-metal resources for -deployment. It includes BIOS and RAID configuration based on a predefined -profile. - -To define the target BIOS and RAID configuration for a deployment profile, you -need to create a JSON-like ``.cmdb`` file in -``/etc/ahc-tools/edeploy``. The configuration will be applied only to nodes -that match the ``.specs`` rules. - - -Define the target BIOS configuration ------------------------------------- - -To define a BIOS setting, list the name of the setting and its target -value:: - - [ - { - 'bios_settings': {'ProcVirtualization': 'Enabled'} - } - ] - - -Define the target RAID configuration ------------------------------------- - -The RAID configuration can be defined in 2 ways: either by listing the IDs -of the physical disks, or letting Ironic assign physical disks to the -RAID volume. - -By providing a list of physical disk IDs the following attributes are required: -``controller``, ``size_gb``, ``raid_level`` and the list of ``physical_disks``. -``controller`` should be the FQDD of the RAID controller assigned by the DRAC -card. Similarly, the list of ``physical_disks`` should be the FQDDs of physical -disks assigned by the DRAC card. An example:: - - [ - { - 'logical_disks': [ - {'controller': 'RAID.Integrated.1-1', - 'size_gb': 100, - 'physical_disks': [ - 'Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1', - 'Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1', - 'Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1'], - 'raid_level': '5'}, - ] - } - ] - -By letting Ironic assign physical disks to the RAID volume, the following -attributes are required: ``controller``, ``size_gb``, ``raid_level`` and the -``number_of_physical_disks``. ``controller`` should be the FQDD of the RAID -controller assigned by the DRAC card. An example:: - - [ - { - 'logical_disks': [ - {'controller': 'RAID.Integrated.1-1', - 'size_gb': 50, - 'raid_level': '1', - 'number_of_physical_disks': 2}, - ] - } - ] - - -Complete example for a ``control.cmdb`` ---------------------------------------- -:: - - [ - { - 'bios_settings': {'ProcVirtualization': 'Enabled'}, - 'logical_disks': [ - {'controller': 'RAID.Integrated.1-1', - 'size_gb': 50, - 'raid_level': '1', - 'number_of_physical_disks': 2, - 'disk_type': 'hdd', - 'interface_type': 'sas', - 'volume_name': 'root_volume', - 'is_root_volume': True}, - {'controller': 'RAID.Integrated.1-1', - 'size_gb': 100, - 'physical_disks': [ - 'Disk.Bay.0:Enclosure.Internal.0-1:RAID.Integrated.1-1', - 'Disk.Bay.1:Enclosure.Internal.0-1:RAID.Integrated.1-1', - 'Disk.Bay.2:Enclosure.Internal.0-1:RAID.Integrated.1-1'], - 'raid_level': '5', - 'volume_name': 'data_volume1'} - ] - } - ] - - -Trigger the ready-state configuration -------------------------------------- - -Continue with matching the nodes to profiles as described in -:doc:`profile_matching`. - -Then trigger the BIOS and RAID configuration based on the matched deployment -profile:: - - instack-ironic-deployment --configure-nodes diff --git a/doc/source/advanced_deployment/template_deploy.rst b/doc/source/advanced_deployment/template_deploy.rst deleted file mode 100644 index f0f0596f9..000000000 --- a/doc/source/advanced_deployment/template_deploy.rst +++ /dev/null @@ -1,87 +0,0 @@ -Deploying with Heat Templates -============================= - -It is possible to deploy to heat directly, using a directory of templates, -e.g without using any Tuskar plan. This is potentially a more convenient -approach if you are only deploying via the CLI (the UI requires Tuskar), -and/or if you are developing significant enhancements or site-specific -additions to the templates. - - -Deploying an Overcloud without Tuskar -------------------------------------- - -You may use the ``--templates`` option to enable deploying only using heat -templates, e.g no tuskar plan:: - - openstack overcloud deploy --templates - -.. note:: - - The default location for the templates is - `/usr/share/openstack-tripleo-heat-templates`. Using this option - will not include any modifications to the Tuskar role templates which - may have been performed, templates are always read from local files. - - -Overriding specific templates with local versions -------------------------------------------------- - -You may use heat environment files (via the ``--environment-file`` or ``-e`` -option), combined with the ``--templates`` option to override specific -templates, e.g to test a bugfix outside of the location of the packaged -templates. - -The mapping between heat resource types and the underlying templates can be -found in -`/usr/share/\ -openstack-tripleo-heat-templates/overcloud-resource-registry-puppet.yaml` - -Here is an example of copying a specific resource template and overriding -so the deployment uses the local version:: - - mkdir local_templates - cp /usr/share/openstack-tripleo-heat-templates/puppet/controller-puppet.yaml local_templates - cat > override_templates.yaml << EOF - resource_registry: - OS::TripleO::Controller: local_templates/controller-puppet.yaml - EOF - openstack overcloud deploy --templates --environment-file override_templates.yaml - -.. note:: - - The ``--environment-file``/``-e`` option may be specified multiple times, - if duplicate keys are specified in the environment files, the last one - takes precedence. - -.. note:: - - You must also pass the environment files (again using the ``-e`` or - ``--environment-file`` option) whenever you make subsequent changes to the - overcloud, such as :doc:`../post_deployment/scale_roles`, - :doc:`../post_deployment/delete_nodes` or - :doc:`../post_deployment/package_update`. - -.. _custom-template-location: - -Using a custom location for all templates ------------------------------------------ - -You may specify a path to the ``--templates`` option, such that the packaged -tree may be copied to another location, which is useful e.g for developer usage -where you wish to check the templates into a revision control system. - -.. note:: - - Use caution when using this approach as you will need to rebase any local - changes on updates to the openstack-tripleo-heat-templates package, and - care will be needed to avoid modifying anything in the tree which the CLI - tools rely on (such as top-level parameters). In many cases using the - :doc:`ExtraConfig ` interfaces or specific template overrides - as outlined above may be preferable. - -Here is an example of copying the entire tripleo-heat-templates tree to a -local directory and launching a deployment using the new location:: - - cp -r /usr/share/openstack-tripleo-heat-templates /home/stack/ - openstack overcloud deploy --templates /home/stack/openstack-tripleo-heat-templates diff --git a/doc/source/basic_deployment/basic_deployment_cli.rst b/doc/source/basic_deployment/basic_deployment_cli.rst deleted file mode 100644 index c15c632c4..000000000 --- a/doc/source/basic_deployment/basic_deployment_cli.rst +++ /dev/null @@ -1,437 +0,0 @@ -Basic Deployment (CLI) -====================== - -With these few steps you will be able to simply deploy RDO to your environment -using our defaults in a few steps. - - -Prepare Your Environment ------------------------- - -#. Make sure you have your environment ready and undercloud running: - - * :doc:`../environments/environments` - * :doc:`../installation/installing` - -#. Log into your undercloud (instack) virtual machine as non-root user:: - - ssh root@ - - su - stack - -#. In order to use CLI commands easily you need to source needed environment - variables:: - - source stackrc - - -Get Images ----------- - -.. note:: - - If you already have images built, perhaps from a previous installation of - RDO Manager, you can simply copy those image files into your regular user's - home directory and skip this section. - - If you do this, be aware that sometimes newer versions of RDO Manager do not - work with older images, so if the deployment fails it may be necessary to - delete the older images and restart the process from this step. - - The image files required are:: - - deploy-ramdisk-ironic.initramfs - deploy-ramdisk-ironic.kernel - discovery-ramdisk.initramfs - discovery-ramdisk.kernel - overcloud-full.initrd - overcloud-full.qcow2 - overcloud-full.vmlinuz - -Images must be built prior to doing a deployment. A discovery ramdisk, -deployment ramdisk, and openstack-full image can all be built using -instack-undercloud. - -It's recommended to build images on the installed undercloud directly since all -the dependencies are already present. - -The following steps can be used to build images. They should be run as the same -non-root user that was used to install the undercloud. - - -#. Choose image operating system: - - The built images will automatically have the same base OS as the - running undercloud. To choose a different OS use one of the following - commands (make sure you have your OS specific content visible): - - .. admonition:: CentOS - :class: centos - - :: - - export NODE_DIST=centos7 - - .. admonition:: RHEL - :class: rhel - - :: - - export NODE_DIST=rhel7 - - -#. Build the required images: - - .. only:: internal - - .. admonition:: RHEL - :class: rhel - - Download the RHEL 7.1 cloud image or copy it over from a different location, - and define the needed environment variable for RHEL 7.1 prior to running - ``openstack overcloud image build --all``:: - - IMAGE=http://download.devel.redhat.com/brewroot/packages/rhel-guest-image/7.1/20150224.0/images/rhel-guest-image-7.1-20150224.0.x86_64.qcow2 - curl -O $IMAGE - export DIB_LOCAL_IMAGE=`basename $IMAGE` - # Enable RHOS - export USE_DELOREAN_TRUNK=0 - export RHOS=1 - export DIB_YUM_REPO_CONF="/etc/yum.repos.d/rhos-release-7-director-rhel-7.1.repo /etc/yum.repos.d/rhos-release-7-rhel-7.1.repo" - - .. only:: external - - .. admonition:: RHEL - :class: rhel - - Download the RHEL 7.1 cloud image or copy it over from a different location, - for example: - https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.1/x86_64/product-downloads, - and define the needed environment variables for RHEL 7.1 prior to running - ``openstack overcloud image build --all``:: - - export DIB_LOCAL_IMAGE=rhel-guest-image-7.1-20150224.0.x86_64.qcow2 - - .. admonition:: RHEL Portal Registration - :class: portal - - To register the image builds to the Red Hat Portal define the following variables:: - - export REG_METHOD=portal - export REG_USER="[your username]" - export REG_PASSWORD="[your password]" - # Find this with `sudo subscription-manager list --available` - export REG_POOL_ID="[pool id]" - export REG_REPOS="rhel-7-server-rpms rhel-7-server-extras-rpms rhel-ha-for-rhel-7-server-rpms \ - rhel-7-server-optional-rpms rhel-7-server-openstack-6.0-rpms" - - .. admonition:: RHEL Satellite Registration - :class: satellite - - To register the image builds to a Satellite define the following - variables. Only using an activation key is supported when registering to - Satellite, username/password is not supported for security reasons. The - activation key must enable the repos shown:: - - export REG_METHOD=satellite - # REG_SAT_URL should be in the format of: - # http:// - export REG_SAT_URL="[satellite url]" - export REG_ORG="[satellite org]" - # Activation key must enable these repos: - # rhel-7-server-rpms - # rhel-7-server-optional-rpms - # rhel-7-server-extras-rpms - # rhel-7-server-openstack-6.0-rpms - export REG_ACTIVATION_KEY="[activation key]" - - .. note :: - By default, images are built with the latest RDO-Manager Trunk repo which has passed CI. If you need to manually test packages before CI has passed, you can use: - - :: - - export DELOREAN_TRUNK_MGT_REPO="http://trunk-mgt.rdoproject.org/centos-kilo/current" - - :: - - openstack overcloud image build --all - - - .. note:: - This script will build **overcloud-full** images (\*.qcow2, \*.initrd, - \*.vmlinuz), **deploy-ramdisk-ironic** images (\*.initramfs, \*.kernel), - **discovery-ramdisk** images (\*.initramfs, \*.kernel) and **testing** - fedora-user.qcow2 (which is always Fedora based). - - -Upload Images -------------- - -Load the images into the undercloud Glance:: - - openstack overcloud image upload - - -Register Nodes --------------- - -Register nodes for your deployment with Ironic:: - - openstack baremetal import --json instackenv.json - -.. note:: - It's not recommended to delete nodes and/or rerun this command after - you have proceeded to the next steps. Particularly, if you start introspection - and then re-register nodes, you won't be able to retry introspection until - the previous one times out (1 hour by default). If you are having issues - with nodes after registration, please follow - :ref:`node_registration_problems`. - -.. note:: - By default Ironic will not sync the power state of the nodes, - because in our HA (high availability) model Pacemaker is the - one responsible for controlling the power state of the nodes - when fencing. If you are using a non-HA setup and want Ironic - to take care of the power state of the nodes please change the - value of the "force_power_state_during_sync" configuration option - in the /etc/ironic/ironic.conf file to "True" and restart the - openstack-ironic-conductor service. - - Also, note that if "openstack undercloud install" is re-run the value - of the "force_power_state_during_sync" configuration option will be - set back to the default, which is "False". - -Assign kernel and ramdisk to nodes:: - - openstack baremetal configure boot - - -Introspect Nodes ----------------- - -Introspect hardware attributes of nodes:: - - openstack baremetal introspection bulk start - -.. note:: **Introspection has to finish without errors.** - The process can take up to 5 minutes for VM / 15 minutes for baremetal. If - the process takes longer, see :ref:`introspection_problems`. - -Introspecting a single node -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -You can also introspect nodes one by one. -When doing so, you must take care to set the correct node states manually. -Use ``ironic node-show UUID`` command to figure out whether nodes are in -``manageable`` or ``available`` state. For all nodes in ``available`` state, -start with putting a node to ``manageable`` state:: - - ironic node-set-provision-state UUID manage - -Then you can run introspection:: - - openstack baremetal introspection start UUID - -This command won't poll for the introspection result, use the following command -to check the current introspection state:: - - openstack baremetal introspection status UUID - -Repeat it for every node until you see ``True`` in the ``finished`` field. -The ``error`` field will contain an error message if introspection failed, -or ``None`` if introspection succeeded for this node. - -Do not forget to make nodes available for deployment afterwards:: - - ironic node-set-provision-state UUID provide - -Create Flavors --------------- - -Create the necessary flavor:: - - openstack flavor create --id auto --ram 4096 --disk 40 --vcpus 1 baremetal - openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" baremetal - -Configure a nameserver for the Overcloud ----------------------------------------- - -Overcloud nodes need to have a configured nameserver so that they can resolve -hostnames via DNS. The nameserver is defined in the undercloud's neutron -subnet. Define the nameserver to be used for the environment:: - - # List the available subnets - neutron subnet-list - neutron subnet-update --dns-nameserver - -.. note:: - A public DNS server, such as 8.8.8.8 can be used if there is no internal DNS - server. - -.. admonition:: Virtual - :class: virtual - - In virtual environments, the libvirt default network DHCP server address, - typically 192.168.122.1, can be used as the overcloud nameserver. - -Deploy the Overcloud --------------------- - -By default 1 compute and 1 control node will be deployed, with networking -configured for the virtual environment. To customize this, see the output of:: - - openstack help overcloud deploy - -.. admonition:: Ceph - :class: ceph - - When deploying Ceph it is necessary to use the regular Heat templates - instead of Tuskar, to specify the number of Ceph OSD nodes to be - deployed and to provide some additional parameters to enable usage - of Ceph for Glance, Cinder, Nova or all. - Make a copy of the file ``/usr/share/openstack-tripleo-heat-templates/environments/storage-environment.yaml`` - and edit it as appropriate, then pass the following additional arguments:: - - --ceph-storage-scale --templates -e /path/to/customized/storage-environment.yaml - - to the deploy command below. - - By default when Ceph is enabled the Cinder LVM back-end is disabled. This - behavior may be changed by also passing:: - - --cinder-lvm - -.. admonition:: RHEL Satellite Registration - :class: satellite - - To register the Overcloud nodes to a Satellite add the following flags - to the deploy command:: - - --rhel-reg --reg-method satellite --reg-org --reg-sat-url --reg-activation-key - - .. note:: - - Only using an activation key is supported when registering to - Satellite, username/password is not supported for security reasons. - The activation key must enable the following repos: - - rhel-7-server-rpms - - rhel-7-server-optional-rpms - - rhel-7-server-extras-rpms - - rhel-7-server-openstack-6.0-rpms - -.. admonition:: Virtual - :class: virtual - - The deployment defaults to using kvm as a virtualization library. - If your compute nodes are virtual machines, this ends up having - nested ``kvm`` engines which is not recommended. Therefore you should - on a virtual install use ``qemu`` as a virtualization library instead - by adding the following to the deploy command:: - - --libvirt-type=qemu - -:: - - openstack overcloud deploy --templates - -.. note:: - - To deploy the overcloud with network isolation, bonds, and/or custom - network interface configurations, instead follow the workflow here to - deploy: :doc:`../advanced_deployment/network_isolation` - -Post-Deployment ---------------- - - -Access the Overcloud -^^^^^^^^^^^^^^^^^^^^ - -``openstack overcloud deploy`` generates an overcloudrc file appropriate for -interacting with the deployed overcloud in the current user's home directory. -To use it, simply source the file:: - - source ~/overcloudrc - -To return to working with the undercloud, source the stackrc file again:: - - source ~/stackrc - - -Setup the Overcloud network -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Initial networks in Neutron in the Overlcoud need to be created for tenant -instances. The following are example commands to create the initial networks. -Edit the address ranges, or use the necessary neutron commands to match the -environment appropriately. This assumes a dedicated interface or native VLAN:: - - - neutron net-create nova --router:external --provider:network_type flat \ - --provider:physical_network datacentre - neutron subnet-create --name nova --disable-dhcp \ - --allocation-pool start=172.16.23.140,end=172.16.23.240 \ - --gateway 172.16.23.251 nova 172.16.23.128/25 - -The example shows naming the network "nova" because that will make tempest -tests to pass, based on the default floating pool name set in nova.conf. You -can confirm that the network was created with:: - - neutron net-list - +--------------------------------------+-------------+-------------------------------------------------------+ - | id | name | subnets | - +--------------------------------------+-------------+-------------------------------------------------------+ - | d474fe1f-222d-4e32-802b-cde86e746a2a | nova | 01c5f621-1e0f-4b9d-9c30-7dc59592a52f 172.16.23.128/25 | - +--------------------------------------+-------------+-------------------------------------------------------+ - -To use a VLAN, the following example should work. Customize the address ranges -and VLAN id based on the environment:: - - neutron net-create nova --router:external --provider:network_type vlan \ - --provider:physical_network datacentre --provider:segmentation_id 195 - neutron subnet-create --name nova --disable-dhcp \ - --allocation-pool start=172.16.23.140,end=172.16.23.240 \ - --gateway 172.16.23.251 nova 172.16.23.128/25 - - -Validate the Overcloud -^^^^^^^^^^^^^^^^^^^^^^ -To verify the Overcloud by running Tempest:: - - openstack overcloud validate --overcloud-auth-url $OS_AUTH_URL \ - --overcloud-admin-password $OS_PASSWORD - -.. note:: The full Tempest test suite might take hours to run on a single CPU. - -To run only a part of the Tempest test suite (eg. tests with ``smoke`` tag):: - - openstack overcloud validate --overcloud-auth-url $OS_AUTH_URL \ - --overcloud-admin-password $OS_PASSWORD \ - --tempest-args smoke - - -Redeploy the Overcloud -^^^^^^^^^^^^^^^^^^^^^^ - -The overcloud can be redeployed when desired. - -#. First, delete any existing Overcloud:: - - heat stack-delete overcloud - -#. Confirm the Overcloud has deleted. It may take a few minutes to delete:: - - # This command should show no stack once the Delete has completed - heat stack-list - -#. Although not required, introspection can be rerun:: - - openstack baremetal introspection bulk start - -#. Deploy the Overcloud again:: - - openstack overcloud deploy --templates diff --git a/doc/source/basic_deployment/basic_deployment_gui.rst b/doc/source/basic_deployment/basic_deployment_gui.rst deleted file mode 100644 index 37194719d..000000000 --- a/doc/source/basic_deployment/basic_deployment_gui.rst +++ /dev/null @@ -1,258 +0,0 @@ -Basic Deployment (GUI) -====================== - - -Access the GUI --------------- - -Part of the Undercloud installation is also Tuskar-UI which you can use to drive -the deployment. - - -.. admonition:: Virtual - :class: virtual - - In the case of a virtual deployment, Tuskar-UI runs on the instack virtual - machine on ``http://localhost/dashboard``. Considering this and the fact that - the virt host is a remote host machine, to access the UI in the browser, - follow these steps: - - #. On host machine create ssh tunnel from instack vm to virt host:: - - ssh -g -N -L 8080:127.0.0.1:80 root@ - - #. On instack VM edit ``/etc/openstack-dashboard/local_settings`` and add virt host ``hostname`` to ``ALLOWED_HOSTS`` array - - #. Restart Apache:: - - systemctl restart httpd - - #. Navigate to ``http://:8080/dashboard`` in the browser - -When logging into the dashboard the default user and password are found in the ``/root/stackrc`` file on the instack virtual machine, ``OS_USERNAME`` and ``OS_PASSWORD``. - -After logging into the dashboard, make sure that the project is set to *admin* (if it is not, change the project to *admin* using the Project switcher at the top bar). - - -Overview Page -------------- -When you log into the GUI, you will land on the *Overview* page. This page contains all the information about the -current state of the deployment. On the left side, there is a list of available deployment roles. On the right side, -there is a deployment checklist which indicates whether all the prerequisites for the deployment have been satisfied. - -Get Images ----------- - -To perform a successful deployment, you will need the following images: discovery ramdisk, deployment ramdisk, and -openstack-full image. To upload the images and load them into Glance, navigate to *Provisioning Images* and use the -*Create Image* button to create the necessary images. You will need to following image files handy:: - - overcloud-full.vmlinuz - overcloud-full.initrd - overcloud-full.qcow2 - deploy-ramdisk-ironic.kernel - deploy-ramdisk-ironic.initramfs - discovery-ramdisk.kernel - discovery-ramdisk.initramfs - -To create the 'overcloud-full-vmlinuz' image, fill the *Create Image* form like so:: - - Name: overcloud-full-vmlinuz - Image Source: Image File - Image File: overcloud-full.vmlinuz - Format: AKI - Public: checked - -To create the 'overcloud-full-initrd' image, fill the *Create Image* form like so:: - - Name: overcloud-full-initrd - Image Source: Image File - Image File: overcloud-full.initrd - Format: ARI - Public: checked - -To create the 'overcloud-full' image, fill the *Create Image* form like so:: - - Name: overcloud-full - Image Source: Image File - Image File: overcloud-full.qcow2 - Kernel: overcloud-full-vmlinuz - Ramdisk: overcloud-full-initrd - Format: QCOW2 - Public: checked - -To create the 'bm-deploy-kernel' image, fill the *Create Image* form like so:: - - Name: bm-deploy-kernel - Image Source: Image File - Image File: deploy-ramdisk-ironic.kernel - Format: AKI - Public: checked - -To create the 'bm-deploy-ramdisk' image, fill the *Create Image* form like so:: - - Name: bm-deploy-ramdisk - Image Source: Image File - Image File: deploy-ramdisk-ironic.initramfs - Format: ARI - Public: checked - -You will also need to copy the discovery images to HTTP BOOT directory on the undercloud node. Assuming you have these -images handy in your home directory on the undercloud node, run the following commands to copy them to /httpboot:: - - sudo cp -f discovery-ramdisk.kernel /httpboot/discovery.kernel - sudo cp -f discovery-ramdisk.initramfs /httpboot/discovery.ramdisk - - -Register Nodes --------------- - -To register nodes for your deployment, navigate to the *Nodes* page, and click the + sign to open the *Register Nodes* form. -This form gives you a choice of manually adding node data using the *Add* link, or supplying a CSV file with node data -using the *Upload* link. Choose one of these two options to register your nodes with Ironic. Make sure you provide, at -minimum, the *Power Management* properties, the *MAC address(es)* for the nodes and the *Deployment Images*. The rest of the -attributes are optional and in case you don't supply them, they will be obtained by running the introspection on the -nodes. When you have finished providing the node data, click the *Register Nodes* button to register your nodes. - -.. note:: - When using a CSV file to upload node data, make sure the fields are in this order:: - - driver,address,username,password/ssh key,mac addresses,cpu architecture,number of CPUs,available memory,available storage - - - As stated above, hardware properties (cpu architecture, number of CPUs, available memory, available storage) - are not mandatory, and in case they are not provided in the CSV file, they will be obtained via introspection. - - Here are the contents of an example CSV file to register two virtual nodes:: - - pxe_ssh,192.168.122.1,root,"-----BEGIN RSA PRIVATE KEY----- - MIIEowIBAAKCAQEAw6J6supEV40toLTiH6Taj8k6bI2CSJSK31spMfLIKzPuvzCV - PGZdhKMx1o++u9TcFFh7U1caojg1Jj/XKdPcktGBQvAmiNa9nybmTjiOqq/b1svr - W1Yn23WvkEBL7peFUZVAgJDvxcf42LtA72RdgzegFdrP0y4z6UJlJRnxAckxfa/o - b05N3nrK2yteZQVuMBVB2P7QAgy62aIqJBacWrLplaZMJZZYQJ9ialXZXAMPIN3P - 5l9emMOJjBbXv76G6B/Ik9J6Ryv8SFhQbLzWu1eXjT8g3d5KlD/lvh6fwN/HjYOb - 6o5LvMD61vpOaR0B8Ta/+vu4R+GiLB+ArhS9WQIDAQABAoIBAAUWLGqKfMxp902+ - ZkK8XpJugP5hj4mjkxjLnf6WeW3mI8cE1FyFrNjOBXW2txbbKf29bzdzhFXDcF5W - Opnz0EBhAiNjax0TuEpzEHnoLo1xlR24n534V4D1RmNRyKejeOvuHYc6PYG++VFp - TP7sdSH8SEVJMy4ifWcLOuYEDqglL1uSPQgO8HkmlvOvgI1LnLx9wjeNC1D7weZu - Eh75GTGRLL8i0X0bLmaNZ1Fs3Ge2tLNS0hfu6epCiT3ZAQTBVyFbVmN6btnQ/BHM - nDSZQ2JEDjQByCiBch9hTk/V2UNmn5dOUGPTwp2IP5Blpq2X7u1IoXQiAhI+zVcN - 9mqbK6ECgYEA9hbQF7iEP4RhClNUVmQJd1zQjC2D5Vj0ik68MdgcT1QFrrCGaRPb - eayCxyDoNyUAWGtqToTQ5v3b1dxwsJryMekHD0OL75fl1KbD0bRiawVG81QbyC3U - I05Lr5LCdm80xdktC6caIkpoRF6e9xhAQduXDHZyQ6TdJtRHS6E3uPsCgYEAy4N6 - xFml63vk2qFPyMkSfp82ey6YiGchXxZSDl/tDiDDHgDVRtYi5+7iCNVrjkwtUXI3 - zK+G+m74AIx1C9ZSW81y5ymxKLGz1+OUy3Vtp0Zf5R1/Q+l9I4sl1dkB2wJcb2Ls - 2A3yl9NEt5M3bHZUQk4ttmhfqOFiSmNd/uFbersCgYEAvlAYMDAPfnum/HBDKeiF - dZz+31mXxjeMLqYDXtzNz/+fwWBdIkgsFKX4IX1ueK8R3E990Clg0TMD3xlywPGj - WjvnrMNFJk6nfFRX3gaNkkxreWTTc3UVuRQk7iwmXadU/akd8AQT7u7yQeWXNGq5 - zvS+lPHJHk0ShqPmWzPbvx8CgYBAiB9slXSsN+v4e4AeDcwkhH21D7BkSDdnvF8m - mbpEaZUVNXRrcsk8vB3GaU4in/sawVn6OIpXbMqM+fy/VSVmYL4XmLvJSJfbVBnB - binoCcOsle7d7PK2S5AiwB37gUMoOrkZRUrwY5h9kVvYs6jCIaITHgN/PIB7UAjl - IjZsswKBgC9AgnXvw4M1bcS1SK1WdJXACrmfX5tGMLzCEVJgmJtiWobvpNsfcZ/Q - EanIrYxnJ1zWZstefEuLWGzja+xwL/rsnTl77DPuvZRr/QxXMRaPFn5VTnH5kh0y - 9FlihAmgG1n2k3CCFNtdxAKBqPGLz2wUuRDHYhF4WKYuvghIpQA7 - -----END RSA PRIVATE KEY-----",00:d1:2c:a2:ed:58 - pxe_ssh,192.168.122.1,root,"-----BEGIN RSA PRIVATE KEY----- - MIIEowIBAAKCAQEAw6J6supEV40toLTiH6Taj8k6bI2CSJSK31spMfLIKzPuvzCV - PGZdhKMx1o++u9TcFFh7U1caojg1Jj/XKdPcktGBQvAmiNa9nybmTjiOqq/b1svr - W1Yn23WvkEBL7peFUZVAgJDvxcf42LtA72RdgzegFdrP0y4z6UJlJRnxAckxfa/o - b05N3nrK2yteZQVuMBVB2P7QAgy62aIqJBacWrLplaZMJZZYQJ9ialXZXAMPIN3P - 5l9emMOJjBbXv76G6B/Ik9J6Ryv8SFhQbLzWu1eXjT8g3d5KlD/lvh6fwN/HjYOb - 6o5LvMD61vpOaR0B8Ta/+vu4R+GiLB+ArhS9WQIDAQABAoIBAAUWLGqKfMxp902+ - ZkK8XpJugP5hj4mjkxjLnf6WeW3mI8cE1FyFrNjOBXW2txbbKf29bzdzhFXDcF5W - Opnz0EBhAiNjax0TuEpzEHnoLo1xlR24n534V4D1RmNRyKejeOvuHYc6PYG++VFp - TP7sdSH8SEVJMy4ifWcLOuYEDqglL1uSPQgO8HkmlvOvgI1LnLx9wjeNC1D7weZu - Eh75GTGRLL8i0X0bLmaNZ1Fs3Ge2tLNS0hfu6epCiT3ZAQTBVyFbVmN6btnQ/BHM - nDSZQ2JEDjQByCiBch9hTk/V2UNmn5dOUGPTwp2IP5Blpq2X7u1IoXQiAhI+zVcN - 9mqbK6ECgYEA9hbQF7iEP4RhClNUVmQJd1zQjC2D5Vj0ik68MdgcT1QFrrCGaRPb - eayCxyDoNyUAWGtqToTQ5v3b1dxwsJryMekHD0OL75fl1KbD0bRiawVG81QbyC3U - I05Lr5LCdm80xdktC6caIkpoRF6e9xhAQduXDHZyQ6TdJtRHS6E3uPsCgYEAy4N6 - xFml63vk2qFPyMkSfp82ey6YiGchXxZSDl/tDiDDHgDVRtYi5+7iCNVrjkwtUXI3 - zK+G+m74AIx1C9ZSW81y5ymxKLGz1+OUy3Vtp0Zf5R1/Q+l9I4sl1dkB2wJcb2Ls - 2A3yl9NEt5M3bHZUQk4ttmhfqOFiSmNd/uFbersCgYEAvlAYMDAPfnum/HBDKeiF - dZz+31mXxjeMLqYDXtzNz/+fwWBdIkgsFKX4IX1ueK8R3E990Clg0TMD3xlywPGj - WjvnrMNFJk6nfFRX3gaNkkxreWTTc3UVuRQk7iwmXadU/akd8AQT7u7yQeWXNGq5 - zvS+lPHJHk0ShqPmWzPbvx8CgYBAiB9slXSsN+v4e4AeDcwkhH21D7BkSDdnvF8m - mbpEaZUVNXRrcsk8vB3GaU4in/sawVn6OIpXbMqM+fy/VSVmYL4XmLvJSJfbVBnB - binoCcOsle7d7PK2S5AiwB37gUMoOrkZRUrwY5h9kVvYs6jCIaITHgN/PIB7UAjl - IjZsswKBgC9AgnXvw4M1bcS1SK1WdJXACrmfX5tGMLzCEVJgmJtiWobvpNsfcZ/Q - EanIrYxnJ1zWZstefEuLWGzja+xwL/rsnTl77DPuvZRr/QxXMRaPFn5VTnH5kh0y - 9FlihAmgG1n2k3CCFNtdxAKBqPGLz2wUuRDHYhF4WKYuvghIpQA7 - - -Introspect Nodes ----------------- - -When registering nodes as described above, if you leave out any of the hardware properties for any of the nodes, -introspection will be run on the nodes to obtain these missing properties, as soon as you click the *Register Nodes* -button. In this case, the nodes will be located in the *Maintenance* tab and will have the status *Discovering*. After -the introspection process has finished (this can take up to 5 minutes for VM / 15 minutes for baremetal), the hardware -properties will get populated and the nodes will have the status *Discovered*. At this point, you can move the nodes -to the *Free* tab, by selecting them using the checkbox on the left side and clicking the *Activate Nodes* button. Now -the nodes are ready and available for deployment. - - -Create Flavors --------------- - -To create the necessary flavor, navigate to the *Flavors* page. One suggested flavor, matching the hardware properties -of the created nodes, will be available. To create it, open the dropdown menu under *Actions*, click *Edit before creating*, -change the name to 'baremetal' and click the *Create Flavors* button. - - -Configure Roles ---------------- - -To configure deployment roles, navigate to the *Deployment Roles* page. *Flavor* and *Image* needs to be set to all the -deployment roles. For each of the deployment roles, click the *edit* button and set the *Flavor* to 'baremetal' and -*Image* to 'overcloud-full'. Save the form. - - -Service Configuration ---------------------- - -To perform the necessary service configuration, navigate to the *Service Configuration* page and click the -*Simplified Configuration* button. In the *Service Configuration* form, make sure that the values of the *Deployment Type* -and *Public Interface* fields are correct. Also make sure you set the *SNMP Password* and the *Cloud name*. - - -Deploy the Overcloud --------------------- - -To deploy the overcloud, navigate to the *Overview* page. The deployment plan validation will be performed and if the -plan is valid, the *Verify and Deploy* button will be enabled. Click this button to open the deployment confirmation -dialog. In case you want to enable network isolation, check the *Enable Network Isolation* box. Click *Deploy*. - -This will trigger the creation of the overcloud heat stack. The page will reload and you will be able to monitor the -current status of the deployment. On the right side you will see the progress bar as well as the last event from -the Heat event list. If you want to see the full event list, you can navigate to the *Deployment Log* page. - - -Initialize the Overcloud ------------------------- - -Once the deployment has successfully completed, you need to perform the initialization of Keystone and Neutron in the -overcloud. To do this, click the *Initialize* button, fill out the form and click *Initialize*. Once the initialization has -completed, the page will reload and you will see deployment details on the *Overview* page. On the left side the -information about roles and node counts will be displayed, along with the system load charts for each deployment role. -On the right side, the access information for the overcloud Horizon will be displayed. - - -Post-Deployment ---------------- - - -Access the Overcloud -^^^^^^^^^^^^^^^^^^^^ - -When the overcloud is deployed, the access information needed to to log into the overcloud Horizon is located on -the *Overview* page. - - -Redeploy the Overcloud -^^^^^^^^^^^^^^^^^^^^^^ - -The overcloud can be redeployed when desired. First, you have to delete the existing overcloud by clicking the -*Undeploy* button on the *Overview* page. This will trigger the deletion of the Heat stack. After the overcloud has been -deleted, the *Overview* page will again display the deployment checklist along with the *Verify and Deploy* button. If you -wish to deploy the overcloud again, repeat the steps from the *Deploy the Overcloud* section on this page. diff --git a/doc/source/conf.py b/doc/source/conf.py deleted file mode 100644 index ea8bb764c..000000000 --- a/doc/source/conf.py +++ /dev/null @@ -1,245 +0,0 @@ -# -*- coding: utf-8 -*- -# -# instack-undercloud documentation build configuration file, created by -# sphinx-quickstart on Wed Feb 25 10:56:57 2015. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os -import sphinx_rtd_theme - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = [] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'RDO-Manager' -copyright = u'2015, RDO Community' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '3.0.0' -# The full version, including alpha/beta/rc tags. -release = '3.0.0' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'sphinx_rtd_theme' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -html_logo = '_images/rdo-manager-logo.png' - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_custom'] - -html_style = 'custom.css' - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'rdo-manager-doc' - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'rdo-manager.tex', u'RDO-Manager Documentation', - u'RDO Community', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'rdo-manager', u'RDO-Manager Documentation', - [u'RDO Community'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'rdo-manager', u'RDO-Manager Documentation', - u'RDO Community', 'RDO-Manager', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' diff --git a/doc/source/contributions/contributions.rst b/doc/source/contributions/contributions.rst deleted file mode 100644 index f6a53b4da..000000000 --- a/doc/source/contributions/contributions.rst +++ /dev/null @@ -1,92 +0,0 @@ -How to Contribute -================= - -RDO-Manager source code is available. You can contribute code to individual -projects, documentation, report bugs and vulnerabilities, request features. - - -Contributing Code ------------------ -As long as RDO-Manager is a set of integrated OpenStack projects, all -development is happening in OpenStack upstream. - -Learn `how to contribute into OpenStack's upstream `_. - -See :doc:`../introduction/components` to find out how to contribute into -individual projects. - - -.. - - - Contributing to this Documentation - ----------------------------------- - - RDO-Manager User Documentation lives on Github under RDO-Management - organization. - - Learn `how to contribute into RDO-Manager Docs - `_. - - - -Reporting Bugs --------------- - -**OpenStack Upstream**: If you find bugs or volnurabilities which affect -upstream projects, please follow OpenStack's process of filing bugs. - -* Learn `how to create Bugs in OpenStack - `_. - -* If you want to file a bug against upstream project, you can find useful links - in our list of :doc:`../introduction/components`. - - -**RDO-Manager**: If the bug impacts RDO-Manager as a distribution of the TripleO -Installer, you can file a bug against Bugzilla: - -#. Go to https://bugzilla.redhat.com/enter_bug.cgi?product=RDO - -#. Choose component: **rdo-manager** (or any related individual project) - -#. Fill in needed information (If you filed also upstream bug, please provide - its URL in advanced fields) - -#. Submit bug - -.. note:: If you follow base Bugzilla link, you need to select following: Enter - a new bug report -> Community -> RDO - - -Requesting Features -------------------- -**OpenStack Upstream**: Since we are developing projects in OpenStack community, -all the features are being requested upstream via Blueprints. - -* Learn `how to create Blueprints in OpenStack - `_. - -* If you want to file a bug against upstream project, you can find useful links - in our list of :doc:`../introduction/components`. - - -**RDO-Manager**: If the feature concerns our community distribution named -RDO-Manager, you can use Bugzilla to enter new RFE (Request For Enhancement): - -#. Go to https://bugzilla.redhat.com/enter_bug.cgi?product=RDO - -#. Choose component: **rdo-manager** - -#. Use '[RFE]' in the beginning of your Summary for quick identification - -#. Display Advanced fields and enter new Kewyord 'RFE' - -#. Fill in needed information (If you filed also upstream blueprint, please - provide its URL in advanced fields) - -#. Submit "bug" - -.. note:: If you follow base Bugzilla link, you need to select following: Enter - a new bug report -> Community -> RDO diff --git a/doc/source/environments/baremetal.rst b/doc/source/environments/baremetal.rst deleted file mode 100644 index 3a873ff66..000000000 --- a/doc/source/environments/baremetal.rst +++ /dev/null @@ -1,244 +0,0 @@ -Baremetal Environment -===================== - -RDO-Manager can be used in an all baremetal environment. One machine will be -used for Undercloud, the others will be used for your Overcloud. - - -Minimum System Requirements ---------------------------- -To deploy a minimal RDO cloud with RDO-Manager you need the following baremetal -machines: - -* 1 Undercloud (where RDO-Manager lives) -* 1 Overcloud Controller -* 1 Overcloud Compute - -For each additional Overcloud role, such as Block Storage or Object Storage, -you need an additional baremetal machine. - -.. - - - For minimal **HA (high availability)** deployment you need at least 3 Overcloud - Controller machines and 2 Overcloud Compute machines. - -The baremetal machines must meet the following minimum specifications: - -* multi-core CPU -* 4 GB memory -* 60 GB free disk space - -RDO-Manager is supporting only the following operating systems: - -* RHEL 7.1 x86_64 or -* CentOS 7 x86_64 - - -Preparing the Baremetal Environment ------------------------------------ - -Networking -^^^^^^^^^^ - -The overcloud nodes will be deployed from the undercloud machine and therefore the machines need to have have their network settings modified to allow for the overcloud nodes to be PXE boot'ed using the undercloud machine. As such, the setup requires that: - -* All overcloud machines in the setup must support IPMI -* A management provisioning network is setup for all of the overcloud machines. - One NIC from every machine needs to be in the same broadcast domain of the - provisioning network. In the tested environment, this required setting up a new - VLAN on the switch. Note that you should use the same NIC on each of the - overcloud machines ( for example: use the second NIC on each overcloud - machine). This is because during installation we will need to refer to that NIC - using a single name across all overcloud machines e.g. em2 -* The provisioning network NIC should not be the same NIC that you are using - for remote connectivity to the undercloud machine. During the undercloud - installation, a openvswitch bridge will be created for Neutron and the - provisioning NIC will be bridged to the openvswitch bridge. As such, - connectivity would be lost if the provisioning NIC was also used for remote - connectivity to the undercloud machine. -* The overcloud machines can PXE boot off the NIC that is on the private VLAN. - In the tested environment, this required disabling network booting in the BIOS - for all NICs other than the one we wanted to boot and then ensuring that the - chosen NIC is at the top of the boot order (ahead of the local hard disk drive - and CD/DVD drives). -* For each overcloud machine you have: the MAC address of the NIC that will PXE - boot on the provisioning network the IPMI information for the machine (i.e. IP - address of the IPMI NIC, IPMI username and password) - -Refer to the following diagram for more information - -.. image:: ../_images/TripleO_Network_Diagram_.jpg - -Setting Up The Undercloud Machine -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -#. Select a machine within the baremetal environment on which to install the - undercloud. -#. Install RHEL 7.1 x86_64 or CentOS 7 x86_64 on this machine. -#. If needed, create a non-root user with sudo access to use for installing the - Undercloud:: - - sudo useradd stack - sudo passwd stack # specify a password - echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack - sudo chmod 0440 /etc/sudoers.d/stack - -.. only:: external - - .. admonition:: RHEL - :class: rhel - - If using RHEL, register the Undercloud for package installations/updates. - - .. admonition:: RHEL Portal Registration - :class: portal - - Register the host machine using Subscription Management:: - - sudo subscription-manager register --username="[your username]" --password="[your password]" - # Find this with `subscription-manager list --available` - sudo subscription-manager attach --pool="[pool id]" - # Verify repositories are available - sudo subscription-manager repos --list - # Enable repositories needed - sudo subscription-manager repos --enable=rhel-7-server-rpms \ - --enable=rhel-7-server-optional-rpms --enable=rhel-7-server-extras-rpms \ - --enable=rhel-7-server-openstack-6.0-rpms - - .. admonition:: RHEL Satellite Registration - :class: satellite - - To register the host machine to a Satellite, the following repos must - be synchronized on the Satellite and enabled for registered systems:: - - rhel-7-server-rpms - rhel-7-server-optional-rpms - rhel-7-server-extras-rpms - rhel-7-server-openstack-6.0-rpms - - See the `Red Hat Satellite User Guide`_ for how to configure the system to - register with a Satellite server. It is suggested to use an activation - key that automatically enables the above repos for registered systems. - -.. _Red Hat Satellite User Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Satellite/ - -Configuration Files -------------------- - -instackenv.json -^^^^^^^^^^^^^^^ - -Create a JSON file describing your baremetal nodes, call it -``instackenv.json`` and place in your home directory. The file should contain -a JSON object with the only field ``nodes`` containing list of node -descriptions. - -Each node description should contains required fields: - -* ``pm_type`` - driver for Ironic nodes, see `Ironic Drivers`_ for details - -* ``pm_addr`` - node BMC IP address (hypervisor address in case of virtual - environment) - -* ``pm_user``, ``pm_password`` - node BMC credentials - -Some fields are optional if you're going to use introspection later: - -* ``mac`` - list of MAC addresses, optional for bare metal - -* ``cpu`` - number of CPU's in system - -* ``arch`` - CPU architecture (common values are ``i386`` and ``x86_64``) - -* ``memory`` - memory size in MiB - -* ``disk`` - hard driver size in GiB - -For example:: - - { - "nodes": [ - { - "pm_type":"pxe_ipmitool", - "mac":[ - "fa:16:3e:2a:0e:36" - ], - "cpu":"2", - "memory":"4096", - "disk":"40", - "arch":"x86_64", - "pm_user":"admin", - "pm_password":"password", - "pm_addr":"10.0.0.8" - }, - { - "pm_type":"pxe_ipmitool", - "mac":[ - "fa:16:3e:da:39:c9" - ], - "cpu":"2", - "memory":"4096", - "disk":"40", - "arch":"x86_64", - "pm_user":"admin", - "pm_password":"password", - "pm_addr":"10.0.0.15" - }, - { - "pm_type":"pxe_ipmitool", - "mac":[ - "fa:16:3e:51:9b:68" - ], - "cpu":"2", - "memory":"4096", - "disk":"40", - "arch":"x86_64", - "pm_user":"admin", - "pm_password":"password", - "pm_addr":"10.0.0.16" - } - ] - } - -Ironic Drivers --------------- - -Ironic drivers provide various level of support for different hardware. -The most up-to-date information about Ironic drivers is at -http://docs.openstack.org/developer/ironic/deploy/drivers.html, but note that -this page always targets Ironic git master, not the release we use. - -There are 2 generic drivers: - -* ``pxe_ipmitool`` driver uses `ipmitool`_ utility to manage a bare metal - node, and supports fast variaty of hardware. - -* ``pxe_ssh`` is a special driver for testing Ironic in the virtual - environment. This driver connects to the hypervisor to conduct management - operations on virtual nodes. In case of this driver, ``pm_addr`` is a - hypervisor address, ``pm_user`` is a SSH user name for accessing hypervisor, - ``pm_password`` is a private SSH key for accessing hypervisor. Note that - private key must not be encrypted. - -Ironic also provides specific drivers for some types of hardware: - -* ``pxe_ilo`` targets HP Proliant Gen 8 and Gen 9 systems, and is recommended - for these systems instead of ``pxe_ipmitool``. Please refer to the `current - iLO driver documentation`_ or `detailed iLO documentation for Kilo version`_. - -* ``pxe_drac`` targets DELL 11G and newer systems, and is recommended for these - systems instead of ``pxe_ipmitool``. - -There are also 2 testing drivers: - -* ``fake_pxe`` provides stubs instead of real power and management operations. - When using this driver, you have to conduct power on and off operations, - and set the current boot device, yourself. - -* ``fake`` provides stubs for every operation, so that Ironic does not touch - hardware at all. - -.. _ipmitool: http://sourceforge.net/projects/ipmitool/ -.. _current iLO driver documentation: http://docs.openstack.org/developer/ironic/drivers/ilo.html -.. _detailed iLO documentation for Kilo version: https://wiki.openstack.org/wiki/Ironic/Drivers/iLODrivers/Kilo diff --git a/doc/source/environments/environments.rst b/doc/source/environments/environments.rst deleted file mode 100644 index dd26c35c7..000000000 --- a/doc/source/environments/environments.rst +++ /dev/null @@ -1,10 +0,0 @@ -Environment Setup -================= - -RDO-Manager can be used in baremetal as well as in virtual environments. This -section contains instructions on how to setup your environments properly. - -.. toctree:: - - Virtual Environment - Baremetal Environment diff --git a/doc/source/environments/virtual.rst b/doc/source/environments/virtual.rst deleted file mode 100644 index 4f222681e..000000000 --- a/doc/source/environments/virtual.rst +++ /dev/null @@ -1,305 +0,0 @@ -Virtual Environment -=================== - -RDO-Manager can be used in a virtual environment using virtual machines instead -of actual baremetal. However, one baremetal machine is still -needed to act as the host for the virtual machines. - - -Minimum System Requirements ---------------------------- -By default, this setup creates 3 virtual machines: - -* 1 Undercloud -* 1 Overcloud Controller -* 1 Overcloud Compute - -Each virtual machine must consist of at least 4 GB of memory and 40 GB of disk -space [#]_. - -.. note:: - The virtual machine disk files are thinly provisioned and will not take up - the full 40GB initially. - -The baremetal machine must meet the following minimum system requirements: - -* Virtualization hardware extenstions enabled (nested KVM is **not** supported) -* 1 quad core CPU -* 12 GB free memory -* 120 GB disk space - -.. - - - For minimal **HA (high availability)** deployment you need at least 3 Overcloud - Controllers and 2 Overcloud Computes which increases the minimum system - requirements up to: - - * 24 GB free memory - * 240 GB disk space. - -RDO-Manager is supporting only the following operating systems: - -* RHEL 7.1 x86_64 or -* CentOS 7 x86_64 - - -.. _preparing_virtual_environment: - -Preparing the Virtual Environment (Automated) ---------------------------------------------- - -#. Install RHEL 7.1 Server x86_64 or CentOS 7 x86_64 on your host machine. - - .. only:: external - - .. admonition:: RHEL Portal Registration - :class: portal - - Register the host machine using Subscription Management.:: - - sudo subscription-manager register --username="[your username]" --password="[your password]" - # Find this with `subscription-manager list --available` - sudo subscription-manager attach --pool="[pool id]" - # Verify repositories are available - sudo subscription-manager repos --list - # Enable repositories needed - sudo subscription-manager repos --enable=rhel-7-server-rpms \ - --enable=rhel-7-server-optional-rpms --enable=rhel-7-server-extras-rpms \ - --enable=rhel-7-server-openstack-6.0-rpms - - .. admonition:: RHEL Satellite Registration - :class: satellite - - To register the host machine to a Satellite, the following repos must - be synchronized on the Satellite:: - - rhel-7-server-rpms - rhel-7-server-optional-rpms - rhel-7-server-extras-rpms - rhel-7-server-openstack-6.0-rpms - - - See the `Red Hat Satellite User Guide`_ for how to configure the system to - register with a Satellite server. It is suggested to use an activation - key that automatically enables the above repos for registered systems. - - -#. Make sure sshd service is installed and running. - - -#. The user performing all of the installation steps on the virt host needs to - have sudo enabled. You can use an existing user or use the following commands - to create a new user called stack with password-less sudo enabled. Do not run - the rest of the steps in this guide as root. - - * Example commands to create a user:: - - sudo useradd stack - sudo passwd stack # specify a password - echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack - sudo chmod 0440 /etc/sudoers.d/stack - - -#. Make sure you are logged in as the non-root user you intend to use. - - * Example commands to log in as the non-root user:: - - su - stack - - -#. Enable needed repositories: - - .. only:: internal - - .. admonition:: RHEL - :class: rhel - - Enable rhos-release:: - - sudo rpm -ivh http://rhos-release.virt.bos.redhat.com/repos/rhos-release/rhos-release-latest.noarch.rpm - - # Enable either poodles or puddles: - # To enable poodles: - sudo rhos-release 7-director -d - # To enable puddles: - sudo rhos-release 7-director - - # We need openwsman-python from the optional repo - sudo yum install -y yum-utils - sudo yum-config-manager --enable rhelosp-rhel-7-server-opt - - .. note:: - If testing RDO as opposed to RHOS, you need to enable some extra - repositories: - - :: - - # Enable RDO Kilo - sudo yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm - - # Enable RDO-Manager Trunk - sudo curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo - - The above RDO-Manager Trunk repo is updated after a successful CI run. The following repo can be used instead if the newest packages are needed before a CI run has passed. - - :: - - sudo curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current/delorean-rdo-management.repo - - -#. Install instack-undercloud:: - - sudo yum install -y instack-undercloud - -#. The virt setup automatically sets up a vm for the Undercloud installed with - the same base OS as the host. See the Note below to choose a different - OS.: - - .. note:: - To setup the undercloud vm with a base OS different from the host, - set the ``$NODE_DIST`` environment variable prior to running - ``instack-virt-setup``: - - .. admonition:: CentOS - :class: centos - - :: - - export NODE_DIST=centos7 - - .. admonition:: RHEL - :class: rhel - - :: - - export NODE_DIST=rhel7 - - -#. Run the script to setup your virtual environment: - - .. note:: - - By default, VMs will be created with 1 vCPU and 4096 MiB RAM. To adjust - those values:: - - export NODE_CPU=4 - export NODE_MEM=16384 - - .. only:: internal - - .. admonition:: RHEL - :class: rhel - - Download the RHEL 7.1 cloud image or copy it over from a different - location, and define the needed environment variables for RHEL 7.1 prior - to running ``instack-virt-setup``:: - - IMAGE=http://download.devel.redhat.com/brewroot/packages/rhel-guest-image/7.1/20150224.0/images/rhel-guest-image-7.1-20150224.0.x86_64.qcow2 - curl -O $IMAGE - export DIB_LOCAL_IMAGE=`basename $IMAGE` - export DIB_YUM_REPO_CONF="/etc/yum.repos.d/rhos-release-7-director-rhel-7.1.repo /etc/yum.repos.d/rhos-release-7-rhel-7.1.repo" - - - .. only:: external - - .. admonition:: RHEL - :class: rhel - - Download the RHEL 7.1 cloud image or copy it over from a different - location, for example: https://access.redhat.com/downloads/content/69/ver=/rhel---7/7.1/x86_64/product-downloads, - and define the needed environment variables for RHEL 7.1 prior to - running ``instack-virt-setup``:: - - export DIB_LOCAL_IMAGE=rhel-guest-image-7.1-20150224.0.x86_64.qcow2 - - .. admonition:: RHEL Portal Registration - :class: portal - - To register the Undercloud vm to the Red Hat Portal define the following - variables:: - - export REG_METHOD=portal - export REG_USER="[your username]" - export REG_PASSWORD="[your password]" - # Find this with `sudo subscription-manager list --available` - export REG_POOL_ID="[pool id]" - export REG_REPOS="rhel-7-server-rpms rhel-7-server-extras-rpms rhel-ha-for-rhel-7-server-rpms \ - rhel-7-server-optional-rpms rhel-7-server-openstack-6.0-rpms" - - .. admonition:: RHEL Satellite Registration - :class: satellite - - To register the Undercloud vm to a Satellite define the following - variables. Only using an activation key is supported when registering - to Satellite, username/password is not supported for security reasons. - The activation key must enable the repos shown:: - - export REG_METHOD=satellite - # REG_SAT_URL should be in the format of: - # http:// - export REG_SAT_URL="[satellite url]" - export REG_ORG="[satellite org]" - # Activation key must enable these repos: - # rhel-7-server-rpms - # rhel-7-server-optional-rpms - # rhel-7-server-extras-rpms - # rhel-7-server-openstack-6.0-rpms - export REG_ACTIVATION_KEY="[activation key]" - - - .. admonition:: Ceph - :class: ceph - - To use Ceph you will need at least one additional virtual machine to be - provisioned as a Ceph OSD; set the ``NODE_COUNT`` variable to 3, from a - default of 2, so that the overcloud will have exactly one more:: - - export NODE_COUNT=3 - - .. note:: - The ``TESTENV_ARGS`` environment variable can be used to customize the - virtual environment configuration. For example, it could be used to - enable additional networks as follows:: - - export TESTENV_ARGS="--baremetal-bridge-names 'brbm brbm1 brbm2'" - - :: - - instack-virt-setup - - If the script encounters problems, see - :doc:`../troubleshooting/troubleshooting-virt-setup`. - -When the script has completed successfully it will output the IP address of the -instack vm that has now been installed with a base OS. - -Running ``sudo virsh list --all`` [#]_ will show you now have one virtual machine called -*instack* and 2 called *baremetal[0-1]*. - -You can ssh to the instack vm as the root user:: - - ssh root@ - -The vm contains a ``stack`` user to be used for installing the undercloud. You -can ``su - stack`` to switch to the stack user account. - -Continue with :doc:`../installation/installing`. - -.. rubric:: Footnotes - -.. [#] Note that some default partitioning scheme will most likely not provide - enough space to the partition containing the default path for libvirt image - storage (/var/lib/libvirt/images). The easiest fix is to customize the - partition layout at the time of install to provide at least 200 GB of space for - that path. - -.. [#] The libvirt virtual machines have been defined under the system - instance (qemu:///system). The user account executing these instructions - gets added to the libvirtd group which grants passwordless access to - the system instance. It does however require logging into a new shell (or - desktop environment session if wanting to use virt-manager) before this - change will be fully applied. To avoid having to re-login, you can use - ``sudo virsh``. - -.. _Red Hat Satellite User Guide: https://access.redhat.com/documentation/en-US/Red_Hat_Satellite/ diff --git a/doc/source/index.rst b/doc/source/index.rst deleted file mode 100644 index 34b495f3d..000000000 --- a/doc/source/index.rst +++ /dev/null @@ -1,69 +0,0 @@ -Welcome to RDO-Manager documentation -==================================== - -On these sites we are going to explain what `RDO-Manager `_ is and guide you how to use it to successfuly deploy and -manage `RDO `_ (OpenStack packaged for Fedora, Centos and -RHEL distributions). - -Contents: - -.. toctree:: - :maxdepth: 2 - - Introduction - Environment Setup - Undercloud Installation - Basic Deployment (CLI) - Basic Deployment (GUI) - Advanced Deployment - Post Deployment - Troubleshooting - How to Contribute - - -Documentation Conventions -========================= - -Some steps in the following instructions only apply to certain environments, -such as deployments to real baremetal and deployments using RHEL. These -steps are marked as follows: - -.. admonition:: RHEL - :class: rhel - - Step that should only be run when using RHEL - -.. admonition:: Portal Registration - :class: portal - - Step that should only be run when using Portal Registration - -.. admonition:: Satellite Registration - :class: satellite - - Step that should only be run when using Satellite Registration - -.. admonition:: CentOS - :class: centos - - Step that should only be run when using CentOS - - -.. admonition:: Baremetal - :class: baremetal - - Step that should only be run when deploying to baremetal - -.. admonition:: Virtual - :class: virtual - - Step that should only be run when deploying to virtual machines - -.. admonition:: Ceph - :class: ceph - - Step that should only be run when deploying Ceph for use by the Overcloud - -Any such steps should *not* be run if the target environment does not match -the section marking. diff --git a/doc/source/installation/accessing_gui.rst b/doc/source/installation/accessing_gui.rst deleted file mode 100644 index 74be706b2..000000000 --- a/doc/source/installation/accessing_gui.rst +++ /dev/null @@ -1,30 +0,0 @@ -Accessing the GUI -================= - -Part of the Undercloud installation is also Tuskar-UI which you can use to drive -the deployment. It runs on the instack virtual machine on ``http://localhost/dashboard`` - - -Example of how to access Tuskar-UI: ------------------------------------ - -Considering that Tuskar-UI runs in a instack VM and virt host is a remote host -machine, to access the UI in the browser, follow these steps: - -#. On host machine create ssh tunnel from instack vm to virt host:: - - ssh -g -N -L 8080:127.0.0.1:80 root@ - -#. On instack VM edit ``/etc/openstack-dashboard/local_settings`` and add virt host ``hostname`` to ``ALLOWED_HOSTS`` array - -#. Restart Apache:: - - systemctl restart httpd - -#. Allow port ``8080`` on host machine:: - - sudo iptables -I INPUT -p tcp -m tcp --dport 8080 -j ACCEPT - -#. Navigate to ``http://:8080/dashboard`` in the browser - -When logging into the dashboard the default user and password are found in the ``/root/stackrc`` file on the instack virtual machine, ``OS_USERNAME`` and ``OS_PASSWORD``. diff --git a/doc/source/installation/installation.rst b/doc/source/installation/installation.rst deleted file mode 100644 index 9df28317c..000000000 --- a/doc/source/installation/installation.rst +++ /dev/null @@ -1,10 +0,0 @@ -Undercloud Installation -======================= - -This section contains instructions on how to install the undercloud and how to -update components after installation. - -.. toctree:: - - Installing the Undercloud - Updating Undercloud Components diff --git a/doc/source/installation/installing.rst b/doc/source/installation/installing.rst deleted file mode 100644 index cd1ccf0f4..000000000 --- a/doc/source/installation/installing.rst +++ /dev/null @@ -1,121 +0,0 @@ -Installing the Undercloud -========================== - -#. Log in to your machine (baremetal or VM) where you want to install the - undercloud as a non-root user (such as the stack user):: - - ssh @ - - .. note:: - If you don't have a non-root user created yet, log in as root and create - one with following commands:: - - sudo useradd stack - sudo passwd stack # specify a password - - echo "stack ALL=(root) NOPASSWD:ALL" | sudo tee -a /etc/sudoers.d/stack - sudo chmod 0440 /etc/sudoers.d/stack - - su - stack - - .. note:: - The undercloud is intended to work correctly with SELinux enforcing, and - cannot be installed to a system with SELinux disabled. If SELinux - enforcement must be turned off for some reason, it should instead be set - to permissive. - - .. admonition:: Baremetal - :class: baremetal - - Ensure that there is a FQDN hostname set and that the $HOSTNAME environment - variable matches that value. - - Use ``hostnamectl`` to set a hostname if needed:: - - sudo hostnamectl set-hostname myhost.mydomain - sudo hostnamectl set-hostname --transient myhost.mydomain - - An entry for the system's FQDN hostname is also needed in /etc/hosts. For - example, if the system is named *myhost.mydomain*, /etc/hosts should have - an entry like:: - - 127.0.0.1 myhost.mydomain - - -#. Enable needed repositories: - - .. only:: internal - - .. admonition:: RHEL - :class: rhel - - Enable rhos-release:: - - sudo rpm -ivh http://rhos-release.virt.bos.redhat.com/repos/rhos-release/rhos-release-latest.noarch.rpm - - # Enable either poodles or puddles: - # To enable poodles: - sudo rhos-release 7-director -d - # To enable puddles: - sudo rhos-release 7-director - - .. only:: external - - .. admonition:: RHEL - :class: rhel - - Enable optional repo:: - - sudo yum install -y yum-utils - sudo yum-config-manager --enable rhelosp-rhel-7-server-opt - - - .. note:: - If testing RDO as opposed to RHOS, you need to enable some extra - repositories: - - :: - - # Enable RDO Kilo - sudo yum install -y https://rdoproject.org/repos/openstack-kilo/rdo-release-kilo.rpm - - # Enable RDO-Manager Trunk - sudo curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo - - The above RDO-Manager Trunk repo is updated after a successful CI run. The following repo can be used instead if the newest packages are needed before a CI run has passed. - - :: - - sudo curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current/delorean-rdo-management.repo - - -#. Install the RDO Manager CLI, which will pull in all other necessary packages as dependencies:: - - sudo yum install -y python-rdomanager-oscplugin - - -#. Run the script to install the undercloud: - - .. admonition:: Baremetal - :class: baremetal - - Copy in the sample configuration file and edit it to reflect your environment:: - - cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.conf - - - Install the undercloud:: - - openstack undercloud install - - -Once the install has completed, you should take note of the files ``stackrc`` and -``undercloud-passwords.conf``. You can source ``stackrc`` to interact with the -undercloud via the OpenStack command-line client. ``undercloud-passwords.conf`` -contains the passwords used for each service in the undercloud. These passwords -will be automatically reused if the undercloud is reinstalled on the same system, -so it is not necessary to copy them to ``undercloud.conf``. - -.. note:: - Any passwords set in ``undercloud.conf`` will take precedence over the ones in - ``undercloud-passwords.conf``. diff --git a/doc/source/installation/updating.rst b/doc/source/installation/updating.rst deleted file mode 100644 index 1f1486150..000000000 --- a/doc/source/installation/updating.rst +++ /dev/null @@ -1,19 +0,0 @@ -Updating Undercloud Components ------------------------------- - -You can upgrade any packages that are installed on the undercloud machine. - -#. Update the RDO-Manager Trunk repository:: - - - # Remove old and enable new RDO-Manager Trunk - sudo rm /etc/yum.repos.d/rdo-management-trunk.repo - sudo curl -o /etc/yum.repos.d/rdo-management-trunk.repo http://trunk-mgt.rdoproject.org/centos-kilo/current-passed-ci/delorean-rdo-management.repo - -#. Use yum to update all installed packages:: - - sudo yum update -y - - # You can specify the package names to update as options in the yum update command. - -You do not need to restart any services after you update. diff --git a/doc/source/introduction/architecture.rst b/doc/source/introduction/architecture.rst deleted file mode 100644 index 2afb0d03d..000000000 --- a/doc/source/introduction/architecture.rst +++ /dev/null @@ -1,422 +0,0 @@ -RDO-Manager Architecture -======================== - -This document lists the main components of RDO-Manager, and gives some -description of how each component is used. There are links to additional sources -of information throughout the document. - -.. contents:: - :depth: 3 - :backlinks: none - - -Architecture Overview ---------------------- - -RDO-Manager is a community developed approach and set of tools for deploying, -and managing OpenStack cloud which is built upon the `TripleO -`_ project and its philosophy is -inspired by `SpinalStack `_. - - -TripleO -^^^^^^^ - -TripleO is the friendly name for "OpenStack on OpenStack". It is an official -OpenStack program with the goal of allowing you to deploy and manage a -production cloud onto bare metal hardware using a subset of existing OpenStack -components. - -.. image:: ../_images/overview.png - -With TripleO, you start by creating an "undercloud" (a deployment cloud) -that will contain the necessary OpenStack components to deploy and manage an -"overcloud" (a workload cloud). The overcloud is the deployed solution -and can represent a cloud for any purpose (e.g. production, staging, test, etc). -The operator can choose any OpenStack components they want for the overcloud. - -.. image:: ../_images/logical_view.png - -TripleO leverages several existing core components of OpenStack including Nova, -Neutron, Heat, Glance and Ceilometer to deploy OpenStack on hardware. Nova and -Ironic are used in the undercloud to manage bare metal instances that comprise -the infrastructure for the overcloud. Neutron is utilized to provide a -networking environment in which to deploy the overcloud, machine images are -stored in Glance and Ceilometer collects metrics about your overcloud. - -The following diagram illustrates a physical view of how the undercloud may be -hosted on one physical server and the overcloud distributed across many physical -servers. - -.. image:: ../_images/physical_view.png - - -SpinalStack's Inspiration -^^^^^^^^^^^^^^^^^^^^^^^^^ - -Some key aspects of SpinalStack workflow have been incorporated into -RDO-Manager, providing options to perform introspection, benchmarking and role -matching of your hardware prior to deploying OpenStack. - -Hardware introspection features enable you to collect data about the properties -of your hardware prior to deployment, such that specific classes of hardware may -be matched to specific roles (e.g a special hardware configuration for Compute, -or Storage roles). There is also the option to enable performance benchmarking -during this phase, such that outliers which do not match the expected -performance profile may be excluded from the deployment. - -RDO-Manager also configures servers in a similar way to SpinalStack, using -stable community puppet implementations, applied in a series of passes, such -that granular control and validation of the deployment is possible - - -Benefits --------- - -Using RDO-Manager's combination of OpenStack components, and their APIs, as the -infrastructure to deploy and operate OpenStack itself delivers several benefits: - -* RDO-Manager's APIs are the OpenStack APIs. They're well maintained, well - documented, and come with client libraries and command line tools. Users who - invest time in learning about RDO-Manager's APIs are also learning about - OpenStack itself, and users who are already familiar with OpenStack will find - a great deal in RDO-Manager that they already understand. -* Using the OpenStack components allows more rapid feature development of - RDO-Manager than might otherwise be the case; RDO-Manager automatically - inherits all the new features which are added to Glance, Heat etc., even when - the developer of the new feature didn't explicitly have TripleO and - RDO-Manager in mind. -* The same applies to bug fixes and security updates. When OpenStack developers - fix bugs in the common components, those fixes are inherited by RDO-Manager. -* Users' can invest time in integrating their own scripts and utilities with - RDO-Manager's APIs with some confidence. Those APIs are cooperatively - maintained and developed by the OpenStack community. They're not at risk of - being suddenly changed or retired by a single controlling vendor. -* For developers, tight integration with the OpenStack APIs provides a solid - architecture, which has gone through extensive community review. - -It should be noted that not everything in RDO-Manager is a reused OpenStack -element. The Tuskar API, for example (which lets users design the workload cloud -that they want to deploy), is found in RDO-Manager but not, so far at least, in -a typical Openstack instance. The Tuskar API is described in more detail below. - - - -Deployment Workflow Overview ----------------------------- - -#. Environment Preparation - - * Prepare your environment (baremetal or virtual) - * Install undercloud - - -#. Undercloud Data Preparation - - * Create images to establish the overcloud - * Register hardware nodes with undercloud - * Introspect hardware - * Create flavors (node profiles) - - -#. Deployment Planning - - * Configure overcloud roles - - * Assign flavor (node profile to match desired hardware specs) - * Assign image (provisioning image) - * Size the role (how many instances to deploy) - - * Configure service parameters - * Create a Heat template describing the overcloud (auto-generated from above) - - -#. Deployment - - * Use Heat to deploy your template - * Heat will use Nova to identify and reserve the appropriate nodes - * Nova will use Ironic to startup nodes and install the correct images - - -#. Per-node Setup - - * When each node of the overcloud starts it will gather its configuration - metadata from Heat Template configuration files - * Hiera files are distributed across all nodes and Heat applies puppet - manifests to configure the services on the nodes - * Puppet runs in multiple steps, so that after each step there can be test - triggered to check progress of the deployment and allow easier debugging. - - -#. Overcloud Initialization - - * Services on nodes of the overcloud are registered with Keystone - - -Deployment Workflow Detail --------------------------- - -Environment Preparation -^^^^^^^^^^^^^^^^^^^^^^^ - -In the first place, you need to check that your environment is ready. -RDO-Manager can deploy OpenStack into baremetal as well as virtual environments. -You need to make sure that your environment satisfies minimum requirements for -given environment type and that networking is correctly set up. - -Next step is to install the undercloud. We install undercloud using `Instack -`_'s script and it calls -puppet scripts in the background. Upstream TripleO developers also use the -developer-based steps known as `devtest `_. - - -Undercloud Data Preparation -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Images -"""""" - -Before deploying the overcloud, you must first download or build images which -will be installed on each of the nodes of the overcloud. TripleO uses -`diskimage-builder `_ for -building these so called "Golden Images". The diskimage-builder tool takes a -base image e.g. `CentOS 7 `_ and then layers additional software via -configuration scripts (called elements) on top of that. The final result is a -qcow2 formatted image with software installed but not configured. - -While the diskimage-builder repository provides operating-system specific -elements, ones specific to OpenStack, e.g. nova-api, are found in -`tripleo-image-elements `_. -You can add different elements to an image to provide specific applications and -services. Once all the images required to deploy the overcloud are built, they -are stored in Glance running on the undercloud. - - -Nodes -""""" - -Deploying the overcloud requires suitable hardware. The first task is to -register the available hardware with Ironic, OpenStack's equivalent of a -hypervisor for managing baremetal servers. User can define the hardware -attributes (such as number of CPUs, RAM, disk) manually or he can leave the -fields out and run introspection of the nodes afterwards. - -The sequence of events is pictured below: - -.. image:: ../_images/discovery_diagram.png - -* The user, via the GUI, the command-line tools, or through direct API calls, - registers the power management credentials for a node with Ironic. -* The user then instructs Ironic to reboot the node. -* Because the node is new, and not already fully registered, there are no - specific PXE-boot instructions for it. In that case, the default action is to - boot into a discovery ramdisk -* The discovery ramdisk probes the hardware on the node and gathers facts, - including the number of CPU cores, the local disk size and the amount of RAM. -* The ramdisk posts the facts to the discoverd API. -* All facts are passed and stored in the Ironic database. -* There can be performed advanced role matching via the ''ahc-match'' tool, - which simply adds an additional role categorization to Ironic based on - discovered node facts and specified conditions. - - -Flavors -""""""" - -When users are creating virtual machines (VMs) in an OpenStack cloud, the flavor -that they choose specifies the capacity of the VM which should be created. The -flavor defines the CPU count, the amount of RAM, the amount of disk space etc. -As long as the cloud has enough capacity to grant the user's wish, and the user -hasn't reached their quota limit, the flavor acts as a set of instructions on -exactly what kind of VM to create on the user's behalf. - -In the undercloud, where the machines are usually physical rather than virtual -(or, at least, pre-existing, rather than created on demand), flavors have a -slightly different effect. Essentially, they act as a constraint. Of all of the -discovered hardware, only nodes which match a specified flavor are suitable for -a particular role. This can be used to ensure that the large machines with a -great deal of RAM and CPU capacity are used to run Nova in the overcloud, and -the smaller machines run less demanding services, such as Keystone. - -The version of TripleO included in RDO-Manager is capable of handling flavors in -two different modes. - -The simpler PoC (Proof of Concept) mode is intended to enable new users to -experiment, without worrying about matching hardware profiles. In this mode, -there's one single, global flavor, and any hardware can match it. That -effectively removes flavor matching. Users can use whatever hardware they wish. - -For the second mode, named Scale because it is suited to larger scale overcloud -deployments, flavor matching is in full effect. A node will only be considered -suitable for a given role if the role is associated with a flavor which matches -the capacity of the node. Nodes without a matching flavor are effectively -unusable. - -This second mode allows users to ensure that their different hardware types end -up running their intended role, though requires manual configuration of the role -definitions and role matching via the ahc-match tool (see -:doc:`../advanced_deployment/profile_matching`). - - - -Deployment Planning -^^^^^^^^^^^^^^^^^^^ - -Whole part of planning your deployment is based on concept of **overcloud -roles**. - -Roles are stored in the Tuskar DB, and are used through interaction with the -Tuskar API. A role brings together following things: - -* An image; the software to be installed on a node -* A flavor; the size of node suited to the role -* A size; number of instances which should be deployed having given role -* A set of heat templates; instructions on how to configure the node for its - task - - -In the case of the "Compute" role: - -* the image must contain all the required software to boot an OS and then run - the KVM hypervisor and the Nova compute service -* the flavor (at least for a deployment which isn't a simple proof of concept), - should specify that the machine has enough CPU capacity and RAM to host - several VMs concurrently -* the Heat templates will take care of ensuring that the Nova service is - correctly configured on each node when it first boots. - - -Currently, the roles in RDO-Manager are very prescriptive, and in particular -individual services cannot easily be scaled independently of the Controller role -(other than storage nodes). More flexibility in this regard is planned in a -future release. - -Customizable things during deployment planning are: - -* Number of nodes for each role -* Service parameters configuration -* Network configuration (NIC configuration options, isolated vs. single overlay) -* Ceph rbd backend options and defaults -* Ways to pass in extra configuration, e.g site-specific customizations - - -Deployment -^^^^^^^^^^ - -Deployment to physical servers happens through a collaboration of Tuskar, Heat, -Nova, Neutron, Glance and Ironic. - -To deploy the overcloud Tuskar needs gather all plan information it keeps and -build a Heat templates which describe desired overcloud. - -This template is served to to Heat which will orchestrate the whole deployment -and it will create a stack. Stack is Heat's own term for the applications that -it creates. The overcloud, in Heat terms, is a particularly complex instance of -a stack. - -In order to the stack to be deployed, Heat makes successive calls to Nova, -OpenStack's compute service controller. Nova depends upon Ironic, which, as -described above has acquired an inventory of discovered hardware by this stage -in the process. - -At this point, Nova flavors may act as a constraint, influencing the range of -machines which may be picked for deployment by the Nova scheduler. For each -request to deploy a new node with a specific role, Nova filters the of available -nodes, ensuring that the selected nodes meets the hardware requirements. - -Once the target node has been selected, Ironic does the actual provisioning of -the node, Ironic retrieves the OS image associated with the role from Glance, -causes the node to boot a deployment ramdisk and then, in the typical case, -exports the node's local disk over iSCSI so that the disk can be partitioned and -the have the OS image written onto it by the Ironic Conductor. - -See Ironic's `Understanding Baremetal Deployment `_ -for further details. - - -Per-node Setup -^^^^^^^^^^^^^^ - -TBD - Puppet - - -Overcloud Initialization -^^^^^^^^^^^^^^^^^^^^^^^^ - -After the overcloud has been deployed, the initialization of OpenStack services -(e.g Keystone, Neutron, etc) needs to occur. That is accomplished today by -scripts in the `tripleo-incubator `_ source repository and it uses bits from `os-cloud-config -`_ which contains common code, -the seed initialization logic, and the post heat completion initial -configuration of a cloud. There are three primary steps to completing the -initialization: - -* Initializing Identity Services (Keystone) -* Registering service endpoints (e.g. Glance, Nova) -* Specify a block of IP addresses for overcloud instances (Neutron) - -The first step initializes Keystone for use with normal authentication by -creating the admin and service tenants, the admin and Member roles, the admin -user, configure certificates and finally registers the initial identity -endpoint. The next step registers image, orchestration, network and compute -services running on the default ports on the control plane node. Finally, -Neutron is given a starting IP address, ending IP address, and a CIDR notation -to represent the subnet for the block of floating IP addresses that will be -used within the overcloud. - - - -High Availability (HA) ----------------------- - -RDO-Manager will use Pacemaker to achieve high-availability. - -Reference architecture document: https://github.com/beekhof/osp-ha-deploy - -.. note:: **Current HA solution is being developed by our community.** - - - -Managing the Deployment ------------------------ - -After the overcloud deployment is completed, it will be possible to monitor, -scale it out or perform basic maintenance operations via GUI or CLI. - - -Monitoring the Overcloud -^^^^^^^^^^^^^^^^^^^^^^^^ - -When the overcloud is deployed, Ceilometer can be configured to track a set of -OS metrics for each node (system load, CPU utilization, swap usage etc.) These -metrics are graphed in the GUI, both for individual nodes, and for groups -of nodes, such as the collection of nodes which are all delivering a particular -role. - -Additionally, Ironic exports IPMI metrics for nodes, which can also be stored in -Ceilometer. This enables checks on hardware state such as fan operation/failure -and internal chassis temperatures. - -The metrics which Ceilometer gathers can be queried for Ceilometer's REST API, -or by using the command line client. - -.. Note:: - There are plans to add more operational tooling to the future release. - - -Scaling-out the Overcloud -^^^^^^^^^^^^^^^^^^^^^^^^^ - -The process of scaling out the overcloud by adding new nodes involves these -stages: - -* Making sure you have enough nodes to deploy on (or register new nodes as - described in the "Undercloud Data Preparation" section above). -* Updating the plan managed by Tuskar, as described in the "Deployment Planning" - section above. -* Calling Heat to update the stack which will apply the set of changes to the - overcloud. diff --git a/doc/source/introduction/components.rst b/doc/source/introduction/components.rst deleted file mode 100644 index 83f7253c5..000000000 --- a/doc/source/introduction/components.rst +++ /dev/null @@ -1,461 +0,0 @@ -RDO-Manager Components -====================== - -.. contents:: - :depth: 2 - :backlinks: none - -This section contains a list of components that RDO-Manager uses. The components -are organized in categories, and include a basic description, useful links, and -contribution information. - -.. - [Example Category Name] - ----------------------- - - [Example Component Name] - ^^^^^^^^^^^^^^^^^^^^^^^^ - This is short description what the project is about and how RDO-Manager uses - this project. Three sentences max. - - **How to contribute** - - * Instructions to prepare development environment. Should be mostly pointing to - upstream docs. If upstream docs doesn't exist, please, create one. Add tips - how to test the feature in RDO-Manager + other useful information. - - - **Useful links** - - * Upstream Project: `link <#>`_ - * Bugs: `link <#>`_ - * Blueprints: `link <#>`_ - - -Shared Libraries ----------------- -diskimage-builder -^^^^^^^^^^^^^^^^^ - -diskimage-builder is an image building tool. It is used by -``openstack overcloud image build --all``. - -**How to contribute** - -See the diskimage-builder `README.rst -`_ -for a further explanation of the tooling. Submit your changes via -OpenStack Gerrit (see `OpenStack Developer's Guide -`_). - -**Useful links** - -* Upstream Project Documentation: http://docs.openstack.org/developer/diskimage-builder/ -* Bugs: https://bugs.launchpad.net/diskimage-builder -* Git repository: https://git.openstack.org/cgit/openstack/diskimage-builder/ - - -dib-utils -^^^^^^^^^ - -dib-utils contains tools that are used by diskimage-builder. - -**How to contribute** - -Submit your changes via OpenStack Gerrit (see `OpenStack Developer's Guide -`_). - -**Useful links** - -* Bugs: https://bugs.launchpad.net/diskimage-builder -* Git repository: https://git.openstack.org/cgit/openstack/dib-utils/ - - -os-\*-config -^^^^^^^^^^^^ - -The os-\*-config projects are a suite of tools used to configure instances -deployed via TripleO. They include: - -* os-collect-config -* os-refresh-config -* os-apply-config -* os-net-config - -**How to contribute** - -Each tool uses `tox `_ to manage the -development environment. Submit your changes via OpenStack Gerrit (see -`OpenStack Developer's Guide -`_). - -**Useful links** - -* Bugs: - - * os-collect-config: https://bugs.launchpad.net/os-collect-config - * os-refresh-config: https://bugs.launchpad.net/os-refresh-config - * os-apply-config: https://bugs.launchpad.net/os-apply-config - * os-net-config: https://bugs.launchpad.net/os-net-config - -* Git repositories: - - * os-collect-config: https://git.openstack.org/cgit/openstack/os-collect-config - * os-refresh-config https://git.openstack.org/cgit/openstack/os-refresh-config - * os-apply-config https://git.openstack.org/cgit/openstack/os-apply-config - * os-net-config https://git.openstack.org/cgit/openstack/os-net-config - -tripleo-image-elements -^^^^^^^^^^^^^^^^^^^^^^ - -tripleo-image-elements is a repository of diskimage-builder style elements used -for installing various software components. - -**How to contribute** - -Submit your changes via OpenStack Gerrit (see -`OpenStack Developer's Guide -`_). - -**Useful links** - -* Git repository: https://git.openstack.org/cgit/openstack/tripleo-image-elements - - -Installer ---------- - -instack -^^^^^^^ -instack executes diskimage-builder style elements on the current system. This -enables a current running system to have an element applied in the same way -that diskimage-builder applies the element to an image build. - -instack, in its current form, should be considered low level tooling. It is -meant to be used by higher level scripting that understands what elements and -hook scripts need execution. Using instack requires a rather in depth knowledge -of the elements within diskimage-builder and tripleo-image-elements. - -**How to contribute** - -Submit patches to gerrithub https://review.gerrithub.io/#/q/project:rdo-management/instack - -**Useful links** - -* Bugs: https://bugzilla.redhat.com/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&classification=Community&component=instack - -instack-undercloud -^^^^^^^^^^^^^^^^^^ -instack-undercloud is a TripleO style undercloud installer based around -instack. - -**How to contribute** - -Submit patches to gerrithub https://review.gerrithub.io/#/q/project:rdo-management/instack-undercloud - -**Useful links** - -* Bugs: https://bugzilla.redhat.com/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&classification=Community&component=instack-undercloud - -tripleo-incubator -^^^^^^^^^^^^^^^^^ -tripleo-incubator contains various scripts to aid in deploying a TripleO cloud. - -**How to contribute** - -Submit your changes via OpenStack Gerrit (see -`OpenStack Developer's Guide -`_). - -**Useful links** - -* Documentation: http://docs.openstack.org/developer/tripleo-incubator/index.html -* Git repository: https://git.openstack.org/cgit/openstack/tripleo-incubator - - -Node Management ---------------- -ironic -^^^^^^ - -Ironic project is responsible for provisioning and managing bare metal -instances. - -For testing purposes Ironic can also be used for provisioning and managing -virtual machines which act as bare metal nodes via special driver ``pxe_ssh``. - -**How to contribute** - -Ironic uses `tox `_ to manage the -development environment, see `OpenStack's Documentation -`_, -`Ironic Developer Guidelines -`_ -and `OpenStack Developer's Guide`_ for details. - -**Useful links** - -* Upstream Project: http://docs.openstack.org/developer/ironic/index.html -* Bugs: https://bugs.launchpad.net/ironic -* Blueprints: https://blueprints.launchpad.net/ironic - - * `Specs process `_ - should be followed for suggesting new features. - * Approved Specs: http://specs.openstack.org/openstack/ironic-specs/ - - -ironic inspector (former ironic-discoverd) -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Ironic Inspector project is responsible for inspection of hardware properties -for newly enrolled nodes (see also ironic_). - -Ironic Inspector was called ironic-discoverd previously, and the RPM packages -are still based on the old version, so they are using the old name for now. - -**How to contribute** - -Ironic Inspector uses `tox `_ to manage -the development environment, see `upstream documentation -`_ -for details. - -**Useful links** - -* Upstream Project: https://github.com/openstack/ironic-inspector -* PyPI: https://pypi.python.org/pypi/ironic-inspector - - Also https://pypi.python.org/pypi/ironic-discoverd for the old version which - RDO Manager currently uses. - -* Bugs: https://bugs.launchpad.net/ironic-inspector -* Blueprints: https://blueprints.launchpad.net/ironic-inspector - - -Deployment Planning -------------------- -Tuskar -^^^^^^ -The Tuskar project is responsible for planning of deployments through the use -of two main concepts: Role (unit of functionality, e.g. 'Compute') and Plan. -A given Role is associated with a number of Heat templates and extra -data files and Tuskar allows the user to provide values for a Role's template -attributes. - -Once a Plan is specified in terms of Roles (and any desired -template attributes have been set) Tuskar can assemble and generate the -corresponding Heat deployment files and return these to the caller -(ready to be passed to Heat). - -**How to contribute** - -The Tuskar project uses the usual OpenStack code review process with gerrit -reviews (see links below). Tuskar is a sub-project falling under TripleO -and as such you can use the #tripleo irc channel (freenode) or the weekly -TripleO meeting to bring up issues about Tuskar, as well as the openstack-dev -mailing list of course. - -**Useful links** - -* Upstream Project: https://github.com/openstack/tuskar -* PyPI: https://pypi.python.org/pypi/tuskar -* Bugs: https://bugs.launchpad.net/tuskar -* Blueprints: https://blueprints.launchpad.net/tuskar -* REST API http://specs.openstack.org/openstack/tripleo-specs/specs/juno/tripleo-juno-tuskar-rest-api.html -* Reviews: https://review.openstack.org/#/q/status:open+project:openstack/tuskar,n,z - -Deployment & Orchestration --------------------------- -heat -^^^^ - -Heat is OpenStack's orchestration tool. It reads YAML files describing -the OpenStack deployment's resources (machines, their configurations -etc.) and gets those resources into the desired state, often by -talking to other components (e.g. Nova). - -**How to contribute** - -* Use `devstack with Heat - `_ - to set up a development environment. Submit your changes via - OpenStack Gerrit (see `OpenStack Developer's Guide - `_). - -**Useful links** - -* Upstream Project: https://wiki.openstack.org/wiki/Heat -* Bugs: https://bugs.launchpad.net/heat -* Blueprints: https://blueprints.launchpad.net/heat - -heat-templates -^^^^^^^^^^^^^^ - -The heat-templates repository contains additional image elements for -producing disk images ready to be configured by Puppet via Heat. - -**How to contribute** - -* Use `devtest with Puppet - `_ - to set up a development environment. Submit your changes via - OpenStack Gerrit (see `OpenStack Developer's Guide - `_). - -**Useful links** - -* Upstream Project: https://git.openstack.org/cgit/openstack/heat-templates -* Bugs: https://bugs.launchpad.net/heat-templates -* Blueprints: https://blueprints.launchpad.net/heat-templates - -tripleo-heat-templates -^^^^^^^^^^^^^^^^^^^^^^ - -The tripleo-heat-templates describe the OpenStack deployment in Heat -Orchestration Template YAML files and Puppet manifests. The templates -are processed through Tuskar and materialized into an actual -deployment via Heat. - -**How to contribute** - -* Use `devtest with Puppet - `_ - to set up a development environment. Submit your changes via - OpenStack Gerrit (see `OpenStack Developer's Guide - `_). - -**Useful links** - -* Upstream Project: https://git.openstack.org/cgit/openstack/tripleo-heat-templates -* Bugs: https://bugs.launchpad.net/tripleo -* Blueprints: https://blueprints.launchpad.net/tripleo - -nova -^^^^ -TBD - -puppet-\* -^^^^^^^^^ - -The OpenStack Puppet modules are used to configure the OpenStack -deployment (write configuration, start services etc.). They are used -via the tripleo-heat-templates. - -**How to contribute** - -* Use `devtest with Puppet - `_ - to set up a development environment. Submit your changes via - OpenStack Gerrit (see `OpenStack Developer's Guide - `_). - -**Useful links** - -* Upstream Project: https://wiki.openstack.org/wiki/Puppet - - -tripleo-puppet-elements -^^^^^^^^^^^^^^^^^^^^^^^ - -The tripleo-puppet-elements describe the contents of disk images which -RDO-Manager uses to deploy OpenStack. It's the same kind of elements -as in tripleo-image-elements, but tripleo-puppet-elements are specific -for Puppet-enabled images. - -**How to contribute** - -* Use `devtest with Puppet - `_ - to set up a development environment. Submit your changes via - OpenStack Gerrit (see `OpenStack Developer's Guide`_). - -**Useful links** - -* Upstream Project: https://git.openstack.org/cgit/openstack/tripleo-puppet-elements -* Bugs: https://bugs.launchpad.net/tripleo -* Blueprints: https://blueprints.launchpad.net/tripleo - - -User Interfaces ---------------- -tuskar-ui -^^^^^^^^^ -Tuskar-UI provides a GUI to install and manage OpenStack. It is implemented as -a plugin to Horizon. - -**How to contribute** - -* See `upstream documentation `_ - for instuctions on how to set up a development environment. Submit your - changes via OpenStack Gerrit (see `OpenStack Developer's Guide`_). - -**Useful links** - -* Upstream Project: https://git.openstack.org/cgit/openstack/tuskar-ui -* Documentation: http://tuskar-ui.readthedocs.org -* Bugs: https://bugs.launchpad.net/tuskar-ui -* Blueprints: https://blueprints.launchpad.net/tuskar-ui - -tuskar-ui-extras -^^^^^^^^^^^^^^^^ -Tuskar-UI extras provides GUI enhancements for Tuskar-UI. It is implemented as -a plugin to Horizon. - -**How to contribute** - -* See `upstream documentation `_ - for instuctions on how to set up a development environment. Submit your - changes via `Gerrithub `_. - -**Useful links** - -* Project: https://github.com/rdo-management/tuskar-ui-extras -* Documentation: http://tuskar-ui-extras.readthedocs.org - -python-openstackclient -^^^^^^^^^^^^^^^^^^^^^^ -The python-openstackclient is an upstream CLI tool which can manage multiple -openstack services. It wraps openstack clients like glance, nova, etc. and maps -them under intuitive names like openstack image, compute, etc. - -The main value is that all services can be controlled by a single (openstack) -command with consistent syntax and behaviour. - -**How to contribute** - -* python-openstackclient uses `tox `_ - to manage the development environment, see `upstream documentation - `_ - for details. Submit your changes via OpenStack Gerrit - (see `OpenStack Developer's Guide`_). - -**Useful links** - -* Upstream Project: http://git.openstack.org/cgit/openstack/python-openstackclient -* Bugs: https://bugs.launchpad.net/python-openstackclient -* Blueprints: https://blueprints.launchpad.net/python-openstackclient -* Human interface guide: http://docs.openstack.org/developer/python-openstackclient/humaninterfaceguide.html - -python-rdomanager-oscplugin -^^^^^^^^^^^^^^^^^^^^^^^^^^^ -The python-rdomanager-oscplugin is a CLI tool embedded into -python-openstackclient. It provides functions related to instack -installation and initial configuration like node discovery, overcloud image -building and uploading, etc. - -**How to contribute** - -* python-rdomanager-oscplugin uses `tox `_ - to manage the development environment, see `documentation - `_ - for details. Submit your changes via - `Gerrithub `_. - -**Useful links** - -* Project: https://github.com/rdo-management/python-rdomanager-oscplugin - -.. - - -.. _OpenStack Developer's Guide: http://docs.openstack.org/infra/manual/developers.html diff --git a/doc/source/introduction/introduction.rst b/doc/source/introduction/introduction.rst deleted file mode 100644 index 8029efcee..000000000 --- a/doc/source/introduction/introduction.rst +++ /dev/null @@ -1,45 +0,0 @@ -RDO-Manager Introduction -======================== - -RDO-Manager is an OpenStack Deployment & Management tool for RDO. It is based on -`OpenStack TripleO `_ project and its -philosophy is inspired by `SpinalStack `_. - - -Useful links: - -* `RDO-Manager Home Page `_ - -* `RDO-Manager Repositories `_ - -* `TripleO Documentation `_ - -| - -**Architecture** - -With RDO-Manager, you start by creating an **undercloud** (an actual operator -facing deployment cloud) that will contain the necessary OpenStack components to -deploy and manage an **overcloud** (an actual tenant facing workload cloud). The -overcloud is the deployed solution and can represent a cloud for any purpose -(e.g. production, staging, test, etc). The operator can choose any of available -Overcloud Roles (OpenStack components) they want to deploy to his environment. - -Go to :doc:`architecture` to learn more. - -| - -**Components** - -RDO-Manager is composed of set of official OpenStack components accompanied by -few other open sourced plugins which are increasing RDO-Manager capabilities. - -Go to :doc:`components` to learn more. - - -.. toctree:: - :hidden: - - Architecture - Components diff --git a/doc/source/post_deployment/delete_nodes.rst b/doc/source/post_deployment/delete_nodes.rst deleted file mode 100644 index 3c91e7b45..000000000 --- a/doc/source/post_deployment/delete_nodes.rst +++ /dev/null @@ -1,44 +0,0 @@ -.. _delete_nodes: - -Deleting Overcloud Nodes -======================== - -You can delete specific nodes from an overcloud with command:: - - openstack overcloud node delete --stack $STACK_NAME --plan $PLAN_UUID - -This command updates number of nodes in tuskar plan and then updates heat stack -with updated numbers and list of resource IDs (which represent nodes) to be -deleted. - -.. note:: - If you passed any extra environment files when you created the overcloud (for - instance, in order to configure :doc:`network isolation - <../advanced_deployment/network_isolation>`), you must pass them again here - using the ``-e`` or ``--environment-file`` option to avoid making undesired - changes to the overcloud. - - -.. note:: - Before deleting a compute node please make sure that the node is quiesced, - see :ref:`quiesce_compute`. - -.. note:: - A list of nova instance IDs can be listed with command:: - - nova list - -Deleting nodes without using Tuskar ------------------------------------ - -If the overcloud was :doc:`deployed from heat templates directly -<../advanced_deployment/template_deploy>` then use the ``--templates`` -parameter when deleting nodes:: - - openstack overcloud node delete --stack $STACK_NAME --templates [templates dir] - -If you passed any extra environment files when you created the overcloud (for -instance, in order to configure :doc:`network isolation -<../advanced_deployment/network_isolation>`), you must pass them again here -using the ``-e`` or ``--environment-file`` option to avoid making undesired -changes to the overcloud. diff --git a/doc/source/post_deployment/migration.rst b/doc/source/post_deployment/migration.rst deleted file mode 100644 index 42c9e40ac..000000000 --- a/doc/source/post_deployment/migration.rst +++ /dev/null @@ -1,53 +0,0 @@ -Migrating Workloads from an existing OpenStack cloud -==================================================== - -RDO Manager provides the ability to manage changes over time to a cloud that it -has deployed. However, it cannot automatically take over the management of -existing OpenStack clouds deployed with another installer. Since there can be -no one-size-fits-all procedure for upgrading an existing cloud to use RDO -Manager, it is recommended that a new cloud be deployed with RDO Manager and -any workloads running on an existing cloud be migrated off. - -Migrating User Workloads ------------------------- - -Since the best way of avoiding or handling any downtime associated with moving -an application from one cloud to another is application-dependent, it is -preferable to have end users migrate their own applications at a time and in -the manner of their choosing. This can also help to spread out the network -bandwidth requirements, rather than copying a large number of snapshots in -bulk. - -Ideally applications can be re-created from first principles (an Orchestration -tool such as Heat can help make this repeatable) and any data populated after -the fact. This allows the new VMs to be backed by a copy-on-write disk image -overlaid on the original base image. The alternative is to :doc:`export and -then import <./vm_snapshot>` snapshots of the VM images. This may require -considerably more disk space as each VM's base image becomes its snapshot, -where previously multiple VMs may have shared the same base image. - -Reclaiming Excess Capacity --------------------------- - -As workloads are migrated off the previous cloud, compute node hardware can be -freed up to reallocate to the new cloud. Since there is likely no guarantee as -to the order in which users will migrate, it will be necessary to consolidate -the remaining VMs onto a smaller number of machines as utilization drops. This -can be done by performing live migration within the old cloud. - -Select a compute node to remove from service and follow the procedure for -:doc:`quiesce_compute`. Once this is done, the node can be removed from the old -cloud and the hardware reused, possibly by adding it to the new cloud. - -Adding New Capacity -------------------- - -As utilization of the new cloud increases and hardware becomes available from -the old cloud, additional compute nodes can be added to the new cloud with RDO -Manager. - -First, register and introspect the additional hardware with Ironic just as you -would have done when :doc:`initially deploying -<../basic_deployment/basic_deployment_cli>` the cloud with RDO Manager. Then -:doc:`scale out ` the 'Compute' role in the new overcloud to start -making use of the additional capacity. diff --git a/doc/source/post_deployment/package_update.rst b/doc/source/post_deployment/package_update.rst deleted file mode 100644 index aae38a683..000000000 --- a/doc/source/post_deployment/package_update.rst +++ /dev/null @@ -1,41 +0,0 @@ -Updating Packages on Overcloud Nodes -==================================== - -You can update packages on all overcloud nodes with command:: - - openstack overcloud update stack --plan $PLAN_UUID -i overcloud - -This command updates UpdateIdentifier parameter in the overcloud tuskar plan -and triggers stack update operation. If this parameter is set 'yum update' -command is executed and each node. Because running update on all nodes in -parallel might be unsafe (an update of a package might involve restarting -a service), the command above sets breakpoints on each overcloud node so nodes -are updated one by one. When the update is finished on a node the command -will prompt for removing breakpoint on next one. - -.. note:: - Multiple breakpoints can be removed by specifying list of nodes with a - regular expression. - -.. note:: - Make sure you use `-i` parameter, otherwise update runs on background and - doesn't prompt for removing of breakpoints. - -.. note:: - If the update command is aborted for some reason you can always continue - in the process by re-running same command. - -Updating Packages on Overcloud Nodes Without Using Tuskar ---------------------------------------------------------- - -If the overcloud was :doc:`deployed from heat templates directly -<../advanced_deployment/template_deploy>` then use the ``--templates`` -parameter when updating packages:: - - openstack overcloud update stack --templates [templates dir] -i overcloud - -If you passed any extra environment files when you created the overcloud (for -instance, in order to configure :doc:`network isolation -<../advanced_deployment/network_isolation>`), you must pass them again here -using the ``-e`` or ``--environment-file`` option to avoid making undesired -changes to the overcloud. diff --git a/doc/source/post_deployment/post_deployment.rst b/doc/source/post_deployment/post_deployment.rst deleted file mode 100644 index a577768eb..000000000 --- a/doc/source/post_deployment/post_deployment.rst +++ /dev/null @@ -1,15 +0,0 @@ -Post Deployment -=============== - -In this chapter you will find advanced management of various RDO-Manager areas. - - -.. toctree:: - - Migrating Workloads from an Existing OpenStack Cloud - Scaling Overcloud Roles - Deleting Overcloud Nodes - Quiescing a Compute node - Replacing a Failed Controller Node - Import/Export of VM Snapshots - Updating Packages on Overcloud Nodes diff --git a/doc/source/post_deployment/quiesce_compute.rst b/doc/source/post_deployment/quiesce_compute.rst deleted file mode 100644 index 1f17c8f3e..000000000 --- a/doc/source/post_deployment/quiesce_compute.rst +++ /dev/null @@ -1,83 +0,0 @@ -.. _quiesce_compute: - -Quiescing a Compute Node -======================== - -The process of quiescing a compute node means to migrate workload off the node -so that it can be shut down without affecting the availability of end-users' -VMs. You might want to perform this procedure when rebooting a compute node to -ensure that package updates are applied (e.g. after a kernel update); to -consolidate workload onto a smaller number of machines when scaling down an -overcloud; or when replacing the compute node hardware. - -Setting up Keys ---------------- - -Assuming that the backing files for Nova VMs are not hosted on a shared storage -volume (with all compute nodes having access), the compute nodes will need to -be configured with ssh keys so that the `nova` user on each compute node has -ssh access to the corresponding account on the other compute nodes. - -First, generate an ssh key:: - - ssh-keygen -t rsa -f nova_id_rsa - -Then, on each compute node, run the following script to set up the keys:: - - NOVA_SSH=/var/lib/nova/.ssh - mkdir ${NOVA_SSH} - - cp nova_id_rsa ${NOVA_SSH}/id_rsa - chmod 600 ${NOVA_SSH}/id_rsa - cp nova_id_rsa.pub ${NOVA_SSH}/id_rsa.pub - cp nova_id_rsa.pub ${NOVA_SSH}/authorized_keys - - chown -R nova.nova ${NOVA_SSH} - - # enable login for nova user on compute hosts: - usermod -s /bin/bash nova - - # add ssh keys of overcloud nodes into known hosts: - ssh-keyscan -t rsa `os-apply-config --key hosts --type raw --key-default '' | awk '{print $1}'` >>/etc/ssh/ssh_known_hosts - - -Initiating Migration --------------------- - -First, obtain a list of the current Nova services:: - - source ~stack/overcloudrc # admin credentials for the overcloud - nova service-list - -Disable the `nova-compute` service on the node you wish to quiesce, to prevent -new VMs being scheduled on it:: - - nova service-disable nova-compute - - -Begin the process of migrating VMs off the node:: - - nova host-servers-migrate - -Completing Migration --------------------- - -The current status of the migration process can be retrieved with the command:: - - nova migration-list - -When migration of each VM completes, its state in Nova will change to -`VERIFY_RESIZE`. This gives you an opportunity to confirm that the migration -completed successfully, or to roll it back. To confirm the migration, use the -command:: - - nova resize-confirm - -Finally, once all migrations are complete and confirmed, remove the service -running (but disabled) on the compute node from Nova altogether:: - - nova service-delete - -You are now free to reboot or shut down the node (using the Ironic API), or -even remove it from the overcloud altogether by scaling down the overcloud -deployment, see :ref:`delete_nodes`. diff --git a/doc/source/post_deployment/replace_controller.rst b/doc/source/post_deployment/replace_controller.rst deleted file mode 100644 index f87b759c4..000000000 --- a/doc/source/post_deployment/replace_controller.rst +++ /dev/null @@ -1,105 +0,0 @@ -.. _replace_controller: - -Replacing a Controller Node -=========================== - -Replace Failed Node -------------------- - -First, create a YAML file defining node index to remove. Node index reflects -suffix of instance name in `nova list` output. In this following text -`overcloud-controller-1` node is replaced with `overcloud-controller-3`:: - - $ cat ~/remove.yaml - parameters: -   ControllerRemovalPolicies: -       [{'resource_list': ['1']}] - -Then, re-deploy overcloud including the extra environment file:: - - openstack overcloud deploy --templates --control-scale 3 -e ~/remove.yaml - -The old node will be removed and a new one will be added. -Because some puppet modules don't support nodes replacement, re-deployment -fails and a couple of manual changes are needed to fix controller nodes setup. -Connect to one of remaining controller nodes and delete the failed node -from Pacemaker/Corosync cluster:: - - crm_node -R overcloud-controller-1 --force - -Delete the failed node from RabbitMQ cluster:: - - rabbitmqctl forget_cluster_node rabbit@overcloud-controller-1 - -Delete the failed node from MongoDB:: - - # connect to MongoDB on any of remaining nodes: - mongo --host - # check status of MongoDB cluster: - rs.status() - # remove the failed node: - rs.remove(':27017') - -Update list of nodes in Galera cluster:: - - pcs resource update galera wsrep_cluster_address=gcomm://overcloud-controller-0,overcloud-controller-3,overcloud-controller-2 - -Start Pacemaker/Corosync on the new node:: - - pcs cluster node add overcloud-controller-3 - pcs cluster start overcloud-controller-3 - -Enable keystone service on the new node:: - - copy /etc/keystone from a remaining node to the new node - set admin_bind_host and public_bind_host in /etc/keystone/keystone.conf to node's IP - pcs resource cleanup openstack-keystone-clone overcloud-controller-3 - -Re-deploy overcloud again:: - - openstack overcloud deploy --templates --control-scale 3 - -.. note:: - - If deployment fails with error `Failed to call refresh: Could not restart Service[httpd]` - then try re-deploy again. - - -Completing Update ------------------ - -Delete the failed node from `/etc/corosync/corosync.conf` file and restart -Corosync one by one on each node:: - - systemctl restart corosync - -When re-deployment finishes, connect to one of controller nodes and start -services on the new node:: - - pcs resource cleanup neutron-server-clone - pcs resource cleanup openstack-nova-api-clone - pcs resource cleanup openstack-nova-consoleauth-clone - pcs resource cleanup openstack-heat-engine-clone - pcs resource cleanup openstack-cinder-api-clone - pcs resource cleanup openstack-glance-registry-clone - pcs resource cleanup httpd-clone - - -Replacing Bootstrap Node ------------------------- - -If node with index 0 is being replaced it's necessary to edit heat templates -and change bootstrap node index before starting replacement. Open -`overcloud-without-mergepy.yaml` file in root directory of heat templates and -change lines:: - - bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]} - bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]} - -to:: - - bootstrap_nodeid: {get_attr: [Controller, resource.1.hostname]} - bootstrap_nodeid_ip: {get_attr: [Controller, resource.1.ip_address]} - -Tuskar doesn't support template editing so it's possible to do this change only -if overcloud is deployed with :doc:`templates directly <../advanced_deployment/template_deploy>`. diff --git a/doc/source/post_deployment/scale_roles.rst b/doc/source/post_deployment/scale_roles.rst deleted file mode 100644 index 7094562a9..000000000 --- a/doc/source/post_deployment/scale_roles.rst +++ /dev/null @@ -1,42 +0,0 @@ -Scaling overcloud roles -======================= -If you want to increase or decrease resource capacity of a running overcloud, -you can start more servers of a selected role or delete some servers if -capacity should be decreased. First update the Overcloud plan with a new -number of nodes of the role:: - - openstack management plan set $PLAN_UUID -S Compute-1=5 - -.. note:: - The role is specified including the role version. Both role names - and role versions can be listed with command:: - - openstack role list - - -And then re-deploy the Overcloud with the updated plan:: - - openstack overcloud deploy --plan $PLAN_UUID - -.. note:: - Scaling out assumes that newly added nodes has already been - registered in Ironic. - -.. note:: - When scaling down random servers of specified role will be deleted, how to - delete specific nodes is decribed in :ref:`delete_nodes`. - -Scaling overcloud roles without using Tuskar --------------------------------------------- - -If the overcloud was :doc:`deployed from heat templates directly -<../advanced_deployment/template_deploy>` then you can just re-deploy the -overcloud with ``--templates`` and ``---scale`` parameters:: - - openstack overcloud deploy --templates [templates dir] --compute-scale 5 - -If you passed any extra environment files when you created the overcloud (for -instance, in order to configure :doc:`network isolation -<../advanced_deployment/network_isolation>`), you must pass them again here -using the ``-e`` or ``--environment-file`` option to avoid making undesired -changes to the overcloud. diff --git a/doc/source/post_deployment/vm_snapshot.rst b/doc/source/post_deployment/vm_snapshot.rst deleted file mode 100644 index 25355f270..000000000 --- a/doc/source/post_deployment/vm_snapshot.rst +++ /dev/null @@ -1,26 +0,0 @@ -Import/Export of VM Snapshots -============================= - -Create a snapshot of a running server -------------------------------------- -Create a new image by taking a snapshot of a running server and download the -image. - - :: - - nova image-create instance_name image_name - glance image-download image_name --file exported_vm.qcow2 - -Import an image into Overcloud and launch an instance ------------------------------------------------------ -Upload the exported image into glance in Overcloud and launch a new instance. - - :: - - glance image-create --name imported_image --file exported_vm.qcow2 --disk-format qcow2 --container-format bare - nova boot --poll --key-name default --flavor m1.demo --image imported_image --nic net-id=net_id imported - -.. note:: - **Warning**: disadvantage of using glance image for export/import VMs is - that each VM disk has to be copied in and out into glance in source and - target clouds. Also by making snapshot qcow layering system is lost. diff --git a/doc/source/troubleshooting/troubleshooting-image-build.rst b/doc/source/troubleshooting/troubleshooting-image-build.rst deleted file mode 100644 index 9a0d2a21c..000000000 --- a/doc/source/troubleshooting/troubleshooting-image-build.rst +++ /dev/null @@ -1,16 +0,0 @@ -Troubleshooting Image Build -=========================== - -Images fail to build --------------------- - -More space needed -^^^^^^^^^^^^^^^^^ - -Images are built in tmpfs by default, to speed up the builds. In case -your machine doesn't have enough free RAM, the image building step -can fail with a message like "At least 174MB more space needed on -the / filesystem". If freeing up more RAM isn't a possibility, -images can be built on disk by exporting an environment variable:: - - export DIB_NO_TMPFS=1 diff --git a/doc/source/troubleshooting/troubleshooting-nodes.rst b/doc/source/troubleshooting/troubleshooting-nodes.rst deleted file mode 100644 index c2957a9ad..000000000 --- a/doc/source/troubleshooting/troubleshooting-nodes.rst +++ /dev/null @@ -1,91 +0,0 @@ -Troubleshooting Node Management Failures -======================================== - -Where Are the Logs? -------------------- - -Some logs are stored in *journald*, but most are stored as text files in -``/var/log``. Ironic and ironic-discoverd logs are stored in journald. Note -that Ironic has 2 units: ``openstack-ironic-api`` and -``openstack-ironic-conductor``. Similarly, ironic-discoverd has -``openstack-ironic-discoverd`` and ``openstack-ironic-discoverd-dnsmasq``. So -for example to get all ironic-discoverd logs use:: - - sudo journalctl -u openstack-ironic-discoverd -u openstack-ironic-discoverd-dnsmasq - -If something fails during the discovery ramdisk run, ironic-discoverd -stores the ramdisk logs in ``/var/log/ironic-discoverd/ramdisk/`` as -gz-compressed tar files. File names contain date, time and IPMI address of the -node if it was detected (only for bare metal). - -.. _node_registration_problems: - -Node Registration Problems --------------------------- - -Any problems with node data registered into Ironic can be fixed using the -Ironic CLI. - -For example, a wrong MAC can be fixed in two steps: - -* Find out the assigned port UUID by running - :: - - ironic node-port-list - -* Update the MAC address by running - :: - - ironic port-update replace address= - -A Wrong IPMI address can be fixed with the following command:: - - ironic node-update replace driver_info/ipmi_address= - - -.. _introspection_problems: - -Hardware Introspection Problems --------------------------------- - -Discovery hangs and times out -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -ironic-discoverd times out discovery process after some time (defaulting to 1 -hour) if it never gets response from the discovery ramdisk. This can be -a sign of a bug in the discovery ramdisk, but usually it happens due to -environment misconfiguration, particularly BIOS boot settings. Please refer to -`ironic-discoverd troubleshooting documentation`_ for information on how to -detect and fix such problems. - -Refusing to introspect node with provision state "available" -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -If you're running discovery directly using ironic-discoverd CLI (or in case of -bugs in our scripts), a node can be in the "AVAILABLE" state, which is meant for -deployment, not for discovery. You should advance node to the "MANAGEABLE" state -before discovery and move it back before deployment. -Please refer to `upstream node states documentation -`_ for information -on how to fix it. - -How can discovery be stopped? -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Currently ironic-discoverd does not provide means for stopping discovery. The -recommended path is to wait until it times out. Changing ``timeout`` setting -in ``/etc/ironic-discoverd/discoverd.conf`` may be used to reduce this timeout -from 1 hour (which usually too much, especially on virtual environment). - -If you do need to stop discovery **for all nodes** right now, do the -following for each node:: - - ironic node-set-power-state UUID off - -then remove ironic-discoverd cache and restart it:: - - rm /var/lib/ironic-discoverd/discoverd.sqlite - sudo systemctl restart openstack-ironic-discoverd - - -.. _ironic-discoverd troubleshooting documentation: https://github.com/openstack/ironic-inspector#troubleshooting diff --git a/doc/source/troubleshooting/troubleshooting-overcloud.rst b/doc/source/troubleshooting/troubleshooting-overcloud.rst deleted file mode 100644 index 0bc3a9858..000000000 --- a/doc/source/troubleshooting/troubleshooting-overcloud.rst +++ /dev/null @@ -1,288 +0,0 @@ -Troubleshooting a Failed Overcloud Deployment -============================================= - -If an Overcloud deployment has failed, the OpenStack clients and service log -files can be used to troubleshoot the failed deployment. The following commands -are all run on the Undercloud and assume a stackrc file has been sourced. - -Identifying Failed Component -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -In most cases, Heat will show the failed overcloud stack when a deployment -has failed:: - - $ heat stack-list - - +--------------------------------------+------------+--------------------+----------------------+ - | id | stack_name | stack_status | creation_time | - +--------------------------------------+------------+--------------------+----------------------+ - | 7e88af95-535c-4a55-b78d-2c3d9850d854 | overcloud | CREATE_FAILED | 2015-04-06T17:57:16Z | - +--------------------------------------+------------+--------------------+----------------------+ - -Occassionally, Heat is not even able to create the the stack, so the ``heat -stack-list`` output will be empty. If this is the case, observe the message -that was printed to the terminal when ``instack-deploy-overcloud`` or ``heat -stack-create`` was run. - -Next, there are a few layers on which the deployment can fail: - -* Orchestration (Heat and Nova services) -* Bare metal provisioning (Ironic service) -* Post-deploy configuration (Puppet) - -As Ironic service is in the middle layer, you can use its shell to guess the -failed layer. Issue ``ironic node-list`` command to see all registered nodes -and their current status, you will see something like:: - - +--------------------------------------+------+---------------+-------------+-----------------+-------------+ - | UUID | Name | Instance UUID | Power State | Provision State | Maintenance | - +--------------------------------------+------+---------------+-------------+-----------------+-------------+ - | f1e26112-5fbd-4fc4-9612-ecce7a1d86aa | None | None | power off | available | False | - | f0b8c105-f1d7-4059-a9a3-b050c3340340 | None | None | power off | available | False | - +--------------------------------------+------+---------------+-------------+-----------------+-------------+ - -Pay close attention to **Provision State** and **Maintenance** columns -in the resulting table. - -* If the command shows empty table or less nodes that you expect, or - **Maintenance** is ``True``, or **Provision State** is ``manageable``, - there was a problem during node enrolling and introspection. - Please go back to these steps. - - For example, **Maintenance** goes to ``True`` automatically, if wrong power - credentials are provided. - -* If **Provision State** is ``available`` then the problem occured before - bare metal deployment has even started. Proceed with `Debugging Using Heat`_. - -* If **Provision State** is ``active`` and **Power State** is ``power on``, - then bare metal deployment has finished successfully, and problem happened - during the post-deployment configuration step. Again, refer to `Debugging - Using Heat`_. - -* If **Provision State** is ``wait call-back``, then bare metal deployment is - not finished for this node yet. You may want to wait until the status - changes. - -* If **Provision State** is ``error`` or ``deploy failed``, then bare metal - deployment has failed for this node. Issue - :: - - ironic node-show - - and look for **last_error** field. It will contain error description. - - If the error message is vague, you can use logs to clarify it:: - - sudo journalctl -u openstack-ironic-conductor -u openstack-ironic-api - - If you see wait timeout error, and node **Power State** is ``power on``, - then try to connect to the virtual console of the failed machine. Use - ``virt-manager`` tool for virtual machines and vendor-specific virtual - console (e.g. iDRAC for DELL) for bare metal machines. - -Debugging Using Heat -~~~~~~~~~~~~~~~~~~~~ - -* Identifying the failed Heat resource - - List all the stack resources to see which one failed. - - :: - - $ heat resource-list overcloud - - +-----------------------------------+-----------------------------------------------+---------------------------------------------------+-----------------+----------------------+ - | resource_name | physical_resource_id | resource_type | resource_status | updated_time | - +-----------------------------------+-----------------------------------------------+---------------------------------------------------+-----------------+----------------------+ - | BlockStorage | 9e40a1ee-96d3-4920-868d-683d3788e129 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | BlockStorageAllNodesDeployment | 2c453f6b-7378-44c8-a0ad-57de57d9c57f | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | BlockStorageNodesPostDeployment | | OS::TripleO::BlockStoragePostDeployment | INIT_COMPLETE | 2015-04-06T21:15:20Z | - | CephClusterConfig | 1684e7a3-0e42-44fe-9db4-7543b742fbfc | OS::TripleO::CephClusterConfig::SoftwareConfig | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | CephStorage | 48b3460c-bf9a-4663-99fc-2b4fa01b8dc1 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | CephStorageAllNodesDeployment | 76beb3a9-8327-4d2e-a206-efe12f1613fb | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | CephStorageCephDeployment | af8fb02a-5bc6-468c-8fac-fbe7e5b2c689 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | CephStorageNodesPostDeployment | | OS::TripleO::CephStoragePostDeployment | INIT_COMPLETE | 2015-04-06T21:15:20Z | - | Compute | e5e6ec84-197f-4bf6-b8ac-eb11fe494cdf | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ComputeAllNodesDeployment | e6d44fbf-9683-4765-acbb-4a3d31c8fd48 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerNodesPostDeployment | e551e472-f2db-4468-b586-0374678d71a3 | OS::TripleO::ControllerPostDeployment | CREATE_FAILED | 2015-04-06T21:15:20Z | - | ComputeCephDeployment | 673608d5-70d7-453a-ac78-7987bc2c0158 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ComputeNodesPostDeployment | 1078e3e3-9f6f-48b9-8961-a30f44098856 | OS::TripleO::ComputePostDeployment | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControlVirtualIP | 6402b396-84aa-4cf6-9849-305205755604 | OS::Neutron::Port | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | Controller | ffc45352-9708-486d-81ac-3b60efa8e8b8 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerAllNodesDeployment | f73c6e33-3dd2-46f1-9eca-0d2981a4a986 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerBootstrapNodeConfig | 01ce5b6a-794a-4828-bad9-49d5fbfd55bf | OS::TripleO::BootstrapNode::SoftwareConfig | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerBootstrapNodeDeployment | c963d53d-879b-4a41-a10a-9000ac9f02a1 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerCephDeployment | 2d4281df-31ea-4433-820d-984a6dca6eb1 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerClusterConfig | 719c0d30-a4b8-4f77-9ab6-b3c9759abeb3 | OS::Heat::StructuredConfig | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerClusterDeployment | d929aa40-1b73-429e-81d5-aaf966fa6756 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ControllerSwiftDeployment | cf28f9fe-025d-4eed-b3e5-3a5284a2aa60 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | HeatAuthEncryptionKey | overcloud-HeatAuthEncryptionKey-5uw6wo7kavnq | OS::Heat::RandomString | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | MysqlClusterUniquePart | overcloud-MysqlClusterUniquePart-vazyj2s4n2o5 | OS::Heat::RandomString | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | MysqlRootPassword | overcloud-MysqlRootPassword-nek2iky7zfdm | OS::Heat::RandomString | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ObjectStorage | 47327c98-533e-4cc2-b1f3-d8d0eedba822 | OS::Heat::ResourceGroup | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ObjectStorageAllNodesDeployment | 7bb691aa-fa93-4f10-833e-6edeccc61408 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ObjectStorageNodesPostDeployment | d4d16f39-384a-4d6a-9719-1dd9b2d4ff09 | OS::TripleO::ObjectStoragePostDeployment | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | ObjectStorageSwiftDeployment | afc87385-8b40-4097-b529-2a5bc81c94c8 | OS::Heat::StructuredDeployments | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | PublicVirtualIP | 4dd92878-8f29-49d8-9d3d-bc0cd44d26a9 | OS::Neutron::Port | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | RabbitCookie | overcloud-RabbitCookie-uthzbos3l66v | OS::Heat::RandomString | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | SwiftDevicesAndProxyConfig | e2141170-bb77-4509-b8bd-58447b2cd15f | OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - | allNodesConfig | cbd42692-fffa-4527-a519-bd4014ebf0fb | OS::TripleO::AllNodes::SoftwareConfig | CREATE_COMPLETE | 2015-04-06T21:15:20Z | - +-----------------------------------+-----------------------------------------------+---------------------------------------------------+-----------------+----------------------+ - - In this example, notice how the **ControllerNodesPostDeployment** resource - has failed. The **\*PostDeployment** resources are the configuration that is - applied to the deployed Overcloud nodes. When these resources have failed it - indicates that something went wrong during the Overcloud node configuration, - perhaps when Puppet was run. - -* Show the failed resource - - :: - - $ heat resource-show overcloud ControllerNodesPostDeployment - - +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - | Property | Value | - +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - | attributes | {} | - | description | | - | links | http://192.0.2.1:8004/v1/cea2a0c78d2447bc9a0f7caa35c9224c/stacks/overcloud/ec3e3251-f949-4df9-92be-dbd37c6992a1/resources/ControllerNodesPostDeployment (self) | - | | http://192.0.2.1:8004/v1/cea2a0c78d2447bc9a0f7caa35c9224c/stacks/overcloud/ec3e3251-f949-4df9-92be-dbd37c6992a1 (stack) | - | | http://192.0.2.1:8004/v1/cea2a0c78d2447bc9a0f7caa35c9224c/stacks/overcloud-ControllerNodesPostDeployment-6kcqm5zuymqu/e551e472-f2db-4468-b586-0374678d71a3 (nested) | - | logical_resource_id | ControllerNodesPostDeployment | - | physical_resource_id | e551e472-f2db-4468-b586-0374678d71a3 | - | required_by | BlockStorageNodesPostDeployment | - | | CephStorageNodesPostDeployment | - | resource_name | ControllerNodesPostDeployment | - | resource_status | CREATE_FAILED | - | resource_status_reason | ResourceUnknownStatus: Resource failed - Unknown status FAILED due to "None" | - | resource_type | OS::TripleO::ControllerPostDeployment | - | updated_time | 2015-04-06T21:15:20Z | - +------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+ - - The ``resource-show`` doesn't always show a clear reason why the resource - failed. In these cases, logging into the Overcloud node is required to - further troubleshoot the issue. - -* Logging into Overcloud nodes - - Use the nova client to see the IP addresses of the Overcloud nodes. - - :: - - $ nova list - - +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------+ - | ID | Name | Status | Task State | Power State | Networks | - +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------+ - | 18014b02-b143-4ca2-aeb9-5553bec93cff | ov-4tvbtgpv7w-0-soqocxy2w4fr-NovaCompute-nlrxd3lgmmlt | ACTIVE | - | Running | ctlplane=192.0.2.13 | - | 96a57a46-1e48-4c66-adaa-342ee4e98972 | ov-rf4hby6sblk-0-iso3zlqmyzfe-Controller-xm2imjkzalhi | ACTIVE | - | Running | ctlplane=192.0.2.14 | - +--------------------------------------+-------------------------------------------------------+--------+------------+-------------+---------------------+ - - Login as the ``heat-admin`` user to one of the deployed nodes. In this - example, since the **ControllerNodesPostDeployment** resource failed, login - to the controller node. The ``heat-admin`` user has sudo access. - - :: - - $ ssh heat-admin@192.0.2.14 - - While logged in to the controller node, examine the log for the - ``os-collect-config`` log for a possible reason for the failure. - - :: - - $ sudo journalctl -u os-collect-config - -* Failed Nova Server ResourceGroup Deployments - - In some cases, Nova fails deploying the node in entirety. This situation - would be indicated by a failed ``OS::Heat::ResourceGroup`` for one of the - Overcloud role types such as Control or Compute. - - Use nova to see the failure in this case. - - :: - - $ nova list - $ nova show - - The most common error shown will reference the error message ``No valid host - was found``. Refer to `No Valid Host Found Error`_ below. - - In other cases, look at the following log files for further troubleshooting:: - - /var/log/nova/* - /var/log/heat/* - /var/log/ironic/* - -* Using SOS - - SOS is a set of tools that gathers information about system hardware and - configuration. The information can then be used for diagnostic purposes and - debugging. SOS is commonly used to help support technicians and developers. - - SOS is useful on both the undercloud and overcloud. Install the ``sos`` - package and then generate a report:: - - $ sudo sosreport --all-logs - -No Valid Host Found Error -~~~~~~~~~~~~~~~~~~~~~~~~~ - -Sometimes ``/var/log/nova/nova-conductor.log`` contains the following error:: - - NoValidHost: No valid host was found. There are not enough hosts available. - -"No valid host was found" means that the Nova Scheduler could not find a bare -metal node suitable for booting the new instance. - -This in turn usually means some mismatch between resources that Nova expects -to find and resources that Ironic advertised to Nova. - -A few things should be checked in this case: - -#. Introspection should have succeeded for you before, or you should have - entered the required Ironic node properties manually. - For each node in ``ironic node-list`` use - :: - - ironic node-show - - and make sure that ``properties`` JSON field has valid values for keys - ``cpus``, ``cpu_arch``, ``memory_mb`` and ``local_gb``. - -#. Nova flavor that you are using does not exceed the Ironic node properties - above for a required number of nodes. Use - :: - - nova flavor-show - - to compare. - -#. Make sure that enough nodes are in ``available`` state according to - ``ironic node-list``. Nodes in ``manageable`` state usually mean they - have failed introspection. - -#. Make sure nodes you're going to deploy to are not in maintenance mode. - Again, use ``ironic node-list`` to check. A node automatically going to - maintenance mode usually means wrong power credentials for this node. Check - them and then remove maintenance mode:: - - ironic node-set-maintenance off - -#. If you're using advanced profile matching with multiple flavors, make sure - you have enough nodes corresponding to each flavor/profile. Watch - ``capabilities`` key in ``properties`` field for ``ironic node-show``. - It should contain e.g. ``profile:compute``. - -#. It takes some time for nodes information to propagate from Ironic to Nova - after introspection. Our tooling usually accounts for it, but if you did - some steps manually, there may be a period of time when nodes are not - available to Nova yet. Check that - :: - - nova hypervisor-stats - - correctly shows total amount of resources in your system. diff --git a/doc/source/troubleshooting/troubleshooting-tripleo-heat-templates.rst b/doc/source/troubleshooting/troubleshooting-tripleo-heat-templates.rst deleted file mode 100644 index 27a2087f6..000000000 --- a/doc/source/troubleshooting/troubleshooting-tripleo-heat-templates.rst +++ /dev/null @@ -1,5 +0,0 @@ -Debugging TripleO Heat Templates -================================ - -Please follow this flow: -http://hardysteven.blogspot.co.uk/2015/04/debugging-tripleo-heat-templates.html diff --git a/doc/source/troubleshooting/troubleshooting-virt-setup.rst b/doc/source/troubleshooting/troubleshooting-virt-setup.rst deleted file mode 100644 index 9e5f972a7..000000000 --- a/doc/source/troubleshooting/troubleshooting-virt-setup.rst +++ /dev/null @@ -1,22 +0,0 @@ -Troubleshooting instack-virt-setup Failures -=========================================== - -* Due to a `bug in libvirt`_, it is possible for instack-virt-setup to fail - with an error such as the following:: - - libvirt: QEMU Driver error : unsupported configuration: This QEMU doesn't support virtio scsi controller - Traceback (most recent call last): - File "/usr/libexec/openstack-tripleo/configure-vm", line 133, in - main() - File "/usr/libexec/openstack-tripleo/configure-vm", line 129, in main - a = conn.defineXML(libvirt_template) - File "/usr/lib64/python2.7/site-packages/libvirt.py", line 3445, in defineXML - if ret is None:raise libvirtError('virDomainDefineXML() failed', conn=self) - libvirt.libvirtError: unsupported configuration: This QEMU doesn't support virtio scsi controller - - The workaround is to do delete the libvirt capabilities cache and restart the service:: - - rm -Rf /var/cache/libvirt/qemu/capabilities/ - systemctl restart libvirtd - -.. _bug in libvirt: https://bugzilla.redhat.com/show_bug.cgi?id=1195882 diff --git a/doc/source/troubleshooting/troubleshooting.rst b/doc/source/troubleshooting/troubleshooting.rst deleted file mode 100644 index 045752745..000000000 --- a/doc/source/troubleshooting/troubleshooting.rst +++ /dev/null @@ -1,14 +0,0 @@ -Troubleshooting -=============== - -At this chapter you will find answers for frequently asked questions and -help with troubleshooting when using RDO-Manager. - - -.. toctree:: - - Virtual Setup Problems - Image Building Problems - Node Management Problems - Failed Overcloud Deployment - Tripleo Heat Templates diff --git a/tox.ini b/tox.ini index bde92a0ab..1fa5a48a0 100644 --- a/tox.ini +++ b/tox.ini @@ -13,10 +13,6 @@ commands = python setup.py testr --slowest --testr-args='{posargs}' [testenv:venv] commands = {posargs} -[testenv:docs] -commands = sphinx-build -a -t external doc/source/ build/sphinx/html - sphinx-build -a -t internal doc/source/ build/sphinx/internal-html - [testenv:pep8] whitelist_externals = bash # We fail pretty horribly on bashate right now