Add rook talk
Change-Id: I76f535f42832abb086fc09699b0ff95b8c7ee894
|
@ -2,4 +2,4 @@
|
|||
host=review.opendev.org
|
||||
port=29418
|
||||
project=opendev/publications.git
|
||||
defaultbranch=template
|
||||
defaultbranch=rook
|
||||
|
|
47
README.rst
|
@ -1,34 +1,19 @@
|
|||
Template Branch for new OpenStack Infra Publications
|
||||
====================================================
|
||||
Highly Available Git on CephFS with Rook, Kubernetes, and OpenStack
|
||||
===================================================================
|
||||
|
||||
Creating new OpenStack Infra Publications is easy and you have started
|
||||
in the right place.
|
||||
Abstract
|
||||
--------
|
||||
|
||||
1. Clone publications, create and checkout template tracking branch::
|
||||
The OpenDev Project operates infrastructure for some of the largest
|
||||
and most active Open Source projects. It needs a bulletproof system
|
||||
for serving the git repositories for those projects, and it needs to
|
||||
be entirely open source.
|
||||
|
||||
git clone git://git.openstack.org/openstack-infra/publications
|
||||
cd publications
|
||||
git review -s
|
||||
git checkout -b template origin/template
|
||||
|
||||
2. Create a new branch based on this template branch.
|
||||
``git checkout -b $BRANCH_NAME``.
|
||||
3. Edit ``.gitreview`` and change the defaultbranch value to
|
||||
``$BRANCH_NAME``.
|
||||
4. Create ``$BRANCH_NAME`` in Gerrit. It should be based on the
|
||||
template branch as well to avoid any potential merge conflicts in
|
||||
your first commit. Not everyone has the ability to do this in
|
||||
Gerrit. If you don't, ask an openstack infra core to do it for you.
|
||||
5. Now we get to do the fun stuff. Edit index.html editing lines with
|
||||
``CHANGEME`` or ``changeme`` in them. You can also add new slides
|
||||
if you like but that isn't necessary in this bootstrapping change.
|
||||
You can follow up with new slides in subsequent changes.
|
||||
6. Edit this file, ``README.rst``. The title of this document will
|
||||
be the name used on the root publications index so be sure to
|
||||
update the title. You should also add an Abstract section and
|
||||
general talk info.
|
||||
7. At this point you are ready to push your new changes back up to
|
||||
Gerrit. ``git commit -a && git review``
|
||||
8. Finally, if you want notifications for subsequent branch updates
|
||||
to be shown in the #openstack-infra channel, add your branch to
|
||||
gerritbot/channels.yaml in the project-config repository.
|
||||
This presentation will show how OpenDev uses Kubernetes and Rook to
|
||||
deploy an entirely virtualized Ceph cluster and CephFS to serve git
|
||||
repositories. The cluster is fully integrated with the OpenStack cloud
|
||||
provider it runs in, so that OpenStack automatically provides load
|
||||
balancing and the virtualized block storage that supports the Ceph
|
||||
cluster. The deployment process is automated with Ansible and allows
|
||||
for easy experimentation and testing since the entire system can be
|
||||
recreated in a matter of minutes.
|
||||
|
|
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 161 B After Width: | Height: | Size: 136 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 136 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 157 B After Width: | Height: | Size: 131 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 166 B After Width: | Height: | Size: 139 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 163 B After Width: | Height: | Size: 139 B |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 167 B After Width: | Height: | Size: 2.7 KiB |
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
viewBox="0 0 486.98252 289.775"
|
||||
height="289.77499"
|
||||
width="486.98251"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg2"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
id="clipPath66"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path68"
|
||||
d="m 533,244.125 72,0 0,71.875 -72,0 0,-71.875 z" /></clipPath><clipPath
|
||||
id="clipPath82"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path84"
|
||||
d="m 471.926,323 27.074,0 0,28 -27.074,0 0,-28 z" /></clipPath><clipPath
|
||||
id="clipPath92"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path94"
|
||||
d="m 502,323 27,0 0,37.035 -27,0 0,-37.035 z" /></clipPath><clipPath
|
||||
id="clipPath110"
|
||||
clipPathUnits="userSpaceOnUse"><path
|
||||
id="path112"
|
||||
d="m 645,324 21.719,0 0,26 -21.719,0 0,-26 z" /></clipPath></defs><g
|
||||
transform="matrix(1.25,0,0,1.25,-589.9075,-160.26875)"
|
||||
id="g10"><g
|
||||
transform="matrix(2,0,0,2,-471.926,-360.035)"
|
||||
id="g62"><g
|
||||
clip-path="url(#clipPath66)"
|
||||
id="g64"><path
|
||||
id="path70"
|
||||
style="fill:#ee265e;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 604.781,279.582 c 0,-19.582 -15.875,-35.457 -35.457,-35.457 -19.582,0 -35.457,15.875 -35.457,35.457 0,19.582 15.875,35.457 35.457,35.457 19.582,0 35.457,-15.875 35.457,-35.457" /><path
|
||||
id="path72"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 546.879,284.004 c 0,-3 2.441,-5.442 5.441,-5.442 3,0 5.442,2.442 5.442,5.442 0,3.004 -2.442,5.441 -5.442,5.441 -3,0 -5.441,-2.437 -5.441,-5.441 m 13.004,0 c 0,-4.168 -3.391,-7.563 -7.563,-7.563 -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 4.172,0 7.563,-3.394 7.563,-7.566" /><path
|
||||
id="path74"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 583.555,289.449 -5.442,0 c -3,0 -5.441,-2.441 -5.441,-5.445 0,-3 2.441,-5.442 5.441,-5.442 l 5.442,0 0,10.887 z m 1.062,-13.008 -6.504,0 c -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 l 6.504,0 c 0.586,0 1.059,-0.476 1.059,-1.062 l 0,-13.008 c 0,-0.586 -0.473,-1.059 -1.059,-1.059" /><path
|
||||
id="path76"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 590.906,285.203 c -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.195 1.199,-1.195 0.66,0 1.196,0.535 1.196,1.195 0,0.66 -0.536,1.199 -1.196,1.199 m 0,10.465 c 0.66,0 1.196,0.539 1.196,1.199 0,0.66 -0.536,1.199 -1.196,1.199 -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.199 1.199,-1.199 m -52.019,-15.242 c 0.222,-0.227 0.527,-0.352 0.843,-0.352 0.321,0 0.622,0.125 0.848,0.352 0.469,0.469 0.469,1.23 0,1.695 -0.453,0.453 -1.242,0.453 -1.695,0 -0.465,-0.465 -0.465,-1.226 0.004,-1.695 m 10.359,-7.742 c -0.453,0.453 -1.242,0.453 -1.695,0 -0.469,-0.469 -0.469,-1.227 0,-1.696 0.234,-0.234 0.539,-0.351 0.847,-0.351 0.309,0 0.614,0.117 0.848,0.351 0.465,0.469 0.465,1.227 0,1.696 m 45.566,-13.707 -10.195,0 c -0.586,0 -1.062,0.476 -1.062,1.062 l 0,10.043 -5.512,0 c -5.828,0 -10.828,3.609 -12.898,8.707 -0.676,-1.652 -1.68,-3.195 -3.02,-4.535 -2.887,-2.887 -6.797,-4.313 -10.836,-4.02 -0.148,-0.265 -0.32,-0.519 -0.543,-0.746 -1.293,-1.293 -3.398,-1.293 -4.695,0 -1.293,1.293 -1.293,3.399 0,4.696 0.629,0.625 1.461,0.972 2.347,0.972 0.887,0 1.719,-0.347 2.348,-0.972 0.52,-0.52 0.82,-1.176 0.922,-1.852 3.344,-0.176 6.566,1.031 8.957,3.422 4.602,4.601 4.602,12.09 0,16.691 -4.602,4.602 -12.086,4.602 -16.687,0 -2.137,-2.136 -3.34,-4.945 -3.438,-7.949 0.594,-0.141 1.137,-0.434 1.578,-0.875 1.293,-1.293 1.293,-3.398 0,-4.695 -1.254,-1.254 -3.441,-1.25 -4.691,0 -1.297,1.297 -1.297,3.402 -0.004,4.695 0.293,0.289 0.629,0.512 0.988,0.672 0.051,3.648 1.481,7.066 4.067,9.652 2.714,2.715 6.277,4.071 9.843,4.071 3.567,0 7.129,-1.356 9.844,-4.071 1.363,-1.363 2.379,-2.937 3.059,-4.621 2.093,5.043 7.066,8.602 12.859,8.602 l 9.73,0 c 0.446,1.308 1.676,2.262 3.133,2.262 1.828,0 3.317,-1.493 3.317,-3.321 0,-1.832 -1.489,-3.32 -3.317,-3.32 -1.457,0 -2.687,0.949 -3.133,2.258 l -9.73,0 c -6.508,0 -11.801,-5.293 -11.801,-11.801 0,-6.508 5.293,-11.801 11.801,-11.801 l 6.574,0 c 0.586,0 1.059,-0.473 1.059,-1.058 l 0,-10.047 8.078,0 0,2.722 -2.852,0.004 c -0.582,0 -1.058,0.477 -1.058,1.059 l 0,15.992 c -1.309,0.445 -2.258,1.672 -2.258,3.129 0,1.832 1.488,3.32 3.32,3.32 1.828,0 3.317,-1.488 3.317,-3.32 0,-1.457 -0.95,-2.684 -2.258,-3.129 l 0,-14.93 2.847,-0.004 c 0.586,0 1.059,-0.476 1.059,-1.058 l 0,-4.844 c 0,-0.586 -0.473,-1.062 -1.059,-1.062" /></g></g><g
|
||||
transform="matrix(2,0,0,2,-471.926,-360.035)"
|
||||
id="g78"><g
|
||||
clip-path="url(#clipPath82)"
|
||||
id="g80"><path
|
||||
id="path86"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 494.559,336.965 c 0,5.172 -4.184,9.379 -9.325,9.379 -5.172,0 -9.379,-4.207 -9.379,-9.379 0,-5.141 4.207,-9.324 9.379,-9.324 5.141,0 9.325,4.183 9.325,9.324 m -9.325,-13.305 c -7.336,0 -13.308,5.969 -13.308,13.305 0,7.34 5.972,13.308 13.308,13.308 7.336,0 13.305,-5.968 13.305,-13.308 0,-7.336 -5.969,-13.305 -13.305,-13.305" /></g></g><g
|
||||
transform="matrix(2,0,0,2,-471.926,-360.035)"
|
||||
id="g88"><g
|
||||
clip-path="url(#clipPath92)"
|
||||
id="g90"><path
|
||||
id="path96"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 524.68,336.965 c 0,5.172 -4.184,9.379 -9.328,9.379 -5.168,0 -9.375,-4.207 -9.375,-9.379 0,-5.141 4.207,-9.324 9.375,-9.324 5.144,0 9.328,4.183 9.328,9.324 m -9.328,-13.305 c -7.336,0 -13.305,5.969 -13.305,13.332 l 0,21.946 c 0,0.656 0.441,1.097 1.101,1.097 l 1.676,0 c 0.66,0 1.102,-0.441 1.102,-1.097 l 0,-12.622 c 2.5,2.52 5.91,3.957 9.426,3.957 7.339,0 13.308,-5.968 13.308,-13.308 0,-7.336 -5.969,-13.305 -13.308,-13.305" /></g></g><g
|
||||
transform="matrix(2,0,0,2,-471.926,-360.035)"
|
||||
id="g98"><path
|
||||
id="path100"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 600.582,347.086 c -5.582,0 -10.121,-4.539 -10.121,-10.121 0,-5.61 4.539,-10.172 10.121,-10.172 5.609,0 10.172,4.562 10.172,10.172 0,5.582 -4.563,10.121 -10.172,10.121 m 12.207,-32.395 -1.68,0 c -0.222,0 -0.304,0.082 -0.304,0.305 l 0,14.637 -1.059,-1.145 c -2.375,-2.562 -5.715,-4.035 -9.164,-4.035 -6.898,0 -12.512,5.613 -12.512,12.512 0,6.898 5.614,12.512 12.512,12.512 6.898,0 12.512,-5.614 12.512,-12.512 l -0.035,-0.949 0.035,0 0,-21.02 c 0,-0.223 -0.082,-0.305 -0.305,-0.305" /><path
|
||||
id="path102"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 535.961,334.949 c 0.859,-4.933 5.016,-7.515 8.734,-7.515 4.258,0 7.996,3.218 8.785,7.515 l -17.519,0 z m 8.734,-11.289 c -7.351,0 -12.898,5.524 -12.898,12.848 0,6.765 4.957,13.765 13.254,13.765 3.851,0 7.457,-1.539 10.179,-4.359 0.403,-0.461 0.395,-1.019 0,-1.469 l -1.027,-1.281 c -0.277,-0.352 -0.574,-0.441 -0.765,-0.453 -0.45,-0.047 -0.704,0.242 -0.762,0.305 -1.332,1.222 -4.094,3.277 -7.625,3.277 -4.567,0 -8.278,-3.27 -9.09,-7.973 l 20.687,0 c 0.688,0 1.098,-0.41 1.098,-1.101 l 0,-0.039 c -0.406,-7.961 -5.773,-13.52 -13.051,-13.52" /><path
|
||||
id="path104"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 621.234,335.043 c 0.844,-5.516 5.446,-8.402 9.555,-8.402 4.715,0 8.844,3.609 9.606,8.398 l 0.113,0.707 -19.379,0 0.105,-0.703 z m 9.914,14.434 c 3.629,0 7.032,-1.454 9.579,-4.086 0.132,-0.157 0.132,-0.27 -0.024,-0.446 l -1.031,-1.289 c -0.086,-0.109 -0.156,-0.148 -0.195,-0.152 -0.067,-0.004 -0.106,0.035 -0.172,0.098 -1.426,1.312 -4.356,3.484 -8.157,3.484 -5.039,0 -9.117,-3.641 -9.914,-8.859 l -0.105,-0.704 21.613,0 c 0.246,0 0.305,-0.054 0.305,-0.304 -0.387,-7.504 -5.426,-12.766 -12.258,-12.766 -6.898,0 -12.101,5.184 -12.101,12.055 0,6.375 4.66,12.969 12.46,12.969" /></g><g
|
||||
transform="matrix(2,0,0,2,-471.926,-360.035)"
|
||||
id="g106"><g
|
||||
clip-path="url(#clipPath110)"
|
||||
id="g108"><path
|
||||
id="path114"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 655.48,349.07 1.067,0 c 0.265,0 0.32,-0.156 0.344,-0.215 l 9.824,-23.972 c 0,-0.008 0.004,-0.012 0.004,-0.02 -0.012,0 -0.031,0 -0.051,0 l -2.188,0 c -0.261,0 -0.32,0.16 -0.339,0.211 l -8.106,20.637 -8.043,-20.629 c -0.023,-0.059 -0.082,-0.219 -0.344,-0.219 l -2.238,0 c -0.019,0 -0.035,0 -0.051,0 0.004,0.012 0.008,0.028 0.016,0.043 l 9.754,23.934 c 0.031,0.074 0.086,0.23 0.351,0.23" /></g></g><path
|
||||
d="m 688.37,338.105 z m 3.454,1.586 c 1.32,0 2.204,-0.882 2.204,-2.194 l 0,-28.688 c 0,-11.852 -9.642,-21.508 -21.524,-21.516 l -0.25,-0.008 c -11.844,0 -21.484,9.656 -21.484,21.524 l 0,28.688 c 0,1.312 0.882,2.194 2.202,2.194 l 3.462,0 c 1.312,0 2.194,-0.882 2.194,-2.194 l 0,-28.688 c 0,-7.586 6.18,-13.766 13.774,-13.766 7.594,0 13.766,6.18 13.766,13.766 l 0,28.688 c 0,1.312 0.882,2.194 2.202,2.194 l 3.454,0 z"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path118" /></g></svg>
|
After Width: | Height: | Size: 9.4 KiB |
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
width="714.14459"
|
||||
height="177.285"
|
||||
viewBox="0 0 714.1446 177.285"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath66"><path
|
||||
d="m 533,244.125 h 72 V 316 h -72 z"
|
||||
id="path68" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath82"><path
|
||||
d="M 471.926,323 H 499 v 28 h -27.074 z"
|
||||
id="path84" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath92"><path
|
||||
d="m 502,323 h 27 v 37.035 h -27 z"
|
||||
id="path94" /></clipPath><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath110"><path
|
||||
d="m 645,324 h 21.719 v 26 H 645 Z"
|
||||
id="path112" /></clipPath></defs><g
|
||||
transform="translate(227.1621,42.19367)"
|
||||
id="g76"><g
|
||||
id="g62"
|
||||
transform="matrix(2.5,0,0,2.5,-1561.8296,-652.50617)"><g
|
||||
id="g64"
|
||||
clip-path="url(#clipPath66)"><path
|
||||
d="m 604.781,279.582 c 0,-19.582 -15.875,-35.457 -35.457,-35.457 -19.582,0 -35.457,15.875 -35.457,35.457 0,19.582 15.875,35.457 35.457,35.457 19.582,0 35.457,-15.875 35.457,-35.457"
|
||||
style="fill:#ee265e;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path70" /><path
|
||||
d="m 546.879,284.004 c 0,-3 2.441,-5.442 5.441,-5.442 3,0 5.442,2.442 5.442,5.442 0,3.004 -2.442,5.441 -5.442,5.441 -3,0 -5.441,-2.437 -5.441,-5.441 m 13.004,0 c 0,-4.168 -3.391,-7.563 -7.563,-7.563 -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 4.172,0 7.563,-3.394 7.563,-7.566"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path72" /><path
|
||||
d="m 583.555,289.449 h -5.442 c -3,0 -5.441,-2.441 -5.441,-5.445 0,-3 2.441,-5.442 5.441,-5.442 h 5.442 z m 1.062,-13.008 h -6.504 c -4.172,0 -7.562,3.395 -7.562,7.563 0,4.172 3.39,7.566 7.562,7.566 h 6.504 c 0.586,0 1.059,-0.476 1.059,-1.062 V 277.5 c 0,-0.586 -0.473,-1.059 -1.059,-1.059"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path74" /><path
|
||||
d="m 590.906,285.203 c -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.195 1.199,-1.195 0.66,0 1.196,0.535 1.196,1.195 0,0.66 -0.536,1.199 -1.196,1.199 m 0,10.465 c 0.66,0 1.196,0.539 1.196,1.199 0,0.66 -0.536,1.199 -1.196,1.199 -0.664,0 -1.199,-0.539 -1.199,-1.199 0,-0.66 0.535,-1.199 1.199,-1.199 m -52.019,-15.242 c 0.222,-0.227 0.527,-0.352 0.843,-0.352 0.321,0 0.622,0.125 0.848,0.352 0.469,0.469 0.469,1.23 0,1.695 -0.453,0.453 -1.242,0.453 -1.695,0 -0.465,-0.465 -0.465,-1.226 0.004,-1.695 m 10.359,-7.742 c -0.453,0.453 -1.242,0.453 -1.695,0 -0.469,-0.469 -0.469,-1.227 0,-1.696 0.234,-0.234 0.539,-0.351 0.847,-0.351 0.309,0 0.614,0.117 0.848,0.351 0.465,0.469 0.465,1.227 0,1.696 m 45.566,-13.707 h -10.195 c -0.586,0 -1.062,0.476 -1.062,1.062 v 10.043 h -5.512 c -5.828,0 -10.828,3.609 -12.898,8.707 -0.676,-1.652 -1.68,-3.195 -3.02,-4.535 -2.887,-2.887 -6.797,-4.313 -10.836,-4.02 -0.148,-0.265 -0.32,-0.519 -0.543,-0.746 -1.293,-1.293 -3.398,-1.293 -4.695,0 -1.293,1.293 -1.293,3.399 0,4.696 0.629,0.625 1.461,0.972 2.347,0.972 0.887,0 1.719,-0.347 2.348,-0.972 0.52,-0.52 0.82,-1.176 0.922,-1.852 3.344,-0.176 6.566,1.031 8.957,3.422 4.602,4.601 4.602,12.09 0,16.691 -4.602,4.602 -12.086,4.602 -16.687,0 -2.137,-2.136 -3.34,-4.945 -3.438,-7.949 0.594,-0.141 1.137,-0.434 1.578,-0.875 1.293,-1.293 1.293,-3.398 0,-4.695 -1.254,-1.254 -3.441,-1.25 -4.691,0 -1.297,1.297 -1.297,3.402 -0.004,4.695 0.293,0.289 0.629,0.512 0.988,0.672 0.051,3.648 1.481,7.066 4.067,9.652 2.714,2.715 6.277,4.071 9.843,4.071 3.567,0 7.129,-1.356 9.844,-4.071 1.363,-1.363 2.379,-2.937 3.059,-4.621 2.093,5.043 7.066,8.602 12.859,8.602 h 9.73 c 0.446,1.308 1.676,2.262 3.133,2.262 1.828,0 3.317,-1.493 3.317,-3.321 0,-1.832 -1.489,-3.32 -3.317,-3.32 -1.457,0 -2.687,0.949 -3.133,2.258 h -9.73 c -6.508,0 -11.801,-5.293 -11.801,-11.801 0,-6.508 5.293,-11.801 11.801,-11.801 h 6.574 c 0.586,0 1.059,-0.473 1.059,-1.058 v -10.047 h 8.078 v 2.722 l -2.852,0.004 c -0.582,0 -1.058,0.477 -1.058,1.059 v 15.992 c -1.309,0.445 -2.258,1.672 -2.258,3.129 0,1.832 1.488,3.32 3.32,3.32 1.828,0 3.317,-1.488 3.317,-3.32 0,-1.457 -0.95,-2.684 -2.258,-3.129 v -14.93 l 2.847,-0.004 c 0.586,0 1.059,-0.476 1.059,-1.058 v -4.844 c 0,-0.586 -0.473,-1.062 -1.059,-1.062"
|
||||
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path76" /></g></g><g
|
||||
id="g78"
|
||||
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><g
|
||||
id="g80"
|
||||
clip-path="url(#clipPath82)"><path
|
||||
d="m 494.559,336.965 c 0,5.172 -4.184,9.379 -9.325,9.379 -5.172,0 -9.379,-4.207 -9.379,-9.379 0,-5.141 4.207,-9.324 9.379,-9.324 5.141,0 9.325,4.183 9.325,9.324 m -9.325,-13.305 c -7.336,0 -13.308,5.969 -13.308,13.305 0,7.34 5.972,13.308 13.308,13.308 7.336,0 13.305,-5.968 13.305,-13.308 0,-7.336 -5.969,-13.305 -13.305,-13.305"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path86" /></g></g><g
|
||||
id="g88"
|
||||
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><g
|
||||
id="g90"
|
||||
clip-path="url(#clipPath92)"><path
|
||||
d="m 524.68,336.965 c 0,5.172 -4.184,9.379 -9.328,9.379 -5.168,0 -9.375,-4.207 -9.375,-9.379 0,-5.141 4.207,-9.324 9.375,-9.324 5.144,0 9.328,4.183 9.328,9.324 m -9.328,-13.305 c -7.336,0 -13.305,5.969 -13.305,13.332 v 21.946 c 0,0.656 0.441,1.097 1.101,1.097 h 1.676 c 0.66,0 1.102,-0.441 1.102,-1.097 v -12.622 c 2.5,2.52 5.91,3.957 9.426,3.957 7.339,0 13.308,-5.968 13.308,-13.308 0,-7.336 -5.969,-13.305 -13.308,-13.305"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path96" /></g></g><g
|
||||
id="g98"
|
||||
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><path
|
||||
d="m 600.582,347.086 c -5.582,0 -10.121,-4.539 -10.121,-10.121 0,-5.61 4.539,-10.172 10.121,-10.172 5.609,0 10.172,4.562 10.172,10.172 0,5.582 -4.563,10.121 -10.172,10.121 m 12.207,-32.395 h -1.68 c -0.222,0 -0.304,0.082 -0.304,0.305 v 14.637 l -1.059,-1.145 c -2.375,-2.562 -5.715,-4.035 -9.164,-4.035 -6.898,0 -12.512,5.613 -12.512,12.512 0,6.898 5.614,12.512 12.512,12.512 6.898,0 12.512,-5.614 12.512,-12.512 l -0.035,-0.949 h 0.035 v -21.02 c 0,-0.223 -0.082,-0.305 -0.305,-0.305"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path100" /><path
|
||||
d="m 535.961,334.949 c 0.859,-4.933 5.016,-7.515 8.734,-7.515 4.258,0 7.996,3.218 8.785,7.515 z m 8.734,-11.289 c -7.351,0 -12.898,5.524 -12.898,12.848 0,6.765 4.957,13.765 13.254,13.765 3.851,0 7.457,-1.539 10.179,-4.359 0.403,-0.461 0.395,-1.019 0,-1.469 l -1.027,-1.281 c -0.277,-0.352 -0.574,-0.441 -0.765,-0.453 -0.45,-0.047 -0.704,0.242 -0.762,0.305 -1.332,1.222 -4.094,3.277 -7.625,3.277 -4.567,0 -8.278,-3.27 -9.09,-7.973 h 20.687 c 0.688,0 1.098,-0.41 1.098,-1.101 v -0.039 c -0.406,-7.961 -5.773,-13.52 -13.051,-13.52"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path102" /><path
|
||||
d="m 621.234,335.043 c 0.844,-5.516 5.446,-8.402 9.555,-8.402 4.715,0 8.844,3.609 9.606,8.398 l 0.113,0.707 h -19.379 z m 9.914,14.434 c 3.629,0 7.032,-1.454 9.579,-4.086 0.132,-0.157 0.132,-0.27 -0.024,-0.446 l -1.031,-1.289 c -0.086,-0.109 -0.156,-0.148 -0.195,-0.152 -0.067,-0.004 -0.106,0.035 -0.172,0.098 -1.426,1.312 -4.356,3.484 -8.157,3.484 -5.039,0 -9.117,-3.641 -9.914,-8.859 l -0.105,-0.704 h 21.613 c 0.246,0 0.305,-0.054 0.305,-0.304 -0.387,-7.504 -5.426,-12.766 -12.258,-12.766 -6.898,0 -12.101,5.184 -12.101,12.055 0,6.375 4.66,12.969 12.46,12.969"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path104" /></g><g
|
||||
id="g106"
|
||||
transform="matrix(2.5,0,0,2.5,-1179.815,-786.7275)"><g
|
||||
id="g108"
|
||||
clip-path="url(#clipPath110)"><path
|
||||
d="m 655.48,349.07 h 1.067 c 0.265,0 0.32,-0.156 0.344,-0.215 l 9.824,-23.972 c 0,-0.008 0.004,-0.012 0.004,-0.02 -0.012,0 -0.031,0 -0.051,0 h -2.188 c -0.261,0 -0.32,0.16 -0.339,0.211 l -8.106,20.637 -8.043,-20.629 c -0.023,-0.059 -0.082,-0.219 -0.344,-0.219 h -2.238 c -0.019,0 -0.035,0 -0.051,0 0.004,0.012 0.008,0.028 0.016,0.043 l 9.754,23.934 c 0.031,0.074 0.086,0.23 0.351,0.23"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path114" /></g></g><path
|
||||
id="path118"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25"
|
||||
d="m 270.555,85.9475 z m 4.3175,1.9825 c 1.65,0 2.755,-1.1025 2.755,-2.7425 V 49.327501 c 0,-14.815 -12.0525,-26.885 -26.905,-26.895 l -0.3125,-0.01 c -14.805,0 -26.855,12.07 -26.855,26.905 V 85.1875 c 0,1.64 1.1025,2.7425 2.7525,2.7425 h 4.3275 c 1.64,0 2.7425,-1.1025 2.7425,-2.7425 V 49.327501 c 0,-9.4825 7.725,-17.2075 17.2175,-17.2075 9.4925,0 17.2075,7.725 17.2075,17.2075 V 85.1875 c 0,1.64 1.1025,2.7425 2.7525,2.7425 z" /></g></svg>
|
After Width: | Height: | Size: 9.3 KiB |
374
index.html
|
@ -3,63 +3,357 @@
|
|||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en-US">
|
||||
<head>
|
||||
<title>Publication Title CHANGE ME</title>
|
||||
<meta name="generator" content=
|
||||
"HTML Tidy for Linux/x86 (vers 1st November 2003), see www.w3.org" />
|
||||
<title>Highly Available Git on CephFS with Rook, Kubernetes, and OpenStack</title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="copyright" content=
|
||||
"Copyright © 2005-2010 W3C (MIT, ERCIM, Keio)" />
|
||||
<meta name="duration" content="60" />
|
||||
<meta name="font-size-adjustment" content="0" />
|
||||
<meta name="duration" content="40" />
|
||||
<link rel="stylesheet" href="styles/slidy.css" type="text/css" />
|
||||
<link rel="stylesheet" href="styles/openstack.css" type="text/css" />
|
||||
<link rel="stylesheet" href="styles/local.css" type="text/css" />
|
||||
<link rel="stylesheet" href="styles/tty-player.css" />
|
||||
<script src="scripts/slidy.js" charset="utf-8" type="text/javascript"></script>
|
||||
<script src="scripts/webcomponents-lite.min.js"></script>
|
||||
<script src="scripts/term.min.js"></script>
|
||||
<script src="scripts/tty-player.min.js"></script>
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="background"><img alt="" id="head-icon"
|
||||
src="graphics/openstack-cloud-software-horizontal-small.png" /></div>
|
||||
<div class="background"><object id="head-logo"
|
||||
data="graphics/opendev.svg" type="image/svg+xml"
|
||||
title="OpenDev logo"><a href="https://opendev.org/"></a></object></div>
|
||||
|
||||
<div class="slide cover titlepage">
|
||||
<!-- hidden style graphics to ensure they are saved with other content -->
|
||||
<img class="hidden" src="graphics/bullet.png" alt="" />
|
||||
<img class="hidden" src="graphics/fold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/unfold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/fold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/nofold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/unfold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-fold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-unfold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-fold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-nofold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-unfold-dim.gif" alt="" />
|
||||
<img src="graphics/openstack-cloud-software-vertical-large.png" alt="OpenStack logo" class="cover" />
|
||||
<h1>Publication Title CHANGE ME<br />
|
||||
<span class="smaller">Publication SubTitle CHANGE ME</span></h1>
|
||||
<hr />
|
||||
<div class="smaller">Your Name CHANGE ME
|
||||
<<a href="mailto:changeme@example.com">changeme@example.com</a>></div>
|
||||
</div>
|
||||
<div class="slide cover title">
|
||||
<!-- hidden style graphics to ensure they are saved with other content -->
|
||||
<img class="hidden" src="graphics/bullet.png" alt="" />
|
||||
<img class="hidden" src="graphics/fold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/unfold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/fold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/nofold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/unfold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-fold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-unfold.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-fold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-nofold-dim.gif" alt="" />
|
||||
<img class="hidden" src="graphics/bullet-unfold-dim.gif" alt="" />
|
||||
<section id="cover">
|
||||
<h1>Highly Available Git on CephFS with Rook, Kubernetes, and OpenStack</h1>
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
<br />
|
||||
</section>
|
||||
</div>
|
||||
<div id="what-is-opendev" class="slide section level1">
|
||||
<h1>What is OpenDev?</h1>
|
||||
<blockquote>
|
||||
<p>Free software needs free tools</p>
|
||||
<p> -- Benjamin Mako Hill</p>
|
||||
</blockquote>
|
||||
<p>OpenStack is one of the top-three most active Open Source
|
||||
projects in the world, along with Chromium and the Linux
|
||||
Kernel.</p>
|
||||
</div>
|
||||
|
||||
<div class="slide">
|
||||
<h1>OpenStack</h1>
|
||||
<div id="service" class="slide section level1">
|
||||
<h1>Service</h1>
|
||||
<ul>
|
||||
<li>Gerrit for code review</li>
|
||||
<li>Gitea for code hosting (cloning, browsing, etc)</li>
|
||||
<li>Zuul for CI and CD (including self-deployment)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="gitea-service" class="slide section level1">
|
||||
<h1>Gitea Service</h1>
|
||||
<p>Everything should be HA and shared</p>
|
||||
<p>Dependencies:</p>
|
||||
<ul>
|
||||
<li>Shared Filesystem (cephfs)</li>
|
||||
<li>Database (Percona xtradb)</li>
|
||||
<li>TODO: Elasticsearch cluster</li>
|
||||
</ul>
|
||||
<p>All run in Kubernetes</p>
|
||||
</div>
|
||||
|
||||
<div id="openstack-cloud" class="slide section level1">
|
||||
<h1>OpenStack Cloud</h1>
|
||||
<ul>
|
||||
<li>Provides services we need for our deployment</li>
|
||||
<ul>
|
||||
<li>Load balancers</li>
|
||||
<li>Block storage</li>
|
||||
<li>Virtual machines</li>
|
||||
</ul>
|
||||
<li>Helpful if specific kernel versions/features or extra devices needed</li>
|
||||
<li>Multiple vendors</li>
|
||||
<ul>
|
||||
<li>Currently using 8 public/private clouds</li>
|
||||
</ul>
|
||||
<li>Free software all the way down</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="openstack-integration-with-kubernetes" class="slide section level1">
|
||||
<h1>OpenStack Integration with Kubernetes</h1>
|
||||
<ul>
|
||||
<li>Cinder driver provides volume backend</li>
|
||||
<ul><li>Useful for database, but not rook</li></ul>
|
||||
<li>Octavia load balancer provides ingress</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="rook" class="slide section level1">
|
||||
<h1>Rook</h1>
|
||||
<ul>
|
||||
<li>Kubernetes operator for storage including Ceph</li>
|
||||
<li>1.0+ has beta support for CSI</li>
|
||||
<li>Using Flexstorage driver
|
||||
<ul>
|
||||
<li>Add volume to k8s minions</li>
|
||||
</ul></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="k8s-on-openstack" class="slide section level1">
|
||||
<h1>k8s-on-openstack</h1>
|
||||
<p><a href="https://github.com/infraly/k8s-on-openstack" class="uri">https://github.com/infraly/k8s-on-openstack</a></p>
|
||||
|
||||
<p>This is the first slide. CHANGE ME and add many more.</p>
|
||||
<p>env.sh: </p>
|
||||
|
||||
<pre>
|
||||
export NAME="opendev-k8s"
|
||||
export IMAGE="Ubuntu 16.04.1 LTS [2017-03-03]"
|
||||
export MASTER_FLAVOR="v2-highcpu-4"
|
||||
export MASTER_BOOT_FROM_VOLUME="True"
|
||||
export NODE_FLAVOR="v2-highcpu-8"
|
||||
export NODE_AUTO_IP="True"
|
||||
export NODE_BOOT_FROM_VOLUME="True"
|
||||
export NODE_VOLUME_SIZE="64"
|
||||
export NODE_EXTRA_VOLUME="True"
|
||||
export NODE_EXTRA_VOLUME_SIZE="80"
|
||||
export NODE_COUNT="3"
|
||||
export USE_OCTAVIA="True"
|
||||
export BLOCK_STORAGE_VERSION='v3'
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<center>
|
||||
<img src="images/openstack-software-diagram.png"/>
|
||||
</center>
|
||||
</div>
|
||||
<div id="k8s-on-openstack-1" class="slide section level1">
|
||||
<h1>k8s-on-openstack</h1>
|
||||
|
||||
<div class="slide">
|
||||
<h1>Thanks!</h1>
|
||||
<p> Bootstrap the cluster </p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/k8s-1.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<p><img src="images/stack-o-pancakes-150x150.png"/>
|
||||
<div id="k8s-on-openstack-2" class="slide section level1">
|
||||
<h1>k8s-on-openstack</h1>
|
||||
<ul>
|
||||
<li>1 master</li>
|
||||
<li>3 minions</li>
|
||||
<li>log in as root</li>
|
||||
<li>use <code>journalctl</code> to see container logs</li>
|
||||
<li>kubectl to examine the k8s cluster</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
These slides available at: <a href="http://docs.openstack.org/infra/publications/">http://docs.openstack.org/infra/publications/</a>
|
||||
</p>
|
||||
<div id="k8s-on-openstack-3" class="slide section level1">
|
||||
<h1>k8s-on-openstack</h1>
|
||||
|
||||
</div>
|
||||
<p> We have a cluster! </p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/k8s-2.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="k8s-on-openstack-for-rook" class="slide section level1">
|
||||
<h1>K8s-on-openstack for Rook</h1>
|
||||
|
||||
<p>A Cinder volume attached to each of the 3 minions for use by Rook</p>
|
||||
<p>env.sh: </p>
|
||||
<pre>
|
||||
export NODE_EXTRA_VOLUME="True"
|
||||
export NODE_EXTRA_VOLUME_SIZE="80"
|
||||
</pre>
|
||||
|
||||
</div>
|
||||
|
||||
<div id="rook-1" class="slide section level1">
|
||||
<h1>Rook</h1>
|
||||
<p>Three step process:</p>
|
||||
<ul>
|
||||
<li>Common</li>
|
||||
<li>Operator</li>
|
||||
<li>Cluster</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="rook-operator" class="slide section level1">
|
||||
<h1>Rook Operator</h1>
|
||||
<p>An operator handles all the fussy parts of bringing up and managing a Ceph cluster.</p>
|
||||
<p>Our Ceph cluster is going to be... special.</p>
|
||||
</div>
|
||||
|
||||
<div id="run-rook" class="slide section level1">
|
||||
<h1>Run Rook</h1>
|
||||
<p> Install common objects and operator</p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/rook-1.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="ceph-all-the-way-down" class="slide section level1">
|
||||
<h1>Ceph All the Way Down</h1>
|
||||
<p>Vexxhost block devices are backed by Ceph.</p>
|
||||
<p>If the devices appears to be rotational, Bluestore allocates 64kB chunks by default. Otherwise, it uses 16kB chunks.</p>
|
||||
|
||||
<pre>
|
||||
Option("bluestore_min_alloc_size_hdd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
|
||||
.set_default(64_K)
|
||||
.set_flag(Option::FLAG_CREATE)
|
||||
.set_description("Default min_alloc_size value for rotational media")
|
||||
.add_see_also("bluestore_min_alloc_size"),
|
||||
|
||||
Option("bluestore_min_alloc_size_ssd", Option::TYPE_SIZE, Option::LEVEL_ADVANCED)
|
||||
.set_default(16_K)
|
||||
.set_flag(Option::FLAG_CREATE)
|
||||
.set_description("Default min_alloc_size value for non-rotational (solid state) media")
|
||||
.add_see_also("bluestore_min_alloc_size"),
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div id="ceph-all-the-way-down-1" class="slide section level1">
|
||||
<h1>Ceph All the Way Down</h1>
|
||||
<p>Storing lots of small files in a Ceph backed by Ceph, there's no reason to allocate larger chunks:</p>
|
||||
<pre>
|
||||
---
|
||||
apiVersion: v1
|
||||
data:
|
||||
config: |
|
||||
[osd]
|
||||
bluestore_min_alloc_size = 4096
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: rook-config-override
|
||||
namespace: rook-ceph
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div id="run-rook-1" class="slide section level1">
|
||||
<h1>Run Rook</h1>
|
||||
<p> Install our custom config </p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/rook-2.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="run-rook-1" class="slide section level1">
|
||||
<h1>Run Rook</h1>
|
||||
<p> Create the cluster </p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/rook-3.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="run-rook-1" class="slide section level1">
|
||||
<h1>Run Rook</h1>
|
||||
<p> Create the filesystem </p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/rook-4.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="rook-ran" class="slide section level1">
|
||||
<h1>Rook Ran</h1>
|
||||
<ul>
|
||||
<li>Working Ceph Cluster</li>
|
||||
<li>Operator used the extra volume on each minion as a Bluestore device</li>
|
||||
<li>Ceph filesystem</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="toolbox" class="slide section level1">
|
||||
<h1>Toolbox</h1>
|
||||
<p>To interact with all layers of Ceph (filesystem, Ceph, Rados), use the toolbox.</p>
|
||||
<ul>
|
||||
<li>Pod with Ceph tools pre-installed</li>
|
||||
<li><code>ceph status</code> and friends</li>
|
||||
<li>Mount filesystem</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="run-rook-1" class="slide section level1">
|
||||
<h1>Toolbox</h1>
|
||||
<p> Create the toolbox </p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/rook-5.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="gitea-service-1" class="slide section level1">
|
||||
<h1>Gitea Service</h1>
|
||||
<p>Everything is HA.</p>
|
||||
<p>Dependencies:</p>
|
||||
<ul>
|
||||
<li>Shared Filesystem (cephfs)</li>
|
||||
<li>Database (Percona xtradb)</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="percona" class="slide section level1">
|
||||
<h1>Percona</h1>
|
||||
<p>Set up Percona XtraDB</p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/pxc.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="gitea" class="slide section level1">
|
||||
<h1>Gitea</h1>
|
||||
<p>Application spec:</p>
|
||||
<pre>
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
volumes:
|
||||
- name: gitea-data
|
||||
flexVolume:
|
||||
driver: ceph.rook.io/rook
|
||||
fsType: ceph
|
||||
options:
|
||||
fsName: myfs
|
||||
clusterNamespace: rook-ceph
|
||||
clusterName: rook-ceph
|
||||
containers:
|
||||
- name: gitea
|
||||
volumeMounts:
|
||||
- name: gitea-data
|
||||
mountPath: /data
|
||||
</pre>
|
||||
</div>
|
||||
|
||||
<div id="gitea-1" class="slide section level1">
|
||||
<h1>Gitea</h1>
|
||||
<p>Set up Gitea</p>
|
||||
<center>
|
||||
<tty-player controls src="recordings/gitea.ttyrec"></tty-player>
|
||||
</center>
|
||||
</div>
|
||||
|
||||
<div id="what-is-opendev" class="slide section level1">
|
||||
<h1>OpenStack and Kubernetes and Rook</h1>
|
||||
<p>Free software stack</p>
|
||||
<p>OpenStack provides backend resources to Kubernetes (Cinder, Octavia)</p>
|
||||
<p>Kubernetes provides a platform for HA services</p>
|
||||
<p>Operators like Rook simplify running HA services</p>
|
||||
<p>Self-deployed at: <a href="https://opendev.org/opendev/system-config/src/branch/master/kubernetes">
|
||||
https://opendev.org/opendev/system-config/src/branch/master/kubernetes</a></p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
|
120
scripts/slidy.js
|
@ -1,6 +1,6 @@
|
|||
/* slidy.js
|
||||
|
||||
Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
||||
Copyright (c) 2005-2011 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
||||
W3C liability, trademark, document use and software licensing
|
||||
rules apply, see:
|
||||
|
||||
|
@ -160,7 +160,10 @@ var w3c_slidy = {
|
|||
// iPhone and iPad, so exclude these from click handler
|
||||
|
||||
if (!this.keyboardless)
|
||||
{
|
||||
this.add_listener(document.body, "click", this.mouse_button_click);
|
||||
this.add_listener(document.body, "mousedown", this.mouse_button_down);
|
||||
}
|
||||
|
||||
this.add_listener(document, "keydown", this.key_down);
|
||||
this.add_listener(document, "keypress", this.key_press);
|
||||
|
@ -285,7 +288,8 @@ var w3c_slidy = {
|
|||
hide_table_of_contents: function (focus) {
|
||||
w3c_slidy.add_class(w3c_slidy.toc, "hidden");
|
||||
|
||||
if (focus && !w3c_slidy.opera)
|
||||
if (focus && !w3c_slidy.opera &&
|
||||
!w3c_slidy.has_class(w3c_slidy.toc, "hidden"))
|
||||
w3c_slidy.help_anchor.focus();
|
||||
},
|
||||
|
||||
|
@ -456,7 +460,7 @@ var w3c_slidy = {
|
|||
{
|
||||
if (abs_dx > 0.5 * abs_dy)
|
||||
{
|
||||
if (dx > 0)
|
||||
if (dx < 0)
|
||||
w3c_slidy.next_slide(true);
|
||||
else
|
||||
w3c_slidy.previous_slide(true);
|
||||
|
@ -820,9 +824,9 @@ var w3c_slidy = {
|
|||
p1.setAttribute("class", "help");
|
||||
|
||||
if (this.keyboardless)
|
||||
p1.innerHTML = "swipe right to move to next slide";
|
||||
p1.innerHTML = "swipe left to move to next slide";
|
||||
else
|
||||
p1.innerHTML = "Space, Right Arrow or swipe right to move to " +
|
||||
p1.innerHTML = "Space, Right Arrow or swipe left to move to " +
|
||||
"next slide, click help below for more details";
|
||||
|
||||
this.add_listener(prompt, "click", function (e) {
|
||||
|
@ -1026,12 +1030,20 @@ var w3c_slidy = {
|
|||
|
||||
while (node)
|
||||
{
|
||||
if (node.nodeType == 1 && // an element
|
||||
(node.nodeName == "H1" ||
|
||||
node.nodeName == "h1" ||
|
||||
node.nodeName == "DIV" ||
|
||||
node.nodeName == "div"))
|
||||
break;
|
||||
if (node.nodeType == 1) // an element
|
||||
{
|
||||
if (node.nodeName == "H1" || node.nodeName == "h1")
|
||||
break;
|
||||
|
||||
if (node.nodeName == "DIV" || node.nodeName == "div")
|
||||
{
|
||||
if (this.has_class(node, "slide"))
|
||||
break;
|
||||
|
||||
if (this.has_class(node, "handout"))
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
next = node.nextSibling;
|
||||
node = document.body.removeChild(node);
|
||||
|
@ -1214,6 +1226,7 @@ var w3c_slidy = {
|
|||
// the iframe with script that set's parent's location.hash
|
||||
// but that won't work for standalone use unless we can
|
||||
// create the page dynamically via a javascript: URL
|
||||
// ### use history.pushState if available
|
||||
set_location: function () {
|
||||
var uri = w3c_slidy.page_address(location.href);
|
||||
var hash = "#(" + (w3c_slidy.slide_number+1) + ")";
|
||||
|
@ -1221,6 +1234,14 @@ var w3c_slidy = {
|
|||
if (w3c_slidy.slide_number >= 0)
|
||||
uri = uri + hash;
|
||||
|
||||
if (typeof(history.pushState) != "undefined")
|
||||
{
|
||||
document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";
|
||||
history.pushState(0, document.title, hash);
|
||||
w3c_slidy.show_slide_number();
|
||||
return;
|
||||
}
|
||||
|
||||
if (w3c_slidy.ie && (w3c_slidy.ie6 || w3c_slidy.ie7))
|
||||
w3c_slidy.push_hash(hash);
|
||||
|
||||
|
@ -1706,7 +1727,7 @@ var w3c_slidy = {
|
|||
if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)
|
||||
{
|
||||
w3c_slidy.hide_toolbar();
|
||||
setTimeout(function () {w3c_slidy.show_toolbar(); }, interval);
|
||||
setTimeout(function () {w3c_slidy.show_toolbar();}, interval);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1982,12 +2003,18 @@ var w3c_slidy = {
|
|||
|
||||
if (key == 34) // Page Down
|
||||
{
|
||||
w3c_slidy.next_slide(!event.shiftKey);
|
||||
if (w3c_slidy.view_all)
|
||||
return true;
|
||||
|
||||
w3c_slidy.next_slide(false);
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
else if (key == 33) // Page Up
|
||||
{
|
||||
w3c_slidy.previous_slide(!event.shiftKey);
|
||||
if (w3c_slidy.view_all)
|
||||
return true;
|
||||
|
||||
w3c_slidy.previous_slide(false);
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
else if (key == 32) // space bar
|
||||
|
@ -1997,10 +2024,7 @@ var w3c_slidy = {
|
|||
}
|
||||
else if (key == 37) // Left arrow
|
||||
{
|
||||
if (w3c_slidy.view_all)
|
||||
return true;
|
||||
|
||||
w3c_slidy.previous_slide(false);
|
||||
w3c_slidy.previous_slide(!event.shiftKey);
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
else if (key == 36) // Home
|
||||
|
@ -2015,10 +2039,7 @@ var w3c_slidy = {
|
|||
}
|
||||
else if (key == 39) // Right arrow
|
||||
{
|
||||
if (w3c_slidy.view_all)
|
||||
return true;
|
||||
|
||||
w3c_slidy.next_slide(false);
|
||||
w3c_slidy.next_slide(!event.shiftKey);
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
else if (key == 13) // Enter
|
||||
|
@ -2099,7 +2120,31 @@ var w3c_slidy = {
|
|||
window.location = w3c_slidy.help_page;
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
//else alert("key code is "+ key);
|
||||
else if (key == 116) // f5 play
|
||||
{
|
||||
var all = document.getElementsByTagName("tty-player");
|
||||
|
||||
for (var i = 0, max = all.length; i < max; i++) {
|
||||
var style = window.getComputedStyle(all[i]);
|
||||
if (!((style.display === 'none') || (style.visibility === 'hidden'))) {
|
||||
all[i]["play"]();
|
||||
}
|
||||
}
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
else if (key == 88) // x pause
|
||||
{
|
||||
var all = document.getElementsByTagName("tty-player");
|
||||
|
||||
for (var i = 0, max = all.length; i < max; i++) {
|
||||
var style = window.getComputedStyle(all[i]);
|
||||
if (!((style.display === 'none') || (style.visibility === 'hidden'))) {
|
||||
all[i]["pause"]();
|
||||
}
|
||||
}
|
||||
return w3c_slidy.cancel(event);
|
||||
}
|
||||
// else alert("key code is "+ key);
|
||||
|
||||
return true;
|
||||
},
|
||||
|
@ -2485,9 +2530,25 @@ var w3c_slidy = {
|
|||
w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;
|
||||
},
|
||||
|
||||
mouse_button_down: function (e) {
|
||||
w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;
|
||||
w3c_slidy.mouse_x = e.clientX;
|
||||
w3c_slidy.mouse_y = e.clientY;
|
||||
},
|
||||
|
||||
// right mouse button click is reserved for context menus
|
||||
// it is more reliable to detect rightclick than leftclick
|
||||
mouse_button_click: function (e) {
|
||||
if (!e)
|
||||
var e = window.event;
|
||||
|
||||
if (Math.abs(e.clientX -w3c_slidy.mouse_x) +
|
||||
Math.abs(e.clientY -w3c_slidy.mouse_y) > 10)
|
||||
return true;
|
||||
|
||||
if (w3c_slidy.selected_text_len > 0)
|
||||
return true;
|
||||
|
||||
var rightclick = false;
|
||||
var leftclick = false;
|
||||
var middleclick = false;
|
||||
|
@ -2554,16 +2615,21 @@ var w3c_slidy = {
|
|||
return true;
|
||||
},
|
||||
|
||||
special_element: function (e) {
|
||||
var tag = e.nodeName.toLowerCase();
|
||||
special_element: function (element) {
|
||||
if (this.has_class(element, "non-interactive"))
|
||||
return false;
|
||||
|
||||
return e.onkeydown ||
|
||||
e.onclick ||
|
||||
var tag = element.nodeName.toLowerCase();
|
||||
|
||||
return element.onkeydown ||
|
||||
element.onclick ||
|
||||
tag == "a" ||
|
||||
tag == "embed" ||
|
||||
tag == "object" ||
|
||||
tag == "video" ||
|
||||
tag == "audio" ||
|
||||
tag == "svg" ||
|
||||
tag == "canvas" ||
|
||||
tag == "input" ||
|
||||
tag == "textarea" ||
|
||||
tag == "select" ||
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
(function(){function G(a){return a instanceof Array||!q?decodeURIComponent(Array.prototype.map.call(a,function(a){return"%"+("0"+a.toString(16)).substr(-2)}).join("")):q.decode(a)}function y(a){a=/^data:([^,]*),([^#]+)/.exec(a);if(null===a)return null;var b=decodeURIComponent(a[2]),d=a[1].replace(/;base64$/,"");return[d,d===a[1]?b:atob(b)]}function H(a){if(!a)return{type:null};switch(/^(?:(.*):)?/.exec(a)[1]){case "npt":return(a=(a=/^(?:npt:)?(?:(?:(\d+):)?(\d+):)?(\d+(?:\.\d+)?)$/i.exec(a))?3600*
|
||||
(a[1]||0)+60*(a[2]||0)+a[3]:null)?{type:"npt",time:a}:{type:null};case "data":if(a=y(a),/^text\/plain$/i.test(a[0]))return{type:"text",data:a[1]}}return{type:null}}function E(a){a|=0;var b=a/60|0;a=("0"+a%60).substr(-2);if(60<=b){var d=b/60|0,b=("0"+b%60).substr(-2);return d+":"+b+":"+a}return b+":"+a}function m(a){return{get:function(){return this.hasAttribute(a)},set:function(b){b?this.setAttribute(a,""):this.removeAttribute(a)}}}function I(a){function b(a,b){f.label=a;f.icon="data:image/svg+xml,%3C?xml version='1.0' encoding='UTF-8' standalone='no'?%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16'%3E%3Cpath stroke='%23999' stroke-width='1' fill='%23eee' d='"+
|
||||
b+"'/%3E%3C/svg%3E"}function d(){b("Play","m2.5,2 0,12 11,-6z")}var c=document.createElement("menu");if(!("type"in c))return null;try{c.type="context"}catch(e){}if("context"!==c.type)return null;c.id="treplay-contextmenu-"+J++;var f=document.createElement("menuitem");f.onclick=function(){a.paused?a.play():a.pause()};d();a.addEventListener("play",function(){b("Pause","m2.5,1.5 0,13 4,0 0,-13zm7,0 0,13 4,0 0,-13z")});a.addEventListener("pause",d);var n=document.createElement("menuitem");c.aa=function(){n.label=
|
||||
a.controls?"Hide Controls":"Show Controls"};c.aa();n.onclick=function(){a.controls=!a.controls};c.appendChild(f);c.appendChild(n);return c}function F(a){this.B=a}var q="TextDecoder"in window?new TextDecoder:null,r,k;r=function(a){Object.defineProperty(this,"code",{value:a})};r.prototype=Object.create(MediaError.prototype);var l=document.createElement("video").played;k=function(a){Object.defineProperty(this,"length",{value:a.length});this._=a};k.prototype=Object.create(TimeRanges.prototype);k.prototype.start=
|
||||
function(a){return a<this.length?this._[a][0]:l.end(0)};k.prototype.end=function(a){return a<this.length?this._[a][1]:l.end(0)};var K={1:["MEDIA_ERR_ABORTED","The fetching process for the media resource was aborted by the user agent at the user's request."],2:["MEDIA_ERR_NETWORK","A network error of some description caused the user agent to stop fetching the media resource, after the resource was established to be usable."],3:["MEDIA_ERR_DECODE","An error of some description occurred while decoding the media resource, after the resource was established to be usable."],
|
||||
4:["MEDIA_ERR_SRC_NOT_SUPPORTED","The media resource indicated by the \u001b[4msrc\u001b[24m attribute was not suitable."]},J=0,L=Terminal.prototype.reset;Terminal.prototype.reset=function(){L.call(this);"useFocus"in this.options&&!this.options.useFocus&&this.showCursor()};var c=F.prototype;c.ga=function(){var a=this,b=a.B;a.N=document.createElement("div");a.N.className="title";b.appendChild(a.N);a.D=new Terminal({useFocus:!1});a.D.on("title",function(a){b.title=a});a.D.open(b);b.addEventListener("error",
|
||||
function(){var b=K[a.error.code];a.D.reset();a.D.write("\u001b]2;Error :-(\u0007\r\n\u001b[1mMediaError.\u001b[31m"+b[0]+"\u001b[m (numeric value "+a.error.code+")\r\n\r\n "+b[1]+"\r\n\r\n(Sorry \u2019bout that.)")});var d=+b.getAttribute("rows"),c=+b.getAttribute("cols");b.resize(0<c?c:b.cols,0<d?d:b.rows);a.defaultPlaybackRate=a.playbackRate=1;a.S=0;a.currentSrc="";a.readyState=0;a.networkState=0;a.paused=!0;a.duration=NaN;a.T=b.getAttribute("window-title")||"";a.V=document.createElement("tty-player-poster");
|
||||
a.V.onclick=function(){b.play()};a.D.on("resize",function(){a.A("resize")});a.K=I(b);a.K&&(b.appendChild(a.K),b.setAttribute("contextmenu",a.K.id));a.G=document.createElement("tty-player-controls");var e=document.createElement("button");e.className="play";e.onclick=function(){b.paused?b.play():b.pause()};b.addEventListener("play",function(){e.className="pause"});b.addEventListener("pause",function(){e.className="play"});a.H=document.createElement("span");a.H.className="current-time";a.H.textContent=
|
||||
"0:00";a.M=document.createElement("span");a.M.className="duration";a.M.textContent="0:00";a.C=document.createElement("input");a.C.type="range";a.C.value=0;a.C.min=0;a.C.step="any";var f=!1;a.C.addEventListener("input",function(){f||(f=!0,a.I=!0,b.currentTime=a.C.value,a.O(),f=!1)});a.C.addEventListener("change",function(){f||(f=!0,a.I=!1,b.currentTime=a.C.value,a.O(),f=!1)});b.addEventListener("durationchange",function(){a.C.max=a.duration;a.M.textContent=E(a.duration)});b.addEventListener("timeupdate",
|
||||
function(){f||(f=!0,a.C.value=a.currentTime,a.O(),f=!1)});a.G.appendChild(e);a.G.appendChild(a.H);a.G.appendChild(a.C);a.G.appendChild(a.M);b.appendChild(a.V);b.appendChild(a.G);a.J=!0};Object.defineProperties(c,{J:{get:function(){return this.P},set:function(a){var b=this,d=b.P;a=!!a;var c=H(b.B.poster);b.P=!!a;var e=a&&!b.error;b.V.style.display=e?"":"none";b.G.classList[e?"add":"remove"]("poster");b.C.disabled=a;b.R();if(d!==a||b.da!==c)if(b.da=c,(d||a)&&b.L(),a)switch(c.type){case "npt":b.L();
|
||||
var f=function(){if(a===b.P&&a){var d=b.currentTime,e=b.I;b.I=!0;b.currentTime=c.time;b.F=0;b.ba();b.I=e;b.currentTime=d}};if(b.data)f();else{var n=function(){b.B.removeEventListener("canplaythrough",n);f()};b.B.addEventListener("canplaythrough",n);b.Z()}break;case "text":b.L(),b.D.write(c.data)}}}});c.A=function(a){var b=document.createEvent("HTMLEvents");b.initEvent(a,!1,!1);a=this.B["on"+a];"function"===typeof a&&a(b);this.B.dispatchEvent(b)};c.R=function(){this.O();this.K&&this.K.aa()};c.O=function(){this.H.textContent=
|
||||
E(this.currentTime);var a=this.C.offsetLeft-this.H.offsetWidth/2;isNaN(this.duration)||(a+=this.currentTime/this.duration*this.C.offsetWidth);this.H.style.left=a+"px"};c.Y=0;c.ba=function(){0<this.F&&this.data[this.F-1][1]>this.currentTime&&(this.L(),this.F=0);for(;this.F<this.data.length&&this.data[this.F][1]<=this.currentTime;)this.D.write(this.data[this.F][0]),this.F++;if(!this.I)if(this.currentTime>=this.duration&&0<this.playbackRate||0>=this.currentTime&&0>this.playbackRate)this.B.loop?this.B.currentTime=
|
||||
0<this.playbackRate?0:this.duration:(this.A("timeupdate"),this.B.pause(),this.A("ended"));else{var a=+new Date;100<=a-this.Y&&(this.Y=a,this.A("timeupdate"))}};c.L=function(){this.D.reset();this.B.title=this.T};c.Z=function(){2>this.networkState&&this.$()};c.$=function(){this.L();this.W&&this.W.abort();2!==this.networkState&&1!==this.networkState||this.A("abort");if(0!==this.networkState){this.A("emptied");this.readyState=0;this.paused=!0;clearInterval(this.ca);var a=this.currentTime;this.F=this.currentTime=
|
||||
0;0!==a&&this.A("timeupdate");this.data=null;this.duration=NaN}this.playbackRate=this.defaultPlaybackRate;this.error=null;this.fa()};c.fa=function(){var a=this;a.networkState=3;a.J=!0;var b=a.B.getAttribute("src");null===b?a.networkState=0:(a.networkState=2,a.A("loadstart"),""===b?a.X():(b=new URL(b.trim(),a.B.baseURI),a.currentSrc=b.toString(),setTimeout(function(){a.ea()},0)))};c.X=function(){this.error=new r(4);this.networkState=3;this.J=!0;this.A("error")};c.ea=function(){function a(){delete d.W}
|
||||
function b(b,c){if(200===b.status){var e;try{var h;if(c){var f=b.responseText;h=[];for(var p=0;p<f.length;p++)h.push(f.charCodeAt(p)&255)}else h=b.response;for(var k=h instanceof Array,f=!0,p=null,m=[],g=0,l=0,r=k?h.length:h.byteLength;g<r;){var z,A,t;if(k)z=h[g]+(h[g+1]<<8)+(h[g+2]<<16)+(h[g+3]<<24),A=h[g+4]+(h[g+5]<<8)+(h[g+6]<<16)+(h[g+7]<<24),t=h[g+8]+(h[g+9]<<8)+(h[g+10]<<16)+(h[g+11]<<24);else{var B=new DataView(h,g);z=B.getUint32(0,!0);A=B.getUint32(4,!0);t=B.getUint32(8,!0)}var w=z+A/1E6,
|
||||
g=g+12,u=k?h.slice(g,g+t):new Uint8Array(h,g,t),C;if(f)C=G(u);else{for(var D=u,q=[],v=0;v<D.length;v+=32768)q.push(String.fromCharCode.apply(null,D["subarray"in D?"subarray":"slice"](v,v+32768)));C=q.join("")}u=C;if(12===g){var l=w,x=/^\x1b%(G|@)\x1b\[8;([0-9]+);([0-9]+)t$/.exec(u);x&&(f="G"===x[1],p={rows:+x[2],cols:+x[3]})}w-=l;g+=t;m.push([u,w])}e={ia:1E8<=l?new Date(1E3*l):null,U:p,data:m}}catch(y){a();d.X();return}d.currentTime=0;d.F=0;d.data=e.data;d.duration=0===e.data.length?0:e.data[e.data.length-
|
||||
1][1];d.A("durationchange");e.U&&d.B.resize(e.U.cols,e.U.rows);d.readyState=1;d.A("loadedmetadata");0<d.S&&(d.currentTime=d.S);d.S=0;d.A("progress");d.networkState=1;d.A("suspend");d.readyState=4;d.A("loadeddata");d.A("canplay");d.A("canplaythrough");a()}else a(),d.X()}var d=this,c;c=y(d.currentSrc);if(null!==c)b({status:200,responseText:c[1]},!0);else{var e=new XMLHttpRequest;"use-credentials"===d.B.crossOrigin?e.withCredentials=!0:"anonymous"===d.B.crossOrigin&&"mozAnon"in e&&(e.ha=!0);e.onabort=
|
||||
a;e.open("GET",d.currentSrc);c=!("responseType"in e);e.responseType="arraybuffer";"arraybuffer"!==e.responseType&&(c=!0);c?(e.overrideMimeType("text/plain; charset=x-user-defined"),e.onreadystatechange=function(){4===e.readyState&&b(e,!0)}):e.onload=e.onerror=function(){b(e,!1)};d.W=e;try{e.send()}catch(f){b(e,void 0)}}};c=Object.create(HTMLElement.prototype);c.createdCallback=function(){this._=new F(this);this._.ga();"none"!==this.preload&&this.load();this.autoplay&&this.play()};c.attributeChangedCallback=
|
||||
function(a){"src"===a&&this.hasAttribute("src")?(this.pause(),this.load()):"controls"===a&&this.hasAttribute("controls")?this._.R():"poster"===a&&(this._.J=this._.J)};c.attachedCallback=function(){this._.R()};Object.defineProperties(c,{error:{get:function(){return this._.error}},src:{get:function(){return this._.currentSrc},set:function(a){this.setAttribute("src",a)}},currentSrc:{get:function(){return this._.currentSrc}},crossOrigin:{get:function(){var a=this.getAttribute("crossorigin");return null===
|
||||
a||"anonymous"===a||"use-credentials"===a?a:"anonymous"},set:function(a){null===a?this.removeAttribute("crossorigin"):"use-credentials"===a?this.setAttribute("crossorigin",a):this.setAttribute("crossorigin","anonymous")}},NETWORK_EMPTY:{value:0},NETWORK_IDLE:{value:1},NETWORK_LOADING:{value:2},NETWORK_NO_SOURCE:{value:3},networkState:{get:function(){return this._.networkState}},preload:{get:function(){var a=this.getAttribute("preload");return"none"===a||"metadata"===a||"auto"===a?a:"auto"},set:function(a){"none"===
|
||||
a||"metadata"===a||"auto"===a?this.setAttribute("metadata",a):this.removeAttribute("metadata")}},buffered:{get:function(){return this.seekable}},HAVE_NOTHING:{value:0},HAVE_METADATA:{value:1},HAVE_CURRENT_DATA:{value:2},HAVE_FUTURE_DATA:{value:3},HAVE_ENOUGH_DATA:{value:4},readyState:{get:function(){return this._.readyState}},seeking:{value:!1},currentTime:{get:function(){return this._.currentTime},set:function(a){if(!this._.data)throw document.createElement("video").currentTime=1,void 0;this._.currentTime=
|
||||
Math.max(0,Math.min(a,this.duration));this._.ba()}},duration:{get:function(){return this._.duration}},paused:{get:function(){return this._.paused}},defaultPlaybackRate:{get:function(){return this._.defaultPlaybackRate},set:function(a){a=+a;var b=this._.defaultPlaybackRate!==a;this._.defaultPlaybackRate=a;b&&this._.A("ratechange")}},playbackRate:{get:function(){return this._.playbackRate},set:function(a){a=+a;var b=this._.playbackRate!==a;this._.playbackRate=a;b&&this._.A("ratechange")}},played:{value:l},
|
||||
seekable:{get:function(){return 4===this.readyState?new k([0,this.duration]):l}},ended:{get:function(){return this.paused&&this.currentTime===(0>this.playbackRate?0:this.duration)}},autoplay:m("autoplay"),loop:m("loop"),controls:m("controls"),defaultMuted:m("muted"),textTracks:{get:function(){return document.createElement("video").textTracks}},title:{get:function(){return this._.N.textContent},set:function(a){this._.N.textContent=a;this._.A("titlechange")}},defaultTitle:{get:function(){return this._.T},
|
||||
set:function(a){this._.T=a;this._.A("titlechange")}},cols:{get:function(){return this._.D.cols}},rows:{get:function(){return this._.D.rows}},poster:{get:function(){return(this.getAttribute("poster")||"").trim()},set:function(a){this.setAttribute("poster",a)}}});c.load=function(){this._.$()};c.canPlayType=function(){return"maybe"};c.play=function(){function a(){c.ended&&(c.currentTime=0>c.playbackRate?c.duration:0);c._.J=!1;c._.paused=!1;var a=new Date;c._.ca=setInterval(function(){var b=new Date;
|
||||
c._.I||(c.currentTime+=(b-a)/1E3*c.playbackRate);a=b},16);c._.A("play")}function b(){c.removeEventListener("loadeddata",b);a()}var c=this;this._.paused&&(this._.data?a():(this.addEventListener("loadeddata",b),this._.Z()))};c.pause=function(){this._.paused||(this._.paused=!0,clearInterval(this._.ca),this._.A("pause"))};c.volume=1;c.muted=!1;c.addTextTrack=function(){return null};c.ontitlechange=null;c.resize=function(a,b){this._.D.resize(a,b)};c.pretendToBeAVideo=function(){Object.defineProperties(this,
|
||||
{tagName:{value:"VIDEO"},width:{get:function(){return this.offsetWidth},set:function(a){this.style.fontSize="100%";this.style.fontSize=a/this.offsetWidth*100+"%"}},height:{get:function(){return this.offsetHeight},set:function(a){this.style.fontSize="100%";this.style.fontSize=a/this.offsetHeight*100+"%"}},videoWidth:{get:function(){return this.width}},videoHeight:{get:function(){return this.height}}})};document.registerElement("tty-player",{prototype:c})})();
|
|
@ -0,0 +1,456 @@
|
|||
/* w3c-blue.css
|
||||
|
||||
Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.
|
||||
W3C liability, trademark, document use and software licensing
|
||||
rules apply, see:
|
||||
|
||||
http://www.w3.org/Consortium/Legal/copyright-documents
|
||||
http://www.w3.org/Consortium/Legal/copyright-software
|
||||
*/
|
||||
body
|
||||
{
|
||||
margin: 0 0 0 0;
|
||||
padding: 0 0 0 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: black;
|
||||
background-color: white;
|
||||
font-family: "Open Sans", OpenSans, sans-serif;
|
||||
font-size: 14pt;
|
||||
}
|
||||
|
||||
div.slide.titlepage {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.slide.titlepage h1 {
|
||||
padding-top: 40%;
|
||||
}
|
||||
|
||||
div.slide {
|
||||
z-index: 20;
|
||||
margin: 0 0 0 0;
|
||||
padding: 0;
|
||||
border-width: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
line-height: 120%;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
div.background {
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
vertical-align: bottom;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: auto;
|
||||
height: 5.0em;
|
||||
padding: 0 0 0 0.2em;
|
||||
margin: 0 0 0 0;
|
||||
background-color: #fff;
|
||||
border-bottom: solid 3px #ee265e; /* #071d49; */
|
||||
}
|
||||
|
||||
div.background img {
|
||||
height: 4em;
|
||||
}
|
||||
|
||||
/* this rule is hidden from IE which doesn't support + selector */
|
||||
div.slide + div[class].slide { page-break-before: always;}
|
||||
|
||||
div.slide h1 {
|
||||
padding-right: 3em;
|
||||
padding-top: 1em;
|
||||
margin-bottom: 1.2em;
|
||||
margin-left: 5em;
|
||||
margin-right: 0;
|
||||
min-height: 2.3em;
|
||||
color: #ee265e; /* #071d49; */
|
||||
height: 2.2em;
|
||||
font-size: 160%;
|
||||
line-height: 1.1em;
|
||||
}
|
||||
|
||||
div.slide h1 a {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.slide h1 a:link {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.slide h1 a:visited {
|
||||
color: white;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.slide h1 a:hover {
|
||||
color: white;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.slide h1 a:active {
|
||||
color: red;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
#head-logo {
|
||||
margin: 0;
|
||||
margin-top: 0.25em;
|
||||
padding-top: 0.3em;
|
||||
padding-bottom: 0.2em;
|
||||
padding-left: .3em;
|
||||
padding-right: 0;
|
||||
height: 3.8em;
|
||||
width: 5.8em;
|
||||
float: left;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
#head-logo-fallback {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-top: -0.8em;
|
||||
width: 4.8em;
|
||||
float: right;
|
||||
z-index: 2;
|
||||
}
|
||||
|
||||
/* the next two classes support vertical and horizontal centering */
|
||||
div.vbox {
|
||||
float: left;
|
||||
height: 40%;
|
||||
width: 50%;
|
||||
margin-top: -240px;
|
||||
}
|
||||
div.hbox {
|
||||
width:60%;
|
||||
margin-top: 0;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
height: 60%;
|
||||
border:1px solid silver;
|
||||
background:#F0F0F0;
|
||||
overflow:auto;
|
||||
text-align:left;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
/* styling for named background */
|
||||
div.background.slanty {
|
||||
z-index: 2;
|
||||
bottom: 0;
|
||||
height: 100%;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
div.background.slanty img { margin-top: 4em; width: 100%; height: 80% }
|
||||
|
||||
/* the following makes the pre background translucent */
|
||||
/* opacity is a CSS3 property but supported by Mozilla family */
|
||||
/* filter is an IE specific feature that also requires width */
|
||||
div.slide.slanty pre {
|
||||
width: 93%; /* needed for IE filter to work */
|
||||
opacity: .8;
|
||||
filter: alpha(opacity=80);
|
||||
}
|
||||
|
||||
img.withBorder {
|
||||
border: 2px solid #c60;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
li pre { margin-left: 0; }
|
||||
|
||||
@media print { pre { font-size: 60% } }
|
||||
|
||||
blockquote { font-style: italic }
|
||||
|
||||
img { background-color: transparent }
|
||||
|
||||
p.copyright { font-size: smaller }
|
||||
|
||||
.center { text-align: center }
|
||||
.footnote { font-size: smaller; margin-left: 2em; }
|
||||
|
||||
a img { border-width: 0; border-style: none }
|
||||
|
||||
a:visited { color: navy }
|
||||
a:link { color: navy }
|
||||
a:hover { color: red; text-decoration: underline }
|
||||
a:active { color: red; text-decoration: underline }
|
||||
|
||||
a {text-decoration: none}
|
||||
.navbar a:link {color: white}
|
||||
.navbar a:visited {color: yellow}
|
||||
.navbar a:active {color: red}
|
||||
.navbar a:hover {color: red}
|
||||
|
||||
ul { list-style-type: square; }
|
||||
ul ul { list-style-type: disc; }
|
||||
ul ul ul { list-style-type: circle; }
|
||||
ul ul ul ul { list-style-type: disc; }
|
||||
li { margin-left: 0.5em; margin-top: 0.5em; }
|
||||
li li { font-size: 85%; font-style: italic }
|
||||
li li li { font-size: 85%; font-style: normal }
|
||||
|
||||
div dt
|
||||
{
|
||||
margin-left: 0;
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.5em;
|
||||
font-weight: bold;
|
||||
}
|
||||
div dd
|
||||
{
|
||||
margin-left: 2em;
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
p,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {
|
||||
margin-left: 1.4em;
|
||||
margin-right: 1em;
|
||||
}
|
||||
|
||||
p.subhead { font-weight: bold; margin-top: 2em; }
|
||||
|
||||
div.cover p.explanation {
|
||||
font-style: italic;
|
||||
margin-top: 3em;
|
||||
}
|
||||
|
||||
|
||||
.smaller { font-size: smaller }
|
||||
|
||||
td,th { padding: 0.2em }
|
||||
|
||||
ul {
|
||||
margin: 0.5em 1.5em 0.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ol {
|
||||
margin: 0.5em 1.5em 0.5em 1.5em;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
ul { list-style-type: square; }
|
||||
ul ul { list-style-type: disc; }
|
||||
ul ul ul { list-style-type: circle; }
|
||||
ul ul ul ul { list-style-type: disc; }
|
||||
li { margin-left: 0.5em; margin-top: 0.5em; }
|
||||
li li { font-size: 85%; font-style: italic }
|
||||
li li li { font-size: 85%; font-style: normal }
|
||||
|
||||
|
||||
ul li {
|
||||
list-style: none;
|
||||
margin: 0.1em 0em 0.6em 0;
|
||||
padding: 0 0 0 40px;
|
||||
background: transparent url(../graphics/bullet.png) no-repeat 5px 0.3em;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
/* workaround IE's failure to support background on li for print media */
|
||||
@media print { ul li { list-style: disc; padding-left: 0; background: none; } }
|
||||
|
||||
ol li {
|
||||
margin: 0.1em 0em 0.6em 1.5em;
|
||||
padding: 0 0 0 0px;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
li li {
|
||||
font-size: 85%;
|
||||
font-style: italic;
|
||||
list-style-type: disc;
|
||||
background: transparent;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
li li li {
|
||||
font-size: 85%;
|
||||
font-style: normal;
|
||||
list-style-type: circle;
|
||||
background: transparent;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
li li li li {
|
||||
list-style-type: disc;
|
||||
background: transparent;
|
||||
padding: 0 0 0 0;
|
||||
}
|
||||
|
||||
/* rectangular blue bullet + unfold/nofold/fold widget */
|
||||
|
||||
/*
|
||||
setting class="outline on ol or ul makes it behave as an
|
||||
ouline list where blocklevel content in li elements is
|
||||
hidden by default and can be expanded or collapsed with
|
||||
mouse click. Set class="expand" on li to override default
|
||||
*/
|
||||
|
||||
ol.outline li:hover { cursor: pointer }
|
||||
ol.outline li.nofold:hover { cursor: default }
|
||||
|
||||
ul.outline li:hover { cursor: pointer }
|
||||
ul.outline li.nofold:hover { cursor: default }
|
||||
|
||||
ol.outline { list-style:decimal; }
|
||||
ol.outline ol { list-style-type:lower-alpha }
|
||||
|
||||
ol.outline li.nofold {
|
||||
padding: 0 0 0 20px;
|
||||
background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.3em;
|
||||
}
|
||||
ol.outline li.unfolded {
|
||||
padding: 0 0 0 20px;
|
||||
background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.3em;
|
||||
}
|
||||
ol.outline li.folded {
|
||||
padding: 0 0 0 20px;
|
||||
background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.3em;
|
||||
}
|
||||
ol.outline li.unfolded:hover {
|
||||
padding: 0 0 0 20px;
|
||||
background: transparent url(../graphics/fold.gif) no-repeat 0px 0.3em;
|
||||
}
|
||||
ol.outline li.folded:hover {
|
||||
padding: 0 0 0 20px;
|
||||
background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.3em;
|
||||
}
|
||||
|
||||
ul.outline li.nofold {
|
||||
padding: 0 0 0 52px;
|
||||
background: transparent url(../graphics/bullet-nofold-dim.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
ul.outline li.unfolded {
|
||||
padding: 0 0 0 52px;
|
||||
background: transparent url(../graphics/bullet-fold-dim.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
ul.outline li.folded {
|
||||
padding: 0 0 0 52px;
|
||||
background: transparent url(../graphics/bullet-unfold-dim.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
ul.outline li.unfolded:hover {
|
||||
padding: 0 0 0 52px;
|
||||
background: transparent url(../graphics/bullet-fold.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
ul.outline li.folded:hover {
|
||||
padding: 0 0 0 52px;
|
||||
background: transparent url(../graphics/bullet-unfold.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
|
||||
li ul.outline li.nofold {
|
||||
padding: 0 0 0 21px;
|
||||
background: transparent url(../graphics/nofold-dim.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
li ul.outline li.unfolded {
|
||||
padding: 0 0 0 21px;
|
||||
background: transparent url(../graphics/fold-dim.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
li ul.outline li.folded {
|
||||
padding: 0 0 0 21px;
|
||||
background: transparent url(../graphics/unfold-dim.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
li ul.outline li.unfolded:hover {
|
||||
padding: 0 0 0 21px;
|
||||
background: transparent url(../graphics/fold.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
li ul.outline li.folded:hover {
|
||||
padding: 0 0 0 21px;
|
||||
background: transparent url(../graphics/unfold.gif) no-repeat 5px 0.3em;
|
||||
}
|
||||
|
||||
img {
|
||||
image-rendering: optimize-quality;
|
||||
}
|
||||
|
||||
img.withBorder {
|
||||
border: 2px solid #c60;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
div.header {
|
||||
position: absolute;
|
||||
z-index: 2;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 0;
|
||||
bottom: auto;
|
||||
height: 2.95em;
|
||||
width: 100%;
|
||||
padding: 0 0 0 0;
|
||||
margin: 0 0 0 0;
|
||||
border-width: 0;
|
||||
border-style: solid;
|
||||
background-color: #005A9C;
|
||||
border-bottom-width: thick;
|
||||
border-bottom-color: #95ABD0;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
position: absolute;
|
||||
z-index: 80;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
height: 3.5em;
|
||||
margin: 0;
|
||||
font-size: 80%;
|
||||
font-weight: bold;
|
||||
padding-left: 1em;
|
||||
padding-right: 0;
|
||||
padding-top: 0.3em;
|
||||
padding-bottom: 0;
|
||||
color: #003366;
|
||||
background-color: #95ABD0;
|
||||
}
|
||||
|
||||
/* this is a hack to hide property from IE6 and below */
|
||||
div[class="footer"] {
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
#hidden-bullet {
|
||||
visibility: hidden;
|
||||
display: none;
|
||||
}
|
||||
|
||||
div.slide.cover {
|
||||
padding-top: 0;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
div.slide.cover h1 {
|
||||
margin-top:3em;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
#cover {
|
||||
/* background-image: url("../graphics/banner.jpg"); */
|
||||
background-position: center center;
|
||||
background-size: cover;
|
||||
height: 18em;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
margin-top: 6.0em;
|
||||
}
|
||||
|
||||
/* for Bert as an ardent user of the old W3C slidemaker tool */
|
||||
|
||||
div.comment { display: none; visibility: hidden }
|
||||
|
||||
@media print {
|
||||
div.slide h1 { background: transparent; color: black }
|
||||
div.slide.cover { background: transparent; color: black }
|
||||
div.slide.cover h1 { background: transparent; color: black }
|
||||
div.comment { display: block; visibility: visible }
|
||||
}
|
|
@ -160,6 +160,10 @@ div.toc-heading {
|
|||
text-align: center;
|
||||
}
|
||||
|
||||
img {
|
||||
image-rendering: optimize-quality;
|
||||
}
|
||||
|
||||
pre {
|
||||
font-size: 80%;
|
||||
font-weight: bold;
|
||||
|
|
|
@ -0,0 +1,223 @@
|
|||
.terminal {
|
||||
font-family: monospace, monospace;
|
||||
cursor: text;
|
||||
line-height: initial;
|
||||
font-size: 12pt;
|
||||
}
|
||||
.terminal-cursor {
|
||||
background: #00ff00;
|
||||
color: black;
|
||||
}
|
||||
|
||||
tty-player {
|
||||
border: 2px solid #285577;
|
||||
border-top: 1px solid #4c7899;
|
||||
}
|
||||
|
||||
tty-player .title {
|
||||
background: #285577;
|
||||
border-bottom: 1px solid #4c7899;
|
||||
color: #fff;
|
||||
font-family: sans-serif;
|
||||
font-weight: bold;
|
||||
padding: 0.2em;
|
||||
line-height: 1;
|
||||
height: 1em;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
tty-player menu {
|
||||
display: none;
|
||||
}
|
||||
|
||||
tty-player {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
tty-player:not([controls]) tty-player-controls {
|
||||
display: none;
|
||||
}
|
||||
|
||||
tty-player-poster {
|
||||
/* XXX: <video> has an overlay with play button if [controls] over the poster *image*, but here we have an overlay with play button regardless. Perhaps specifying a poster currentTime or script might work? */
|
||||
background: rgba(53, 47, 47, 0.5);
|
||||
opacity: 0.5;
|
||||
transition: opacity 0.2s linear;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-image: url("data:image/svg+xml,%3C?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3E%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='66'%20height='66'%3E%3Cfilter%20id='f'%3E%3CfeColorMatrix%20type='matrix'%20values='0%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%200%20.5%200'/%3E%3CfeGaussianBlur%20result='r'%20stdDeviation='2'/%3E%3CfeComposite%20in='SourceGraphic'%20in2='r'/%3E%3C/filter%3E%3Cpath%20fill='%23ddd'%20stroke='%23ccc'%20stroke-width='1'%20d='M33,5.5A27.5,27.5%200%200%200%205.5,33%2027.5,27.5%200%200%200%2033,60.5%2027.5,27.5%200%200%200%2060.5,33%2027.5,27.5%200%200%200%2033,5.5Zm-9.5,13%2025,14.5-25,14.5%200,-29z'%20filter='url(%23f)'/%3E%3C/svg%3E");
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
tty-player[controls] tty-player-poster {
|
||||
bottom: 28px;
|
||||
}
|
||||
|
||||
tty-player:hover tty-player-poster {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
tty-player-controls {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: rgba(53, 47, 47, 0.5);
|
||||
opacity: 0;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
transition: opacity 0.2s linear;
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/* Browsers tend to show the controls when a <video> ends, too; I, however, am not doing this for now at least as the controls will overlap with what is often the most important part of the terminal (the bottom). For this reason, I haven’t hooked up any support for that either, only showing controls persistently when the poster is up. */
|
||||
tty-player-controls.poster,
|
||||
tty-player:hover tty-player-controls {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range], tty-player-controls button {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: none;
|
||||
background: none;
|
||||
font: inherit;
|
||||
line-height: inherit;
|
||||
-moz-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
tty-player-controls button {
|
||||
padding: 0;
|
||||
background: none;
|
||||
opacity: 0.75;
|
||||
flex: 0 1 auto;
|
||||
line-height: 1;
|
||||
width: 28px;
|
||||
height: 28px;
|
||||
}
|
||||
|
||||
tty-player-controls button:hover {
|
||||
color: #777;
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range] {
|
||||
flex: 1;
|
||||
height: 8px;
|
||||
margin: 10px 5px;
|
||||
}
|
||||
|
||||
tty-player-controls button {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
}
|
||||
|
||||
tty-player-controls button.play {
|
||||
background-image: url("data:image/svg+xml,%3C?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3E%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='14'%20height='16'%3E%3Cpath%20fill='%23ccc'%20d='M0,0%200,16%2014,8Z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
tty-player-controls button.pause {
|
||||
background-image: url("data:image/svg+xml,%3C?xml%20version='1.0'%20encoding='UTF-8'%20standalone='no'?%3E%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='14'%20height='16'%3E%3Cpath%20fill='%23ccc'%20d='M1,0L1,16L5,16L5,0L0,0zM9,0L9,16L13,16L13,0L9,0z'/%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]:focus {
|
||||
box-shadow: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-moz-range-track,
|
||||
tty-player-controls input[type=range]::-moz-range-thumb,
|
||||
tty-player-controls input[type=range]::-moz-range-progress {
|
||||
border-radius: 4px;
|
||||
height: 8px;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-moz-range-track {
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-moz-range-thumb {
|
||||
-moz-appearance: none;
|
||||
width: 0;
|
||||
background: transparent;
|
||||
border: 0;
|
||||
border-radius: 0;
|
||||
box-shadow: 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-moz-range-progress {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
input[type=range] {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-webkit-slider-runnable-track {
|
||||
-webkit-appearance: none;
|
||||
height: 8px;
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
//border-radius: 4px;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-webkit-slider-thumb:before {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 50%;
|
||||
left: -9999px;
|
||||
background: #fff;
|
||||
content: '';
|
||||
height: 8px;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
tty-player-controls input[type=range]::-webkit-slider-thumb {
|
||||
-webkit-appearance: none;
|
||||
width: 0;
|
||||
height: 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* I have not altered IE’s styles because I feel them already satisfactory */
|
||||
|
||||
tty-player-controls .current-time {
|
||||
position: absolute;
|
||||
color: #ddd;
|
||||
background: #888;
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
box-shadow: 0 1px rgba(0, 0, 0, 0.5), 0 1px 2px rgba(0, 0, 0, 0.5), inset 0 1px rgba(255, 255, 255, 0.2);
|
||||
padding: 0 5px;
|
||||
line-height: 16px;
|
||||
border-radius: 4px;
|
||||
top: -7px;
|
||||
}
|
||||
|
||||
tty-player-controls .current-time::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
background: linear-gradient(-45deg, #888 50%, transparent 50%);
|
||||
box-shadow: 1px 1px rgba(0, 0, 0, 0.5), 1px 1px 1px rgba(0, 0, 0, 0.5);
|
||||
bottom: -3px;
|
||||
left: 50%;
|
||||
margin-left: -5px;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
tty-player-controls .duration {
|
||||
font-family: sans-serif;
|
||||
font-size: 12px;
|
||||
color: #999;
|
||||
line-height: 18px;
|
||||
padding: 5px;
|
||||
}
|