forked from hswaw/hscloud
*: docs pass
Change-Id: I87ca80d3f7728ed407071468ac233e6ad4574929
This commit is contained in:
parent
c0d9ea081f
commit
3ba5c1b591
11 changed files with 429 additions and 340 deletions
7
cluster/README.md
Normal file
7
cluster/README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
Cluster Docs Home
|
||||||
|
=================
|
||||||
|
|
||||||
|
Documentation relating to our Kubernetes cluster(s).
|
||||||
|
|
||||||
|
For information about the physical DC infrastructure, see [//dc](/dc/).
|
||||||
|
|
|
@ -1,31 +1,8 @@
|
||||||
HSCloud Clusters
|
Cluster Admin Docs
|
||||||
================
|
==================
|
||||||
|
|
||||||
Admin documentation. For user documentation, see [//cluster/doc/user.md](/cluster/doc/user.md).
|
|
||||||
|
|
||||||
Current cluster: `k0.hswaw.net`
|
Current cluster: `k0.hswaw.net`
|
||||||
|
|
||||||
Persistent Storage (waw2)
|
|
||||||
-------------------------
|
|
||||||
|
|
||||||
HDDs on bc01n0{1-3}. 3TB total capacity. Don't use this as this pool should go
|
|
||||||
away soon (the disks are slow, the network is slow and the RAID controllers
|
|
||||||
lie). Use ceph-waw3 instead.
|
|
||||||
|
|
||||||
The following storage classes use this cluster:
|
|
||||||
|
|
||||||
- `waw-hdd-paranoid-1` - 3 replicas
|
|
||||||
- `waw-hdd-redundant-1` - erasure coded 2.1
|
|
||||||
- `waw-hdd-yolo-1` - unreplicated (you _will_ lose your data)
|
|
||||||
- `waw-hdd-redundant-1-object` - erasure coded 2.1 object store
|
|
||||||
|
|
||||||
Rados Gateway (S3) is available at https://object.ceph-waw2.hswaw.net/. To
|
|
||||||
create a user, ask an admin.
|
|
||||||
|
|
||||||
PersistentVolumes currently bound to PersistentVolumeClaims get automatically
|
|
||||||
backed up (hourly for the next 48 hours, then once every 4 weeks, then once
|
|
||||||
every month for a year).
|
|
||||||
|
|
||||||
Persistent Storage (waw3)
|
Persistent Storage (waw3)
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|
13
cluster/doc/site.html
Normal file
13
cluster/doc/site.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{{ define "header" }}
|
||||||
|
<span class="red">hackdoc://cluster</span>
|
||||||
|
<span>Hackerspace Cluster Docs</span>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "topbar" }}
|
||||||
|
<span><a href="/cluster/">Home</a></span>
|
||||||
|
<span><a href="/cluster/doc/user.md">User Docs</a></span>
|
||||||
|
<span><a href="/cluster/doc/admin.md">Admin Docs</a></span>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "sidebar" }}
|
||||||
|
{{ end }}
|
|
@ -1,5 +1,5 @@
|
||||||
Warsaw Hackerspace Kubernetes Clusters
|
Cluster User Docs
|
||||||
======================================
|
=================
|
||||||
|
|
||||||
End-user^Whacker documentation.
|
End-user^Whacker documentation.
|
||||||
|
|
||||||
|
|
5
cluster/hackdoc.toml
Normal file
5
cluster/hackdoc.toml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[template.default]
|
||||||
|
sources = [
|
||||||
|
"//devtools/hackdoc/tpl/base.html",
|
||||||
|
"//cluster/doc/site.html",
|
||||||
|
]
|
18
dc/README.md
18
dc/README.md
|
@ -1,4 +1,16 @@
|
||||||
hscloud/dc
|
DC Docs Home
|
||||||
==========
|
============
|
||||||
|
|
||||||
Software and systems related to DC operations and provisioning.
|
Software, systems and hardware related to DC operations and provisioning.
|
||||||
|
|
||||||
|
Software
|
||||||
|
--------
|
||||||
|
|
||||||
|
- [arista-proxy](arista-proxy/), a gRPC proxy to Arista's JSON-RPC.
|
||||||
|
- [cmc-proxy](cmc-proxy/), a gRPC proxy to the Dell M1000E Chassic Management Controller.
|
||||||
|
- [m6220-proxy](m6220-proxy/), a gRPC proxy to the Dell M6220 switch.
|
||||||
|
|
||||||
|
Hardware
|
||||||
|
--------
|
||||||
|
|
||||||
|
- [hbj11](hbj11/), a JBOD SATA passthrough card for Dell M610 servers.
|
||||||
|
|
|
@ -5,40 +5,15 @@ Our Arista 7148S does not support gRPC/OpenConfig, so we have to make our own da
|
||||||
|
|
||||||
The schema is supposed to be 1:1 mapped to the JSON-RPC EAPI. This is just a dumb proxy.
|
The schema is supposed to be 1:1 mapped to the JSON-RPC EAPI. This is just a dumb proxy.
|
||||||
|
|
||||||
Getting and Building
|
Building
|
||||||
--------------------
|
--------
|
||||||
|
|
||||||
go get -d -u code.hackerspace.pl/q3k/arista-proxy
|
$ bazel build //dc/arista-proxy
|
||||||
go generate code.hackerspace.pl/q3k/arista-proxy/proto
|
|
||||||
go build code.hackerspace.pl/q3k/arista-proxy
|
|
||||||
|
|
||||||
Debug Status Page
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
The `debug_address` flag controls spawning an HTTP server useful for debugging. You can use it to inspect gRPC request and view general status information of the proxy.
|
|
||||||
|
|
||||||
Flags
|
Flags
|
||||||
-----
|
-----
|
||||||
|
|
||||||
./arista-proxy -help
|
|
||||||
Usage of ./arista-proxy:
|
|
||||||
-alsologtostderr
|
|
||||||
log to standard error as well as files
|
|
||||||
-arista_api string
|
-arista_api string
|
||||||
Arista remote endpoint (default "http://admin:password@1.2.3.4:80/command-api")
|
Arista remote endpoint (default "http://admin:password@1.2.3.4:80/command-api")
|
||||||
-debug_address string
|
|
||||||
Debug HTTP listen address, or empty to disable (default "127.0.0.1:42000")
|
For standard flags (eg. listen, logs, ...) run with -help.
|
||||||
-listen_address string
|
|
||||||
gRPC listen address (default "127.0.0.1:43001")
|
|
||||||
-log_backtrace_at value
|
|
||||||
when logging hits line file:N, emit a stack trace
|
|
||||||
-log_dir string
|
|
||||||
If non-empty, write log files in this directory
|
|
||||||
-logtostderr
|
|
||||||
log to standard error instead of files
|
|
||||||
-stderrthreshold value
|
|
||||||
logs at or above this threshold go to stderr
|
|
||||||
-v value
|
|
||||||
log level for V logs
|
|
||||||
-vmodule value
|
|
||||||
comma-separated list of pattern=N settings for file-filtered logging
|
|
||||||
|
|
12
dc/doc/site.html
Normal file
12
dc/doc/site.html
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{{ define "header" }}
|
||||||
|
<span class="red">hackdoc://dc</span>
|
||||||
|
<span>Hackerspace Datacenter Docs</span>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "topbar" }}
|
||||||
|
<span><a href="/dc/">Home</a></span>
|
||||||
|
<span><a href="/dc/hbj11">HBJ11</a></span>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
{{ define "sidebar" }}
|
||||||
|
{{ end }}
|
5
dc/hackdoc.toml
Normal file
5
dc/hackdoc.toml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
[template.default]
|
||||||
|
sources = [
|
||||||
|
"//devtools/hackdoc/tpl/base.html",
|
||||||
|
"//dc/doc/site.html",
|
||||||
|
]
|
|
@ -3,9 +3,358 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>hackdoc:{{ .Title }}</title>
|
<title>hackdoc:{{ .Title }}</title>
|
||||||
{{ template "head" . }}
|
<style type="text/css">
|
||||||
|
html, body, div, span, applet, object, iframe,
|
||||||
|
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||||
|
a, abbr, acronym, address, big, cite, code,
|
||||||
|
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||||
|
small, strike, strong, sub, sup, tt, var,
|
||||||
|
b, u, i, center,
|
||||||
|
dl, dt, dd, ol, ul, li,
|
||||||
|
fieldset, form, label, legend,
|
||||||
|
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||||
|
article, aside, canvas, details, embed,
|
||||||
|
figure, figcaption, footer, header, hgroup,
|
||||||
|
menu, nav, output, ruby, section, summary,
|
||||||
|
time, mark, audio, video {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
border: 0;
|
||||||
|
font-size: 100%;
|
||||||
|
font: inherit;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
/* HTML5 display-role reset for older browsers */
|
||||||
|
article, aside, details, figcaption, figure,
|
||||||
|
footer, header, hgroup, menu, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
ol, ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
blockquote, q {
|
||||||
|
quotes: none;
|
||||||
|
}
|
||||||
|
blockquote:before, blockquote:after,
|
||||||
|
q:before, q:after {
|
||||||
|
content: '';
|
||||||
|
content: none;
|
||||||
|
}
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.25em;
|
||||||
|
background-color: #f0f0f0;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
/* Cursed snippet to prevent entire page being shifted left when scrollbar
|
||||||
|
appears. */
|
||||||
|
overflow-x: hidden;
|
||||||
|
margin-right: calc(-1 * (100vw - 100%));
|
||||||
|
}
|
||||||
|
|
||||||
|
.wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: center;
|
||||||
|
width: 100%;
|
||||||
|
font-family: 'Open Sans', sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.column {
|
||||||
|
width: 80em;
|
||||||
|
padding: 1rem 0 1rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
background-color: #fefefe;
|
||||||
|
width: 100%;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content {
|
||||||
|
order: 1;
|
||||||
|
padding: 1rem 1rem 3rem 3rem;
|
||||||
|
width: 55em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar {
|
||||||
|
order: 2;
|
||||||
|
width: 20em;
|
||||||
|
margin-left: 1em;
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar ul {
|
||||||
|
padding: .5em;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-right: 2em;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.header {
|
||||||
|
font-size: 1.2em;
|
||||||
|
font-family: Consolas, monospace;
|
||||||
|
margin-top: 1rem;
|
||||||
|
display: inline-flex;
|
||||||
|
background-color: #fefefe;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.headerInner {
|
||||||
|
padding: 1em 1em 1em 3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
.header a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header span.red {
|
||||||
|
color: #b30014;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header span.part {
|
||||||
|
color: #666;
|
||||||
|
padding-left: 0.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header span.part a {
|
||||||
|
color: rgb(27, 106, 203);
|
||||||
|
}
|
||||||
|
.header span.part a:visited {
|
||||||
|
color: rgb(27, 106, 203);
|
||||||
|
}
|
||||||
|
|
||||||
|
.topbar {
|
||||||
|
min-height: 1em;
|
||||||
|
padding: 1em 1em 1em 3.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topbar a {
|
||||||
|
text-decoration: none;
|
||||||
|
color: #333;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
.topbar a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.topbar span {
|
||||||
|
margin-right: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
font-size: 0.8em;
|
||||||
|
color: #ccc;
|
||||||
|
font-weight: 800;
|
||||||
|
padding: 0.5em 1em 1em;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer .left {
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer .right {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footer a {
|
||||||
|
color: #bbb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h1 {
|
||||||
|
font-size: 1.9em;
|
||||||
|
padding: 1em 0 0 0;
|
||||||
|
font-weight: 400;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page p + h1 {
|
||||||
|
padding: 2em 0 0 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h2 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
padding: 1.6em 0 0 0;
|
||||||
|
color: #000;
|
||||||
|
font-weight: 400;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h3 {
|
||||||
|
font-size: 1.4em;
|
||||||
|
padding: 0.4em 0 0 0;
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h4 {
|
||||||
|
font-size: 1.0em;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page strong {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page code {
|
||||||
|
font-family: Consolas, monospace;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page pre {
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
border: 1px solid #d8d8d8;
|
||||||
|
margin: 2em 1em 2em 1em;
|
||||||
|
padding: 0.5em;
|
||||||
|
overflow: auto;
|
||||||
|
max-width: 60em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h1 + p {
|
||||||
|
margin-top: 2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h2 + p {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h3 + p {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page h4 + p {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.page p + p {
|
||||||
|
margin-top: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page p {
|
||||||
|
line-height: 1.6em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page :not(li) > ul {
|
||||||
|
padding-top: 0.5em;
|
||||||
|
line-height: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page ul li {
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page :not(li) > ul > li::before {
|
||||||
|
content: "•";
|
||||||
|
color: #333;;
|
||||||
|
display: inline-block;
|
||||||
|
width: 1em;
|
||||||
|
margin-left: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page li > ul > li::before {
|
||||||
|
content: "◦";
|
||||||
|
color: #333;;
|
||||||
|
display: inline-block;
|
||||||
|
width: 1em;
|
||||||
|
margin-left: -0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page img {
|
||||||
|
max-width: 50em;
|
||||||
|
margin: 1em 0 1em 0;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page table {
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page table th {
|
||||||
|
border-bottom-width: 2px;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border: 1px solid #e36372;
|
||||||
|
padding: 5px;
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: bottom;
|
||||||
|
background-color: #e36372;
|
||||||
|
font-weight: 800;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
.page table td {
|
||||||
|
border: 1px solid #e36372;
|
||||||
|
padding: 5px;
|
||||||
|
vertical-align: top;
|
||||||
|
background-color: #ffdbdf;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page table code {
|
||||||
|
font-family: Consolas, monospace;
|
||||||
|
background-color: #fcedef;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc {
|
||||||
|
padding: .5em;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
margin: 2em;
|
||||||
|
max-width: 30em;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toc a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{{ template "body" . }}
|
<div class="wrapper">
|
||||||
|
<div class="column">
|
||||||
|
<div class="header">
|
||||||
|
<div class="headerInner">
|
||||||
|
{{ template "header" . }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="topbar">
|
||||||
|
{{ template "topbar" . }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<div class="sidebar">
|
||||||
|
<h3>Page Info</h3>
|
||||||
|
<ul>
|
||||||
|
{{ range .WebLinks }}
|
||||||
|
<li><a href="{{.LinkURL}}">View {{.Kind}} ({{ .LinkLabel }})</a></li>
|
||||||
|
{{ end }}
|
||||||
|
<li><a href="{{ .HackdocURL }}/devtools/hackdoc">Generated by hackdoc</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
{{ .Rendered }}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,280 +1,14 @@
|
||||||
{{ define "head" }}
|
{{ define "header" }}
|
||||||
<style type="text/css">
|
<span class="red">hackdoc://</span>
|
||||||
html, body, div, span, applet, object, iframe,
|
<span>HSCloud Docs</span>
|
||||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
|
||||||
a, abbr, acronym, address, big, cite, code,
|
|
||||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
|
||||||
small, strike, strong, sub, sup, tt, var,
|
|
||||||
b, u, i, center,
|
|
||||||
dl, dt, dd, ol, ul, li,
|
|
||||||
fieldset, form, label, legend,
|
|
||||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
|
||||||
article, aside, canvas, details, embed,
|
|
||||||
figure, figcaption, footer, header, hgroup,
|
|
||||||
menu, nav, output, ruby, section, summary,
|
|
||||||
time, mark, audio, video {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
border: 0;
|
|
||||||
font-size: 100%;
|
|
||||||
font: inherit;
|
|
||||||
vertical-align: baseline;
|
|
||||||
}
|
|
||||||
/* HTML5 display-role reset for older browsers */
|
|
||||||
article, aside, details, figcaption, figure,
|
|
||||||
footer, header, hgroup, menu, nav, section {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
line-height: 1;
|
|
||||||
}
|
|
||||||
ol, ul {
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
blockquote, q {
|
|
||||||
quotes: none;
|
|
||||||
}
|
|
||||||
blockquote:before, blockquote:after,
|
|
||||||
q:before, q:after {
|
|
||||||
content: '';
|
|
||||||
content: none;
|
|
||||||
}
|
|
||||||
table {
|
|
||||||
border-collapse: collapse;
|
|
||||||
border-spacing: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
font-size: 14px;
|
|
||||||
line-height: 1.25em;
|
|
||||||
background-color: #f0f0f0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.wrapper {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: center;
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.column {
|
|
||||||
width: 80em;
|
|
||||||
padding: 1rem 0 1rem 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.page {
|
|
||||||
background-color: #fefefe;
|
|
||||||
padding: 0.5rem 2rem 3rem 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
font-size: 1.2em;
|
|
||||||
font-family: Consolas, monospace;
|
|
||||||
margin-top: 1rem;
|
|
||||||
padding: 0.5em 0 0.5em 0;
|
|
||||||
display: inline-flex;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.header a:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header span.red {
|
|
||||||
color: #b30014;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header span.part {
|
|
||||||
color: #666;
|
|
||||||
padding-left: 0.2em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header span.part a {
|
|
||||||
color: rgb(27, 106, 203);
|
|
||||||
}
|
|
||||||
.header span.part a:visited {
|
|
||||||
color: rgb(27, 106, 203);
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer {
|
|
||||||
font-size: 0.8em;
|
|
||||||
color: #ccc;
|
|
||||||
font-weight: 800;
|
|
||||||
font-family: helvetica, arial, sans-serif;
|
|
||||||
padding: 0.5em 1em 1em;
|
|
||||||
text-align: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .left {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer .right {
|
|
||||||
float: right;
|
|
||||||
}
|
|
||||||
|
|
||||||
.footer a {
|
|
||||||
color: #bbb;
|
|
||||||
}
|
|
||||||
|
|
||||||
h1,h2,h3,h4 {
|
|
||||||
font-family: helvetica, arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content h1 {
|
|
||||||
font-size: 1.6em;
|
|
||||||
padding: 1em 0 0 0;
|
|
||||||
font-weight: 800;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content h2 {
|
|
||||||
font-size: 1.3em;
|
|
||||||
padding: 0.8em 0 0 0;
|
|
||||||
color: #333;
|
|
||||||
font-weight: 800;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content h3 {
|
|
||||||
font-size: 1.2em;
|
|
||||||
padding: 0.4em 0 0 0;
|
|
||||||
color: #444;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content h4 {
|
|
||||||
font-size: 1.0em;
|
|
||||||
color: #555;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content strong {
|
|
||||||
font-weight: 600;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content code {
|
|
||||||
font-family: Consolas, monospace;
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content pre {
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
border: 1px solid #d8d8d8;
|
|
||||||
margin: 1em;
|
|
||||||
padding: 0.5em;
|
|
||||||
overflow: auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content p {
|
|
||||||
margin-top: 0.8em;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content :not(li) > ul {
|
|
||||||
padding-top: 0.5em;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content ul li {
|
|
||||||
padding-left: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content :not(li) > ul > li::before {
|
|
||||||
content: "•";
|
|
||||||
color: #333;;
|
|
||||||
display: inline-block;
|
|
||||||
width: 1em;
|
|
||||||
margin-left: -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content li > ul > li::before {
|
|
||||||
content: "◦";
|
|
||||||
color: #333;;
|
|
||||||
display: inline-block;
|
|
||||||
width: 1em;
|
|
||||||
margin-left: -0.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content img {
|
|
||||||
max-width: 90%;
|
|
||||||
margin: 1em auto 1em auto;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content table {
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
width: 100%;
|
|
||||||
max-width: 100%;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content table th {
|
|
||||||
border-bottom-width: 2px;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
border: 1px solid #e36372;
|
|
||||||
padding: 5px;
|
|
||||||
text-align: left;
|
|
||||||
vertical-align: bottom;
|
|
||||||
background-color: #e36372;
|
|
||||||
font-weight: 800;
|
|
||||||
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.content table td {
|
|
||||||
border: 1px solid #e36372;
|
|
||||||
padding: 5px;
|
|
||||||
vertical-align: top;
|
|
||||||
background-color: #ffdbdf;
|
|
||||||
font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.content table code {
|
|
||||||
font-family: Consolas, monospace;
|
|
||||||
background-color: #fcedef;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toc {
|
|
||||||
padding: .5em;
|
|
||||||
border: 1px solid #ddd;
|
|
||||||
background-color: #f8f8f8;
|
|
||||||
margin: 2em;
|
|
||||||
max-width: 30%;
|
|
||||||
font-size: 1em;
|
|
||||||
font-family: sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.toc a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
</style>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ define "body" }}
|
|
||||||
<div class="wrapper">
|
{{ define "topbar" }}
|
||||||
<div class="column">
|
<span><a href="/">Home</a></span>
|
||||||
<div class="page">
|
<span><a href="/cluster/">Cluster</a></span>
|
||||||
<div class="header">
|
<span><a href="/dc/">DC</a></span>
|
||||||
<span class="red">hackdoc:</span>
|
<span><a href="/doc/codelabs">Codelabs</a></span>
|
||||||
{{ range .PathParts }}
|
{{ end }}
|
||||||
{{ if ne .Path "" }}
|
|
||||||
<span class="part"><a href="{{ .Path }}">{{ .Label }}</a></span>
|
{{ define "sidebar" }}
|
||||||
{{ else }}
|
|
||||||
<span class="part">{{ .Label }}</span>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
<span class="red" style="margin-left: 1em;">shortcuts:</span> <a href="/">root</a>, <a href="/cluster/doc">cluster docs</a>, <a href="/doc/codelabs">codelabs</a>
|
|
||||||
</div>
|
|
||||||
{{ .Rendered }}
|
|
||||||
</div>
|
|
||||||
<div class="footer">
|
|
||||||
<div class="left">
|
|
||||||
View in:
|
|
||||||
{{ range .WebLinks }}
|
|
||||||
<span class="muted">[{{ .Kind }} <a href="{{ .LinkURL }}">{{ .LinkLabel }}</a>]</span>
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
<div class="right">Generated by <a href="{{ .HackdocURL }}/devtools/hackdoc">hackdoc</a>.</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
Loading…
Reference in a new issue