Track3Agenda: ex-ganeti-webmgr.htm

File ex-ganeti-webmgr.htm, 38.6 KB (added by b.candler, 5 years ago)
Line 
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2<html xmlns="http://www.w3.org/1999/xhtml">
3<head>
4  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5  <meta http-equiv="Content-Style-Type" content="text/css" />
6  <meta name="generator" content="pandoc" />
7  <title>Ganeti web manager</title>
8  <style type="text/css">code{white-space: pre;}</style>
9  <link href="data:text/css,%2F%2A%0A%20%20%20%20Buttondown%0A%20%20%20%20A%20Markdown%2FMultiMarkdown%2FPandoc%20HTML%20output%20CSS%20stylesheet%0A%20%20%20%20Author%3A%20Ryan%20Gray%0A%20%20%20%20Date%3A%2015%20Feb%202011%0A%20%20%20%20Revised%3A%2021%20Feb%202012%0A%20%20%20%0A%20%20%20%20General%20style%20is%20clean%2C%20with%20minimal%20re%2Ddefinition%20of%20the%20defaults%20or%20%0A%20%20%20%20overrides%20of%20user%20font%20settings%2E%20The%20body%20text%20and%20header%20styles%20are%20%0A%20%20%20%20left%20alone%20except%20title%2C%20author%20and%20date%20classes%20are%20centered%2E%20A%20Pandoc%20TOC%20%0A%20%20%20%20is%20not%20printed%2C%20URLs%20are%20printed%20after%20hyperlinks%20in%20parentheses%2E%20%0A%20%20%20%20Block%20quotes%20are%20italicized%2E%20Tables%20are%20lightly%20styled%20with%20lines%20above%20%0A%20%20%20%20and%20below%20the%20table%20and%20below%20the%20header%20with%20a%20boldface%20header%2E%20Code%20%0A%20%20%20%20blocks%20are%20line%20wrapped%2E%20%0A%20%0A%20%20%20%20All%20elements%20that%20Pandoc%20and%20MultiMarkdown%20use%20should%20be%20listed%20here%2C%20even%20%0A%20%20%20%20if%20the%20style%20is%20empty%20so%20you%20can%20easily%20add%20styling%20to%20anything%2E%0A%20%20%20%20%0A%20%20%20%20There%20are%20some%20elements%20in%20here%20for%20HTML5%20output%20of%20Pandoc%2C%20but%20I%20have%20not%20%0A%20%20%20%20gotten%20around%20to%20testing%20that%20yet%2E%0A%2A%2F%0A%20%0A%2F%2A%20NOTES%3A%0A%20%0A%20%20%20%20Stuff%20tried%20and%20failed%3A%0A%20%20%20%20%0A%20%20%20%20It%20seems%20that%20specifying%20font%2Dfamily%3Aserif%20in%20Safari%20will%20always%20use%20%0A%20%20%20%20Times%20New%20Roman%20rather%20than%20the%20user%27s%20preferences%20setting%2E%0A%20%20%20%20%0A%20%20%20%20Making%20the%20font%20size%20different%20or%20a%20fixed%20value%20for%20print%20in%20case%20the%20screen%20%0A%20%20%20%20font%20size%20is%20making%20the%20print%20font%20too%20big%3A%20Making%20font%2Dsize%20different%20for%20%0A%20%20%20%20print%20than%20for%20screen%20causes%20horizontal%20lines%20to%20disappear%20in%20math%20when%20using%20%0A%20%20%20%20MathJax%20under%20Safari%2E%0A%2A%2F%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Front%20Matter%20%2D%2D%2D%2D%20%2A%2F%0A%20%0A%2F%2A%20Pandoc%20header%20DIV%2E%20Contains%20%2Etitle%2C%20%2Eauthor%20and%20%2Edate%2E%20Comes%20before%20div%23TOC%2E%20%0A%20%20%20Only%20appears%20if%20one%20of%20those%20three%20are%20in%20the%20document%2E%0A%2A%2F%0A%20%0Adiv%23header%2C%20header%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Put%20border%20on%20bottom%2E%20Separates%20it%20from%20TOC%20or%20body%20that%20comes%20after%20it%2E%20%2A%2F%0A%20%20%20%20border%2Dbottom%3A%201px%20solid%20%23aaa%3B%0A%20%20%20%20margin%2Dbottom%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0A%2Etitle%20%2F%2A%20Pandoc%20title%20header%20%28h1%2Etitle%29%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20%7D%0A%20%0A%2Eauthor%2C%20%2Edate%20%2F%2A%20Pandoc%20author%28s%29%20and%20date%20headers%20%28h2%2Eauthor%20and%20h3%2Edate%29%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20Pandoc%20table%20of%20contents%20DIV%20when%20using%20the%20%2D%2Dtoc%20option%2E%0A%20%20%20NOTE%3A%20this%20doesn%27t%20support%20Pandoc%27s%20%2D%2Did%2Dprefix%20option%20for%20%23TOC%20and%20%23header%2E%20%0A%20%20%20Probably%20would%20need%20to%20use%20div%5Bid%24%3D%27TOC%27%5D%20and%20div%5Bid%24%3D%27header%27%5D%20as%20selectors%2E%0A%2A%2F%0A%20%0Adiv%23TOC%2C%20nav%23TOC%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Put%20border%20on%20bottom%20to%20separate%20it%20from%20body%2E%20%2A%2F%0A%20%20%20%20border%2Dbottom%3A%201px%20solid%20%23aaa%3B%0A%20%20%20%20margin%2Dbottom%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20div%23TOC%2C%20nav%23TOC%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20Don%27t%20display%20TOC%20in%20print%20%2A%2F%0A%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Headers%20and%20sections%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Ah1%2C%20h2%2C%20h3%2C%20h4%2C%20h5%2C%20h6%0A%7B%0A%20%20%20%20font%2Dfamily%3A%20%22Helvetica%20Neue%22%2C%20Helvetica%2C%20%22Liberation%20Sans%22%2C%20Calibri%2C%20Arial%2C%20sans%2Dserif%3B%20%2F%2A%20Sans%2Dserif%20headers%20%2A%2F%0A%20%0A%20%20%20%20%2F%2A%20font%2Dfamily%3A%20%22Liberation%20Serif%22%2C%20%22Georgia%22%2C%20%22Times%20New%20Roman%22%2C%20serif%3B%20%2F%2A%20Serif%20headers%20%2A%2F%0A%20%0A%20%20%20%20page%2Dbreak%2Dafter%3A%20avoid%3B%20%2F%2A%20Firefox%2C%20Chrome%2C%20and%20Safari%20do%20not%20support%20the%20property%20value%20%22avoid%22%20%2A%2F%0A%7D%0A%20%0A%2F%2A%20Pandoc%20with%20%2D%2Dsection%2Ddivs%20option%20%2A%2F%0A%20%0Adiv%20div%2C%20section%20section%20%2F%2A%20Nested%20sections%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20margin%2Dleft%3A%202em%3B%20%2F%2A%20This%20will%20increasingly%20indent%20nested%20header%20sections%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Ap%20%7B%7D%0A%20%0Ablockquote%0A%20%20%20%20%7B%20%0A%20%20%20%20font%2Dstyle%3A%20italic%3B%0A%20%20%20%20%7D%0A%20%0Ali%20%2F%2A%20All%20list%20items%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Ali%20%3E%20p%20%2F%2A%20Loosely%20spaced%20list%20item%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20margin%2Dtop%3A%201em%3B%20%2F%2A%20IE%3A%20lack%20of%20space%20above%20a%20%3Cli%3E%20when%20the%20item%20is%20inside%20a%20%3Cp%3E%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Aul%20%2F%2A%20Whole%20unordered%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Aul%20li%20%2F%2A%20Unordered%20list%20item%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Aol%20%2F%2A%20Whole%20ordered%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Aol%20li%20%2F%2A%20Ordered%20list%20item%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Ahr%20%7B%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Some%20span%20elements%20%2D%2D%2D%20%2A%2F%0A%20%0Asub%20%2F%2A%20Subscripts%2E%20Pandoc%3A%20H%7E2%7EO%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Asup%20%2F%2A%20Superscripts%2E%20Pandoc%3A%20The%202%5End%5E%20try%2E%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Aem%20%2F%2A%20Emphasis%2E%20Markdown%3A%20%2Aemphasis%2A%20or%20%5Femphasis%5F%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Aem%20%3E%20em%20%2F%2A%20Emphasis%20within%20emphasis%3A%20%2AThis%20is%20all%20%2Aemphasized%2A%20except%20that%2A%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20font%2Dstyle%3A%20normal%3B%0A%20%20%20%20%7D%0A%20%0Astrong%20%2F%2A%20Markdown%20%2A%2Astrong%2A%2A%20or%20%5F%5Fstrong%5F%5F%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Links%20%28anchors%29%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aa%20%2F%2A%20All%20links%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Keep%20links%20clean%2E%20On%20screen%2C%20they%20are%20colored%3B%20in%20print%2C%20they%20do%20nothing%20anyway%2E%20%2A%2F%0A%20%20%20%20text%2Ddecoration%3A%20none%3B%0A%20%20%20%20%7D%0A%20%0A%40media%20screen%0A%20%20%20%20%7B%0A%20%20%20%20a%3Ahover%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20On%20hover%2C%20we%20indicate%20a%20bit%20more%20that%20it%20is%20a%20link%2E%20%2A%2F%0A%20%20%20%20%20%20%20%20text%2Ddecoration%3A%20underline%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20a%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20In%20print%2C%20a%20colored%20link%20is%20useless%2C%20so%20un%2Dstyle%20it%2E%20%2A%2F%0A%20%20%20%20%20%20%20%20color%3A%20black%3B%0A%20%20%20%20%20%20%20%20background%3A%20transparent%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%0A%20%20%20%20a%5Bhref%5E%3D%22http%3A%2F%2F%22%5D%3Aafter%2C%20a%5Bhref%5E%3D%22https%3A%2F%2F%22%5D%3Aafter%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20However%2C%20links%20that%20go%20somewhere%20else%2C%20might%20be%20useful%20to%20the%20reader%2C%0A%20%20%20%20%20%20%20%20%20%20%20so%20for%20http%20and%20https%20links%2C%20print%20the%20URL%20after%20what%20was%20the%20link%20%0A%20%20%20%20%20%20%20%20%20%20%20text%20in%20parens%0A%20%20%20%20%20%20%20%20%2A%2F%0A%20%20%20%20%20%20%20%20content%3A%20%22%20%28%22%20attr%28href%29%20%22%29%20%22%3B%0A%20%20%20%20%20%20%20%20font%2Dsize%3A%2090%25%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Images%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aimg%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Let%20it%20be%20inline%20left%2Fright%20where%20it%20wants%20to%20be%2C%20but%20verticality%20make%20%0A%20%20%20%20%20%20%20it%20in%20the%20middle%20to%20look%20nicer%2C%20but%20opinions%20differ%2C%20and%20if%20in%20a%20multi%2Dline%20%0A%20%20%20%20%20%20%20paragraph%2C%20it%20might%20not%20be%20so%20great%2E%20%0A%20%20%20%20%2A%2F%0A%20%20%20%20vertical%2Dalign%3A%20middle%3B%0A%20%20%20%20%7D%0A%20%0Adiv%2Efigure%20%2F%2A%20Pandoc%20figure%2Dstyle%20image%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Center%20the%20image%20and%20caption%20%2A%2F%0A%20%20%20%20margin%2Dleft%3A%20auto%3B%0A%20%20%20%20margin%2Dright%3A%20auto%3B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20font%2Dstyle%3A%20italic%3B%0A%20%20%20%20%7D%0A%20%0Ap%2Ecaption%20%2F%2A%20Pandoc%20figure%2Dstyle%20caption%20within%20div%2Efigure%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Inherits%20div%2Efigure%20props%20by%20default%20%2A%2F%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Code%20blocks%20and%20spans%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Apre%2C%20code%20%0A%20%20%20%20%7B%0A%20%20%20%20background%2Dcolor%3A%20%23fdf7ee%3B%0A%20%20%20%20%2F%2A%20BEGIN%20word%20wrap%20%2A%2F%0A%20%20%20%20%2F%2A%20Need%20all%20the%20following%20to%20word%20wrap%20instead%20of%20scroll%20box%20%2A%2F%0A%20%20%20%20%2F%2A%20This%20will%20override%20the%20overflow%3Aauto%20if%20present%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20pre%2Dwrap%3B%20%2F%2A%20css%2D3%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20%2Dmoz%2Dpre%2Dwrap%20%21important%3B%20%2F%2A%20Mozilla%2C%20since%201999%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20%2Dpre%2Dwrap%3B%20%2F%2A%20Opera%204%2D6%20%2A%2F%0A%20%20%20%20white%2Dspace%3A%20%2Do%2Dpre%2Dwrap%3B%20%2F%2A%20Opera%207%20%2A%2F%0A%20%20%20%20word%2Dwrap%3A%20break%2Dword%3B%20%2F%2A%20Internet%20Explorer%205%2E5%2B%20%2A%2F%0A%20%20%20%20%2F%2A%20END%20word%20wrap%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Apre%20%2F%2A%20Code%20blocks%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Distinguish%20pre%20blocks%20from%20other%20text%20by%20more%20than%20the%20font%20with%20a%20background%20tint%2E%20%2A%2F%0A%20%20%20%20padding%3A%200%2E5em%3B%20%2F%2A%20Since%20we%20have%20a%20background%20color%20%2A%2F%0A%20%20%20%20border%2Dradius%3A%205px%3B%20%2F%2A%20Softens%20it%20%2A%2F%0A%20%20%20%20%2F%2A%20Give%20it%20a%20some%20definition%20%2A%2F%0A%20%20%20%20border%3A%201px%20solid%20%23aaa%3B%0A%20%20%20%20%2F%2A%20Set%20it%20off%20left%20and%20right%2C%20seems%20to%20look%20a%20bit%20nicer%20when%20we%20have%20a%20background%20%2A%2F%0A%20%20%20%20margin%2Dleft%3A%20%200%2E5em%3B%0A%20%20%20%20margin%2Dright%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0A%40media%20screen%0A%20%20%20%20%7B%0A%20%20%20%20pre%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20On%20screen%2C%20use%20an%20auto%20scroll%20box%20for%20long%20lines%2C%20unless%20word%2Dwrap%20is%20enabled%20%2A%2F%0A%20%20%20%20%20%20%20%20white%2Dspace%3A%20pre%3B%0A%20%20%20%20%20%20%20%20overflow%3A%20auto%3B%0A%20%20%20%20%20%20%20%20%2F%2A%20Dotted%20looks%20better%20on%20screen%20and%20solid%20seems%20to%20print%20better%2E%20%2A%2F%0A%20%20%20%20%20%20%20%20border%3A%201px%20dotted%20%23777%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%0Acode%20%2F%2A%20All%20inline%20code%20spans%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Ap%20%3E%20code%2C%20li%20%3E%20code%20%2F%2A%20Code%20spans%20in%20paragraphs%20and%20tight%20lists%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Pad%20a%20little%20from%20adjacent%20text%20%2A%2F%0A%20%20%20%20padding%2Dleft%3A%20%202px%3B%0A%20%20%20%20padding%2Dright%3A%202px%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0Ali%20%3E%20p%20code%20%2F%2A%20Code%20span%20in%20a%20loose%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20We%20have%20room%20for%20some%20more%20background%20color%20above%20and%20below%20%2A%2F%0A%20%20%20%20padding%3A%202px%3B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Math%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aspan%2Emath%20%2F%2A%20Pandoc%20inline%20math%20default%20and%20%2D%2Djsmath%20inline%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%2F%2A%20Tried%20font%2Dstyle%3Aitalic%20here%2C%20and%20it%20messed%20up%20MathJax%20rendering%20in%20some%20browsers%2E%20Maybe%20don%27t%20mess%20with%20at%20all%2E%20%2A%2F%0A%20%20%20%20%7D%0A%20%20%20%20%0Adiv%2Emath%20%2F%2A%20Pandoc%20%2D%2Djsmath%20display%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Aspan%2ELaTeX%20%2F%2A%20Pandoc%20%2D%2Dlatexmathml%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%20%0A%20%0Aeq%20%2F%2A%20Pandoc%20%2D%2Dgladtex%20math%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%20%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Tables%20%2D%2D%2D%2D%20%2A%2F%0A%20%0A%2F%2A%20%20A%20clean%20textbook%2Dlike%20style%20with%20horizontal%20lines%20above%20and%20below%20and%20under%20%0A%20%20%20%20the%20header%2E%20Rows%20highlight%20on%20hover%20to%20help%20scanning%20the%20table%20on%20screen%2E%0A%2A%2F%0A%20%0Atable%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dcollapse%3A%20collapse%3B%0A%20%20%20%20border%2Dspacing%3A%200%3B%20%2F%2A%20IE%206%20%2A%2F%0A%20%0A%20%20%20%20border%2Dbottom%3A%202pt%20solid%20%23000%3B%0A%20%20%20%20border%2Dtop%3A%202pt%20solid%20%23000%3B%20%2F%2A%20The%20caption%20on%20top%20will%20not%20have%20a%20bottom%2Dborder%20%2A%2F%0A%20%0A%20%20%20%20%2F%2A%20Center%20%2A%2F%0A%20%20%20%20margin%2Dleft%3A%20auto%3B%0A%20%20%20%20margin%2Dright%3A%20auto%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0Athead%20%2F%2A%20Entire%20table%20header%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dbottom%3A%201pt%20solid%20%23000%3B%0A%20%20%20%20background%2Dcolor%3A%20%23eee%3B%20%2F%2A%20Does%20this%20BG%20print%20well%3F%20%2A%2F%0A%20%20%20%20%7D%0A%20%0Atr%2Eheader%20%2F%2A%20Each%20header%20row%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%20%0A%20%0Atbody%20%2F%2A%20Entire%20table%20%20body%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20Table%20body%20rows%20%2A%2F%0A%20%0Atr%20%20%7B%0A%20%20%20%20%7D%0Atr%2Eodd%3Ahover%2C%20tr%2Eeven%3Ahover%20%2F%2A%20Use%20%2Eodd%20and%20%2Eeven%20classes%20to%20avoid%20styling%20rows%20in%20other%20tables%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20background%2Dcolor%3A%20%23eee%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%2F%2A%20Odd%20and%20even%20rows%20%2A%2F%0Atr%2Eodd%20%7B%7D%0Atr%2Eeven%20%7B%7D%0A%20%0Atd%2C%20th%20%2F%2A%20Table%20cells%20and%20table%20header%20cells%20%2A%2F%0A%20%20%20%20%7B%20%0A%20%20%20%20vertical%2Dalign%3A%20top%3B%20%2F%2A%20Word%20%2A%2F%0A%20%20%20%20vertical%2Dalign%3A%20baseline%3B%20%2F%2A%20Others%20%2A%2F%0A%20%20%20%20padding%2Dleft%3A%20%20%200%2E5em%3B%0A%20%20%20%20padding%2Dright%3A%20%200%2E5em%3B%0A%20%20%20%20padding%2Dtop%3A%20%20%20%200%2E2em%3B%0A%20%20%20%20padding%2Dbottom%3A%200%2E2em%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0A%2F%2A%20Removes%20padding%20on%20left%20and%20right%20of%20table%20for%20a%20tight%20look%2E%20Good%20if%20thead%20has%20no%20background%20color%2A%2F%0A%2F%2A%0Atr%20td%3Alast%2Dchild%2C%20tr%20th%3Alast%2Dchild%0A%20%20%20%20%7B%0A%20%20%20%20padding%2Dright%3A%200%3B%0A%20%20%20%20%7D%0Atr%20td%3Afirst%2Dchild%2C%20tr%20th%3Afirst%2Dchild%20%0A%20%20%20%20%7B%0A%20%20%20%20padding%2Dleft%3A%200%3B%0A%20%20%20%20%7D%0A%2A%2F%0A%20%0Ath%20%2F%2A%20Table%20header%20cells%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20font%2Dweight%3A%20bold%3B%20%0A%20%20%20%20%7D%0A%20%0Atfoot%20%2F%2A%20Table%20footer%20%28what%20appears%20here%20if%20caption%20is%20on%20top%3F%29%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0Acaption%20%2F%2A%20This%20is%20for%20a%20table%20caption%20tag%2C%20not%20the%20p%2Ecaption%20Pandoc%20uses%20in%20a%20div%2Efigure%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20caption%2Dside%3A%20top%3B%0A%20%20%20%20border%3A%20none%3B%0A%20%20%20%20font%2Dsize%3A%200%2E9em%3B%0A%20%20%20%20font%2Dstyle%3A%20italic%3B%0A%20%20%20%20text%2Dalign%3A%20center%3B%0A%20%20%20%20margin%2Dbottom%3A%200%2E3em%3B%20%2F%2A%20Good%20for%20when%20on%20top%20%2A%2F%0A%20%20%20%20padding%2Dbottom%3A%200%2E2em%3B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20%2D%2D%2D%2D%20Definition%20lists%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Adl%20%2F%2A%20The%20whole%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dtop%3A%202pt%20solid%20black%3B%0A%20%20%20%20padding%2Dtop%3A%200%2E5em%3B%0A%20%20%20%20border%2Dbottom%3A%202pt%20solid%20black%3B%0A%20%20%20%20%7D%0A%20%0Adt%20%2F%2A%20Definition%20term%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20font%2Dweight%3A%20bold%3B%0A%20%20%20%20%7D%0A%20%0Add%2Bdt%20%2F%2A%202nd%20or%20greater%20term%20in%20the%20list%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dtop%3A%201pt%20solid%20black%3B%0A%20%20%20%20padding%2Dtop%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%20%20%20%0Add%20%2F%2A%20A%20definition%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20margin%2Dbottom%3A%200%2E5em%3B%0A%20%20%20%20%7D%0A%20%0Add%2Bdd%20%2F%2A%202nd%20or%20greater%20definition%20of%20a%20term%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20border%2Dtop%3A%201px%20solid%20black%3B%20%2F%2A%20To%20separate%20multiple%20definitions%20%2A%2F%0A%20%20%20%20%7D%0A%20%20%20%20%0A%2F%2A%20%2D%2D%2D%2D%20Footnotes%20%2D%2D%2D%2D%20%2A%2F%0A%20%0Aa%2Efootnote%2C%20a%2EfootnoteRef%20%7B%20%2F%2A%20Pandoc%2C%20MultiMarkdown%20footnote%20links%20%2A%2F%0A%20%20%20%20font%2Dsize%3A%20small%3B%20%0A%20%20%20%20vertical%2Dalign%3A%20text%2Dtop%3B%0A%7D%0A%20%0Aa%5Bhref%5E%3D%22%23fnref%22%5D%2C%20a%2Ereversefootnote%20%2F%2A%20Pandoc%2C%20MultiMarkdown%2C%20%3F%3F%20footnote%20back%20links%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20a%5Bhref%5E%3D%22%23fnref%22%5D%2C%20a%2Ereversefootnote%20%2F%2A%20Pandoc%2C%20MultiMarkdown%20%2A%2F%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%2F%2A%20Don%27t%20display%20these%20at%20all%20in%20print%20since%20the%20arrow%20is%20only%20something%20to%20click%20on%20%2A%2F%0A%20%20%20%20%20%20%20%20display%3A%20none%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%0Adiv%2Efootnotes%20%2F%2A%20Pandoc%20footnotes%20div%20at%20end%20of%20the%20document%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%20%20%20%0Adiv%2Efootnotes%20li%5Bid%5E%3D%22fn%22%5D%20%2F%2A%20A%20footnote%20item%20within%20that%20div%20%2A%2F%0A%20%20%20%20%7B%0A%20%20%20%20%7D%0A%20%0A%2F%2A%20You%20can%20class%20stuff%20as%20%22noprint%22%20to%20not%20print%2E%20%0A%20%20%20Useful%20since%20you%20can%27t%20set%20this%20media%20conditional%20inside%20an%20HTML%20element%27s%20%0A%20%20%20style%20attribute%20%28I%20think%29%2C%20and%20you%20don%27t%20want%20to%20make%20another%20stylesheet%20that%20%0A%20%20%20imports%20this%20one%20and%20adds%20a%20class%20just%20to%20do%20this%2E%0A%2A%2F%0A%20%0A%40media%20print%0A%20%20%20%20%7B%0A%20%20%20%20%2Enoprint%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20display%3Anone%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A" rel="stylesheet" type="text/css" />
10</head>
11<body>
12<div id="header">
13<h1 class="title">Ganeti web manager</h1>
14</div>
15<div id="TOC">
16<ul>
17<li><a href="#objectives"><span class="toc-section-number">1</span> Objectives</a></li>
18<li><a href="#choose-server"><span class="toc-section-number">2</span> Choose server</a></li>
19<li><a href="#choose-hostname"><span class="toc-section-number">3</span> Choose hostname</a></li>
20<li><a href="#installation"><span class="toc-section-number">4</span> Installation</a><ul>
21<li><a href="#install-dependencies"><span class="toc-section-number">4.1</span> Install dependencies</a></li>
22<li><a href="#unpack-and-build-the-source"><span class="toc-section-number">4.2</span> Unpack and build the source</a></li>
23<li><a href="#link-to-libraries"><span class="toc-section-number">4.3</span> Link to libraries</a></li>
24<li><a href="#create-a-database"><span class="toc-section-number">4.4</span> Create a database</a></li>
25<li><a href="#create-settings"><span class="toc-section-number">4.5</span> Create settings</a></li>
26<li><a href="#populate-the-database"><span class="toc-section-number">4.6</span> Populate the database</a></li>
27<li><a href="#build-files"><span class="toc-section-number">4.7</span> Build files</a></li>
28<li><a href="#set-permissions"><span class="toc-section-number">4.8</span> Set permissions</a></li>
29<li><a href="#install-web-server"><span class="toc-section-number">4.9</span> Install web server</a></li>
30<li><a href="#start-vnc-auth-proxy"><span class="toc-section-number">4.10</span> Start VNC auth proxy</a></li>
31<li><a href="#test"><span class="toc-section-number">4.11</span> Test</a></li>
32</ul></li>
33<li><a href="#troubleshooting"><span class="toc-section-number">5</span> Troubleshooting</a><ul>
34<li><a href="#errors-seen-at-the-console"><span class="toc-section-number">5.1</span> Errors seen at the console</a></li>
35<li><a href="#errors-seen-in-the-browser"><span class="toc-section-number">5.2</span> Errors seen in the browser</a></li>
36</ul></li>
37<li><a href="#adding-clusters"><span class="toc-section-number">6</span> Adding clusters</a><ul>
38<li><a href="#create-a-rapi-key"><span class="toc-section-number">6.1</span> Create a RAPI key</a></li>
39<li><a href="#add-cluster-in-web-interface"><span class="toc-section-number">6.2</span> Add cluster in web interface</a></li>
40<li><a href="#console-issues"><span class="toc-section-number">6.3</span> Console issues</a></li>
41</ul></li>
42</ul>
43</div>
44<h1 id="objectives"><a href="#objectives"><span class="header-section-number">1</span> Objectives</a></h1>
45<p>Install and use the Ganeti Web Manager.</p>
46<h1 id="choose-server"><a href="#choose-server"><span class="header-section-number">2</span> Choose server</a></h1>
47<p>You could choose to install GWM on a server separate from your Ganeti nodes, or you could install it inside a VM. If it is installed in a VM it needs to be connected to your management network or able to route traffic there.</p>
48<p>It's not a good idea to install it directly on the host server, but for the purposes of this host it is sufficient; or if you have a running Debian VM instance you can install it there.</p>
49<h1 id="choose-hostname"><a href="#choose-hostname"><span class="header-section-number">3</span> Choose hostname</a></h1>
50<p>Ganeti web manager is best installed in its own virtual host with its own domain name. In this example we will use &quot;hostX.ws.nsrc.org&quot;, but replace it with your own hostname.</p>
51<p>The DNS must be set up so that this name resolves to the IP address of the server running ganeti web manager. (If you are installing into a VM instance, check with the instructors that the IP you are using has a resolvable hostname in the DNS)</p>
52<h1 id="installation"><a href="#installation"><span class="header-section-number">4</span> Installation</a></h1>
53<p>Ganeti Web Manager is a python/django web application, and is a little tricky to install and deploy the first time.</p>
54<p>As there is no installable package, you will have to install from source. These instructions are suitable for an Ubuntu or Debian host.</p>
55<p>Note: don't follow the instructions on the <a href="https://code.osuosl.org/projects/51/wiki/Install">osuosl.org wiki</a> as these are stale. The current documentation is on <a href="http://ganeti-webmgr.readthedocs.org/en/latest/">readthedocs.org</a></p>
56<p>For this exercise you should be root. It's also helpful for debugging if you log your entire session into a file.</p>
57<pre><code>$ sudo -s
58# script install.log
59# </code></pre>
60<p>A transcript of the subsequent session is written to install.log until you type <code>exit</code>.</p>
61<h2 id="install-dependencies"><a href="#install-dependencies"><span class="header-section-number">4.1</span> Install dependencies</a></h2>
62<pre><code># apt-get install build-essential git wget curl libffi-dev
63# apt-get install python-dev python-setuptools python-pip python-memcache memcached
64# pip install pip --upgrade
65# pip install setuptools --no-use-wheel --upgrade
66&lt;&lt; if that command fails, logout and login again and retry &gt;&gt;
67# pip install fabric virtualenv --upgrade
68# apt-get install python-mysqldb mysql-server mysql-client</code></pre>
69<p>(Note that fabric and virtualenv are available as packages but they are too old, so we use 'pip' to fetch the latest ones)</p>
70<p>If this is the first time that mysql server has been installed, it will prompt you for a root password. Give the class root password.</p>
71<h2 id="unpack-and-build-the-source"><a href="#unpack-and-build-the-source"><span class="header-section-number">4.2</span> Unpack and build the source</a></h2>
72<p>Login as root. Fetch the ganeti-webmgr source tarball, preferably from a local copy to save time and bandwidth.</p>
73<pre><code># cd /tmp
74# wget http://www.ws.nsrc.org/downloads/ganeti/ganeti-webmgr-0.10.2.tar.gz
75# cd /var/lib
76# tar -xvzf /tmp/ganeti-webmgr-0.10.2.tar.gz
77# cd ganeti_webmgr
78# fab deploy</code></pre>
79<p>The &quot;fab deploy&quot; step automatically fetches and builds all the dependencies.</p>
80<h2 id="link-to-libraries"><a href="#link-to-libraries"><span class="header-section-number">4.3</span> Link to libraries</a></h2>
81<p>Some packages exist in the system but are not in the python virtual environment (venv) so as a workaround add some symlinks.</p>
82<pre><code>cd /var/lib/ganeti_webmgr/venv/lib/python2.7
83ln -s /usr/lib/python2.7/dist-packages/_mysql.so .
84ln -s /usr/lib/python2.7/dist-packages/_mysql_exceptions.py .
85ln -s /usr/lib/python2.7/dist-packages/MySQLdb .
86ln -s /usr/lib/python2.7/dist-packages/memcache.py .
87cd /var/lib/ganeti_webmgr</code></pre>
88<h2 id="create-a-database"><a href="#create-a-database"><span class="header-section-number">4.4</span> Create a database</a></h2>
89<p>Connect to the database as the root user (you will be prompted for the database root password)</p>
90<pre><code># mysql -uroot -p</code></pre>
91<p>Now create a database and give access to a new user with a password of your choice. This is the password that the application will use to connect to the database. For security it should be different to the root password.</p>
92<pre><code>mysql&gt; create database ganeti_webmgr;
93mysql&gt; grant all on ganeti_webmgr.* to 'ganeti_webmgr'@'localhost'
94       identified by 'SomePassWord';
95mysql&gt; exit;</code></pre>
96<h2 id="create-settings"><a href="#create-settings"><span class="header-section-number">4.5</span> Create settings</a></h2>
97<pre><code># cd /var/lib/ganeti_webmgr
98# cp settings.py.dist settings.py
99# vi settings.py</code></pre>
100<p>In another window generate two more random strings, and copy-paste them into the config at the places shown. These random strings don't need to be remembered or stored anywhere else.</p>
101<pre><code># head -c18 /dev/urandom | base64
102# head -c18 /dev/urandom | base64</code></pre>
103<p>Change these settings: note especially the ENGINE change from sqlite3 to mysql.</p>
104<pre><code>...
105        'ENGINE': 'django.db.backends.mysql',
106
107         # Or path to database file if using sqlite3.
108        'NAME': 'ganeti_webmgr',
109        'USER': 'ganeti_webmgr',
110        'PASSWORD': 'SomePassWord',    # Use your own database password
111...
112SITE_DOMAIN = 'hostX.ws.nsrc.org'
113...
114SECRET_KEY = '&lt;randomstring1&gt;'
115...
116VNC_PROXY = 'hostX.ws.nsrc.org:8888'
117...
118WEB_MGR_API_KEY = &quot;&lt;randomstring2&gt;&quot;   # Use your own random API key</code></pre>
119<p>And add the following to the end of <code>settings.py</code>:</p>
120<pre><code># Django caching framework
121CACHES = {
122    'default': {
123        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
124        'LOCATION': '127.0.0.1:11211',
125    },
126}
127
128ALLOWED_HOSTS = [
129    'hostX.ws.nsrc.org',
130]</code></pre>
131<h2 id="populate-the-database"><a href="#populate-the-database"><span class="header-section-number">4.6</span> Populate the database</a></h2>
132<p>This creates the tables and also creates the first username/password which you will use to login to the web interface later.</p>
133<pre><code># cd /var/lib/ganeti_webmgr
134# source venv/bin/activate
135# ./manage.py syncdb --migrate
136...
137You just installed Django's auth system, which means you don't have any superusers defined.
138Would you like to create one now? (yes/no): yes
139Username (leave blank to use 'nsrc'): admin
140E-mail address: yourmail@yourdomain
141Password:
142Password (again):</code></pre>
143<p>If there is a problem with creating the superuser, fix the issue (see below) then you can retry that step with:</p>
144<pre><code># cd /var/lib/ganeti_webmgr
145# source venv/bin/activate
146# ./manage.py createsuperuser</code></pre>
147<h2 id="build-files"><a href="#build-files"><span class="header-section-number">4.7</span> Build files</a></h2>
148<p>Continue with the following commands:</p>
149<pre><code># ./manage.py rebuild_index
150WARNING: This will irreparably remove EVERYTHING from your search index.
151Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
152Are you sure you wish to continue? [y/N] y
153
154...
155
156# ./manage.py collectstatic
157You have requested to collect static files at the destination
158location as specified in your settings.
159
160This will overwrite existing files!
161Are you sure you want to do this?
162
163Type 'yes' to continue, or 'no' to cancel: yes</code></pre>
164<h2 id="set-permissions"><a href="#set-permissions"><span class="header-section-number">4.8</span> Set permissions</a></h2>
165<p>The <code>whoosh_index</code> directory created by rebuild_index needs to be writable by Apache.</p>
166<pre><code># chown -R www-data:www-data /var/lib/ganeti_webmgr/whoosh_index</code></pre>
167<h2 id="install-web-server"><a href="#install-web-server"><span class="header-section-number">4.9</span> Install web server</a></h2>
168<pre><code># apt-get install apache2 libapache2-mod-wsgi</code></pre>
169<p>In the following steps, remember to change <code>hostX.ws.nsrc.org</code> to the hostname you are using for the ganeti web manager.</p>
170<p>Create file <code>/var/lib/ganeti_webmgr/django.wsgi</code> containing:</p>
171<pre><code>import os
172import sys
173
174path = '/var/lib/ganeti_webmgr'
175
176# activate virtualenv
177activate_this = '%s/venv/bin/activate_this.py' % path
178execfile(activate_this, dict(__file__=activate_this))
179
180# add project to path
181if path not in sys.path:
182    sys.path.append(path)
183
184# configure django environment
185os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
186
187import django.core.handlers.wsgi
188application = django.core.handlers.wsgi.WSGIHandler()</code></pre>
189<p>Create file <code>/etc/apache2/sites-available/ganeti_webmgr</code> containing:</p>
190<pre><code>&lt;VirtualHost *:80&gt;
191ServerName hostX.ws.nsrc.org
192DocumentRoot &quot;/var/lib/ganeti_webmgr/static&quot;
193ErrorLog /var/log/apache2/ganeti-error.log
194CustomLog /var/log/apache2/ganeti-access.log common
195
196Alias /robots.txt /var/lib/ganeti_webmgr/static/robots.txt
197Alias /favicon.ico /var/lib/ganeti_webmgr/static/favicon.ico
198
199AliasMatch ^/([^/]*\.css) /var/lib/ganeti_webmgr/static/styles/$1
200
201Alias /media/ /var/lib/ganeti_webmgr/media/
202Alias /static/ /var/lib/ganeti_webmgr/static/
203
204&lt;Directory /var/lib/ganeti_webmgr/static&gt;
205Order deny,allow
206Allow from all
207&lt;/Directory&gt;
208
209&lt;Directory /var/lib/ganeti_webmgr/media&gt;
210Order deny,allow
211Allow from all
212&lt;/Directory&gt;
213
214WSGIScriptAlias / /var/lib/ganeti_webmgr/django.wsgi
215WSGIDaemonProcess hostX.ws.nsrc.org python-path=/var/lib/ganeti_webmgr:/var/lib/ganeti_webmgr/venv/lib/python2.7/site-packages processes=2 threads=15 display-name=%{GROUP}
216WSGIProcessGroup hostX.ws.nsrc.org
217
218&lt;Directory /var/lib/ganeti_webmgr&gt;
219&lt;Files django.wsgi&gt;
220Order allow,deny
221Allow from all
222&lt;/Files&gt;
223&lt;/Directory&gt;
224
225&lt;/VirtualHost&gt;</code></pre>
226<p>Enable the virtual host:</p>
227<pre><code># a2ensite ganeti_webmgr
228# service apache2 reload</code></pre>
229<h2 id="start-vnc-auth-proxy"><a href="#start-vnc-auth-proxy"><span class="header-section-number">4.10</span> Start VNC auth proxy</a></h2>
230<p>For VNC access to instances, the VNC auth proxy needs to be started. (TODO: set this up in a startup script e.g. <code>/etc/rc.local</code>)</p>
231<pre><code># /var/lib/ganeti_webmgr/venv/bin/twistd --pidfile=/tmp/proxy.pid -n vncap \
232        -c tcp:8888:interface=0.0.0.0 &amp;</code></pre>
233<p>Compatibility note: Chrome 30+ may not work with the software installed.</p>
234<p>Patches to txWS.py are in the reply to <a href="https://code.osuosl.org/issues/15321">this ticket</a></p>
235<h2 id="test"><a href="#test"><span class="header-section-number">4.11</span> Test</a></h2>
236<p>Point web browser at <a href="http://hostX.ws.nsrc.org/">http://hostX.ws.nsrc.org/</a></p>
237<p>If you just get &quot;It works!&quot; then disable the default site:</p>
238<pre><code># a2dissite default
239# service apache2 reload</code></pre>
240<p>then try again. You should get the Ganeti web manager login page.</p>
241<h1 id="troubleshooting"><a href="#troubleshooting"><span class="header-section-number">5</span> Troubleshooting</a></h1>
242<h2 id="errors-seen-at-the-console"><a href="#errors-seen-at-the-console"><span class="header-section-number">5.1</span> Errors seen at the console</a></h2>
243<ul>
244<li><p>If you get a python error involving AES keys then ensure that the two random keys you generated in <code>settings.py</code> are exactly 24 characters long.</p></li>
245<li><p>If you get a python error about getlocale returning null then try typing</p>
246<pre><code>export LANG=en_US</code></pre>
247<p>and then re-run the command which gave the error.</p></li>
248<li><p>Other locale errors can be fixed by:</p>
249<pre><code>apt-get install locales
250vi /etc/locale.gen   # uncomment the line &quot;en_US.UTF-8 UTF-8&quot; and save
251locale-gen
252update-locale LANG=&quot;en_US.UTF-8&quot; LANGUAGE=&quot;en_US:en&quot;</code></pre></li>
253<li><p>If you forget the mysql password which you gave to the ganeti_webmgr account, you can reset it using the mysql root password.</p>
254<pre><code># mysql -uroot -p
255&lt;&lt; enter the mysql root password &gt;&gt;
256
257mysql&gt; set password for 'ganeti_webmgr'@'localhost' = PASSWORD('SomePassWord');
258mysql&gt; exit;</code></pre>
259<p>If you have forgotten the mysql root password, follow <a href="http://dev.mysql.com/doc/refman/5.1/en/resetting-permissions.html#resetting-permissions-generic">these instructions</a></p></li>
260</ul>
261<h2 id="errors-seen-in-the-browser"><a href="#errors-seen-in-the-browser"><span class="header-section-number">5.2</span> Errors seen in the browser</a></h2>
262<ul>
263<li><p>If you get &quot;Internal Server Error&quot; then start by looking at <code>/var/log/apache2/ganeti-error.log</code>. Also check that you have pasted the contents of <code>django.wsgi</code> correctly. (If you paste into vi and forget to go into insert mode first, note that the first <code>i</code> of <code>import</code> will be consumed)</p></li>
264<li><p>If you still get the default webserver page, then edit <code>/etc/apache2/sites-available/default</code> and insert the following line after <code>&lt;VirtualHost *:80&gt;</code></p>
265<pre><code>ServerName localhost</code></pre>
266<p>Then reload apache (<code>service apache2 reload</code>)</p></li>
267<li><p>If you get an error involving sqlite3 then you probably forgot to change the ENGINE value in <code>settings.py</code>. Go back, change this setting, then re-run the commands under the heading &quot;Populate the database&quot;</p></li>
268<li><p>If you get a login page but the username/password does not work, you can (re)create the user account using</p>
269<pre><code># cd /var/lib/ganeti_webmgr
270# ./manage.py createsuperuser</code></pre></li>
271</ul>
272<h1 id="adding-clusters"><a href="#adding-clusters"><span class="header-section-number">6</span> Adding clusters</a></h1>
273<p>If everything works, you should get a login page where you can login with the admin username and password you created earlier. So you now want to connect to the cluster(s) you wish to manage.</p>
274<h2 id="create-a-rapi-key"><a href="#create-a-rapi-key"><span class="header-section-number">6.1</span> Create a RAPI key</a></h2>
275<p>You need to set up a password for ganeti_webmgr to talk to the ganeti cluster daemons using the ganeti remote API (RAPI).</p>
276<p>On the ganeti master node, generate a strong random password like this:</p>
277<pre><code># head -c18 /dev/urandom | base64
2780GReg6zUJqIGZ77FkK7+Qiua</code></pre>
279<p>Take a careful note of this raw password, e.g. by pasting it into a file on your laptop, as you will need to enter it into ganeti web manager.</p>
280<p>Now take a specially-formatted hash of this password (use your random password in place of 0GReg...):</p>
281<pre><code># echo -n 'ganeti_webmgr:Ganeti Remote API:0GReg6zUJqIGZ77FkK7+Qiua' | openssl md5
282
283&lt;&lt; the response will be something like this &gt;&gt;
284(stdin)= 2e6d881bf6a705413bf6a88a051af17e</code></pre>
285<p>Finally, as root create a file <code>/var/lib/ganeti/rapi/users</code> containing this one line (use your hash in place of 2e6d8...)</p>
286<pre><code>ganeti_webmgr {HA1}2e6d881bf6a705413bf6a88a051af17e write</code></pre>
287<p>and replicate it to the other nodes:</p>
288<pre><code># gnt-cluster copyfile /var/lib/ganeti/rapi/users</code></pre>
289<p>You don't need to remember this hash, only the original random password.</p>
290<h2 id="add-cluster-in-web-interface"><a href="#add-cluster-in-web-interface"><span class="header-section-number">6.2</span> Add cluster in web interface</a></h2>
291<ul>
292<li>Click on &quot;Clusters&quot;, &quot;Add Cluster&quot;</li>
293<li>Hostname: gntN.ws.nsrc.org
294<ul>
295<li>Username: ganeti_webmgr</li>
296<li>Password: 0GReg6zUJqIGZ77FkK7+Qiua (i.e. the RAPI password you created)</li>
297<li>(It's possible to leave username and password blank, but then you will only have read-only access to the cluster)</li>
298</ul></li>
299<li>Leave the rest as defaults and click &quot;Add&quot;</li>
300</ul>
301<p>At this point you should see an overview of the cluster details. Click on the &quot;Refresh&quot; button to update all the information in the ganeti web manager database (this may be necessary if some changes to the cluster were made via the gnt command line)</p>
302<p>Click on the &quot;Nodes&quot; tab to see the state of the individual nodes in the cluster, and the &quot;Virtual Machines&quot; tab to see VMs.</p>
303<h2 id="console-issues"><a href="#console-issues"><span class="header-section-number">6.3</span> Console issues</a></h2>
304<p>If you cannot get the console to work in the web interface, it may be because you have set a VNC password. If you intend to use the ganeti web manager for console access, you should turn this off:</p>
305<pre><code>gnt-cluster modify -H kvm:vnc_password_file=,vnc_bind_address=</code></pre>
306</body>
307</html>