Files
website/chart/templates/server/statics/dist/configmap.yaml

328 lines
70 KiB
YAML
Raw Normal View History

apiVersion: v1
binaryData:
icon.c628fb04.ico: AAABAAQAEBAAAAEAIABoBAAARgAAABgYAAABACAAiAkAAK4EAAAgIAAAAQAgAKgQAAA2DgAAQEAAAAEAIAAoQgAA3h4AACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAADJjTYAx444AMeOOADHjjgAx444B8eOOAjHjjgAx444AMeOOADIkDcAAAAAAAAAAAAAAAAAAAAAAMePOADHjjgAx444AMeOOADHjjgFx444R8eOOKzHjjiyx444UceOOAjHjjgAx444AMeOOADHizgAAAAAAMePOADHjzgAx444AMeOOALHjjg3x444oMeOOPHHjjj/x444/8eOOPXHjjisx444QseOOAXHjjgAx444AMeOOADHjjgABwD4AMeOOC7HjjiTx4446seOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOPDHjjigx444NsePOALHjjgAx444KMeOOIrHjjjjx444/8eOOP/Hjjj/x444/seOONbHjjjSx444/ceOOP/Hjjj/x444/8eOOOnHjjiUx444MMeOOM/Hjjj/x444/8eOOP/Hjjj+x444zseOOG3Hjjgox444JseOOGXHjjjHx444/ceOOP/Hjjj/x444/8eOON3Hjjj+x444/8eOOP/HjjjXx444cMeOOCLHjjhRx444useOOL/Hjjhcx444IseOOGfHjjjQx444/8eOOP/Hjjj/x444+MeOOODHjjh+x444JseOOEDHjjiqx4449seOOP/Hjjj/x444+seOOLjHjjhMx444JMeOOHLHjjjZx444/8eOOHPHjjgux444N8eOOJ7Hjjjwx444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x4449ceOOKzHjjhAx444KceOOHPHjjgxx444mMeOOOvHjjj/x444/8eOOP/Hjjj3x444u8eOOLfHjjj0x444/8eOOP/Hjjj/x4448MeOOKLHjjg6x4442ceOOP/Hjjj/x444/8eOOPzHjjjEx444VMeOOA/HjjgOx444S8eOOLnHjjj5x444/8eOOP/Hjjj/x4445seOOPTHjjj/x444/8eOOM7Hjjhkx444G8eOOEXHjjijx444qseOOEzHjjgax444WMeOOMXHjjj9x444/8eOOP3HjjiAx444xseOOHnHjjggx444P8eOOKvHjjj0x444/8eOOP/Hjjj3x444tMeOOEfHjjgcx444a8eOOMDHjjiQx444A8eOOAzHjjgSx444k8eOOPTHjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj3x444oseOOBjHjjgJyI43BMeOOADHjjgAx444CMeOOE7Hjjivx4448MeOOPbHjjjMx444vceOOO3Hjjj1x444vMeOOFvHjjgMx444AMeOOAAAAAAAx444AMeOOADHjjgAx444CceOOErHjjhWx444GMeOOA3HjjhDx444VceOOBHHjjgAx444AMeOOAAAAAAA4AcAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAACgAAAAYAAAAMAAAAAEAIAAAAAAAAAkAAMMOAADDDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMiPNwDHjjgAx444AMeOOADHjjgAx444AMiRNwDGjTkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJkzYAx444AMeOOADHjjgAyI43DMeOOD7HjjhExo45EceOOADHjjgAxo45AMePOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAx484AMeNOADHjTgAx444AMeOOAPHjjhAx444sceOOPPHjjj2x444v8eOOFDHjjgHx444AMeOOADHjjgAx444AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKSPQDHjjgAxo45AMeOOADIizcBx444MceOOJjHjjjtx444/8eOOP/Hjjj/x444/8eOOPTHjjipx444QMaPOQXHjjgAx404AMeNOADAlj8AAAAAAAAAAADMmTMAyI83AMmQNgDHjjgAyI43AMeOOCjHjjiLx4445ceOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x4447seOOJ7Hjjg2x4w4AseOOADHjzgAx444AMSQOwDGjTkAx444AMaNOQDHjjghx444fseOON3Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjjox444kceOOCvGijkAx444AMaOOQDHjjgAx444HseOOHbHjjjWx444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOPrHjjj4x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOODHjjiFx444J8mNNgDHjjhUx4440MeOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj2x444uceOOFnHjjhPx444rseOOPHHjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x44428eOOGnHjjjbx444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x4449ceOOLHHjjhNx444CseOOAfHjjgIyI83BseOOEHHjjikx4448MeOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOO/Hjjj7x444/8eOOP/Hjjj/x444/8eOOPnHjji7x444UMeOOAfHjTgKx444YseOOL7HjjjDx444cMeOOBPJjjYCx444Q8eOOK7Hjjj1x444/8eOOP/Hjjj/x444/8eOOP/Hjjj6x444/8eOOP/Hjjj8x444xseOOF3HjjgLx444A8eOOEbHjji1x444+seOOP/Hjjj/x444/seOOMbHjjhax404C8aOOQbHjjhOx444uceOOPjHjjj/x444/8eOOP/Hjjjwx444/8eOOM/Hjjhox444EtWaKgDHjjg7x444pMeOOPHHjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj5x444uceOOE7HjzgFyI43CseOOFjHjjjDx444/MeOOP/Hjji2x444eMeOOBjHjTgAx444MMeOOJnHjjjsx444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOPTHjjitx444QceLOAHHjjgQx444Z8eOOMDHjjgRxY46AceOOCzHjjiNx4445seOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x44478eOOJ7Hjjg4yI83AseOOA7Hjjgex444jMeOOOXHjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x4443ceOOI/HjjiJx4441ceOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjjtx444nMeOOCvHjji3x444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOOvHjjiVx444KceOOADHjjgAx444IMeOOITHjjjix444/8eOOP/Hjjj/x444/8eOOP/Hjjj/x444/8eOOM7Hjjj4x444/8eOOP/Hjjj/x444/8eOOP/Hjjjxx444pMeOODnMizIAyI03A8eOODXHjjg8x444B8eOOADHjjgsx444kseOOOnHjjj/x444/8eOOP/Hjjj/x444/8eOOP/Hjjjmx444/8eOOP/Hjjj/x4449seOOLDHjjhFxo45A8eNNwXHjjhIx444pseOOOvHjjjwx444sseOOFTHjjgKx404AMeOODbHjjifx44478eOOP/Hjjj/x444/8eOOPXHjjh8x4448seOOPnHjjjEx444VMeOOAfMjDMCx444QMeOOKrHjjjzx444/8eOOP/Hjjj/x444/8eOOPjHjji3x444TciONwbJkDYBx444QseOOLDHjjjzx4
data:
index.87e0faa9.js: |
document.addEventListener("DOMContentLoaded",()=>{let e=document.querySelectorAll("main > section, body > header"),t=document.querySelectorAll("nav a"),r=Array.from(t),a=new IntersectionObserver(e=>{e.forEach(e=>{if(""===e.target.id){r.forEach(e=>e.classList.remove("active")),t[0].classList.add("active");return}if(e.isIntersecting){let t=e.target.id,a=r.find(e=>e.href.includes(t));r.forEach(e=>e.classList.remove("active")),a.classList.add("active")}})},{rootMargin:"-50% 0px -50% 0px"});e.forEach(e=>a.observe(e))});
//# sourceMappingURL=index.87e0faa9.js.map
index.87e0faa9.js.map: '{"mappings":"ACAA,SAAS,gBAAgB,CAAC,mBAAoB,KAG5C,IAAM,EAAW,SAAS,gBAAgB,CAAC,iCACrC,EAAQ,SAAS,gBAAgB,CAAC,SAClC,EAAa,MAAM,IAAI,CAAC,GACxB,EAAW,IAAI,qBACnB,AAAC,IACC,EAAQ,OAAO,CAAC,AAAC,IACf,GAAI,AAAoB,KAApB,EAAM,MAAM,CAAC,EAAE,CAAS,CAC1B,EAAW,OAAO,CAAC,AAAC,GAAS,EAAK,SAAS,CAAC,MAAM,CAAC,WACnD,CAAK,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,UACvB,MACF,CACA,GAAI,EAAM,cAAc,CAAE,CACxB,IAAM,EAAK,EAAM,MAAM,CAAC,EAAE,CACpB,EAAO,EAAW,IAAI,CAAC,AAAC,GAAS,EAAK,IAAI,CAAC,QAAQ,CAAC,IAC1D,EAAW,OAAO,CAAC,AAAC,GAAS,EAAK,SAAS,CAAC,MAAM,CAAC,WACnD,EAAK,SAAS,CAAC,GAAG,CAAC,SACrB,CACF,EACF,EACA,CAAE,WAAY,mBAAoB,GAEpC,EAAS,OAAO,CAAC,AAAC,GAAY,EAAS,OAAO,CAAC,GACjD","sources":["<anon>","src/links.js"],"sourcesContent":["document.addEventListener(\"DOMContentLoaded\",
()=>{\n // when the user scroll to a section, the active class is added to\n //
the corresponding link in the navbar\n const sections = document.querySelectorAll(\"main
> section, body > header\");\n const links = document.querySelectorAll(\"nav
a\");\n const linksArray = Array.from(links);\n const observer = new IntersectionObserver((entries)=>{\n entries.forEach((entry)=>{\n if
(entry.target.id === \"\") {\n linksArray.forEach((link)=>link.classList.remove(\"active\"));\n links[0].classList.add(\"active\");\n return;\n }\n if
(entry.isIntersecting) {\n const id = entry.target.id;\n const
link = linksArray.find((link)=>link.href.includes(id));\n linksArray.forEach((link)=>link.classList.remove(\"active\"));\n link.classList.add(\"active\");\n }\n });\n },
{\n rootMargin: \"-50% 0px -50% 0px\"\n });\n sections.forEach((section)=>observer.observe(section));\n});\n\n//#
sourceMappingURL=index.87e0faa9.js.map\n","document.addEventListener(\"DOMContentLoaded\",
() => {\n // when the user scroll to a section, the active class is added to\n //
the corresponding link in the navbar\n const sections = document.querySelectorAll(\"main
> section, body > header\");\n const links = document.querySelectorAll(\"nav
a\");\n const linksArray = Array.from(links);\n const observer = new IntersectionObserver(\n (entries)
=> {\n entries.forEach((entry) => {\n if (entry.target.id === \"\")
{\n linksArray.forEach((link) => link.classList.remove(\"active\"));\n links[0].classList.add(\"active\");\n return;\n }\n if
(entry.isIntersecting) {\n const id = entry.target.id;\n const
link = linksArray.find((link) => link.href.includes(id));\n linksArray.forEach((link)
=> link.classList.remove(\"active\"));\n link.classList.add(\"active\");\n }\n });\n },\n {
rootMargin: \"-50% 0px -50% 0px\" },\n );\n sections.forEach((section) => observer.observe(section));\n});\n"],"names":["document","addEventListener","sections","querySelectorAll","links","linksArray","Array","from","observer","IntersectionObserver","entries","forEach","entry","target","id","link","classList","remove","add","isIntersecting","find","href","includes","rootMargin","section","observe"],"version":3,"file":"index.87e0faa9.js.map"}'
index.82434563.css: |
:root{--primary-color:#2a1827;--secondary-color:#6c757d;--dark-color:#343a40;--light-color:#f4f4f4;--white:#fff;--danger-color:#dc3545;--covered:50%}html{scroll-behavior:smooth}body{color:#333;margin:0;padding:0;font-family:Arial,sans-serif;line-height:1.6;overflow-x:hidden}img{max-width:100%}.container{max-width:1200px;margin:0 auto;padding:20px}.header{background:var(--dark-color);color:#fff;text-align:center;padding:50px 20px}.header .container{flex-direction:column;justify-content:space-evenly;height:100%;display:flex}@media (width>=768px){.header{align-items:center;height:100vh;padding:0 0 115px;display:flex}main>section{flex:1;justify-content:center;align-items:center;height:100vh;display:flex}}.header h1{color:#0000;background-image:url(https://github.com/metal3d/katenary/raw/refs/heads/develop/doc/docs/statics/logo-vertical.svg);background-position:50%;background-repeat:no-repeat;background-size:contain;height:265px;margin:0;font-size:3rem}.header p{margin:20px 0;font-size:1.2rem}.btn-primary{color:var(--primary-color);background:#fff;border-radius:5px;margin-top:20px;padding:10px 20px;font-weight:700;text-decoration:none;display:inline-block}.btn-primary:hover{color:#fff;background:#0056b3}.features{background:var(--light-color);text-align:center;padding:50px 20px}.features h2{margin-bottom:20px;font-size:2.5rem}.feature-grid{flex-wrap:wrap;justify-content:center;gap:20px;display:flex}@keyframes slidingLeft{0%{filter:opacity(0)blur(10px);transform:translate(-100vw)}to{filter:opacity()blur();transform:translate(0)}}@keyframes slidingRight{0%{filter:opacity(0)blur(10px);transform:translate(100vw)}to{filter:opacity()blur();transform:translate(0)}}.feature-item{background:var(--white);border:1px solid #ddd;border-radius:8px;flex:200px;padding:20px;box-shadow:0 2px 5px #0000001a}@media (width>=768px){:root{--animation-slide:entry 0% contain 0%}.from-left{view-timeline:--reveal-blockl;view-timeline-axis:block;animation:linear forwards slidingLeft;animation-range:var(--animation-slide);animation-timeline:--reveal-blockl}.from-right{view-timeline:--reveal-blockr;view-timeline-axis:block;animation:linear forwards slidingRight;animation-range:var(--animation-slide);animation-timeline:--reveal-blockr}}.how-it-works,.how-to-use,.tutorials{text-align:center;padding:50px 20px}h2{text-align:center;margin-bottom:20px;font-size:2.5rem}.how-it-works ol{text-align:left;max-width:800px;margin:0 auto;padding:0;list-style:decimal inside}.image-placeholder{border-radius:8px;justify-content:center;align-items:center;width:100%;max-width:800px;height:200px;margin:30px auto;font-size:1.2rem;display:flex}.image-placeholder img{object-fit:cover;border-radius:8px;width:100%;height:100%;margin:10px}.get-started{background:var(--primary-color);color:var(--white);text-align:center;padding:50px 20px}.get-started pre{background:var(--white);color:#333;border-radius:5px;margin:20px 0;padding:10px}div.video{padding-top:25px}pre{text-align:left}@media (width>=768px){.example{justify-content:space-between;align-items:center;gap:20px;display:flex}iframe{width:100%;height:500px}}iframe{max-width:100%}section {width:100%}section:nth-child(2n) .example{text-align:right;flex-direction:row-reverse!important}section:nth-child(odd) .example{text-align:left;flex-direction:row}section:nth-child(2n) .example h3 {text-align:right}.example>div{flex:200px;align-content:center}code.hljs{border-radius:5px;box-shadow:0 6px 15px #00000080}p code{background:var(--dark-color);color:var(--light-color);border-radius:5px;padding:1px 5px;display:inline-block}section.alternate:nth-child(odd){background:var(--light-color);color:var(--dark-color)}section.alternate:nth-child(2n){background:var(--dark-color);color:var(--light-color)}#menu-toggle{z-index:11;margin:0;position:fixed}@media (width>=768px){#menu-toggle{display:none}.navbar{background:var(--white);color:var(--dark-color);z-index:10;justify-content:space-evenly;align-items:center;width:100%;display:flex;position:fixed;top:0}.navbar .container{padding:0}nav ul{flex-wrap:wrap;list-style:none;display:flex}nav ul l
/*# sourceMappingURL=index.82434563.css.map */
index.82434563.css.map: '{"mappings":"ACCA,qJASA,4BAIA,kGASA,mBAIA,uDAMA,oFAOA,+FAQA,sBACE,uEAOA,yFASF,4PAWA,yCAKA,sKAWA,iDAKA,4EAMA,iDAKA,0EAcA,oIAWA,oIAWA,qIASA,sBACE,4CAGA,kLAOA,qLASF,yEAcA,yDAMA,mGAQA,sKAYA,6FAQA,oGAOA,iGAQA,2BAIA,oBAIA,sBACE,gFAMA,gCAKF,sBAGA,qBAIA,qFAIA,mEAIA,qDAIA,6CAKA,4DAIA,oHAQA,uFAIA,sFAKA,gDAKA,sBACE,0BAGA,gKAYA,6BAIA,mDAKA,wBAGA,oFAMA,wEAIA,8FAMF,sBACE,+BAIA,iEAIA,oSAkBA,mCAGA,wDAMA,mBAGA,gFAQF,+GAWA,yDAKA,iCAGA,oCAIA,0BAIA,4BAIA,mHAQA,gDAKA,6DAMA,sBACE,iJAYA,8CAKF,2BAIA,2GAYA,iCAKA","sources":["index.82434563.css","src/main.css"],"sourcesContent":[":root
{\n --primary-color: #2a1827;\n --secondary-color: #6c757d;\n --dark-color:
#343a40;\n --light-color: #f4f4f4;\n --white: #fff;\n --danger-color: #dc3545;\n --covered:
50%;\n}\n\nhtml {\n scroll-behavior: smooth;\n}\n\nbody {\n color: #333;\n margin:
0;\n padding: 0;\n font-family: Arial, sans-serif;\n line-height: 1.6;\n overflow-x:
hidden;\n}\n\nimg {\n max-width: 100%;\n}\n\n.container {\n max-width: 1200px;\n margin:
0 auto;\n padding: 20px;\n}\n\n.header {\n background: var(--dark-color);\n color:
#fff;\n text-align: center;\n padding: 50px 20px;\n}\n\n.header .container {\n flex-direction:
column;\n justify-content: space-evenly;\n height: 100%;\n display: flex;\n}\n\n@media
(width >= 768px) {\n .header {\n align-items: center;\n height: 100vh;\n padding:
0 0 115px;\n display: flex;\n }\n\n main > section {\n flex: 1;\n justify-content:
center;\n align-items: center;\n height: 100vh;\n display: flex;\n }\n}\n\n.header
h1 {\n color: #0000;\n background-image: url(\"https://github.com/metal3d/katenary/raw/refs/heads/develop/doc/docs/statics/logo-vertical.svg\");\n background-position:
center;\n background-repeat: no-repeat;\n background-size: contain;\n height:
265px;\n margin: 0;\n font-size: 3rem;\n}\n\n.header p {\n margin: 20px 0;\n font-size:
1.2rem;\n}\n\n.btn-primary {\n color: var(--primary-color);\n background: #fff;\n border-radius:
5px;\n margin-top: 20px;\n padding: 10px 20px;\n font-weight: bold;\n text-decoration:
none;\n display: inline-block;\n}\n\n.btn-primary:hover {\n color: #fff;\n background:
#0056b3;\n}\n\n.features {\n background: var(--light-color);\n text-align: center;\n padding:
50px 20px;\n}\n\n.features h2 {\n margin-bottom: 20px;\n font-size: 2.5rem;\n}\n\n.feature-grid
{\n flex-wrap: wrap;\n justify-content: center;\n gap: 20px;\n display: flex;\n}\n\n@keyframes
slidingLeft {\n from {\n filter: opacity(0) blur(10px);\n transform: translateX(-100vw);\n }\n\n to
{\n filter: opacity() blur();\n transform: translateX(0);\n }\n}\n\n@keyframes
slidingRight {\n from {\n filter: opacity(0) blur(10px);\n transform: translateX(100vw);\n }\n\n to
{\n filter: opacity() blur();\n transform: translateX(0);\n }\n}\n\n.feature-item
{\n background: var(--white);\n border: 1px solid #ddd;\n border-radius: 8px;\n flex:
200px;\n padding: 20px;\n box-shadow: 0 2px 5px #0000001a;\n}\n\n@media (width
>= 768px) {\n :root {\n --animation-slide: entry 0% contain 0%;\n }\n\n .from-left
{\n view-timeline: --reveal-blockl;\n view-timeline-axis: block;\n animation:
linear forwards slidingLeft;\n animation-range: var(--animation-slide);\n animation-timeline:
--reveal-blockl;\n }\n\n .from-right {\n view-timeline: --reveal-blockr;\n view-timeline-axis:
block;\n animation: linear forwards slidingRight;\n animation-range: var(--animation-slide);\n animation-timeline:
--reveal-blockr;\n }\n}\n\n.how-it-works, .how-to-use, .tutorials {\n text-align:
center;\n padding: 50px 20px;\n}\n\nh2 {\n text-align: center;\n margin-bottom:
20px;\n font-size: 2.5rem;\n}\n\n.how-it-works ol {\n text-align: left;\n max-width:
800px;\n margin: 0 auto;\n padding: 0;\n list-style: decimal inside;\n}\n\n.image-placeholder
{\n border-radius: 8px;\n justify-content: center;\n align-items: center;\n width:
100%;\n max-width: 800px;\n height: 200px;\n margin: 30px auto;\n font-size:
1.2rem;\n display: flex;\n}\n\n.image-placeholder img {\n object-fit: cover;\n border-radius:
8px;\n width: 100%;\n height: 100%;\n margin: 10px;\n}\n\n.get-started {\n background:
var(--primary-color);\n color: var(--white);\n text-align: center;\n padding:
50px 20px;\n}\n\n.get-started pre {\n background: var(--white);\n color: #333;\n border-radius:
5px;\n margin: 20px 0;\n padding: 10px;\n}\n\ndiv.video {\n padding-top: 25px;\n}\n\npre
{\n text-align: left;\n}\n\n@media (width >= 768px) {\n .example {\n justify-content:
space-between;\n align-items: center;\n gap: 20px;\n display: flex;\n }\n\n iframe
{\n width: 100%;\n height: 500px;\n }\n}\n\niframe {\n max-width: 100%;\n}\n\nsection 
{\n width: 100%;\n}\n\nsection:nth-child(2n) .example {\n text-align: right;\n flex-direction:
row-reverse !important;\n}\n\nsection:nth-child(odd) .example {\n text-align:
left;\n flex-direction: row;\n}\n\nsection:nth-child(2n) .example h3  {\n text-align:
right;\n}\n\n.example > div {\n flex: 200px;\n align-content: center;\n}\n\ncode.hljs
{\n border-radius: 5px;\n box-shadow: 0 6px 15px #00000080;\n}\n\np code {\n background:
var(--dark-color);\n color: var(--light-color);\n border-radius: 5px;\n padding:
1px 5px;\n display: inline-block;\n}\n\nsection.alternate:nth-child(odd) {\n background:
var(--light-color);\n color: var(--dark-color);\n}\n\nsection.alternate:nth-child(2n)
{\n background: var(--dark-color);\n color: var(--light-color);\n}\n\n#menu-toggle
{\n z-index: 11;\n margin: 0;\n position: fixed;\n}\n\n@media (width >= 768px)
{\n #menu-toggle {\n display: none;\n }\n\n .navbar {\n background: var(--white);\n color:
var(--dark-color);\n z-index: 10;\n justify-content: space-evenly;\n align-items:
center;\n width: 100%;\n display: flex;\n position: fixed;\n top:
0;\n }\n\n .navbar .container {\n padding: 0;\n }\n\n nav ul {\n flex-wrap:
wrap;\n list-style: none;\n display: flex;\n }\n\n nav ul li {\n margin:
0 10px;\n }\n\n nav ul li a {\n color: var(--dark-color);\n padding: 10px;\n text-decoration:
none;\n display: block;\n }\n\n nav ul li a:hover {\n color: var(--light-color);\n background:
var(--dark-color);\n }\n\n nav ul li a.active {\n color: var(--light-color)
!important;\n background: var(--dark-color) !important;\n }\n}\n\n@media (width
<= 768px) {\n .navbar {\n display: none !important;\n }\n\n .navbar:hover,
#menu-toggle:focus ~ .navbar {\n display: block !important;\n }\n\n .navbar
{\n opacity: .8;\n color: var(--white);\n cursor: pointer;\n background:
var(--dark-color);\n border: 1px solid var(--dark-color);\n border-radius:
5px;\n justify-content: space-between;\n align-items: center;\n padding:
10px 20px;\n font-size: 1rem;\n display: flex;\n position: fixed;\n top:
10px;\n left: 0;\n box-shadow: 0 2px 5px #0000001a;\n }\n\n .navbar:has(a:active)
{\n display: none;\n }\n\n nav ul {\n margin: 0;\n padding: 0;\n list-style:
none;\n display: block;\n }\n\n nav ul li {\n margin: 0;\n }\n\n nav
ul li a {\n color: var(--white);\n padding: 10px;\n text-decoration:
none;\n display: block;\n }\n}\n\nfooter {\n color: #fff;\n text-align:
center;\n background: #333;\n flex-wrap: wrap;\n padding: 20px 0;\n font-size:
.9rem;\n display: flex;\n}\n\nfooter section {\n text-align: center;\n flex:
250px;\n padding: 20px;\n}\n\nfooter section p {\n font-weight: bold;\n}\n\nfooter
ul {\n padding: 0;\n list-style: none;\n}\n\nfooter ul li {\n margin: 5px 0;\n}\n\nfooter
a {\n color: var(--white);\n}\n\nfooter .container {\n flex-wrap: wrap;\n flex:
auto;\n justify-content: space-between;\n align-items: start;\n width: 100%;\n display:
flex;\n}\n\nfooter .container > p {\n text-align: center;\n flex: auto;\n}\n\nfooter
section {\n flex: auto;\n align-self: normal;\n position: relative;\n}\n\n@media
(width >= 768px) {\n footer section:after {\n content: \" \";\n filter:
opacity(.5) blur(1px);\n background: #fff;\n width: 1px;\n height: 90%;\n display:
block;\n position: absolute;\n top: 5%;\n right: 0;\n }\n\n footer
section:last-child:after {\n display: none;\n }\n}\n\n.large-icon {\n font-size:
3rem;\n}\n\n@keyframes bouncing {\n 0% {\n transform: translateY(0);\n }\n\n 50%
{\n transform: translateY(-20px);\n }\n\n 100% {\n transform: translateY(0);\n }\n}\n\n.down
{\n position: relative;\n bottom: 0;\n}\n\na.down {\n background: var(--white);\n color:
var(--dark-color);\n border-radius: 50%;\n justify-content: center;\n align-self:
center;\n align-items: center;\n width: 120px;\n height: 120px;\n animation:
2s infinite bouncing;\n display: flex;\n}\n/*# sourceMappingURL=index.82434563.css.map
*/\n","/* styles.css */\n:root {\n --primary-color: #2a1827;\n --secondary-color:
#6c757d;\n --dark-color: #343a40;\n --light-color: #f4f4f4;\n --white: #fff;\n --danger-color:
#dc3545;\n --covered: 50%;\n}\nhtml {\n scroll-behavior: smooth;\n}\n\nbody
{\n font-family: Arial, sans-serif;\n line-height: 1.6;\n margin: 0;\n padding:
0;\n color: #333;\n overflow-x: hidden;\n}\n\nimg {\n max-width: 100%;\n}\n\n.container
{\n max-width: 1200px;\n margin: 0 auto;\n padding: 20px;\n}\n\n.header {\n background:
var(--dark-color);\n color: #fff;\n text-align: center;\n padding: 50px 20px;\n}\n\n.header
.container {\n display: flex;\n flex-direction: column;\n justify-content:
space-evenly;\n display: flex;\n height: 100%;\n}\n\n@media (min-width: 768px)
{\n .header {\n display: flex;\n align-items: center;\n height: 100vh;\n padding:
0;\n padding-bottom: 115px;\n }\n main > section {\n flex: 1;\n height:
100vh;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n}\n\n.header
h1 {\n font-size: 3rem;\n margin: 0;\n background-image: url(\"https://github.com/metal3d/katenary/raw/refs/heads/develop/doc/docs/statics/logo-vertical.svg\");\n color:
transparent;\n background-size: contain;\n background-repeat: no-repeat;\n background-position:
center;\n height: 265px;\n}\n\n.header p {\n font-size: 1.2rem;\n margin: 20px
0;\n}\n\n.btn-primary {\n display: inline-block;\n background: #fff;\n color:
var(--primary-color);\n padding: 10px 20px;\n border-radius: 5px;\n text-decoration:
none;\n font-weight: bold;\n margin-top: 20px;\n}\n\n.btn-primary:hover {\n background:
#0056b3;\n color: #fff;\n}\n\n.features {\n background: var(--light-color);\n padding:
50px 20px;\n text-align: center;\n}\n\n.features h2 {\n font-size: 2.5rem;\n margin-bottom:
20px;\n}\n\n.feature-grid {\n /*\n display: grida;\n gap: 20px;\n margin-top:
20px;\n grid-auto-rows: 200px;\n grid-template-columns: repeat(auto-fit, minmax(250px,
1fr));\n */\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n gap:
20px;\n}\n\n@keyframes slidingLeft {\n from {\n transform: translateX(-100vw);\n filter:
opacity(0) blur(10px);\n }\n to {\n transform: translateX(0);\n filter:
opacity(1) blur(0);\n }\n}\n\n@keyframes slidingRight {\n from {\n transform:
translateX(100vw);\n filter: opacity(0) blur(10px);\n }\n to {\n transform:
translateX(0);\n filter: opacity(1) blur(0);\n }\n}\n\n.feature-item {\n background:
var(--white);\n border: 1px solid #ddd;\n flex: 1 1 200px;\n padding: 20px;\n border-radius:
8px;\n box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);\n}\n\n@media (min-width: 768px)
{\n :root {\n --animation-slide: entry 0% contain 0%;\n }\n .from-left {\n view-timeline:
--reveal-blockl;\n view-timeline-axis: block;\n animation: linear slidingLeft
forwards;\n animation-range: var(--animation-slide);\n animation-timeline:
--reveal-blockl;\n }\n .from-right {\n view-timeline: --reveal-blockr;\n view-timeline-axis:
block;\n animation: linear slidingRight forwards;\n animation-range: var(--animation-slide);\n animation-timeline:
--reveal-blockr;\n }\n}\n\n.how-it-works {\n padding: 50px 20px;\n text-align:
center;\n}\n\n.how-to-use {\n padding: 50px 20px;\n text-align: center;\n}\n.tutorials
{\n padding: 50px 20px;\n text-align: center;\n}\n\nh2 {\n font-size: 2.5rem;\n margin-bottom:
20px;\n text-align: center;\n}\n\n.how-it-works ol {\n list-style: decimal inside;\n text-align:
left;\n max-width: 800px;\n margin: 0 auto;\n padding: 0;\n}\n\n.image-placeholder
{\n margin: 30px auto;\n height: 200px;\n width: 100%;\n max-width: 800px;\n display:
flex;\n justify-content: center;\n align-items: center;\n font-size: 1.2rem;\n border-radius:
8px;\n}\n\n.image-placeholder img {\n margin: 10px;\n width: 100%;\n height:
100%;\n object-fit: cover;\n border-radius: 8px;\n}\n\n.get-started {\n background:
var(--primary-color);\n color: var(--white);\n padding: 50px 20px;\n text-align:
center;\n}\n\n.get-started pre {\n background: var(--white);\n color: #333;\n padding:
10px;\n margin: 20px 0;\n border-radius: 5px;\n}\n\ndiv.video {\n padding-top:
25px;\n}\n\npre {\n text-align: left;\n}\n\n@media (min-width: 768px) {\n .example
{\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap:
20px;\n }\n iframe {\n width: 100%;\n height: 500px;\n }\n}\niframe {\n max-width:
100%;\n}\nsection  {\n width: 100%;\n}\n\nsection:nth-child(even) .example {\n text-align:
right;\n flex-direction: row-reverse !important;\n}\nsection:nth-child(odd) .example
{\n text-align: left;\n flex-direction: row;\n}\nsection:nth-child(even) .example
h3  {\n text-align: right;\n}\n\n.example > div {\n flex: 1 1 200px;\n align-content:
center;\n}\n\ncode.hljs {\n border-radius: 5px;\n box-shadow: 0 6px 15px rgba(0,
0, 0, 0.5);\n}\np code {\n background: var(--dark-color);\n color: var(--light-color);\n padding:
1px 5px;\n border-radius: 5px;\n display: inline-block;\n}\n\nsection.alternate:nth-child(odd)
{\n background: var(--light-color);\n color: var(--dark-color);\n}\nsection.alternate:nth-child(even)
{\n background: var(--dark-color);\n color: var(--light-color);\n}\n\n#menu-toggle
{\n position: fixed;\n z-index: 11;\n margin: 0;\n}\n@media (min-width: 768px)
{\n #menu-toggle {\n display: none;\n }\n .navbar {\n background: var(--white);\n color:
var(--dark-color);\n display: flex;\n justify-content: space-evenly;\n align-items:
center;\n position: fixed;\n top: 0px;\n z-index: 10;\n width: 100%;\n }\n\n .navbar
.container {\n padding: 0;\n }\n\n nav ul {\n display: flex;\n flex-wrap:
wrap;\n list-style: none;\n }\n nav ul li {\n margin: 0 10px;\n }\n nav
ul li a {\n color: var(--dark-color);\n text-decoration: none;\n display:
block;\n padding: 10px;\n }\n nav ul li a:hover {\n color: var(--light-color);\n background:
var(--dark-color);\n }\n nav ul li a.active {\n color: var(--light-color)
!important;\n background: var(--dark-color) !important;\n }\n}\n\n@media (max-width:
768px) {\n .navbar {\n display: none !important;\n }\n\n .navbar:hover,\n #menu-toggle:focus
~ .navbar {\n display: block !important;\n }\n .navbar {\n opacity: 0.8;\n position:
fixed;\n top: 10px;\n left: 0px;\n color: var(--white);\n font-size:
1rem;\n cursor: pointer;\n background: var(--dark-color);\n color: var(--white);\n display:
flex;\n justify-content: space-between;\n align-items: center;\n padding:
10px 20px;\n border: 1px solid var(--dark-color);\n box-shadow: 0 2px 5px
rgba(0, 0, 0, 0.1);\n border-radius: 5px;\n }\n .navbar:has(a:active) {\n display:
none;\n }\n nav ul {\n display: block;\n list-style: none;\n padding:
0;\n margin: 0;\n }\n nav ul li {\n margin: 0;\n }\n nav ul li a {\n color:
var(--white);\n text-decoration: none;\n display: block;\n padding: 10px;\n }\n}\n\nfooter
{\n display: flex;\n flex-wrap: wrap;\n background: #333;\n color: #fff;\n text-align:
center;\n padding: 20px 0;\n font-size: 0.9rem;\n flex-wrap: wrap;\n}\n\nfooter
section {\n padding: 20px;\n text-align: center;\n flex: 1 1 250px;\n}\nfooter
section p {\n font-weight: bold;\n}\nfooter ul {\n list-style: none;\n padding:
0;\n}\nfooter ul li {\n margin: 5px 0;\n}\n\nfooter a {\n color: var(--white);\n}\n\nfooter
.container {\n display: flex;\n flex: 1 1 auto;\n justify-content: space-between;\n align-items:
start;\n width: 100%;\n flex-wrap: wrap;\n}\nfooter .container > p {\n flex:
1 1 auto;\n text-align: center;\n}\n\nfooter section {\n flex: 1 1 auto;\n align-self:
normal;\n position: relative;\n}\n\n@media (min-width: 768px) {\n footer section:after
{\n content: \" \";\n display: block;\n background: #fff;\n position:
absolute;\n right: 0;\n top: 5%;\n height: 90%;\n width: 1px;\n filter:
opacity(0.5) blur(1px);\n }\n\n footer section:last-child:after {\n display:
none;\n }\n}\n\n.large-icon {\n font-size: 3rem;\n}\n\n@keyframes bouncing {\n 0%
{\n transform: translateY(0);\n }\n 50% {\n transform: translateY(-20px);\n }\n 100%
{\n transform: translateY(0);\n }\n}\n\n.down {\n position: relative;\n bottom:
0;\n}\n\na.down {\n background: var(--white);\n color: var(--dark-color);\n width:
120px;\n height: 120px;\n display: flex;\n align-items: center;\n justify-content:
center;\n border-radius: 50%;\n align-self: center;\n animation: bouncing 2s
infinite;\n}\n"],"names":[],"version":3,"file":"index.82434563.css.map"}'
index.html: "<!DOCTYPE html><html lang=\"en\"><head><meta charset=\"utf-8\"><meta
name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><meta name=\"description\"
content=\"Katenary: Effortless Helm Chart Conversion\"><meta name=\"keywords\"
content=\"Katenary, Helm, Kubernetes, Compose, Docker, Podman, Helm chart\"><meta
name=\"author\" content=\"Patrice Ferlet (aka metal3d)\"><link rel=\"icon\" href=\"/icon.c628fb04.ico\"><title>Katenary
- Effortless Helm Chart Conversion</title><link rel=\"stylesheet\" href=\"/index.82434563.css\"><link
href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css\"
rel=\"stylesheet\"><link rel=\"stylesheet\" href=\"https://unpkg.com/@highlightjs/cdn-assets@11.9.0/styles/panda-syntax-dark.min.css\"><script
src=\"/index.87e0faa9.js\" defer></script><script src=\"https://unpkg.com/@highlightjs/cdn-assets@11.9.0/highlight.min.js\"></script><script
defer>hljs.highlightAll();</script></head><body> <button class=\"btn-primary\"
id=\"menu-toggle\"> <i class=\"fa-bars fas\"></i> </button> <div class=\"navbar\">
<div class=\"container\"> <nav> <ul> <li> <a href=\"#\"><i class=\"fa fa-house\"></i>
Katenary</a> </li> <li><a href=\"#features\">Why Katenary?</a></li> <li><a href=\"#how-it-works\">How
It Works</a></li> <li><a href=\"#how-to-use\">How to use</a></li> <li><a href=\"#tutorials\">Tutorials</a></li>
<li><a href=\"#get-started\">Get Started</a></li> <li> <a href=\"https://github.com/metal3d/katenary\"
target=\"_blank\"><i class=\"fa-github fab\"></i> Katenary on GitHub</a> </li>
</ul> </nav> </div> </div> <header class=\"header\"> <div class=\"container\">
<h1>Katenary</h1> <p>Effortless Helm Chart Conversion for Kubernetes Deployments</p>
<a href=\"#features\" class=\"down down-arrow large-icon\" title=\"Scroll down
to learn more\"><i class=\"fa fa-arrow-down\"></i></a> </div> </header> <main>
<section class=\"features\" id=\"features\"> <div class=\"container\"> <h2>Why
Katenary?</h2> <p> Simplify your deployment workflow by converting Compose files
into production-ready Helm Charts with ease. </p> <div class=\"feature-grid from-left\">
<div class=\"feature-item\"> <h3>Automated Conversion</h3> <p> Generate complete
Helm Charts from your Compose files effortlessly. </p> </div> <div class=\"feature-item\">
<h3>Flexible Configuration</h3> <p>Customize deployments with `values.yaml` and
environment labels.</p> </div> <div class=\"feature-item\"> <h3>Dependency Management</h3>
<p> Ensure proper service startup sequences using `depends_on` support. </p> </div>
<div class=\"feature-item\"> <h3>Open Source</h3> <p>Free, opensource, under the
<strong>MIT license!</strong></p> </div> </div> <div class=\"from-right video\">
<iframe src=\"https://www.youtube.com/embed/RrX5jNxS9IA?si=i0kRVFXOwT3ZqZdB\"
title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay;
clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"
allowfullscreen></iframe> </div> </div> </section> <section class=\"how-it-works\"
id=\"how-it-works\"> <div class=\"container\"> <h2>How It Works</h2> <p> Katenary
simply read your <code>compose.yaml</code> file (or <code>docker-compose.yaml</code>)
and use <strong>official libraries</strong> to read it and generate Kubernetes
resources as YAML. </p> <p> Then, it adds templating conditions, values file,
define a <code>Chart.yaml</code> file, adapt dependencies if needed, and many
others things. </p> <p> <strong>Using configuration files to be mounted?</strong>
No problem, Katenary will create <code>ConfigMaps</code> if you declared that
thes directories or files are statics. <br> <small>(Do not do this for sources
of your project, use it for simple configuration files)</small> </p> <p> The result
is a complete \"Helm Chart\" that can be installed, configured, packaged and shared.
</p> <div class=\"image-placeholder\"> <img src=\"https://github.com/metal3d/katenary/raw/refs/heads/develop/doc/docs/statics/workflow.svg\"
alt=\"Katenary Workflow\"> </div> <p> Almost everything can be overriden as Ingresses,
Dependencies, values, environment variables, secrets... </p> <ol> <li>Add optional
labels to your Compose files.</li> <li>Run <code>katenary convert</code> from
the command line.</li> <li>Deploy the generated Helm Chart in Kubernetes.</li>
</ol> </div> </section> <section class=\"how-to-use\" id=\"how-to-use\"> <div
class=\"container\"> <h2>How to use?</h2> <p> Install the binary, and use <code>katenar
convert</code> command line inside your project directory </p> <p> You can adapt
your compose YAML file with labels, or add a <code>compose.katenary.yaml</code>
file to override your project. </p> <p> You may also use a specific <code>katenary.yaml</code>
file that accepts the directives without using labels. </p> <section class=\"alternate\">
<div class=\"container example\"> <div class=\"from-left\"> <h3>Only add labels!
(if needed!)</h3> <p> You can adapt, configure, or change the conversion behaviour
addind labels. </p> <p> It <strong>doesn't change the <code>docker compose</code>
or <code>podman compose</code></strong> behaviour. It is only used while using
<code>katenary compose</code> command line </p> <p> There are <a href=\"https://katenary.readthedocs.io/en/latest/labels/\"
target=\"_blank\">plenty of labels</a> to help you to customize and adapt the
resulting Helm Chart. </p> </div> <div> <pre class=\"from-right\"><code class=\"language-yaml\">\n#
your \"docker-compose.yml\", or \"compose.yaml\"\nservices:\nweb:\n image: docker.io/nginx:latest\n
\ ports:\n - \"80:80\"\n labels:\n # generate an ingress resource in the
Helm Chart\n katenary.io/ingress: |-\n hostname: example.com\n port:
80\n </code></pre> </div> </div> </section> <section class=\"alternate\">
<div class=\"container example\"> <div class=\"from-right\"> <h3>Ease the deployment</h3>
<p> Kubernetes somtimes lacks of automation. Katenary helps you to add what is
needed, like having a <code>depends_on</code> feature. </p> </div> <div> <pre
class=\"from-left\"><code class=\"language-yaml\">\n# your \"docker-compose.yml\",
or \"compose.yaml\"\nservices:\n db:\n image: docker.io/postgres:latest\n
\ # ...\n labels:\n katenary.v3/ports: |-\n - 5432\n \n
\ web:\n image: php:fpm\n # ...\n depends_on:\n - db\n </code></pre>
</div> </div> </section> </div> </section> <section class=\"tutorials\" id=\"tutorials\">
<div class=\"container\"> <h2>Watch the Tutorials</h2> <p> <a href=\"https://www.youtube.com/watch?v=kvVN8gPxqOA&list=PLrq-nCZV_rv6GRBFlA7WxUz2h3DM5teCi\"
target=\"_blank\">A playlist</a> is progressivelly filled to help the Katenary
adoption. Take a look and learn how it is simple. </p> <iframe src=\"https://www.youtube.com/embed/kvVN8gPxqOA?si=tsPoMPh4PbKFutTx\"
title=\"YouTube video player\" frameborder=\"0\" allow=\"accelerometer; autoplay;
clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\"
allowfullscreen></iframe> </div> </section> <section class=\"get-started\" id=\"get-started\">
<div class=\"container\"> <h2>Get Started</h2> <p>Download Katenarys binary and
start using it today.</p> <pre><code>sh &lt;(curl -sSL https://raw.githubusercontent.com/metal3d/katenary/master/install.sh)</code></pre>
<p> <a href=\"https://github.com/metal3d/katenary\" class=\"btn-primary\">Go to
GitHub</a> </p> </div> </section> </main> <footer class=\"footer\"> <div class=\"container\">
<section> <div> <h2>Special thanks</h2> <p>Content creation:</p> <ul> <li> <a
href=\"https://blender.org\">Blender</a> that helps a lot to create videos and
animations </li> <li> <a href=\"https://highlightjs.org\">Highlight.js</a> for
the code syntax highlighting </li> </ul> <p>For graphical elements</p> <ul> <li>
<a href=\"https://inkscape.org\">Inkscape</a> for the icons and images </li> <li>
<a href=\"https://gimp.org\">The Gimp</a> for many others image manipulation </li>
</ul> </div> </section> <section> <div> <h2>Links</h2> <p>For this website:</p>
<ul> <li> <a href=\"https://github.com/metal3d/katenary\">Katenary on GitHub</a>
to follow, star, and contribute </li> <li> <a href=\"https://matrix.to/#/!JuGCanxvQEESclXmfX:matrix.org?via=matrix.org\">Discussion
on Matrix.org</a> the official Matrix channel for Katenary </li> </ul> </div>
</section> </div> <div class=\"container\"> <p>&copy; 2024, 2025 Katenary. Open
Source Project under MIT License.</p> </div> </footer> </body></html>"
kind: ConfigMap
metadata:
annotations:
katenary.v3/compose-hash: 07a6c3341d6d1030ebf49ee3a618c3296c87ae32
katenary.v3/version: develop-628b35d
labels:
{{- include "website.labels" . | nindent 4 }}
katenary.v3/component: server
name: '{{ include "website.fullname" . }}-server-dist'