commit 023b613fca02b684692cf76aff170741f0c39250 Author: Nico Schottelius Date: Thu Jan 9 11:15:47 2020 +0100 Import dot files from the notes repo diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..58b07e8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*.png +*.pdf +*.svg diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9400773 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +all: + for dot in *.dot; do make $${dot%%.dot}.png; done + for dot in *.dot; do make $${dot%%.dot}.pdf; done + for dot in *.dot; do make $${dot%%.dot}.svg; done + +clean: + rm -f *.png *.pdf *.svg + +%.png: %.dot + dot -Tpng < $< > $@ + +%.pdf: %.dot + dot -Tpdf < $< > $@ + +%.svg: %.dot + dot -Tsvg < $< > $@ diff --git a/desktop-in-a-browser.dot b/desktop-in-a-browser.dot new file mode 100644 index 0000000..dd17911 --- /dev/null +++ b/desktop-in-a-browser.dot @@ -0,0 +1,15 @@ +digraph G { + node [ shape=box ] + + local_browser [ label="Local Browser" ]; + desktop_ungleich [ label="ungleich Desktop\n(Guacamole)" ]; + vm [ label="Dedicated VM" ]; + mydesktop [ label="My Desktop in a VM" ]; + mobile_phone [ label="My phone" ]; + + local_browser->desktop_ungleich->vm->mydesktop; + desktop_ungleich->mobile_phone [ label="2FA" ]; + + + +} diff --git a/digitalglarus.dot b/digitalglarus.dot new file mode 100644 index 0000000..58e92aa --- /dev/null +++ b/digitalglarus.dot @@ -0,0 +1,95 @@ +digraph G { + start [ label="Enter Digital Glarus" ] + quietnot [ label="Prefer People\nor quietness?" shape=diamond ] + interested [ label="Are you interested\nin either sustainability,\nIT, hacking\nor mountains?" shape=diamond ]; + nothere [ label="Sorry, this place\nis not for you." shape=box ] + + schwanden [ label="Digital Chalet" ] + diesbach [ label="Hacking Hotel" ] + movein [ label="Welcome to Digital Glarus" ]; + + + start->interested + interested->quietnot [ label="Yes" ]; + interested->nothere [ label="No" ]; + + quietnot->schwanden [ label="I prefer quiet" ]; + quietnot->diesbach [ label="I prefer people" ]; + + roomup [ label="Rooftop room\nwith mountain view" ]; + roomupbig [ label="Rooftop big and bright room" ]; + roombig [ label="Double room with lots of space" ]; + roomcute [ label="Cute and bright room" ]; + + mountainviewapt [ label="Mountain view apartement" ]; + natureviewapt [ label="Nature view apartement" ]; + room7 [ label="Hotel Room" ]; + + + studentdiscount [ label="Are you\na student?" shape=diamond ]; + discountyes [ label="You are eligable\nfor a student discount!" ]; + + + price_390 [ shape="box" label="390 CHF" ]; + price_440 [ shape="box" label="440 CHF"]; + price_490 [ shape="box" label="490 CHF"]; + price_590 [ shape="box" label="590 CHF"]; + + schwanden->roombig [ label="Prefer more space" ] + schwanden->roomupbig [ label="Prefer more space" ] + schwanden->roomup [ label="Prefer pay less and smaller rooms" ] + schwanden->roomcute [ label="Prefer pay less and smaller rooms" ] + + + diesbach->mountainviewapt [ label="A whole apartment for myself" ]; + diesbach->natureviewapt [ label="A whole apartment for myself" ]; + diesbach->room7 [ label="I am fine with one big room" ]; + + natureviewapt->price_490; + mountainviewapt->price_590; + roombig->price_440; + roomup->price_390; + roomcute->price_390; + roomupbig->price_390; + room7->price_390; + + subgraph cluster_schwanden { + schwanden; + roomup; + roomupbig; + + roombig; + roomcute; + + } + + subgraph cluster_diesbach { + diesbach; + mountainviewapt + natureviewapt + room7; + + + } + subgraph cluster_prices { +# label="Price per month"; + + price_440; + price_590; + price_490; + price_390; + } + + {price_440, price_590, price_390, price_490 }->studentdiscount; + + studentdiscount->movein [ label="No" ]; + studentdiscount->discountyes [ label="Yes" ]; + discountyes->movein; + + + + movein; + + + +} diff --git a/djangohosting.dot b/djangohosting.dot new file mode 100644 index 0000000..32176d6 --- /dev/null +++ b/djangohosting.dot @@ -0,0 +1,44 @@ +digraph G { + node [ shape=box, fontcolor="#ffffff", color="#40a9e3", style="filled" ] +# rankdir=LR; + + subgraph cluster_local { + editor [ label="Local editor" ]; + git [ label="Local version control" ]; + localweb [ label="Development webserver" ]; + } + + + subgraph cluster_production_datacenter { + label="First data center"; + subgraph cluster_production { + label="Production environment" + prodvm [ label="Production Server\nuwsgi,nginx,postgres" ]; + repo [ label="Code repository\n(f.i. git)"]; + monitoring [ label="Monitoring server" ]; + } + + subgraph cluster_staging { + label="Staging environment" + stagingvm[ label="Staging Server" ]; + } + } + + subgraph cluster_offsite { + label="Second data center"; + backupvm [ label="Backup server" ]; + monitoringmonitor [ label="Monitoring server" ]; + } + + editor->git; + git->repo; + editor->localweb; + + repo->prodvm [ label="Deploy after staging" ]; + repo->stagingvm [ label="Pre prod deployment" ]; + + prodvm->backupvm [ label="Daily backup" ]; + monitoring->prodvm [ label="Verify operation\nand alert on failure" ]; + monitoringmonitor->monitoring [ label="Monitor the monitoring service"]; + +} diff --git a/ip-routing.dot b/ip-routing.dot new file mode 100644 index 0000000..43c4e88 --- /dev/null +++ b/ip-routing.dot @@ -0,0 +1,14 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + + packet [ label="Packet" ] + router [ label="Router" ]; + routingtable [ label="Lookup in\nrouting table" ]; + nexthop [ label="Next router" ]; + + packet->router->routingtable->nexthop; + + +} diff --git a/ipv4doublenat.dot b/ipv4doublenat.dot new file mode 100644 index 0000000..5db5dd4 --- /dev/null +++ b/ipv4doublenat.dot @@ -0,0 +1,25 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + client1 [ label="IPv4 client 1\nPrivate IP" ]; + client2 [ label="IPv4 client 2\nPrivate IP" ]; + clientn [ label="IPv4 client n\nPrivate IP" ]; + nat_gw [ label="NAT gateway\nPublic IP" ]; + target [ label="IPv4 Server\nPublic IP" ]; + nat_gw2 [ label="NAT gateway 2\nPublic IP" ]; + client3 [ label="IPv4 client 3\nPrivate IP" ]; + client4 [ label="IPv4 client 4\nPrivate IP" ]; + clientx [ label="IPv4 client x\nPrivate IP" ]; + + {client1, client2, clientn}->nat_gw; + + nat_gw->target; + target->nat_gw; + target->nat_gw2; + nat_gw2->target; + + nat_gw2->{client3, client4, clientx} [ dir="back" ]; + + +} diff --git a/ipv4nat.dot b/ipv4nat.dot new file mode 100644 index 0000000..93b5fd2 --- /dev/null +++ b/ipv4nat.dot @@ -0,0 +1,17 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + client1 [ label="IPv4 client 1\nPrivate IP" ]; + client2 [ label="IPv4 client 2\nPrivate IP" ]; + clientn [ label="IPv4 client n\nPrivate IP" ]; + nat_gw [ label="NAT gateway\nPublic IP" ]; + target [ label="IPv4 Server\nPublic IP" ]; + + {client1, client2, clientn}->nat_gw; + nat_gw->target; + target->nat_gw; + + + +} diff --git a/ipv6-routing.dot b/ipv6-routing.dot new file mode 100644 index 0000000..29b147f --- /dev/null +++ b/ipv6-routing.dot @@ -0,0 +1,9 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + v6router [ label="IPv6 only Router" ]; + + router1->router2 [ label="IPv6 route 1" ]; + router1->router3 [ label="IPv6 route 2" ]; +} diff --git a/ipv6-to-ipv4-proxy.dot b/ipv6-to-ipv4-proxy.dot new file mode 100644 index 0000000..b6c905f --- /dev/null +++ b/ipv6-to-ipv4-proxy.dot @@ -0,0 +1,19 @@ +digraph G { + node [ shape=box ] + rankdir=TB!; + + label="IPv4-to-IPv6 proxy by ungleich.ch" + + proxyv4 [ label="ungleich\nIPv4-IPv6 Proxy" ]; + + serverv6 [ label="Your IPv6 only\nServer" ]; + + clientv4 [ label="IPv4 only\nclient" ]; + clientv6 [ label="IPv6 only\nclient" ]; + + clientv6->serverv6 [ label="Direct IPv6 access" ]; + clientv4->proxyv4 [ label="Connect by IPv4" ]; + proxyv4->serverv6 [ label="Translate to IPv6" ]; + + +} diff --git a/ipv6backup.dot b/ipv6backup.dot new file mode 100644 index 0000000..6b42dd4 --- /dev/null +++ b/ipv6backup.dot @@ -0,0 +1,20 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + backupserver [ label="ungleich\nIPv6 Backup" ]; + + server1 [ label="Server (IPv4)" ]; + server2 [ label="Server (IPv6)" ]; + server3 [ label="Server (Dualstack)" ]; + + clientv4 [ label="IPv4 client" ]; + clientv6 [ label="IPv6 client" ]; + + backupserver->{server1,server2,server3} + + clientv4->backupserver [ label="Not accessible" ]; + clientv6->backupserver [ label="Accessible (can be restricted)" ]; + + +} diff --git a/ipv6direct.dot b/ipv6direct.dot new file mode 100644 index 0000000..cdf52b5 --- /dev/null +++ b/ipv6direct.dot @@ -0,0 +1,14 @@ +digraph G { + node [ shape=box ] +# rankdir=LR; + + client1 [ label="IPv6 client 1\nPublic IP" ]; + client2 [ label="IPv6 client 2\nPublic IP" ]; + clientn [ label="IPv6 client n\nPublic IP" ]; + + client1->{client2, clientn}; + client2->{client1, clientn}; + clientn->{client2, client1}; + + +} diff --git a/ipv6proxy.dot b/ipv6proxy.dot new file mode 100644 index 0000000..34b2b9a --- /dev/null +++ b/ipv6proxy.dot @@ -0,0 +1,55 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + label="IPv6 proxies by ungleich.ch" + + + proxyv6 [ label="ungleich\nIPv6-IPv4 Proxy" ]; + proxyv4 [ label="ungleich\nIPv4-IPv6 Proxy" ]; + + serverv4 [ label="IPv4 only\nServer" ]; + serverv6 [ label="IPv6 only\nServer" ]; + noipv4here [ label="No IPv4-\nhere-service" ]; + + clientv4 [ label="IPv4 only\nclient" ]; + clientv6 [ label="IPv6 only\nclient" ]; + + clientv4->serverv4 [ label="Direct IPv4 access" ]; + clientv6->serverv6 [ label="Direct IPv6 access" ]; + + clientv4->proxyv4 [ label="Connect by IPv4" ]; + clientv6->proxyv6 [ label="Connect by IPv6" ]; + + proxyv6->serverv4 [ label="Translate to IPv4" ]; + proxyv4->serverv6 [ label="Translate to IPv6" ]; + proxyv4->noipv4here [ label="If IPv4 translation is disabled" ]; + + + subgraph cluster_legacyserver { + label="Enable legacy IPv4 servers to be reachable by IPv6"; + proxyv6; + serverv4; + } + + subgraph cluster_v6net { + label="Enable legacy IPv4 clients to access IPv6 only servers"; + + proxyv4; + serverv6; + noipv4here; + + } + + subgraph cluster_clients { + label="Clients"; + + clientv4; + clientv6; + + + } + + + +} diff --git a/marketing-by-doing.dot b/marketing-by-doing.dot new file mode 100644 index 0000000..0893311 --- /dev/null +++ b/marketing-by-doing.dot @@ -0,0 +1,28 @@ +digraph G { + # rankdir="LR"; + + label="Do good and talk about it // ungleich.ch" + + me [ label="Me"]; + + plan [ label="Plan what to do" ]; + writetwitter [ label="Write on Twitter as me" ]; + mentionungleich [ label="Include @ungleich in message" ]; + includepicture [ label="Include a picture" ]; + + doit [ label="Do the work" ]; + + goodpic [ label="Good picture available?" shape=diamond ]; + + + + me->plan->writetwitter->mentionungleich->goodpic; + + goodpic->includepicture [ label="yes" ]; + includepicture->doit; + goodpic->doit [ label="no" ]; + + + doit->{plan, writetwitter}; + +} diff --git a/network.dot b/network.dot new file mode 100644 index 0000000..570a933 --- /dev/null +++ b/network.dot @@ -0,0 +1,143 @@ +digraph G { + rankdir="LR"; + + digitalglarus; + hack4glarus; + + + dominique [ label="Dominique Schuwey" ]; + stefanos [ label="Stefanos SKMP" ]; + andi [ label="Andi not Brönnimann" ]; + andistaub [ label="Andi Staub" ]; + marcopanter [ label="Marco Dreads" ]; + stefanpanter [ label="Stefan panter sysadmin" ]; + marcuskoller [ label="Markus Koller" ]; + + ok200 [ label="200ok" ]; + + + nico->ccc; + + nico->irc; + nico->hszt; + nico->panter; + nico->swinog; + + nico->{chopenevent, eth, localch, netstream, ungleich}; + nico->{hack4glarus, digitalglarus}; + nico->{impacthub}; + nico->ungleichmarketing; + + nico->{benni,tobiaskiefer,marcusprzyklink,miriwagner,juliahempel}; + + benni->maren; + + + alain->{voicerepublic,zentemple,ok200,monikabieri}; + beat->{beatseltern, beatsbruder, johanna, leutevonschwändi}; + + donaldkossmann->teralytics; + fritzpechal->evapechal; + + gabibaechlin->{rotary,hermanmathis}; + giovanniserafini->adrianmathyskrüttli; + + heinzhuerzeler->rolfhürlimann; + + hpk->{jerry, richidubs, viviankessler, steffidubs, estherdubs, richardkeller, jacqueline, sabrinanaef, konrad, juanito, fridolinwalcher}; + + marcauer->mathiasauer; + + hanspeterlegler->kurtsuess; + kurtsuess->tbgs; + tbgs->{kilianbäbler, michaeltrachsler}; + + + mikezweifel->makersimzigerschlitz; + michelle->panter; + phil->ok200; + stefanos->chrysa; + stefanwolf->cabaretvoltaire; + + steven->carbondelta; + sanghee->eunwoo; + sanghee->heinzhuerzeler; + + eunwoo->dani; + dani->eunwoo; + + diechance->{nadineglettig,rolandzweifel,samuelhailu}; + + + ccc; + ccc->ccczh; + ccczh->hernani; + + ccc->reyk; + + irc; + irc->doublep; + + swinog; + swinog->{claudio,patrickgloor}; + + digitalglarus; + digitalglarus->{marvin,rob,styli,marina,merry,julian}; + digitalglarus->{hpk,hansjuerghess, hanspeterlegler, hanspetersuess, gabibaechlin,fritzpechal}; + digitalglarus->{alexrömer, nüglarus, mikezweifel, diechance,roomrenting}; + digitalglarus->{christianzweifel,larazweifel,kasparmarti}; + + + + hack4glarus; + hack4glarus->{evilham,balazs,freebsdjohannes,kankan,manfredfrommichael,tilobosshard,vaida,danieltuering}; + hack4glarus->{janselinga,martinselinga,michelle,konimarti}; + + + adrianmathyskrüttli->helsana; + + nüglarus; + nüglarus->{robibalmer, rolfluchsinger, patrickgallati}; + + + panter; + panter->{stefanos,dominique,beat,alain,jorgo,phil,marcopanter,marcuskoller}; + panter->{andistaub,stefanpanter,simonhuerlimann,davehuerlimann,referenceimage,amanda,mauro,tomas}; + panter->{martinpanter}; + + + referenceimage->ungleich; + + chopenevent->eichi; + eichi->{ruag,tatjana}; + ruag->dominiqueroux; + + roomrenting->{erickönen, emilsomething, thomasberger}; + + impacthub->workspace2go; + + + hszt->{andi,dani,linda,giovanniserafini,c1audio}; + + eth->{steven,kamila,swaneet,max,lili,giovanniserafini,donaldkossmann,xtaran}; + eth->{stefanwolf,sarahplocher,tobiasbühler,laurentvanbever,mothyroscoe,adrianperrig}; + + localch->nadinefaeh->pascalfaeh->faehundfaeh; + localch->richardrasu; + + netstream->{alexiscaceda, dominikmeister, dominikbreitenmoser,esthergysin}; + + esthergysin->ungleich; + + ungleich->{davehuerlimann, marcauer, konimarti,kasparmarti}; + + ungleichmarketing; + ungleichmarketing->{airat, hpk}; + + + voicerepublic; + voicerepublic->patrickfrank; + + zentemple->{marcelredding,bettina}; + +} diff --git a/nicos-christmas-flow.dot b/nicos-christmas-flow.dot new file mode 100644 index 0000000..75bc0a2 --- /dev/null +++ b/nicos-christmas-flow.dot @@ -0,0 +1,35 @@ +digraph G { + node [ shape=box ] +# rankdir=LR; + + label="Nico's Christmas shopping flow (2019)" + + start [ label="Start" ]; + needpresents [ label="Do I want to buy presents?" ]; + stayhome [ label="All good. Let's do something else." ]; +# lookforpresents [ label="Let's look for presents!" ]; + isitdigital [ label="Is the present digital?" ]; + runsopensource [ label="Does it run Open Source?" ]; + usesnet [ label="Does it connect to the network?" ]; + supportsv6 [ label="Does it support IPv6?" ]; + buyit [ label="Ok, let's buy it!" ]; + notgood [ label="Don't buy, this is trouble" ]; +# isvirtual [ label="Does a VM/VPN work?" ]; + + + start->needpresents; + needpresents->stayhome [ label="No" ]; + needpresents->isitdigital [ label="Yes" ]; + + isitdigital->runsopensource [ label="Yes" ]; + isitdigital->buyit [ label="No" ]; + + runsopensource->notgood [ label="No" ]; + runsopensource->usesnet [ label="Yes" ]; + usesnet->buyit [ label="No" ]; + usesnet->supportsv6 [ label="Yes" ]; + supportsv6->notgood [ label="No" ]; + supportsv6->buyit [ label="Yes" ]; +# supportsv6->isvirtual [ label="Yes" ]; + +} diff --git a/nicosinfra.dot b/nicosinfra.dot new file mode 100644 index 0000000..d693eaf --- /dev/null +++ b/nicosinfra.dot @@ -0,0 +1,16 @@ +graph G { + node [ shape=box ] +# rankdir=LR; + label="Nico's notebooks" + + internet [ label="IPv6 Internet" shape="ellipse" ]; + + freiheit [ label="freiheit\n(Schwanden)\nfreiheit.place5.ungleich.ch" ]; + manager [ label="manager\n(Luchsingen)\nmanager.place7.ungleich.ch" ]; + diamond [ label="diamond\n(on the road)\ndiamond.place7.ungleich.ch\nnico.plays.ipv6.games" ]; + line [ + label="line\n(Linthal\ndiamond.place7.ungleich.ch\nnico.ungleich.cloud" ]; + + internet--{freiheit,manager,diamond,line} + +} diff --git a/vm-infrastructure-dcl.dot b/vm-infrastructure-dcl.dot new file mode 100644 index 0000000..0a8fb85 --- /dev/null +++ b/vm-infrastructure-dcl.dot @@ -0,0 +1,11 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + + VMs->{VMHost1,VMHost2,VMHostN} + {VMHost1,VMHost2,VMHostN}->CephCluster; + + CephCluster->{Ceph1,Ceph2,CephN} + +} diff --git a/vm-infrastructure-multi-dc-backup.dot b/vm-infrastructure-multi-dc-backup.dot new file mode 100644 index 0000000..3cf9d4d --- /dev/null +++ b/vm-infrastructure-multi-dc-backup.dot @@ -0,0 +1,26 @@ +digraph G { + node [ shape=box ] + rankdir=LR; + + + subgraph cluster_rz1 { + + VMs->{VMHost1,VMHost2,VMHostN} + {VMHost1,VMHost2,VMHostN}->CephCluster; + + CephCluster->{Ceph1,Ceph2,CephN} + + } + + subgraph cluster_rz2 { + + VMs2->{VMHost21,VMHost22,VMHost2N} + {VMHost21,VMHost22,VMHost2N}->CephCluster2; + + CephCluster2->{Ceph21,Ceph22,Ceph2N} + + } + + CephCluster->CephCluster2 [ label="Backup/Mirror" ]; + +}